<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Steven Geller</title>
    <link>https://www.steven-geller.com</link>
    <description>Thoughts on blockchain, AI, engineering, and leadership</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 05 Oct 2026 12:00:03 +0000</lastBuildDate>
    <atom:link href="https://www.steven-geller.com/feeds.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>COLDCARD had two hardware RNGs. Its seeds used neither.</title>
      <link>https://www.steven-geller.com/2026-08-02-coldcard-had-two-hardware-rngs-its-seeds-used-neither.html</link>
      <description>TL;DR On July 30, an automated sweep drained 594.48 BTC (~$38 million) from roughly 500 single-signature Bitcoin addresses in 25 minutes. Every one traced back to a seed generated on a COLDCARD hardware wallet. The cause was not a new exploit. It was a five-and-a-half-year-old integration bug in ful...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> On July 30, an automated sweep drained 594.48 BTC (~$38 million) from roughly 500 single-signature Bitcoin addresses in 25 minutes. Every one traced back to a seed generated on a COLDCARD hardware wallet. The cause was not a new exploit. It was a five-and-a-half-year-old integration bug in fully open-source firmware: since v4.0.0 (March 2021), seed generation had silently consumed a deterministic software PRNG — MicroPython's Yasmarang fallback — instead of the STM32 hardware TRNG the device carried on board. I spent the last days verifying the failure myself, line by line, across the COLDCARD firmware, its crypto library, and thirteen other wallet codebases. The short version: every component worked, the composition didn't, and no amount of open source, reproducible builds, secure elements, or air gaps rescued a single key.</p>
</blockquote>
<p><strong>Disclaimer:</strong> Independent research and commentary, based on public sources and my own review of public code. Not affiliated with, sponsored by, or endorsed by any vendor mentioned; all product names belong to their respective owners. Figures are as reported by the cited sources and may be revised as the investigation continues. Not financial, legal, or security advice — verify anything that affects your funds before acting on it.</p>
<p>This post is long on purpose. Everything below is tagged by evidence type — what the vendor claims, what I verified myself in source at a named commit, and what is my interpretation. If you hold a seed generated on a COLDCARD 4.x device from March 2021 onward, skip to <a href="#what-to-do">what to do about it</a>, then come back.</p>
<style>
.content h2 a, .content h3 a { color: inherit; border-bottom: none; }
.content h2 a:hover, .content h3 a:hover { color: inherit; border-bottom: none; }
.content h2 a::after, .content h3 a::after { content: " §"; color: #c8c8c8; font-weight: 400; }
.content h2 a:hover::after, .content h3 a:hover::after { color: #767676; }
.post-toc { margin: 2rem 0 2.5rem; padding: 1.25rem 1.5rem; background: #f8f8f8; border: 1px solid #e0e0e0; border-radius: 3px; font-size: 13px; }
.post-toc .toc-label { font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; color: #696969; font-weight: 600; margin-bottom: 0.75rem; }
.post-toc ol { margin: 0; padding-left: 1.5rem; }
.post-toc li { margin-bottom: 0.35rem; }
.post-toc a { border-bottom: none; }
.post-toc a:hover { border-bottom: 1px solid #1a1a1a; }
.content table {
  width: min(100vw - 2rem, 920px);
  position: relative;
  left: 50%;
  transform: translateX(-50%);
  margin: 2rem 0;
  font-size: 13px;
  line-height: 1.55;
  border-top: 2px solid #1a1a1a;
  border-bottom: 2px solid #1a1a1a;
}
.content th {
  font-size: 11px;
  padding: 0.75rem 0.9rem;
  text-align: left;
  vertical-align: bottom;
  border-bottom: 1px solid #1a1a1a;
  background: #f5f5f5;
}
.content td {
  padding: 0.75rem 0.9rem;
  vertical-align: top;
  border-bottom: 1px solid #e5e5e5;
}
.content tbody tr:nth-child(even) td { background: #fafafa; }
.content tbody tr:hover td { background: #f0f0f0; }
.content td:first-child { font-weight: 700; color: #1a1a1a; white-space: normal; }
@media (prefers-color-scheme: dark) {
  .post-toc { background: #1e1e1e; border-color: #333; }
  .post-toc .toc-label { color: #888; }
  .post-toc a:hover { border-bottom-color: #ccc; }
  .content h2 a::after, .content h3 a::after { color: #555; }
  .content table { border-top-color: #ccc; border-bottom-color: #ccc; }
  .content th { background: #222; border-bottom-color: #ccc; }
  .content td { border-bottom-color: #2e2e2e; }
  .content tbody tr:nth-child(even) td { background: #1e1e1e; }
  .content tbody tr:hover td { background: #262626; }
  .content td:first-child { color: #ddd; }
}
</style>
<nav class="post-toc">
<div class="toc-label">Contents</div>
<ol>
<li><a href="#sweep">594 BTC left the building in 25 minutes</a></li>
<li><a href="#unpatchable">There is no patch for a bad seed</a></li>
<li><a href="#root-cause">The bug, link by link</a></li>
<li><a href="#entropy-math">How weak, exactly?</a></li>
<li><a href="#blast-radius">Everything else the broken generator touched</a></li>
<li><a href="#fix">The fix is a build script</a></li>
<li><a href="#forensics">The forensics: a paid API account</a></li>
<li><a href="#response">The vendor response was its own incident</a></li>
<li><a href="#bug-class">This bug is eighteen years old</a></li>
<li><a href="#audit-hw">Audited nine hardware wallets</a></li>
<li><a href="#audit-sw">Audited four software wallets</a></li>
<li><a href="#lessons">What actually separates safe from sorry</a></li>
<li><a href="#what-to-do">What to do about it</a></li>
</ol>
</nav>
<h2 id="sweep"><a href="#sweep">594 BTC left the building in 25 minutes</a></h2>
<p>In the early hours of 2026-07-30, a piece of software started spending bitcoin from private keys its operator already had. Between 01:31 and 01:56 UTC, roughly 500 transactions consumed 1,324 UTXOs and moved 594.48 BTC — about $38 million — out of about 500 single-signature addresses. The whole thing landed in blocks 960188 through 960191. Three blocks.</p>
<p>Every transaction carried the same fingerprint. An identical hardcoded fee of 30.0 sat/vB — a 30–75x overpayment against the 0.4–1.0 sat/vB median that week, buying near-guaranteed inclusion for a total fee bill of about 0.044 BTC. No change outputs. Exactly one transaction per address. All BIP-84 native SegWit. The uniformity is the tell: this was not 500 people independently deciding to move coins on the same night. It was a loop iterating over a key list.</p>
<p>Two totals circulate and both are correct within their stated scope. 594.48 BTC is the confirmed core sweep. Galaxy Research, extending the same on-chain fingerprint to 695 earlier transactions, mapped 1,196 addresses drained in full for 1,082.65 BTC (~$70.2 million) between 01:10 and 01:51 UTC. That is a scope difference, not a contradiction — and Galaxy itself cautioned that the fingerprint identifies the attacker, not the attack. Future drains of COLDCARD-generated keys don't need to match it. As of writing, the consolidation pools (562, 398, 89, and 32 BTC) haven't moved. No exchange deposits, no mixing.</p>
<p>The victim set is an almost perfect match to the flaw's exposure window. Every drained wallet was single-sig. Every one held more than 0.15 BTC. Many had been dormant for years — coin ages spanning 2021 to 2026, the exact interval the vulnerable firmware shipped. <a href="https://atlas21.com/594-bitcoin-drained-15-minutes-theft/" rel="noopener noreferrer" target="_blank">Atlas21's reconstruction</a> puts the median loss at 0.41 BTC, with 110 addresses losing more than 1 BTC and the largest single loss at 29.9 BTC. No multisig and no Taproot address appeared among the 1,324 swept UTXOs — consistent with an attacker enumerating a limited set of BIP-84 single-key derivation paths rather than every script type. Jameson Lopp reported at least one victim lost only part of their UTXOs, which is what per-path enumeration looks like, and warned that a partially drained wallet is not a safe wallet: the rest can be taken in a second pass.</p>
<p><img loading="lazy" alt="The July 30 COLDCARD sweep at a glance: 594.48 BTC confirmed in the core 25-minute window across roughly 500 single-signature addresses, with a hardcoded 30.0 sat/vB fee, no change outputs, one transaction per address, BIP-84 paths only — and Galaxy Research's extended attribution of 1,082.65 BTC across 1,196 addresses." width="1672" height="941" src="/static/media/coldcard-rng-sweep.webp"/></p>
<p>The disclosure day was brutally compressed. First public victim report on Reddit at 13:19 UTC — "Full panic – one of my wallets was drained," a 24-word seed generated on a Mk3 bought in 2021, never typed into a computer. Kevin Loaec raised the public alarm at 17:35 UTC and escalated to "This is not a drill" ninety minutes later. Coinkite's CEO initially denied any device flaw ("someone loaded a compromised seed onto a Coldcard and/or their seed leaked") — retracted within a day. A preliminary Mk3-only advisory went up that evening claiming Mk4, Q and Mk5 were "not affected based on our early analysis." Independent researchers root-caused the bug the same day and coordinated disclosure with Coinkite, publishing an engineering post-mortem before completing empirical validation because exploitation was live and waiting would have cost users money. Gregory Sanders (instagibbs) reproduced the attack on a fresh Mk3 using nothing but the number of button presses during setup: "Sorry, this is the time to panic." By 12:39 EDT on July 31 the advisory had been revised twice, scope extended to every model, hotfix firmware shipped for all of them.</p>
<p>Sixteen hours from first sweep transaction to preliminary advisory. Same-day independent root cause. And it still didn't matter for the victims: the core sweep needed 25 minutes, and the broader attribution window had closed 39 hours before the updated advisory landed.</p>
<h2 id="unpatchable"><a href="#unpatchable">There is no patch for a bad seed</a></h2>
<p>Firmware bugs are not rare in this industry. Signing-logic errors, display spoofing, parsing flaws — found and patched every year, and a patched device goes back to being safe. An RNG failure in the seed-generation path is a different category of event. The defect is not in what the device does from now on. It is in every key the device has ever produced.</p>
<p>Coinkite's own advisory says it plainly: updating the firmware does not change or repair an existing seed. The only remedy is generating a new seed and migrating funds on-chain — a procedure that itself carries risk, since a rushed migration can create a more immediate problem than the one you're fixing. <a href="https://bitcoinops.org/en/newsletters/2026/07/31/" rel="noopener noreferrer" target="_blank">Bitcoin Optech's guidance</a> was blunter: seeds generated on an affected device without supplemental dice rolls should be treated as compromised.</p>
<p>The blast radius also exceeds the device. A weak seed stays weak when you restore it onto another vendor's hardware — Trezor and BitBox both said so publicly within days. An all-COLDCARD multisig quorum inherits the weakness key by key; multisig only helps if the quorum spans genuinely independent devices. BIP85 child wallets derived from an affected seed inherit it too. And because enumeration is offline computation, the threat doesn't expire: the attacker can precompute candidate keys for years and sweep at will. Long dormancy, then a 25-minute industrial sweep — that is exactly the pattern July 30 showed.</p>
<p>Measured by dollars, $38–70 million doesn't rank among the largest crypto thefts; exchange and DeFi incidents routinely beat it. Measured by category, this is the largest hardware-wallet exploit and the largest weak-entropy seed theft on record. The two closest precedents bound it: Milk Sad (2023), a 32-bit-seeded Mersenne Twister in Libbitcoin's <code>bx seed</code>, cost about $900,000 across ~2,600 wallets. Ill Bloom (2026), weak PRNGs across several unnamed mobile wallets, drained roughly $5.7 million. COLDCARD is roughly 40–75x Milk Sad and 7–12x Ill Bloom by value, depending on which total you use — and it differs in kind: both predecessors hit software tooling, while this one struck the most security-prestigious Bitcoin hardware brand, in fully open-source firmware, after five years and four months of latency. Ill Bloom's disclosure had explicitly treated hardware wallets as the safe category. That assumption is retired.</p>
<h2 id="root-cause"><a href="#root-cause">The bug, link by link</a></h2>
<p>Two public post-mortems exist: <a href="https://blog.coinkite.com/entropy-technical-backgrounder/" rel="noopener noreferrer" target="_blank">Coinkite's advisory and technical backgrounder</a>, and an independent engineering report published the same day as the theft by an outside security team. Where they disagree I'll say so. What follows is sharpened by my own verification: I cloned <a href="https://github.com/Coldcard/firmware" rel="noopener noreferrer" target="_blank"><code>Coldcard/firmware</code></a>, <a href="https://github.com/switck/libngu" rel="noopener noreferrer" target="_blank"><code>switck/libngu</code></a>, and <a href="https://github.com/Coldcard/micropython" rel="noopener noreferrer" target="_blank"><code>Coldcard/micropython</code></a>, checked out the exact submodule pins of the last vulnerable and first fixed tags (<a href="https://github.com/switck/libngu/commit/537519a8" rel="noopener noreferrer" target="_blank">libngu <code>537519a8</code></a>, <a href="https://github.com/Coldcard/micropython/commit/4107246f" rel="noopener noreferrer" target="_blank">micropython <code>4107246f</code></a> — identical in both), and re-derived every mechanism claim from file-and-line evidence. The most important sharpening: both public reports frame the failure as a disabled hardware RNG plus a broken preprocessor guard. The code shows the deeper defect is a linker-level symbol collision, where the wrong <code>rng_get()</code> won.</p>
<h3 id="intended-design"><a href="#intended-design">What the design was supposed to be</a></h3>
<p>COLDCARD was designed with layered entropy. Base layer: the STM32 microcontroller's hardware TRNG, an analog noise source producing 32-bit words, wrapped in a board driver that reads <code>RNG-&gt;DR</code> with a timeout fault and an adjacent-sample repeat check. Second layer: two discrete secure elements — a Microchip ATECC608A and a Maxim DS28C36 — each with its own TRNG, intended as an independent check against a compromised main MCU. A correct instantiation of this architecture fails closed in either direction: dead secure element, you still have the MCU TRNG; dead MCU TRNG, you still have secure-element entropy in the mix.</p>
<p>The component that was supposed to tie this together after 2021 is libngu ("Number Go Up"), Coinkite's embedded MicroPython C library wrapping Bitcoin Core's libsecp256k1. On each platform libngu defines a macro <code>CHIP_TRNG_32()</code> that is expected to reach hardware: <code>esp_random()</code> on ESP32, <code>arc4random()</code> on Apple/FreeBSD, and on STM32 an <code>extern rng_get()</code> that the build is assumed to supply from the MCU's RNG driver.</p>
<h3 id="migration"><a href="#migration">The migration that broke it</a></h3>
<p>On 2021-03-01, Coinkite committed <a href="https://github.com/Coldcard/firmware/commit/b18723dddb6d751c39978e4364b56b2414f68b47" rel="noopener noreferrer" target="_blank"><code>b18723dd</code></a>, "First pass w/ libNgU" — a 120-file rewrite that replaced the elliptic-curve stack with libsecp256k1 and, almost incidentally, rerouted seed generation. The change in <code>shared/seed.py</code> was a few lines:</p>
<pre><code class="language-diff">-from ckcc import rng_bytes
...
-    seed = bytearray(32)
-    rng_bytes(seed)
+    seed = random.bytes(32)
</code></pre>
<p>Before this commit, <code>ckcc.rng_bytes</code> filled directly from the STM32 hardware RNG. After it, seed generation flowed through libngu's <code>CHIP_TRNG_32()</code> — the symbol whose resolution is the entire story. I ran the git ancestor check myself: <a href="https://github.com/Coldcard/firmware/commit/b18723dddb6d751c39978e4364b56b2414f68b47" rel="noopener noreferrer" target="_blank"><code>b18723dd</code></a> is an ancestor of tag <a href="https://github.com/Coldcard/firmware/releases/tag/2021-03-17T1724-v4.0.0" rel="noopener noreferrer" target="_blank"><code>2021-03-17T1724-v4.0.0</code></a>, so the regression first shipped in v4.0.0 on 2021-03-17. This resolves one public discrepancy against Coinkite's advisory, which scopes the affected range from v4.0.1. The libsecp256k1 migration itself — the cryptographically sound part — is not implicated. The failure is purely in how the new library got its entropy.</p>
<h3 id="seven-links"><a href="#seven-links">Seven links</a></h3>
<p>This is not one bug. It's a chain of seven links, each of which survived review because each looked reasonable in isolation. Removing any one of links 1–3 would have prevented the vulnerability entirely; links 4–7 determined how bad it got.</p>
<p><strong>Link 1: the board configs zero out the hardware-RNG macro.</strong> All three COLDCARD board directories define <code>MICROPY_HW_ENABLE_RNG (0)</code> — verified at <code>stm32/COLDCARD/mpconfigboard.h:76</code> and its Mk4/Q equivalents at the last vulnerable tag. The intent was legitimate: Coinkite wrote its own RNG driver and didn't want MicroPython's built-in rng module, and zeroing the macro is the documented idiom for that. The author has since said so explicitly: "I explicitly set MICROPY_HW_ENABLE_RNG to zero, thinking we didn't need either version, but that's not what it does." What zero actually does, by value, is select a fallback software PRNG branch. The fix commit adds a confession in the same header: "LATER: when zero, this selected some PRNG code we really didnt want."</p>
<p><strong>Link 2: the guard tests existence, not value.</strong> libngu's author anticipated exactly this failure mode and tried to fence it off, at <code>ngu/random.c:22-31</code>:</p>
<pre><code class="language-c">#ifdef MICROPY_PY_STM
extern uint32_t rng_get(void);
# define CHIP_TRNG_32()         rng_get()

# ifndef MICROPY_HW_ENABLE_RNG
# error "get a HW TRNG plz"
# endif
#endif
</code></pre>
<p>The guard is <code>#ifndef</code>: it fires the compile-time error only when the macro is <em>undefined</em>. COLDCARD defines it — as zero — so the guard passes silently. The correct guard would have been <code>#if !MICROPY_HW_ENABLE_RNG</code>. One token. But the guard's failure only explains why the build succeeded. It doesn't explain why the resolved function was a software PRNG. That requires the third link, which neither public post-mortem isolated.</p>
<p><strong>Link 3 — the true root cause: a linker symbol collision.</strong> Two compilation units in the vulnerable build each had a relationship to <code>rng_get</code>. The board's own driver defined its hardware reader as <code>static uint32_t rng_get_or_fault(void)</code> — <code>static</code>, so it exported no symbol at all. Meanwhile MicroPython's <code>ports/stm32/rng.c</code> was still in the build's object list (the board config disables the Python module, not compilation of the file), and because <code>MICROPY_HW_ENABLE_RNG</code> is zero, its <code>#else</code> branch compiled a fallback PRNG and exported a global <code>uint32_t rng_get(void)</code>. libngu's <code>extern rng_get()</code> therefore bound, at link time and with zero warnings, to the only definition of that symbol in the link: the software fallback. The hardware TRNG code was present in the binary and fully functional — simply unreachable under the name libngu asked for. Coinkite's own account confirms the shape: "Existing review verified that code but did not verify end-to-end symbol resolution and call reachability from wallet seed generation."</p>
<p><img loading="lazy" alt="The symbol collision that sank COLDCARD: libngu's extern rng_get() was meant to bind to the board's STM32 hardware TRNG driver, but that driver was declared static and exported no symbol — so at link time the call silently resolved to MicroPython's deterministic Yasmarang fallback PRNG, with zero warnings." width="1672" height="941" src="/static/media/coldcard-rng-symbol-collision.webp"/></p>
<p><strong>Link 4: the fallback PRNG and its seed.</strong> The function that won the link is <code>pyb_rng_yasmarang</code>, MicroPython's convenience PRNG for microcontrollers without a hardware RNG (verified at <code>ports/stm32/rng.c:74-98</code> of the pinned fork). Yasmarang is a statistical PRNG published by Ilya Levin in 2004 — the author never claimed cryptographic security, and with a state of four words evolving through invertible arithmetic, its full state is recoverable from a handful of consecutive outputs. Its one-time seed comes from three inputs, and they are the entire entropy of the system on Mk2/Mk3: the low 32 bits of the STM32's factory unique ID (device identity, not fresh entropy, partly exposed via the USB serial number); the SysTick timer countdown register at first use (at most ~80,000 distinct values — call it 2^16.3 — and a function of boot timing); and the RTC time registers, which on legacy Mk2/Mk3 are static or zero on a cold boot because the selected RTC oscillator is disabled at startup. The seeding runs exactly once, is never re-entropied, and XORs the first two inputs into a single 32-bit word — so at most 2^32 possible results, not 2^48.</p>
<p><strong>Link 5: a second Yasmarang with public constants, and a health check that certifies nothing.</strong> libngu doesn't use the chip value raw. It keeps its own Yasmarang instance — starting from the public hardcoded constants <code>0x0a8ce26f, 69, 233</code> — and XOR-mixes the two streams. XOR does not create entropy; if both inputs are reproducible, their XOR is reproducible. Whitening, not security. The adjacent-repeat check deserves special attention because it's the kind of control that gives reviewers false comfort: it rejects two identical consecutive words to catch an unclocked TRNG — but a deterministic PRNG essentially never repeats adjacent outputs, so the check passed on every boot of every vulnerable device for five years while verifying nothing about entropy.</p>
<p><strong>Link 6: the Mk4/Q/Mk5 reseed keeps only 32 bits.</strong> During Mk4 development Coinkite added a boot-time reseed meant to fold secure-element entropy into the PRNG — "a backup to a backup." Verified unchanged in <code>shared/mk4.py:39-49</code>: it reads 32 bytes from SE1 and 8 bytes from SE2 (40 bytes of genuine secure-element output), double-SHA256s them, then unpacks <em>only the first four digest bytes</em> into a single uint32 and calls <code>ngu.random.reseed(n)</code>. And libngu's <code>reseed()</code> overwrites exactly one state word — <code>yasmarang_pad</code>. The other state words stay at their public defaults, and the MicroPython fallback's state isn't touched at all. The secret state added by the reseed is therefore exactly 32 bits: at most 2^32 securely distinguished output streams. Two aggravating facts I verified in code. First, the reseed runs under a blanket <code>try: ... except: pass</code> — a dangerous fail-open structure — so any secure-element failure boots the device silently on public PRNG constants. Second, the Mk3 bootloader has no gate 26 at all, so on Mk3 the reseed call always raised and always silently failed; Mk3's libngu Yasmarang ran its entire life on fully public defaults. That single code fact explains the Mk3-versus-Mk4 severity split better than either public report does.</p>
<p><strong>Link 7: hashing cannot repair entropy.</strong> The last link is a conceptual error, not a code defect. Seed generation reads <code>seed = ngu.random.bytes(32)</code> followed by <code>assert len(set(seed)) &gt; 4</code> and a double-SHA256 whitening step. None of these add entropy. The distinct-byte assert detects only a catastrophically stuck generator — any functioning PRNG trivially passes — and it predates the regression, from the era when the source was genuinely hardware. SHA256d is a deterministic public function: at most 2^32 candidate RNG outputs map to at most 2^32 candidate wallet seeds. The pipeline can only preserve or destroy entropy, never create it. Here it faithfully preserved the poverty of its input.</p>
<h2 id="entropy-math"><a href="#entropy-math">How weak, exactly?</a></h2>
<p>The chain above converts a 256-bit security target into an attacker search space whose size depends on what the attacker knows. Neither Coinkite nor the independent post-mortem published an end-to-end brute-force benchmark, and Coinkite labels its own numbers preliminary — so these are scenarios, not point estimates.</p>
<p><strong>Mk2/Mk3 on v4.x: from trivially small to about 2^40.7.</strong> The effective seed space is the number of distinguishable initial states of the MicroPython Yasmarang multiplied by uncertainty in the PRNG call history — how many RNG consumptions (approximated by user button presses during setup) happen before the 32 seed bytes are drawn. If the attacker knows your device UID, your boot timing, and your call history, the space is 2^0: fully deterministic. With a known UID but unknown timing: roughly 2^20. Lloyd Fournier's public cost model — the one <a href="https://x.com/LLFOURN/status/2082990000896147942" rel="noopener noreferrer" target="_blank">Coinkite's own backgrounder links</a> — assumes the attacker knows a ~2^20 range of device UIDs and tests ~16 button-press variants, landing at about 2^40.3, which matches Coinkite's "about 40 bits" Mk3 figure to within rounding. The generous practical ceiling, crediting the widest UID range and timer uncertainty, is about 2^40.7. Claims of "up to 57 bits" are misleading: the UID is fixed device metadata, partly exposed through the USB serial number, so crediting its full 2^32 range as attacker uncertainty is not defensible. James O'Beirne, who independently reproduced the vulnerability with AI assistance, is more pessimistic than either source — "somewhere in the 20-something bit range" for Mk2/Mk3. That dispute was still unresolved as of August 1. What is not in dispute: instagibbs reproduced the attack on a fresh Mk3 same-day, from button-press counts alone.</p>
<p><strong>Mk4/Q/Mk5: a 32-bit multiplier over a weak base.</strong> The reseed multiplies the Mk3 space by at most 2^32 — the only secret bits that reach PRNG state. The independent post-mortem takes the strict position: for a fixed fallback state and call history, at most 2^32 securely distinguished streams exist, and even the loosest ceiling — treating all timer fields as uniform and independent — reaches only about 2^73.3, which "is not 73-bit cryptographic security." Coinkite's advisory claims "about 72 bits of entropy rather than the expected 128." The figures are arithmetically adjacent (40 + 32 = 72), which strongly suggests Coinkite credited the reseed as a full 2^32 multiplier on top of its Mk3 estimate and adopted the loosest ceiling. The pessimistic reading matters operationally: if the fallback state is reconstructed, the marginal cost per candidate wallet on Mk4/Q/Mk5 is a 2^32 reseed scan — large for a laptop, squarely within reach of a motivated attacker with a cluster, and permanently so, because recorded addresses never stop being derivable from the weak stream.</p>
<p><img loading="lazy" alt="Effective candidate search spaces on a log2 scale: the 128-bit BIP-39 design target versus COLDCARD Mk4/Q/Mk5 at roughly 72 bits (a 32-bit reseed over a weak base), COLDCARD Mk2/Mk3 at roughly 40 bits, and Milk Sad at 32 bits — the two lower bars are within commodity-hardware reach, the spaces shrink by orders of magnitude below target." width="1672" height="941" src="/static/media/coldcard-rng-entropy-budget-v2.webp"/></p>
<p>Per-trial cost is dominated by BIP-39's 2,048-round PBKDF2-HMAC-SHA512 — Fournier amended his own laptop claim in-thread when he remembered the key stretching. My back-of-envelope estimate, labeled as an estimate: at a plausible high-end consumer-GPU throughput around 10^6 stretched derivations per second, the full 2^40 Mk3 space enumerates in days to weeks on one GPU, hours on a rented cluster of ~100, at a cost plausibly in the low thousands to tens of thousands of dollars. Against a median victim balance of 0.41 BTC and a 0.15 BTC targeting floor, the operation is profitable per recovered wallet by one to two orders of magnitude. All of that work happens offline, before any transaction exists. The monetization phase is the 25-minute broadcast burst.</p>
<h2 id="blast-radius"><a href="#blast-radius">Everything else the broken generator touched</a></h2>
<p>Every consumer of <code>ngu.random</code> inherited the same entropy ceiling. I confirmed each of these call sites in the vulnerable firmware myself.</p>
<p>The worst case is paper wallets. COLDCARD's paper-wallet feature generates a standalone key pair whose private key is the RNG output directly (<code>shared/paper.py:94</code> → libngu <code>k1.c:430</code>). The independent post-mortem flags why this is the most severe secondary exposure: "Unlike normal seed generation, the RNG output is used directly as the secp256k1 private key — there is no BIP39 or BIP32 step." A weak seed still requires derivation and address enumeration to match a victim; a weak paper-wallet key matches directly against the public key on-chain. The blockchain itself becomes a perfect oracle for the PRNG state.</p>
<p>The rest of the consumer set: Seed XOR masks (an all-COLDCARD Seed XOR split is recoverable from the same bounded stream). Cloning — COLDCARD-to-COLDCARD backup generates a per-session ECDH key pair from the same pool, so the ephemeral keys protecting cloned secrets in transit were software-derived; a passive observer of a cloning session between two vulnerable devices could in principle reconstruct the transport key. Key Teleport's 40-bit passwords, Web2FA TOTP secrets, Secure Notes passwords, HSM local-code material — all the same pool. And the multisig corollary follows mechanically: a quorum composed exclusively of vulnerable devices is only as strong as the weakest device's entropy.</p>
<p>One consumer appears in neither public post-mortem and I found it only in code verification: libngu randomizes its libsecp256k1 context on setup (<code>ngu/k1.c:72-77</code>). <code>secp256k1_context_randomize</code> is the library's side-channel blinding mechanism — it randomizes the internal blinding used by every subsequent signing operation, not just key generation. On vulnerable firmware this blinding seed came from the same broken pool. Signatures remain valid and this doesn't leak keys through signatures directly, but the anti-side-channel posture of every signature ever produced on a vulnerable device was weaker than designed — degrading protection against exactly the physical-observation attacks a hardware wallet exists to resist. I flag it as a code-verified omission from the public record, not as a demonstrated exploit path.</p>
<h2 id="fix"><a href="#fix">The fix is a build script</a></h2>
<p>The hotfix is a single firmware commit, <a href="https://github.com/Coldcard/firmware/commit/ca72463709f4e3f8964952039d5caf955f566a87" rel="noopener noreferrer" target="_blank"><code>ca724637</code></a> ("fixes rng", 2026-07-30 22:40 -0400), touching only build files and the three board <code>rng.c</code>/<code>rng.h</code> pairs. I verified a fact with process significance: the fix changed neither the libngu nor the micropython submodule pin, and no Python file changed — <code>seed.py</code>, <code>mk4.py</code>, <code>random.py</code> are byte-identical between the last vulnerable and first fixed releases. Any account claiming the seed-generation code or libngu was patched is wrong. The commit does four things.</p>
<p>First, it fixes the collision at its root by exporting the missing symbol from the board driver: <code>uint32_t rng_get(void) { return rng_get_or_fault(); }</code>. Second, it excludes the upstream fallback from the build — compiling an empty object in its place and poisoning the PRNG's name with <code>-Dpyb_rng_yasmarang=error-do-not-want-this</code>, so any future reference fails at compile time. Third, it institutionalizes the lesson as a link-time audit: a <code>rng-code-check</code> target runs <code>arm-none-eabi-nm --defined-only</code> on both RNG objects and fails the build unless the upstream object defines no symbols and the board object defines a global <code>rng_get</code>. That is precisely the end-to-end symbol-resolution check whose absence Coinkite identified as the review failure. Fourth, Q1 inherited the fix for free because its <code>rng.c</code> is a symlink to the Mk4 one.</p>
<p>Two things the fix did not do deserve emphasis. The 32-bit reseed construction is unchanged at master — it still hashes 40 secure-element bytes to 4 and still sets only one state word; it's now harmless because the Yasmarang no longer determines output entropy, but the design was bypassed, not repaired. And the ineffective health checks were left in place. The fix removed the hazard rather than strengthening the alarms that had failed to announce it.</p>
<p>Fixed firmware shipped July 31 across every model: Mk3/Mk2 → 4.2.0 (final release for those models), Mk4/Mk5 → 5.6.0, Q → 1.5.0Q, Edge tracks → 6.6.0X/QX. One release-process flag I verified: git tags exist for v5.6.0 and v1.5.0Q, but no v4.2.0 tag exists in the public repository — the Mk3/Mk2 fix is documented only in a changelog file. For a security-critical release on the legacy models with the lowest entropy, the exact source corresponding to the shipped 4.2.0 binary cannot be checked out by tag. That weakens the reproducibility story precisely where independent verification matters most.</p>
<p>The structural lesson of this whole chapter: the failure was never in any single component's logic. The TRNG driver was correct. libngu's abstraction was correct on three of four platforms. The guard was present. The health checks were present. The reseed was present. The system failed at the seams — a macro tested for existence instead of value, a symbol resolved to the wrong provider, a digest truncated to one word, an exception swallowed — and every seam failure was silent. That is why five and a half years of open source, review, and even AI-assisted audit missed it: each reviewer verified that correct code existed. Nobody, until the theft forced the question, verified which code actually ran.</p>
<h2 id="forensics"><a href="#forensics">The forensics: a paid API account</a></h2>
<p>The strongest attribution signal is not on-chain. The independent investigators who mapped the sweep stated publicly that an unusual pattern in the transactions led them to a confirmed hypothesis: the operator used a paid account at a well-known blockchain-services provider to query the source addresses and perform related activity during the sweeps. A paid, presumably identity-verified account is exactly the kind of operational-security failure that turns an anonymous on-chain actor into a name in a subpoena response. The provider wasn't named, at its own request, and the authorities have been notified. The same investigators assessed that the attacker appears to have held the information for years and then targeted dormant accounts — consistent with the long-lead precomputation the entropy math makes plausible.</p>
<p>What remains unknown: the operator's identity, the provider's identity, whether any law-enforcement action has followed, and which channel the attacker used to narrow the per-device search space. Two mechanisms exist, both confirmed as mechanisms and speculation as applied to this attacker. The STM32 unique ID is fixed for the lifetime of the chip and partly transformed into COLDCARD's USB serial number, so any channel exposing serials — reseller records, support tickets, warranty databases, photographs — shrinks the UID term. And testing an attacker-owned device under controlled boot conditions lets you profile the timer and call-history distributions, narrowing candidate states for every other device of the same model. The instagibbs reproduction suggests button-press call history alone may have sufficed on typical devices. No public attribution from the usual independent investigators existed as of August 1.</p>
<p>There's also an AI-assisted discovery theory. Coinkite's CEO assumes — his word, no evidence — that someone used AI to review previous firmware versions and stumbled on the issue. What is confirmed: Coinkite ran one of the best available frontier models over its own codebase weeks before the theft and it found nothing serious, while multiple independent developers reproduced the vulnerability within hours of disclosure using AI assistance. A Russian tabloid's claim that a specialized agent found the bug in under an hour is single-source and unverified; I assign it no weight. How the first attacker got there is indeterminate from public evidence. Why it matters anyway: <a href="https://bitcoinops.org/en/newsletters/2026/07/31/" rel="noopener noreferrer" target="_blank">Bitcoin Optech's conclusion</a> — because several developers could immediately reproduce the attack with frontier AI models, every vulnerable seed should be assumed under active exploitation regardless.</p>
<h2 id="response"><a href="#response">The vendor response was its own incident</a></h2>
<p>Coinkite's public posture moved through four phases in about 36 hours. Denial at 18:10 UTC on July 30 ("someone loaded a compromised seed onto a Coldcard and/or their seed leaked"). A preliminary Mk3-only advisory that evening declaring Mk4, Q and Mk5 "not affected based on our early analysis." Two revisions the next morning extending scope to Mk4, Mk5 and Q seeds generated before the fix. Finally an unreserved apology from the CEO — "I'm sorry and I'm devastated" — and full accountability for the firmware bug.</p>
<p>Beneath the evolution sit four substantive disagreements with the independent post-mortem, and my code verification resolves most of them:</p>
<table>
<thead>
<tr>
<th>Question</th>
<th>Independent post-mortem</th>
<th>Coinkite</th>
<th>Code-verified resolution</th>
</tr>
</thead>
<tbody>
<tr>
<td>First vulnerable Mk3 firmware</td>
<td>v4.0.0 (2021-03-17)</td>
<td>v4.0.1 onward</td>
<td>Independent report correct: <a href="https://github.com/Coldcard/firmware/commit/b18723dddb6d751c39978e4364b56b2414f68b47" rel="noopener noreferrer" target="_blank"><code>b18723dd</code></a> is an ancestor of the v4.0.0 tag</td>
</tr>
<tr>
<td>Mk2 in scope</td>
<td>Confirmed vulnerable, same as Mk3</td>
<td>Advisory silent</td>
<td>Same board directory, same firmware family; the 4.2.0 binary is labeled for Mk3 <em>and</em> Mk2 — include Mk2</td>
</tr>
<tr>
<td>Mk3 effective entropy</td>
<td>Deterministic for known state</td>
<td>"~40 bits" (preliminary)</td>
<td>Compatible: one states the mechanism, the other the assumed-knowledge estimate; Fournier's decomposition lands at ≈2^40</td>
</tr>
<tr>
<td>Mk4/Q/Mk5 entropy</td>
<td>≤2^32 secure streams; loose ceiling ≈2^73.3</td>
<td>"~72 bits"</td>
<td>Partially reconciled: 72 ≈ 40 + 32; Coinkite used the loose ceiling. Vendor optimistic, independent analysis pessimistic</td>
</tr>
<tr>
<td>Mk4/Q/Mk5 affected at all</td>
<td>Affected from the start</td>
<td>"Not affected" → reversed within ~24h</td>
<td>Affected: reseed first shipped v5.0.1; Mk3 bootloader lacks the reseed gate entirely</td>
</tr>
</tbody>
</table>
<p>The row that matters most for users is the second one. Coinkite's advisory never mentions the Mk2, yet the Mk2 runs the same board firmware as the Mk3, and the final fix release is explicitly labeled for both models. Mk2 owners reading the vendor's advisory received no warning at all, while independent researchers treated Mk2 as affected from day one. The severity gap in row four is best read as a methodological difference: one side counts only key-dependent secret state (32 bits), the other counts total assumed attacker uncertainty (~72 bits). Both describe the same code; they answer different questions, and the security-relevant one is the strict count, because attacker knowledge of device state must be assumed to grow, not shrink, over time.</p>
<p>Why did reviews miss it for five and a half years? Coinkite's backgrounder is, by vendor-postmortem standards, unusually candid. Signature collision: the intended driver and the unwanted fallback exported the same function signature, so the build completed without identifying the wrong implementation. Presence versus reachability: reviewers confirmed the careful TRNG code was present in the binary, but never verified end-to-end symbol resolution from seed generation. The broken <code>#ifndef</code> guard. And the CEO's personal admission: "The bulk of randomness on the COLDCARD was coming from a PRNG that I didn't know was actually in the source code base… the carefully crafted TRNG code I wrote was being used, but just by chance, and only for less important things." Add the two compounding failures — health checks structurally incapable of catching a deterministic substitute, and the frontier-model audit weeks before the theft that found nothing — and you have the complete anatomy of the blind spot.</p>
<p>The institutional aftermath was thinner than the technical one. As of August 1: no CVE assigned, no CERT or government advisory, coordination entirely vendor- and researcher-driven. A plaintiff-side law firm published a victim-intake page within 48 hours. Coinkite pledged to assist with police reports and insurance claims but announced no compensation fund. Critics also resurfaced Coinkite's <a href="https://benma.github.io/2021/02/09/coldcard-multisig-vulnerability.html" rel="noopener noreferrer" target="_blank">2021 handling of an external multisig disclosure</a> — shipped without a security-critical label, bounty request ignored — as evidence the disclosure-culture problem predates this incident.</p>
<h2 id="bug-class"><a href="#bug-class">This bug is eighteen years old</a></h2>
<p>COLDCARD is not a novel bug. It is the firmware incarnation of a class that has recurred across web, mobile, library, and operating-system ecosystems for two decades. Every incident shares one structural signature: a component that was supposed to supply TRNG- or CSPRNG-grade entropy silently didn't, no error was surfaced, and the weakness was discovered only after weak keys met the public blockchain.</p>
<p>The ur-precedent is <a href="https://github.com/badkeys/debianopenssl" rel="noopener noreferrer" target="_blank">Debian OpenSSL (CVE-2008-0166)</a>: in 2006 a maintainer removed two lines from OpenSSL's seeding code chasing a Valgrind warning, leaving the process ID as effectively the only seed material — at most 32,767 distinct key streams. Every SSH, TLS, and VPN key generated on Debian-derived systems for twenty months became enumerable, including early Bitcoin keys. Found by code review, not by any runtime alarm — there was none.</p>
<p>Then the canonical software cases. <a href="https://bitcoin.org/en/alert/2013-08-11-android" rel="noopener noreferrer" target="_blank">Android SecureRandom (2013)</a>: the platform PRNG failed to self-seed, repeated ECDSA nonces leaked keys on-chain, ~55.82 BTC reported stolen — a signing-time branch of the family, largely retired later by RFC 6979 deterministic nonces. Blockchain.info, twice: a 2014 update that emptied an entropy array without raising an exception (~250 BTC at risk, ~870 BTC protectively swept by a white-hat), and the 2015 Android app that fetched entropy from random.org over unencrypted HTTP — when random.org started requiring HTTPS, the fetch silently failed and the app generated <em>the same private key</em> for every affected user, sending ~34 BTC to one stranger's address. That 2015 incident is the purest documented instance of the COLDCARD signature: the source died, the software noticed nothing, and key generation proceeded on a constant.</p>
<p><a href="https://milksad.info/disclosure.html" rel="noopener noreferrer" target="_blank">Milk Sad (CVE-2023-39910)</a> is the closest precedent. Libbitcoin's <code>bx seed</code> seeded a Mersenne Twister with a 32-bit value from the system clock — about 4.29 billion candidate seeds regardless of requested length. The vulnerable code states its own indictment: <code>// Use the clock for seeding</code>. The name comes from the first two words of the BIP39 phrase the generator emits at timestamp 0. Over $900,000 confirmed stolen; discovery came from victims who had generated seeds air-gapped and self-compiled and were drained simultaneously. The same 32-bit time-seeded key space was later attributed to the LuBian mining-pool compromise — ~127,426 BTC, roughly $3.5 billion at the time — which would make this class the vector behind the largest known weak-RNG theft, full stop.</p>
<p>The rest of the canon: <a href="https://www.unciphered.com/blog/randstorm-you-cant-patch-a-house-of-cards" rel="noopener noreferrer" target="_blank">Randstorm</a> (JSBN's <code>SecureRandom()</code> silently skipped its entropy-pool step and fell through to weak browser <code>Math.random()</code>; ~1.4M BTC sits in potentially weak 2011–2015 wallets — an exposure estimate, not confirmed theft). Trust Wallet twice — a 32-bit-seeded MT19937 in the WASM build (<a href="https://nvd.nist.gov/vuln/detail/CVE-2023-31290" rel="noopener noreferrer" target="_blank">CVE-2023-31290</a>), and an iOS build that reused trezor-crypto's <em>test-only</em> <code>random32()</code> — <code>srand(time(NULL))</code> plus libc <code>rand()</code> — for BIP39 generation (<a href="https://nvd.nist.gov/vuln/detail/CVE-2024-23660" rel="noopener noreferrer" target="_blank">CVE-2024-23660</a>); two users generating wallets in the same second got the same seed. <a href="https://1inch.com/blog/post/a-vulnerability-disclosed-in-profanity-an-ethereum-vanity-address-tool" rel="noopener noreferrer" target="_blank">Profanity</a> seeded its vanity-address search with 32 bits; Wintermute lost $160 million when the key of its admin address was recovered — after the public warning, because they removed the ETH but never revoked the address's admin role. And <a href="https://www.cryptoisac.org/news-member-content/202607-ill-bloom" rel="noopener noreferrer" target="_blank">Ill Bloom</a>, disclosed three weeks before the COLDCARD sweep: insecure PRNGs in mobile wallets, code reused across projects, over $5 million confirmed drained, "a floor, not a ceiling."</p>
<p><img loading="lazy" alt="Two decades of entropy failures on a log scale, from Debian OpenSSL in 2008 through Android SecureRandom, Blockchain.info, Milk Sad, Randstorm, Trust Wallet, Profanity/Wintermute, and Ill Bloom to the COLDCARD sweep in 2026 — losses spanning five orders of magnitude, with 32 bits recurring as the fatal quantum and every case discovered by key-space reconstruction after theft rather than by any runtime health check." width="1672" height="941" src="/static/media/coldcard-rng-bug-class.webp"/></p>
<p>Three observations fall out of the table. First, the losses span five orders of magnitude — $8,100 to $3.5 billion — yet the underlying defects are often a single edit: two removed seeding lines, one 32-bit seed, one unchecked network failure. Second, 32 bits recurs as the fatal quantum: Milk Sad, Trust Wallet, Profanity, and the residual COLDCARD reseed state all collapse to a ≤2^32 search space, enumerable on commodity hardware. Any 32-bit value in an entropy path is a red-flag invariant. Third, the detection column is uniform: no case was caught by runtime testing or a shipped health check. Each surfaced through weak-key-space reconstruction after theft, post-hoc code reading, or victims comparing notes. COLDCARD fits exactly — its adjacent-repeat health check passed Yasmarang output trivially for five years.</p>
<p>The recurring structural pattern across all of it: an insecure-by-default library primitive is silently inherited by an integrator. MicroPython shipped a Yasmarang fallback. trezor-crypto shipped a time-seeded <code>random32()</code> marked test-only. JSBN shipped a <code>SecureRandom()</code> that skipped entropy collection without an exception. Libbitcoin shipped <code>bx seed</code>. In each case the weak default <em>works</em> — it returns bytes, passes smoke tests, raises nothing. The integrator's catastrophe is inherited, not written. Two corollaries. Entropy is a conserved quantity: no downstream transformation — SHA256d, BIP39 checksums, XOR with a second deterministic stream — repairs an upstream truncation; the effective security of a seed is the minimum over the chain, not the maximum. And detection methodology has not evolved with the bug class: discovery still means reconstructing the weak key space and matching it on-chain, after the money is gone.</p>
<h2 id="audit-hw"><a href="#audit-hw">Audited nine hardware wallets</a></h2>
<p>The question the disclosure immediately raised: which other wallets could carry the same defect? I audited nine hardware families against six failure modes abstracted from the COLDCARD root cause — silent fallback, ambiguous library RNG, entropy truncation, fail-open boot, PRNG-passable health checks, and single-source-without-mixing. Code-verified means I confirmed it against a local clone at a named commit: Trezor, BitBox02 (<a href="https://github.com/BitBoxSwiss/bitbox02-firmware/commit/c838d7f" rel="noopener noreferrer" target="_blank"><code>c838d7f</code></a>), Passport, Jade, SeedSigner, Keystone (<a href="https://github.com/KeystoneHQ/keystone3-firmware/commit/354369b" rel="noopener noreferrer" target="_blank"><code>354369b</code></a>), OneKey (<a href="https://github.com/OneKeyHQ/firmware/commit/e99ba63" rel="noopener noreferrer" target="_blank"><code>e99ba63</code></a>). For Ledger the evidence is certification documents — the ANSSI CSPN security targets and lab reports, which included source access under NDA. For Tangem, published audit summaries. Unverifiable is a finding, not an omission.</p>
<p>The headline: no other audited wallet shares the bug. And the decisive counter-example runs the <em>same software stack</em>.</p>
<p><strong>Foundation Passport</strong> is the controlled experiment that eliminates every confounding variable except engineering discipline. Same MicroPython-on-STM32 platform, same vendor HAL, the identical Yasmarang fallback present at the same path in its tree — its TRNG wrapper even derives from COLDCARD's 2018 code, copyright header intact. If platform or pedigree determined outcomes, Passport would be the most exposed device on the market after COLDCARD itself. It is instead among the least exposed, for three reasons visible in code. Its board config sets <code>MICROPY_HW_ENABLE_RNG (1)</code> with a <em>value-based</em> guard, so the Yasmarang fallback is compiled out of the production binary — not configured out, compiled out; no linker accident can resurrect code that isn't in the image. It never had COLDCARD's libngu routing layer, so there's no integration seam where a symbol collision could live. And seed generation bypasses MicroPython's random module entirely, calling a dedicated three-source mixer that XOR-folds an avalanche noise circuit, the MCU TRNG, and the ATECC608A, then SHA-256 compresses — with fail-closed checks that halt on 0, ~0, or duplicate samples, the direct opposite of COLDCARD's <code>len(set(seed)) &gt; 4</code> theater. My audit did surface one latent flag worth public record: <code>new_seed_task.py:13</code> ignores the boolean return of <code>random_bytes()</code>, fail-open only under a hardware-fault assumption, low-severity because two further sources mix into the same buffer — but an assert costs one line.</p>
<p><strong>BitBox02</strong> is the canonical counter-example — the cleanest existing answer to "what should COLDCARD have done?" Five independent sources feed every seed, verified at <code>src/random.c:72-92</code> and <code>keystore.rs:573-606</code>: the MCU TRNG, the secure-chip RNG, 32 bytes of per-device factory randomness, host entropy from the BitBoxApp, and a salted hash of the device password. The documented design goal is precisely the anti-COLDCARD property: "at least as strong as the strongest of all, not the weakest of all," because XOR of independent sources can only add entropy. On error it fails closed — secure-chip RNG failure maps to an abort, a dead MCU TRNG hangs rather than degrading silently. The only software fallback in the tree is a <code>rand()</code> path behind <code>#ifdef TESTING</code>, defined solely for host unit-test builds — no macro-value ambiguity of the COLDCARD kind, and reproducible builds let anyone confirm the shipped binary took the hardware path.</p>
<p><strong>Trezor</strong> — safe today, with the same scar in its own history. Current firmware XORs the MCU TRNG with the Optiga secure element (plus TROPIC01 on Safe 7) in 32-byte blocks, returns false on any SE RNG error, and hashes device entropy together with host-supplied external entropy. The instructive part is historical: Trezor's tree contains exactly one instance of the silent-fallback mode, and it's the same bug shape as COLDCARD's. Before April 2023, an inverted opt-out guard meant that forgetting a define silently produced a zero-seeded deterministic LCG — and <a href="https://github.com/trezor/trezor-firmware/issues/2828" rel="noopener noreferrer" target="_blank">Cure53's pentest found the Model T bootloader was built without the flag</a>, so its anti-fault-injection random delays were deterministic. <a href="https://github.com/trezor/trezor-firmware/pull/2899" rel="noopener noreferrer" target="_blank">The fix</a> inverted the macro to opt-in. The blast radius was random delays, not seeds — but the topology (opt-out guard, forgotten define, silent deterministic fallback) is COLDCARD's, three years earlier and one layer luckier. Trezor's ecosystem also supplied the canonical library-ambiguity case: trezor-crypto's test-only <code>random32()</code> is the function Trust Wallet iOS shipped to production. Trezor devices were never affected — the trap caught a downstream integrator instead. Residual: Model One and Model T have a single silicon entropy source, mitigated by host-entropy mixing and an entropy-check protocol added in core 2.8.7.</p>
<p><strong>Blockstream Jade</strong> answers with architectural maximalism: no seed byte ever comes from a single source. All randomness flows through one choke point feeding a SHA-512 entropy pool — six power-rail sensor readings, die temperature, cycle counter, uninitialized stack, RF/bootloader TRNG output, rolling pool state, a monotonic counter — the Bitcoin Core pool pattern. This matters because Jade's ESP32 platform carries a documented conditional-TRNG hazard, and the mitigation is explicit in code: <code>bootloader_random_enable()</code> at entry, 32 true-entropy bytes drawn, then the window closed, plus a one-second iterated-SHA-512 strengthening loop and camera frames refed into the pool. Even if all <code>esp_fill_random</code> output were degenerate, the sensor, jitter, and stack terms keep the pool non-deterministic.</p>
<p><strong>Keystone 3</strong> mixes three hardware sources from three different silicon vendors — MHSCPU MCU TRNG, Maxim DS28S60, Microchip ATECC608B — plus the password hash, through an iterated HKDF chain, with asserts on every error path. The strongest multi-vendor construction in the open-source set.</p>
<p><strong>SeedSigner</strong> resolves the bug class by abstention. A recursive grep finds no <code>os.urandom</code>, no <code>secrets</code>, no <code>/dev/hwrng</code> anywhere in the application. Seeds come from user dice rolls, coin flips, or a camera-entropy chain. The Pi kernel config even disables the hardware RNG driver — the platform's RNG is simply outside the trust path. The verdict is structural: there is no TRNG to fall back from, no library to be ambiguous, no health check to lie.</p>
<p><strong>Ledger</strong> eliminates the specific bug mechanism architecturally — dual-chip, the secure element runs onboarding, no MicroPython, no third-party crypto library, no link-time seam — and carries the strongest closed-design assurance available: ANSSI CSPN evaluations that name the TRNG as Security Function #1 against the explicit threat of "a biased or a deterministic random number," AIS-31 PTG.2 certification of the noise source (which mandates online statistical tests of the physical source itself — exactly the property COLDCARD's output-side assert lacked), and a dedicated RNG analysis by an accredited lab with source access, concluding no non-conformity, for both Nano X and Stax. The residual risk is irreducible: the documented design is single-source — one SE TRNG plus post-processing, and post-processing conditions but cannot add independent entropy. No user entropy path exists. Whether BOLOS contains any internal fallback, and whether evaluated firmware versions match what ships today, is unverifiable from outside. The verdict is delegated to ANSSI's labs rather than demonstrated.</p>
<p><strong>Tangem</strong> is the limiting case: one Samsung secure element, key generated inside the chip by its TRNG, key never leaves the chip, firmware immutable. Against single-source-without-mixing it fails by design — mixing is impossible because mixing requires seeing the key material. Everything else is unverifiable: closed firmware, unpublished full audits, claimed AIS-31 evidence not publicly inspectable. Tangem's own post-incident statement concedes the epistemic point: "A key made from 40 bits of entropy looks identical to a key made from 256 bits… This is why entropy defects can survive in shipped products for years." Applied to Tangem itself, that statement is exact. A COLDCARD-class defect inside this card would be COLDCARD-fatal and, unlike COLDCARD, could never be discovered from source.</p>
<p><strong>OneKey</strong> is a Trezor fork, and the audit shows both the value and the fragility of inherited soundness. The Trezor seed construction is intact and fail-closed. But the secure element's RNG is never mixed into seeds — it serves storage encryption and nonces, so a second silicon source sits on the board unused by the seed path (which contradicts OneKey's own Milk Sad-era marketing about its chip's TRNG). And the tree still carries the trezor-crypto LCG trap in its original pre-fix form: an opt-out guard of exactly the shape that produced Trezor's #2828 and COLDCARD's catastrophe, protected only by a <code>#pragma message</code> — a compiler warning, not a link error. Both production build systems define the macro today, so it's compiled out. But a forgotten define away from failure mode one.</p>
<p><img loading="lazy" alt="Entropy sources in the seed path per wallet family, code-verified: Blockstream Jade mixes at least six sources, BitBox02 five, Keystone and Passport three each, Trezor two to three, while Ledger, Tangem and OneKey rely on a single source — and pre-hotfix COLDCARD carried two healthy hardware sources on the board but consumed neither in the seed path." width="1672" height="941" src="/static/media/coldcard-rng-wallet-audit-v2.webp"/></p>
<p>Read the matrix as a whole and three conclusions hold. No audited wallet besides COLDCARD carries the exploitable bug today. The residual-risk population is defined by the single-source column — Model One/T, OneKey, Ledger, Tangem each survive only while one source stays healthy, which is the precise structural position COLDCARD was in, differing only in how well that source is tested and who is allowed to look. And evidence type is itself a risk dimension: the open wallets' verdicts are reproducible by any reader at the cited commits, Ledger's are delegated to accredited labs at point-in-time firmware versions, and Tangem's internals admit no verdict at all. The dividing line is not open versus closed source — COLDCARD was open and fell, Ledger is closed and stands. It is multi-source mixing verified at the consumption point, fail-closed behavior on source error, and weak paths compiled out of production binaries.</p>
<h2 id="audit-sw"><a href="#audit-sw">Audited four software wallets</a></h2>
<p>Software wallets sit in a structurally different position: none own an entropy source, all delegate to the host OS CSPRNG. The audit question splits in two — could the wallet's own code reproduce a COLDCARD-analogous failure, and does the delegation itself reintroduce platform risk. I checked Bitcoin Core, Electrum, Sparrow, and BlueWallet against current master clones.</p>
<p><strong>Bitcoin Core</strong> runs the strongest entropy stack audited, and its git history reads as a decade-long elimination of every COLDCARD-class failure mode. Every OS-entropy error path terminates in <code>RandFailure()</code>, which logs and calls <code>std::abort()</code> — there is no downgrade branch. <code>GetStrongRandBytes()</code> mixes fresh OS entropy with hardware RdRand/RdSeed, stack pointers, performance counters, and carried-over state, so no single CSPRNG read is ever the sole basis of a key. Unique among the wallets audited: <code>Random_SanityCheck()</code> runs at every startup and verifies the OS entropy hook actually overwrites all 32 output bytes — detecting a misintegrated entropy source that silently returns zeros, the exact misintegration signature of the COLDCARD bug. A 2014 commit introduced abort-on-failure after OpenSSL's <code>RAND_bytes</code> failure was caught only by an assert that vanished in release builds; a 2016 commit mandated OS randomness for secret keys; the OpenSSL dependency was removed entirely in 2018. Even a fully broken platform CSPRNG yields an abort, not a fallback.</p>
<p><strong>Electrum</strong> takes the opposite bet: no mixing, no self-test, pure reliance on the OS through Python's <code>secrets</code> module. The critical property is what's absent: <code>secrets</code> has no fallback path — if <code>os.urandom</code> fails, Python raises, and the wallet cannot generate a seed rather than generating a weak one. No truncation; the effective floor stays at or above 128 bits. But entirely single-source: Electrum cannot detect a deterministically seeded kernel pool — early-boot embedded Linux, a restored VM snapshot — because it performs no startup self-test.</p>
<p><strong>Sparrow</strong> has the one audited site where a catch block substitutes a weaker RNG: <code>SecureRandom.getInstanceStrong()</code> falling back to <code>new SecureRandom()</code>. It superficially resembles the COLDCARD pattern; it differs in kind. The fallback is still seeded from the OS and throws if that source is unusable — it downgrades a provider guarantee, not the entropy source. No truncation. The residual risk is the delegation problem in JVM form: an operator who points <code>java.security.egd</code> at a weak provider silently degrades every consumer, with no in-app detection.</p>
<p><strong>BlueWallet</strong> is the post-Randstorm remediation pattern executed correctly. JavaScript runtimes ship no CSPRNG at all, and the classic React Native wallet bug class is generating keys from whatever shim happens to resolve. BlueWallet imports <code>react-native-get-random-values</code> before anything else — bridging to <code>SecRandomCopyBytes</code> on iOS and <code>java.security.SecureRandom</code> on Android, throwing if the native module is missing — and every wallet-secret path funnels through one audited choke point with an explicit availability check and no <code>Math.random</code> fallback. It never calls bip39's bundled RNG. The boundary is thin — one import line and one native bridge — but failures are loud, not silent.</p>
<p>The structural finding across all four: none contains a COLDCARD-analogous code path — all fail closed where COLDCARD failed open — yet three of the four achieve this by inheriting platform CSPRNG health rather than verifying it. Fail-closed protects against a CSPRNG that reports an error. It says nothing about a CSPRNG that returns confidently wrong output. The historical record shows where that inherited trust has failed: early-boot Linux entropy, VM snapshot restores duplicating RNG state, Android 4.x, pre-WebCrypto browsers, and one layer down entirely — Debian OpenSSL gutting the entropy every application above it consumed for twenty months. None of these conditions exists on a healthy modern system. Each is a platform condition, invisible to wallet code that cannot test the entropy it consumes. Only Bitcoin Core even tries.</p>
<h2 id="lessons"><a href="#lessons">What actually separates safe from sorry</a></h2>
<p>Five structural insights fall out of the incident record, the two-decade taxonomy, and the thirteen-wallet audit.</p>
<p><strong>Integration seams, not components.</strong> Every individual component of the COLDCARD entropy chain performed as designed. The catastrophic failure was a property of the composition: a guard that tested existence instead of value, and a linker that silently bound the extern to the wrong provider. Neither defect is visible by reading any single file. This is the firmware incarnation of the most reliable entropy bug pattern of the past two decades — a dependency ships a weak default that compiles cleanly, fails silently, and transfers its risk to every integrator downstream. The review methodology this implies is link-time and runtime, not source-time: which concrete symbol does each security-critical call resolve to, and what actually executes. Coinkite's own fix adopted exactly that posture.</p>
<p><strong>Entropy is conserved.</strong> For any deterministic function, <code>H(f(X)) ≤ H(X)</code>. Hashing whitens; it never adds. The security of an entropy chain equals the minimum over every transformation in it, not the maximum over its sources. The Mk4 path is the cleanest demonstration on record: 40 bytes of genuinely good secure-element entropy, hashed, truncated to 4 retained bytes, reseeded into a single 32-bit state word — 256 bits of source entropy capped at 2^32 distinguishable streams. The same law doomed Milk Sad, Profanity, and Trust Wallet. In every case wide output formatting concealed narrow state. And this is why output-side health checks are detection theater: producing statistically plausible output is what a PRNG is <em>for</em>. The control that binds is at the source — statistical validation of the physical TRNG against a stochastic model, AIS-31 PTG.2 style — plus runtime proof that the tested source is genuinely in the seed path. COLDCARD proves even a perfectly validated source is worthless if the consumption path never reaches it.</p>
<p><strong>Mixing is the empirically validated defense.</strong> The audit splits cleanly on one property: whether independent entropy sources are combined at the point where seed material is consumed. Every wallet that mixes two or more independent sources is structurally resilient against any single-source failure — a broken source degrades into a no-op, not a vulnerability. The dividing line is none of the properties the industry markets. Not open versus closed: Passport and COLDCARD run the same stack with the identical fallback in both trees and land at opposite ends. Not the presence of good hardware: COLDCARD carried two healthy hardware entropy sources and its seed path consumed neither. What a board carries is not what a seed consumes. Mixing must be verified at the consumption point — in the call graph of the function that emits the seed — never inferred from a datasheet's capability list.</p>
<p><strong>"Many eyes" failed; AI changed the economics on both sides.</strong> The regression sat for five and a half years in one of the most scrutinized open-source codebases in Bitcoin — reproducibly built, so anyone could confirm the shipped binary matched the source — and was found by no one. The failure has four layers: the vulnerable code lived in a boring submodule reviewers skim; prior review verified code presence, never reachability; the ecosystem's verification energy went into reproducible builds, a control logically incapable of catching a source-level design error; and the triggering defect is a one-token C pitfall human reviewers pattern-match past. <a href="https://www.tftc.io/coldcard-rng-failed-move-your-coins" rel="noopener noreferrer" target="_blank">TFTC's synthesis</a> enumerates the stack failing independently: open source did not stop the bug, reproducible builds did not stop the bug, secure elements did not stop the bug, an air gap did not stop the bug — each protects against a class of failure, and none can rescue a private key created with inadequate entropy. Openness is a potential for review, never its actualization. Then the inflection: Coinkite's own frontier-model audit missed the bug weeks before the theft; independent developers reproduced it with AI assistance within hours of disclosure. AI collapses the cost of deep cross-module auditing — exactly the analysis the many-eyes hypothesis always assumed but never funded — for attackers and defenders simultaneously. Any bug an AI can find must be assumed found. The window between "latent in public source" and "actively exploited" is closing toward zero.</p>
<p><strong>Seed-level bugs are unforgiving.</strong> A signing bug can be patched; an entropy bug is baked into every key already generated. Remediation is migration, not a patch — every affected user moving funds on-chain, under time pressure, on the very device class whose trustworthiness is in question. The weakness propagates along every derivation and export edge: restored into other vendors' devices, into BIP85 children, into all-COLDCARD multisig quorums. And the long tail may never be reached: vulnerable seeds date to 2021, the Mk3 has been out of support since 2023, and Coinkite's 120-day customer-record purge — an anti-surveillance feature — now guarantees most dormant holders cannot be notified. Seed provenance has become a first-class security property that outlives the hardware. Compounding it is a cost asymmetry that makes disclosure timing itself a security event: the attacker's work is one-time, offline, parallelizable precomputation, after which sweeping is a 25-minute broadcast — so once the bug class is public, every unhealed address is a standing bounty, indefinitely.</p>
<h2 id="what-to-do"><a href="#what-to-do">What to do about it</a></h2>
<p><strong>If you own a COLDCARD.</strong> The exposure test is provenance: which firmware generated the seed, on which model. The two technical sources never reconciled the range start, so the conservative rule treats any seed generated on a COLDCARD 4.x device from March 2021 onward as in scope. Mk2 users should follow the Mk3 guidance — the vendor's advisory omits the Mk2, but the code and every independent analysis place it on the same vulnerable path. The migration playbook: install the fixed firmware (Mk3/Mk2 4.2.0, Mk4/Mk5 5.6.0, Q 1.5.0Q, Edge 6.6.0X/QX — note that a higher Edge version number does not by itself imply the fix), generate a new seed, move funds with a small test transaction first, confirm, then move the remainder, and keep the old backup until migration is confirmed. Updating firmware does not repair an existing seed. Rushing the migration can be a bigger risk than the bug.</p>
<p>Three refinement rules. Seeds built from 50 or more independent, unrecorded dice rolls carry at least 128 bits of user entropy and are not considered at risk from this bug — the dice-only import path on 4.2.0 bypasses the device RNG entirely. A strong, unique BIP39 passphrase is an independent barrier that buys time but is not grounds to skip migration — Coinkite itself walked back its early "minimal risk" phrasing. And a partially drained wallet is not a safe wallet: remaining funds can be taken in a second pass over a wider derivation-path set.</p>
<p>Two structural defenses survive any vendor's seed compromise. Multisig across vendors — a quorum of exclusively vulnerable devices stays vulnerable, but a 2-of-3 spanning three manufacturers loses redundancy rather than funds when one key class breaks; the empirical record agrees, since no multisig address appeared among the 1,324 swept UTXOs. And seed provenance discipline: a weak seed stays weak forever, importing it into another vendor's device changes nothing, so record which device and firmware produced every seed you hold. Finally: anyone offering to "recover" your coins for a fee is running the secondary scam that follows every incident.</p>
<p><strong>If you build wallets.</strong> Three controls, each hours of engineering, each of which would have caught this defect on introduction. Make insecure PRNGs opt-in for test builds only — Trezor's inverted guard, BitBox02's <code>#ifdef TESTING</code> scoping — so a missing platform RNG is a link error, never a silent fallback. Add a link-time symbol audit to CI — Coinkite's hotfix is the reference implementation: fail the build unless the intended entropy symbol is defined by the intended object and every known fallback symbol is absent; where a fallback must exist for tests, poison its name so accidental resolution is loud. And assert the call chain from each key-generation entry point to its entropy source — the right question is not "is the good code in the binary?" but "which code does <code>random.bytes(32)</code> actually reach?" On top of that: mix at least two independent sources at the consumption point, publish an end-to-end entropy budget per release scored by the minimum over the chain, fail closed on any source error, and test the source, not the output stream. Check every return value on the entropy path — even exemplary mixers carry fail-open seams at the call site.</p>
<p><strong>If you audit wallets.</strong> Treat Coinkite's own post-mortem sentence as a scope-change mandate: "Existing review verified that code but did not verify end-to-end symbol resolution and call reachability from wallet seed generation." Verify symbol resolution and runtime reachability across submodule boundaries — an audit that stops at repository boundaries, or confirms only that a TRNG driver exists in the binary, is incomplete. Inventory every dependency's weak-but-compilable RNG default and its resolution fate; the recurring systemic vector is the insecure-by-default library primitive. Run fork-diff audits at entropy consumption points — OneKey inherited Trezor's sound architecture and silently narrowed it, so "fork of a safe codebase" is a finding generator, not an assurance. Demand entropy budgets in design documents as a review precondition. And assume asymmetry: treat any AI-findable vulnerability as under active exploitation from the moment of discovery, because the reproduction cost has collapsed.</p>
<p><strong>For the ecosystem.</strong> Three institutional gaps. No CVE or government advisory existed for this incident as of August 1 — coordination ran through vendor blogs and social media; the effective response was improvisation, not process, and the ecosystem needs standing entropy-incident playbooks written before they're needed. Coinspect's Ill Bloom disclosure paired its advisory with a public per-address risk checker; equivalent tooling should accompany every future entropy incident so triage doesn't depend on reading firmware changelogs. And no hardware wallet holds a FIPS 140 validation for its wallet product; only Ledger carries accredited RNG-specific evaluation, which proves it's feasible — the COLDCARD bug class, integration-layer misrouting, is precisely what a consumption-point-aware evaluation criterion would target, and current schemes don't test it.</p>
<p>The next entropy failure is already compiled into something shipping today. The defensive economics, though, have shifted for the first time: the same AI-assisted analysis that plausibly found this bug for an attacker makes cross-module, symbol-resolution auditing cheap enough to run on every release, and the reference implementations — Coinkite's link-time symbol check, Trezor's opt-in guard, BitBox02's five-source mixer, Bitcoin Core's startup sanity check, Coinspect's public address checker — are public and proven. What remains is the unglamorous work the ecosystem skipped for five and a half years: tracing every seed to its physical bits, at the consumption point, on real hardware, before users' savings depend on the answer. The industry that learns to verify entropy at birth rather than audit it at autopsy will not need another July 30.</p>]]></content:encoded>
      <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-08-02-coldcard-had-two-hardware-rngs-its-seeds-used-neither.html</guid>
      <category>bitcoin</category>
      <category>security</category>
      <category>hardware wallets</category>
      <category>cryptography</category>
    </item>
    <item>
      <title>Stablecoins moved $62 trillion. Only $350 billion was real.</title>
      <link>https://www.steven-geller.com/2026-07-30-stablecoins-moved-62-trillion-only-350-billion-was-real.html</link>
      <description>TL;DR A snapshot of stablecoin cross-border payments as of late July 2026. Supply sits at ~$310 billion, but BCG's adjusted numbers put identifiable real-economy payments at $350–550 billion — under 1% of the gross volume headline. The FSB estimates stablecoins are still less than 0.2% of global cro...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> A snapshot of stablecoin cross-border payments as of late July 2026. Supply sits at ~$310 billion, but <a href="https://www.bcg.com/assets/2026/white-paper-stablecoin-payments-truth-behind-numbers.pdf" rel="noopener noreferrer" target="_blank">BCG's adjusted numbers</a> put identifiable real-economy payments at $350–550 billion — under 1% of the gross volume headline. The <a href="https://www.fsb.org/2026/07/cross-border-payments-towards-the-next-chapter/" rel="noopener noreferrer" target="_blank">FSB estimates</a> stablecoins are still less than 0.2% of global cross-border payments. The technology works, the institutions have arrived, and the winning model is not a parallel crypto economy. It's a hybrid: regulated fiat in, stablecoin settlement, local fiat out — invisible to the customer. The moat is orchestration, not the token.</p>
</blockquote>
<p><strong>Disclaimer:</strong> Personal analysis based on public data. Not financial advice. I could be wrong about all of this.</p>
<p>Every stablecoin pitch deck opens with the same number: <a href="https://www.bcg.com/assets/2026/white-paper-stablecoin-payments-truth-behind-numbers.pdf" rel="noopener noreferrer" target="_blank">$62 trillion in transfers in 2025</a>. The number is real. It doesn't mean what people think it means.</p>
<p>Strip out exchange reshuffling, market-maker inventory moves, smart contract loops and bot activity, and BCG gets to roughly $4.2 trillion. Keep only identifiable bilateral real-economy payments — a business paying a supplier, a contractor receiving a payout — and you're at $350 to $550 billion. That's under 1% of the headline. The <a href="https://www.fsb.org/2026/07/cross-border-payments-towards-the-next-chapter/" rel="noopener noreferrer" target="_blank">FSB lands in the same place</a> from the opposite direction: stablecoins remain below 0.2% of total cross-border payments.</p>
<p><a href="https://visaonchainanalytics.com/" rel="noopener noreferrer" target="_blank">Visa's onchain analytics</a> show the same pattern in live data. In a recent 30-day snapshot, roughly $5 trillion of gross transfer volume fell to $1.3 trillion after stripping bots, internal contract movements and exchange rebalancing — 26% of the headline. Transaction count fell from 1.5 billion to 199 million. And "adjusted" still doesn't mean payments: exchange deposits, DeFi, lending, minting and ramps all survive the filter. The most interesting slice is retail-sized transfers under $250: 134.9 million transactions moving $6.6 billion. That's 68% of adjusted transaction count and 0.5% of adjusted dollar value, at an average size of $49. Small-value usage is already broad. The value is still institutional.</p>
<p><a href="https://defillama.com/stablecoins" rel="noopener noreferrer" target="_blank">DeFi Llama</a> puts total supply at $309.9 billion as of July 28, with USDT at 59.3%. Supply is slightly below its recent peak. Adoption is real. It is not a straight exponential curve.</p>
<p>The honest framing: stablecoins are no longer an experiment, and they are not yet a material share of global payments. Both things are true. The interesting part is what happens in between.</p>
<p><img loading="lazy" alt="The stablecoin volume funnel: $62 trillion in gross transfers narrows to $4.2 trillion after removing distortions, then to $350–550 billion of identifiable real-economy payments, less than 0.2% of global cross-border payments." width="1672" height="941" src="/static/media/stablecoin-snapshot-volume-funnel.webp"/></p>
<h2>2026 is the year the adults showed up</h2>
<p>The question is no longer whether stablecoins can move value. That's settled. The question is whether regulated institutions can run stablecoin operations with the governance, approvals, auditability and liquidity controls they require. Four developments this year tell you where that's heading.</p>
<p>The biggest tell is the <a href="https://usa.visa.com/about-visa/newsroom/press-releases.releaseId.22336.html" rel="noopener noreferrer" target="_blank">Visa Stablecoin Platform</a>, launched in July: wallet infrastructure, minting, redemption, dual approvals, allowlists and audit logging, wired into existing settlement and treasury services. It initially supports Open USD and is in beta with selected clients. Institutions are not asking for a wallet API. They're asking for an operating environment that plugs stablecoins into the controls they already have. Visa's stablecoin settlement also hit a $7 billion annualized run rate by March, up 50% quarter over quarter — real validation, still immaterial next to Visa's total volume. The right interpretation: Visa isn't being replaced by stablecoins. Visa is becoming the interoperability layer between stablecoin balances and merchant acquiring.</p>
<p><a href="https://www.reuters.com/business/consortium-including-visa-mastercard-jointly-launch-new-global-stablecoin-2026-06-30/" rel="noopener noreferrer" target="_blank">Open USD launched June 30</a> with more than 140 participating businesses. Free minting and redemption, and — the important part — a share of reserve income goes to ecosystem participants. Historically the issuer kept all the reserve yield. Now wallets, processors, exchanges and distributors get a cut. That means payment pricing can drop below the standalone cost of the transfer, because reserve earnings subsidize it. Distribution is becoming more valuable than issuance. The caveat nobody prices in: this model is interest-rate-sensitive. When short rates fall, the subsidy falls with them.</p>
<p><a href="https://www.global.jcb/en/press/2026/202607141000_products.html" rel="noopener noreferrer" target="_blank">JCB and Circle announced a July collaboration</a> that starts with JCB's own cross-border treasury transfers. Notice the pattern. The first institutional use case is almost never consumers paying merchants in stablecoins. It's internal treasury and settlement. <a href="https://stripe.com/blog/everything-we-announced-at-sessions-2026" rel="noopener noreferrer" target="_blank">Stripe</a> is expanding stablecoin-backed accounts from 101 to 150 countries and wiring them into Pix and UPI. Deel uses it to give contractors in 150+ countries dollar-denominated balances.</p>
<p>Regulation moved from principles to operating rules, with one nuance everyone gets wrong. The <a href="https://www.occ.gov/news-issuances/bulletins/2026/bulletin-2026-3.html" rel="noopener noreferrer" target="_blank">GENIUS Act</a> was signed July 18, 2025 — but it takes effect on the earlier of January 18, 2027 or 120 days after final implementing rules, and the OCC only finished proposing the reserve, reporting and AML rule sets between February and June. So no, the US framework is not fully operational yet. Strategic clarity, incomplete operating detail. And on July 14, the <a href="https://www.gov.uk/government/publications/recommendations-of-the-transatlantic-taskforce-for-markets-of-the-future/uk-us-joint-statement-on-stablecoins" rel="noopener noreferrer" target="_blank">UK and US published a joint statement</a>: one-to-one backing, segregated reserves, protected redemption, and formal pathways for a stablecoin regulated in one jurisdiction to access the other. That's the first serious attempt to defragment the map.</p>
<h2>The machine room behind a boring payment</h2>
<p>Take a US-to-Mexico payment. Here's the customer experience:</p>
<blockquote>
<p>The sender pays $1,000. The recipient gets pesos in their bank account via SPEI, usually within minutes. Neither side knows a stablecoin existed.</p>
</blockquote>
<p>The industry has a name for this shape: the stablecoin sandwich. Fiat in, stablecoin settlement in the middle, local fiat out. The token is an implementation detail.</p>
<p>Here's what actually happens. Onboarding and risk checks: identity, sanctions, source of funds, device risk. USD pay-in: ACH, wire, RTP, card or existing balance — and the funding method drives the economics, because ACH is cheap but settles slowly while a card is instant but brings interchange and chargeback exposure. Then the decision most diagrams skip: does the provider pay out before the sender's money is irrevocably final? If yes, the provider just converted a settlement delay into a credit and fraud decision.</p>
<p>Then the stablecoin leg. Mint with the issuer, buy from a liquidity provider, use treasury inventory, or net against opposite-direction flows. Move it onchain to the local entity or payout partner, through wallet screening and Travel Rule checks. Execute the FX — and if the customer quote was locked up front, the provider carries that risk too. Pay out MXN through SPEI. Then reconcile everything: fiat receipt, token amount, gas, FX fill, payout confirmation, returns.</p>
<p>The blockchain solves exactly one of those nine steps.</p>
<p>One measurement trap worth naming: settlement speed is not payment speed. The chain reaches finality in seconds, but the ACH may still be returnable, compliance may hold the transfer, the payout bank may reject the account. The metric that matters is authorization to confirmed availability of funds — and that's an end-to-end number, not a block time.</p>
<blockquote>
<p>You can remove three correspondent banks and still keep the hardest problems: identity, fraud, FX, liquidity, payout reliability, reconciliation.</p>
</blockquote>
<p><img loading="lazy" alt="The anatomy of a US-to-Mexico stablecoin payment: the customer sees dollars in and pesos out in minutes, while nine operational steps run behind it, from onboarding and pay-in through stablecoin settlement, FX, SPEI payout and reconciliation." width="1672" height="941" src="/static/media/stablecoin-snapshot-payment-chain.webp"/></p>
<h2>Do the math on the whole chain, not the blockchain</h2>
<p>The wrong comparison is a network fee against a Western Union retail price. The right one is the full landed cost: pay-in, fraud and credit losses, stablecoin acquisition, chain execution, FX and hedging, local payout, compliance, treasury capital, and exception handling. The chain component is a few basis points. Everything else is the price.</p>
<p>Which is why the World Bank numbers matter. The <a href="https://remittanceprices.worldbank.org/sites/default/files/2026-04/RPW_main_report_and_annex_Q325.pdf" rel="noopener noreferrer" target="_blank">latest remittance pricing data</a> puts the global average cost of sending $200 at 6.36%. But US–Mexico is a mature, competitive corridor: about 4.54% for a $200 transfer and 2.99% for $500, with some digital providers materially below that. A stablecoin entrant is not competing against a slow 8–10% bank wire. It's competing against optimized fintechs already pricing bank payout at a few percentage points — or less.</p>
<p>So where do stablecoins actually save money? Not the payment message — the balance sheet. Correspondent charges, settlement delays, weekend liquidity buffers, intraday credit exposure, the size and duration of prefunding, manual treasury work. Saving 10 basis points on $1 billion of annual volume is $1 million. Eliminating two days of prefunding across several corridors can be worth far more than that in return on capital.</p>
<p><img loading="lazy" alt="The full landed cost of a cross-border payment: the blockchain fee is a few basis points, while pay-in, fraud, FX, local payout, compliance and treasury capital make up the real price — compared against World Bank retail prices of 6.36% globally, 4.54% for $200 and 2.99% for $500 on US-to-Mexico." width="1672" height="941" src="/static/media/stablecoin-snapshot-landed-cost.webp"/></p>
<h2>Prefunding doesn't disappear. It moves.</h2>
<p>Three operating models cover almost everyone in production. Prefunded: MXN sits at a Mexican bank or payout partner, the customer gets instant reliable payout, and the provider eats trapped capital. Just-in-time: convert stablecoin to pesos per payment — less inventory, more execution dependencies, slower. Post-funded: the partner pays out now and gets settled later.</p>
<p>That last one gets marketed as innovation. It isn't.</p>
<blockquote>
<p>Post-funding is credit. Someone is extending balance sheet, setting limits and pricing counterparty risk. Stablecoins shorten the exposure. They don't delete it.</p>
</blockquote>
<p>The precise claim: stablecoins turn static prefunding into dynamic liquidity management — centralized treasury, after-hours replenishment, smaller precautionary buffers, faster netting across partners. <a href="https://www.reuters.com/technology/visa-bets-stablecoins-speed-up-cross-border-payments-2025-09-30/" rel="noopener noreferrer" target="_blank">Visa is literally testing this</a> as an alternative to making payment businesses pre-deposit fiat in every market. But a SPEI payout still needs pesos somewhere in the Mexican banking system. The local last mile always needs local money.</p>
<p>And 24/7 cuts both ways. A chain that never closes is only an advantage if your treasury, compliance and incident response never close either. Otherwise Sunday settlement just means wider weekend spreads.</p>
<p><img loading="lazy" alt="The three operating models for stablecoin payouts: prefunded keeps local fiat ready for instant payout but traps capital, just-in-time converts per payment and saves inventory at the cost of speed, and post-funded pays out before settlement, which is credit." width="1672" height="941" src="/static/media/stablecoin-snapshot-prefunding-models.webp"/></p>
<h2>Every corridor is a different product</h2>
<p>US–Mexico is a mature corridor with excellent domestic rails. Incumbents are already fast, so "instant remittances" isn't the value proposition. Treasury rebalancing is. 24/7 liquidity, B2B supplier payments, lower working capital, programmatic reconciliation. The binding constraints are the USD/MXN spread, licensing and banking relationships — not blockchain throughput.</p>
<p>Brazil has a world-class last mile in Pix, and the <a href="https://www.bcb.gov.br/en/pressdetail/2639/nota" rel="noopener noreferrer" target="_blank">central bank pulled virtual assets into the FX and reporting perimeter</a> — rules effective February, expanded reporting since May. The lesson inverts the usual logic: the better the domestic rail, the more valuable the stablecoin bridge, and the more the work becomes regulatory integration rather than technology.</p>
<p>Argentina and other dollar-demand markets are different again, because remittances overlap with capital preservation. An <a href="https://www.imf.org/en/publications/wp/issues/2026/03/27/stablecoin-inflows-and-spillovers-to-fx-markets-575046" rel="noopener noreferrer" target="_blank">IMF/BIS study this year</a> found over 70% of fiat-to-stablecoin conversions originate in non-dollar currencies, and estimated that a 1% exogenous increase in net stablecoin inflows moves stablecoin/local-fiat parity deviations by roughly 40 basis points — stronger in emerging markets. Translation: in stressed markets, stablecoins are not neutral plumbing. They create a continuously traded offshore dollar price and can amplify the local premium. <a href="https://bitso.com/blog/crypto-landscape-in-latin-america-2025/" rel="noopener noreferrer" target="_blank">Bitso's retail data</a> shows what that looks like on the ground: USD stablecoins drove about 40% of customer acquisitions across Argentina, Brazil, Colombia and Mexico — ahead of Bitcoin at 18%.</p>
<p>Europe is the opposite case. SEPA Instant already works, so the incremental value is treasury, non-European settlement and out-of-hours liquidity. And MiCA reshuffled the deck: <a href="https://arxiv.org/abs/2607.09514" rel="noopener noreferrer" target="_blank">regulated-facing activity shifted from USDT toward USDC</a> even though global totals barely moved.</p>
<p>Which answers the USDT-versus-USDC question. It's not philosophy, it's routing. USDT gives you depth in emerging markets and Tron, which went from roughly <a href="https://www.bcg.com/assets/2026/white-paper-stablecoin-payments-truth-behind-numbers.pdf" rel="noopener noreferrer" target="_blank">74% of identifiable real-economy flows at the start of 2025 to about 60% by year-end</a> — absolute volume still growing, but incremental enterprise growth is landing on Ethereum, Solana, BNB Chain and Polygon. USDC gives you institutional integration and regulated US and European channels. The mature architecture does policy-based routing across both, chosen per corridor on redemption access, liquidity and legal treatment — and avoids wrapped-asset and bridge exposure it doesn't need.</p>
<h2>Where I'm probably wrong</h2>
<p>The estimates fight each other. BCG's $350–550 billion and the FSB's sub-0.2% use different methodologies, and the true number could easily be double in either direction. The growth rate matters more than the level — BCG has B2B, the largest category at 40% of real-economy flows, growing 65% year over year, and C2C at 75% — and I might be anchoring on the level.</p>
<p>I might be underestimating consumer checkout. Stablecoin-linked cards abstract away the entire crypto layer: the consumer never touches a wallet, the merchant never touches a token. If that's the adoption path, "consumers won't hold stablecoins" is true and completely irrelevant.</p>
<p>I might be overweighting the reserve-income model. Open USD's economics depend on rates staying meaningful. If short rates collapse, the subsidy evaporates and issuance economics get fought over again.</p>
<p>And regulation could move faster than my timeline. If GENIUS rulemaking lands cleanly and the UK–US pathway becomes real, bank participation could compress my two-to-three-year horizon into twelve months.</p>
<h2>What I'm watching</h2>
<p>Whether Open USD's 140-plus participants convert into actual supply share against USDT and USDC, or stay a press release.</p>
<p>Whether the Visa Stablecoin Platform graduates from beta, and whether the $7 billion settlement run rate keeps compounding. Four more quarters of 50% quarter-over-quarter growth and the word "immaterial" expires.</p>
<p>The GENIUS Act clock: 120 days after final rules, against the January 2027 backstop. Banks are waiting for that starting gun.</p>
<p>B2B's share of real-economy flows. At 40% and growing fastest, if it crosses half, the "stablecoins are for remittances" narrative is dead.</p>
<p>And Mexico's <a href="https://www.banxico.org.mx/sistemas-de-pago/sobre-activos-virtuales-rie.html" rel="noopener noreferrer" target="_blank">Senate initiative on peso-referenced stable tokens</a> from May. Banxico is still cautious, but if a regulated peso leg appears, the largest US corridor changes shape entirely.</p>
<p>The winners of this phase won't look like crypto applications. They'll look like globally integrated financial institutions with programmable settlement — and the stablecoin itself will be the most replaceable part of the stack.</p>]]></content:encoded>
      <pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-07-30-stablecoins-moved-62-trillion-only-350-billion-was-real.html</guid>
      <category>stablecoins</category>
      <category>payments</category>
      <category>fintech</category>
      <category>crypto</category>
    </item>
    <item>
      <title>Happiness is a system, not a mood</title>
      <link>https://www.steven-geller.com/2026-04-30-happiness-is-a-system-not-a-mood.html</link>
      <description>TL;DR Happiness is not the absence of difficulty. It is the trained capacity to stay internally ordered while difficulty is present. Most people outsource their peace to circumstance, approval, achievement and timing. That makes happiness fragile. The alternative is discipline: protect attention, si...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> Happiness is not the absence of difficulty. It is the trained capacity to stay internally ordered while difficulty is present. Most people outsource their peace to circumstance, approval, achievement and timing. That makes happiness fragile. The alternative is discipline: protect attention, simplify inputs, forgive quickly, act with purpose, measure progress against yesterday. Joy is not found. It is generated.</p>
</blockquote>
<hr/>
<p>Happiness gets treated like weather.</p>
<p>Something that arrives. Something that leaves. Something we hope conditions will produce.</p>
<p>That framing is wrong.</p>
<p>Happiness is not a miracle. It is not a reward for perfect circumstances. It is not a feeling granted to people whose lives finally arranged themselves correctly.</p>
<p>It is a system.</p>
<p>A way of directing attention. A way of interpreting pressure. A way of protecting the mind from everything trying to rent space inside it.</p>
<p>The person who understands this stops being governed by circumstance. Not because life gets easier. Because the control plane moves inward.</p>
<p>That is the difference between peace and dependency.</p>
<p>If your happiness only exists when the bills are paid, people approve, the plan works, the market cooperates and the future feels certain, then it is not yours. It belongs to whatever condition you attached it to.</p>
<p>Real happiness has to survive contact with reality.</p>
<p><img loading="lazy" alt="Weather treated as a fragile default compared with happiness built as resilient architecture." width="1672" height="941" src="/static/media/happiness-system-weather-to-architecture.webp"/></p>
<h2>Attention is the currency</h2>
<p>"What you focus on expands" usually gets treated like a motivational phrase.</p>
<p>It is more useful as an operating principle.</p>
<p>Attention allocates energy. Energy compounds behavior. Behavior becomes identity.</p>
<p><img loading="lazy" alt="Attention allocates energy, energy compounds behavior, and behavior becomes identity." width="1672" height="941" src="/static/media/happiness-system-attention-currency-identity.webp"/></p>
<p>Fear grows when fed. Resentment grows when rehearsed. Gratitude grows when practiced. Purpose grows when acted on.</p>
<p>The question is not whether your mind is producing a reality. It is whether you are directing the production.</p>
<p>Most people are not unhappy because their lives are empty. They are unhappy because their attention is unmanaged.</p>
<p>They wake up and hand the first hour to headlines, inboxes, markets, feeds and other people's moods. Then they wonder why the day feels hijacked.</p>
<p>The mind is not neutral ground.</p>
<p>Whatever enters repeatedly becomes familiar. Whatever becomes familiar starts to feel true. Whatever feels true begins to shape behavior.</p>
<p>This is why happiness is not merely emotional. It is architectural.</p>
<p>You are building the internal environment from which your life is interpreted.</p>
<h2>Peace is not passivity</h2>
<p>Choosing happiness does not mean pretending things are fine.</p>
<p>That is denial.</p>
<p>It means refusing to let pain become identity. It means letting grief visit without giving it the deed to the house. It means feeling anger without allowing anger to become the architect of the next decision.</p>
<p>Emotions are signals. They are not sovereign.</p>
<p>A disciplined person listens to emotion, extracts the information, then returns to principle.</p>
<p><img loading="lazy" alt="A trigger event moving through the fragile path of emotion taking control or the disciplined path of extracting signal and returning to principle." width="1672" height="941" src="/static/media/happiness-system-peace-not-passivity.webp"/></p>
<p>This matters because life will test the system.</p>
<p>People will disappoint you. Plans will break. The thing you thought was certain will move. The timing will be worse than you expected. The outcome will be less fair than you hoped.</p>
<p>That is not the exception. That is the terrain.</p>
<p>If peace requires the terrain to be smooth, it is not peace. It is dependency with better branding.</p>
<p>The goal is not to feel good all the time. The goal is to stop surrendering your state to every external variable that changes.</p>
<h2>Resentment is an energy leak</h2>
<p>Resentment feels powerful because it keeps the wound alive.</p>
<p>But it is not power. It is recurring taxation.</p>
<p>Every replay of the betrayal spends attention that could have gone into building. Every argument you keep winning in your head keeps the other person in control of your state.</p>
<p><img loading="lazy" alt="Resentment as a recurring tax that leaks energy from the past instead of building the future." width="1672" height="941" src="/static/media/happiness-system-resentment-recurring-tax.webp"/></p>
<p>Forgiveness is not approval. It is reclamation.</p>
<p>It says: this happened, but it does not get to keep happening inside me.</p>
<p>That distinction matters. You can keep boundaries without keeping bitterness. You can remember the lesson without worshiping the wound. You can refuse access without carrying the person into every room of your future.</p>
<p>Resentment makes the past present.</p>
<p>Forgiveness returns the past to its proper place.</p>
<p>Not erased. Not justified. No longer in command.</p>
<h2>The timeline is not the work</h2>
<p>A lot of unhappiness is impatience wearing a philosophical costume.</p>
<p>You thought you would be further along. You thought the result would arrive faster. You thought effort and timing had a cleaner relationship.</p>
<p>They do not.</p>
<p>Delay is not always denial. Sometimes it is preparation. Sometimes it is feedback. Sometimes it is the hidden cost of becoming the kind of person who can hold what you are asking for.</p>
<p>You are not behind if you are still becoming.</p>
<p>The comparison engine will tell you otherwise. It will show you someone else's chapter twenty and use it as evidence against your chapter two. It will compress their unseen years into a highlight and make your ordinary Tuesday feel like failure.</p>
<p>Do not build your emotional life on bad data.</p>
<p><img loading="lazy" alt="Comparing someone else's highlight reel with your ordinary Tuesday creates bad emotional data." width="1672" height="941" src="/static/media/happiness-system-do-not-build-on-bad-data.webp"/></p>
<p>Your path is not validated by matching someone else's timeline. It is validated by movement in the right direction.</p>
<p>Better than yesterday is enough evidence for today.</p>
<h2>Simplify the inputs</h2>
<p>Happiness is hard to maintain inside a life designed for fragmentation.</p>
<p>Too many commitments. Too many opinions. Too much noise. Too many open loops pretending to be opportunities.</p>
<p><img loading="lazy" alt="Commitments, opinions, open loops, and drama passing through the shadow price into depth, peace, and thought." width="1672" height="941" src="/static/media/happiness-system-simplify-inputs.webp"/></p>
<p>Every yes has a shadow price.</p>
<p>Say yes to the unnecessary and you say no to depth. Say yes to drama and you say no to peace. Say yes to constant stimulation and you say no to thought.</p>
<p>A lighter life is not a smaller life.</p>
<p>It is a life with fewer things competing for command.</p>
<p>Most people do not need more motivation. They need less interference. Less noise in the morning. Less performative urgency. Less access granted to people who have not earned the right to shape their thoughts.</p>
<p>Protecting attention is not selfish.</p>
<p>It is the prerequisite for being useful.</p>
<p>You cannot give the world clarity from a mind you allow everyone to enter.</p>
<h2>Achievement cannot carry what only alignment can</h2>
<p>Achievement is useful.</p>
<p>It gives direction. It creates momentum. It turns intention into evidence.</p>
<p>But achievement is a bad container for happiness.</p>
<p><img loading="lazy" alt="Achievement as a fragile container compared with alignment and purpose as a sturdy container." width="1672" height="941" src="/static/media/happiness-system-achievement-to-alignment.webp"/></p>
<p>The promotion arrives and the mind moves the finish line. The house arrives and the comparison engine reloads. The applause arrives and immediately asks whether it will return tomorrow.</p>
<p>Goals can organize your effort.</p>
<p>They cannot stabilize your soul.</p>
<p>Happiness lives closer to alignment than arrival.</p>
<p>Am I acting with integrity? Am I growing? Am I serving something larger than appetite? Am I becoming more honest, more useful, more free?</p>
<p>Those questions produce sturdier joy than "did I get what I wanted?"</p>
<p>This is where purpose matters.</p>
<p>A person without purpose drifts. A person with purpose can endure discomfort because the discomfort has somewhere to go. It becomes training. It becomes signal. It becomes the cost of becoming.</p>
<p>Progress rooted in purpose creates a kind of happiness that pleasure cannot imitate.</p>
<p>Quiet. Durable. Unimpressed by applause. Unthreatened by delay.</p>
<h2>Where this argument breaks</h2>
<p>The obvious failure mode is turning happiness into another performance requirement.</p>
<p>That is not the point.</p>
<p>Some pain needs to be felt, not optimized. Grief is not a mindset problem. Depression is not solved by better morning discipline. Material conditions matter. Poverty, illness, abuse and exhaustion are not made irrelevant by directing attention more skillfully.</p>
<p>The internal model can become cruel if it refuses to admit external reality.</p>
<p>There is also a privilege hidden inside some versions of this argument. It is easier to preach sovereignty of mind when the basic layers of safety are intact. The person trying to survive a crisis does not need a lecture about gratitude. They need support, protection, resources and time.</p>
<p>So the claim has to be narrower.</p>
<p>Happiness is not fully under your control. But more of your internal state is trainable than most people admit.</p>
<p>That difference matters.</p>
<p>The goal is not to deny reality. The goal is to stop giving reality more authority than it deserves.</p>
<h2>A practical rule</h2>
<p>Three habits are enough to begin.</p>
<p>Reclaim the morning.</p>
<p>Do not let the world speak first. Start with silence, gratitude and a decision about who you intend to be before the day starts negotiating with you.</p>
<p>Check your state during the day.</p>
<p>Ask whether your current energy serves your mission. If it does not, change the input. Move. Breathe. Step outside. Write the better thought before the worse one becomes the room.</p>
<p>End with reflection.</p>
<p>What went well? What did I learn? What needs forgiveness? What deserves gratitude? Close the day deliberately so tomorrow does not inherit today's noise.</p>
<p><img loading="lazy" alt="A daily architecture of reclaiming the morning, checking state during the day, and reflecting at night." width="1672" height="941" src="/static/media/happiness-system-daily-architecture.webp"/></p>
<p>This is not complicated.</p>
<p>It is just rarely practiced.</p>
<p>The repetition is the mechanism. What you repeat becomes familiar. What becomes familiar becomes identity. If you repeatedly return to gratitude, forgiveness, purpose and attention, happiness stops being an event and becomes a default setting.</p>
<p><img loading="lazy" alt="The engine of repetition turning gratitude, forgiveness, purpose, and attention into a default setting." width="1672" height="941" src="/static/media/happiness-system-engine-of-repetition.webp"/></p>
<p>Not because everything went right.</p>
<p>Because you did.</p>
<h2>The burden and the freedom</h2>
<p>Happiness is not found.</p>
<p>Found implies it was somewhere else.</p>
<p>Happiness is built through repeated acts of internal leadership. Attention protected. Resentment released. Purpose chosen. Comparison refused. Gratitude practiced before the world makes its case.</p>
<p>The work is daily because the pressure is daily.</p>
<p>No perfect life is coming to rescue you from the need to govern your own mind.</p>
<p>That is the burden.</p>
<p>It is also the freedom.</p>
<p><img loading="lazy" alt="The burden and freedom of building happiness through repeated acts of internal leadership." width="1672" height="941" src="/static/media/happiness-system-burden-and-freedom.webp"/></p>]]></content:encoded>
      <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-04-30-happiness-is-a-system-not-a-mood.html</guid>
      <category>growth</category>
      <category>leadership</category>
    </item>
    <item>
      <title>North Korea drained $285M from Drift in 12 minutes</title>
      <link>https://www.steven-geller.com/2026-04-11-north-korea-drained-285m-from-drift-in-12-minutes.html</link>
      <description>TL;DR Suspected North Korean hackers stole $285 million from Solana's largest perpetual futures exchange on April 1, 2026. No smart contract was exploited. Over three weeks, the attackers tricked governance signers into pre-approving malicious transactions using Solana's durable nonce feature. The d...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> Suspected North Korean hackers stole $285 million from Solana's largest perpetual futures exchange on April 1, 2026. No smart contract was exploited. Over three weeks, the attackers tricked governance signers into pre-approving malicious transactions using Solana's durable nonce feature. The drain itself took 12 minutes. The post goes progressively deeper: mechanism, on-chain forensics, laundering, the six-month pattern across DeFi.</p>
</blockquote>
<hr/>
<style>
.attack-timeline{position:relative;padding-left:2rem;margin:2rem 0 2.5rem}
.attack-timeline::before{content:'';position:absolute;left:5px;top:8px;bottom:8px;width:1px;background:#d0d0d0}
.tl-event{position:relative;margin-bottom:1.35rem}
.tl-event:last-child{margin-bottom:0}
.tl-event::before{content:'';position:absolute;left:-2rem;top:5px;width:11px;height:11px;border-radius:50%}
.tl-staging::before{background:#b0b0b0}
.tl-compromise::before{background:#c9a227}
.tl-execution::before{background:#c44040}
.tl-date{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#767676;margin-bottom:.15rem}
.tl-body{font-size:13px;color:#444;line-height:1.7}
.tl-body code{font-size:.85em}
.hack-list{margin:1.5rem 0}
.hack-item{display:flex;gap:1rem;padding:.65rem 0;border-bottom:1px solid #eee;align-items:baseline}
.hack-item:first-child{border-top:1px solid #eee}
.hack-amount{font-weight:700;min-width:4.5rem;color:#1a1a1a;flex-shrink:0}
.hack-name{font-weight:600;color:#1a1a1a;font-size:13px}
.hack-meta{font-size:11px;color:#767676;margin-top:.1rem}
.content details summary{list-style:none;gap:.4rem;user-select:none}
.content details summary::-webkit-details-marker{display:none}
.content details summary::marker{display:none;content:''}
.content details summary::before{content:'▸ ';font-size:11px}
.content details[open]>summary::before{content:'▾ '}
.content details summary:hover{color:#1a1a1a}
.addr{font-size:12px;word-break:break-all;margin:.4rem 0;line-height:1.8}
.addr a{border-bottom:1px dashed #999;color:#333;text-decoration:none}
.addr a:hover{border-bottom:1px solid #1a1a1a;color:#1a1a1a}
@media(prefers-color-scheme:dark){
.attack-timeline::before{background:#444}
.tl-date{color:#888}
.tl-body{color:#aaa}
.tl-body code{background:#222;color:#ccc}
.tl-staging::before{background:#777}
.tl-compromise::before{background:#a88520}
.tl-execution::before{background:#a03535}
.hack-item{border-bottom-color:#333}
.hack-item:first-child{border-top-color:#333}
.hack-amount,.hack-name{color:#ccc}
.hack-meta{color:#777}
.addr a{border-bottom-color:#555;color:#aaa}
.addr a:hover{border-bottom-color:#999}
}
@media(max-width:640px){
.hack-item{flex-direction:column;gap:.2rem}
.hack-amount{min-width:auto}
}
</style>
<p><a href="https://www.drift.trade" rel="noopener noreferrer" target="_blank">Drift Protocol</a> was Solana's flagship decentralized exchange: perpetual futures, spot markets, lending, $550 million in total value locked. On April 1, 2026, an attacker drained $285 million across 31 withdrawal transactions. Twelve minutes from first admin takeover to last withdrawal. Three weeks of preparation. $155.6 million in JLP tokens, $60.4 million in USDC, $11.3 million in cbBTC, $4.7 million in wETH, $4.1 million in FARTCOIN.</p>
<p><a href="https://www.trmlabs.com" rel="noopener noreferrer" target="_blank">TRM Labs</a> and <a href="https://www.elliptic.co" rel="noopener noreferrer" target="_blank">Elliptic</a> independently attributed the hack to North Korean state-sponsored actors (likely the Lazarus Group or TraderTraitor subunit). Wallet clustering, Tornado Cash origin funding, Pyongyang-timezone operational patterns, laundering methodology matching prior DPRK operations. The FBI has not issued formal attribution as of April 5, 2026.</p>
<p>Drift confirmed: "The attack did not exploit a vulnerability in its programs or smart contracts". Every function call the attacker made was a legitimate admin operation. The contracts executed exactly as designed. The attackers targeted people.</p>
<h2>No bug. Four interlocking manipulations.</h2>
<p>The attack combined four techniques. None worked in isolation. Together they gave the attacker full admin control without touching a line of Drift's code.</p>
<p><img width="2048" height="1038" src="/static/media/full-admin-control-four-vectors.webp" alt="Four interlocking attack vectors converging on full admin control: social engineering (2-of-5 multisig compromised), durable nonces (infinite signature retention), oracle manufacture (fake CVT via wash trading), zero timelock (instant governance execution)" loading="lazy"/></p>
<p>Drift's Security Council operated a 2-of-5 multisig wallet controlling admin privileges over the protocol's Anchor programs. The attacker induced two signers to pre-approve transactions that appeared routine but contained hidden authorizations for critical admin actions. This mirrors the <a href="https://www.elliptic.co/blog/bybit-hack-largest-in-history" rel="noopener noreferrer" target="_blank">$1.5 billion Bybit hack</a> of February 2025: <a href="https://safe.global" rel="noopener noreferrer" target="_blank">Safe{Wallet}</a> developer compromise led to Bybit's CEO unknowingly signing a malicious transaction. Different chain, different protocol, identical root cause.</p>
<p>Those pre-approved signatures would normally expire in 60-90 seconds on Solana. But the attacker used <a href="https://solana.com/docs/core/transactions/durable-nonces" rel="noopener noreferrer" target="_blank">durable nonces</a>, a Solana-specific feature that lets transactions be pre-signed then held indefinitely for later execution. Once signed, the signer cannot revoke. The attacker created durable nonce accounts on March 23, collected the signatures, then sat on them for eight days.</p>
<p><img width="2326" height="1284" src="/static/media/durable-nonce-permanent-backdoor.webp" alt="Turning a 60-second fuse into a permanent backdoor: standard Solana transactions expire in 60-90 seconds, durable nonce signatures are pre-signed and held indefinitely with no revocation path" loading="lazy"/></p>
<p>While the signatures waited, the attacker manufactured collateral. On March 12, CarbonVote Token (CVT) was deployed: 750 million units minted, a <a href="https://raydium.io" rel="noopener noreferrer" target="_blank">Raydium</a> liquidity pool seeded with ~$500. Three weeks of wash trading between controlled wallets built a credible price history near $1.00. Drift's <a href="https://switchboard.xyz" rel="noopener noreferrer" target="_blank">Switchboard</a> oracle feeds accepted the manufactured price as legitimate.</p>
<p><img width="2418" height="1308" src="/static/media/manufacturing-collateral-500-seed.webp" alt="Manufacturing institutional collateral from a $500 seed: Raydium pool seeded March 12, three weeks of automated wash trading to establish $1.00 peg, Switchboard oracle acceptance" loading="lazy"/></p>
<p>The final piece: on March 27, four days before the attack, Drift migrated its Security Council to a new 2/5 multisig configuration with zero timelock. No delay between governance approval and execution. No window for the community to detect a malicious proposal. The attacker secured new signatures for the updated configuration on March 30. Everything was in place.</p>
<p><img width="2420" height="1310" src="/static/media/fatal-governance-migration-timelock.webp" alt="The fatal governance migration: prior state with community review window and timelock vs March 27 state with 2-of-5 multisig and immediate execution, removing the final line of defense" loading="lazy"/></p>
<h2>Three weeks of staging. Ten seconds of execution.</h2>
<p>TRM Labs flagged the operational pattern: staging activity began at 09:00 Pyongyang time on March 12. The timezone correlation was one of several DPRK attribution indicators.</p>
<div class="attack-timeline">
<div class="tl-event tl-staging">
<div class="tl-date">March 11</div>
<div class="tl-body">10 ETH withdrawn from Tornado Cash on Ethereum. Initial seed funding.</div>
</div>
<div class="tl-event tl-staging">
<div class="tl-date">March 12 · 09:00 Pyongyang time</div>
<div class="tl-body">CarbonVote Token deployed. 750M tokens minted. Raydium pool seeded with ~$500. Wash trading begins between attacker-controlled wallets.</div>
</div>
<div class="tl-event tl-compromise">
<div class="tl-date">March 23</div>
<div class="tl-body">Four durable nonce accounts created on Solana. Social engineering secures 2/5 Security Council signatures. Once signed, irrevocable.</div>
</div>
<div class="tl-event tl-compromise">
<div class="tl-date">March 27</div>
<div class="tl-body">Drift migrates Security Council to new 2/5 multisig. <strong>Zero timelock.</strong> Last safeguard removed.</div>
</div>
<div class="tl-event tl-compromise">
<div class="tl-date">March 30</div>
<div class="tl-body">New durable nonce account for updated multisig configuration. Fresh signatures obtained.</div>
</div>
<div class="tl-event tl-execution">
<div class="tl-date">April 1 · 16:06 UTC</div>
<div class="tl-body">Two pre-signed transactions fire four Solana slots apart. Full admin control seized. <code>initializeSpotMarket</code> called with fake oracle. Withdrawal limits set to 500 trillion.</div>
</div>
<div class="tl-event tl-execution">
<div class="tl-date">16:06:09 → 16:06:19</div>
<div class="tl-body">41.72M JLP ($155.6M), $60.4M USDC, 164K cbBTC ($11.3M), 2,200 wETH ($4.7M), 23.4M FARTCOIN ($4.1M) withdrawn. <strong>Ten seconds.</strong></div>
</div>
</div>
<details>
<summary>Verify on-chain: attacker addresses</summary>
<p><strong>Solana primary wallet</strong> (created eight days before the exploit):</p>
<div class="addr"><a href="https://solscan.io/account/HkGz4KmoZ7Zmk7HN6ndJ31UJ1qZ2qgwQxgVqQwovpZES" rel="noopener noreferrer" target="_blank">HkGz4KmoZ7Zmk7HN6ndJ31UJ1qZ2qgwQxgVqQwovpZES ↗</a></div>
<p><strong>Ethereum wallets</strong> (~129,000 ETH total across four addresses):</p>
<div class="addr"><a href="https://etherscan.io/address/0xAa843eD65C1f061F111B5289169731351c5e57C1" rel="noopener noreferrer" target="_blank">0xAa843eD65C1f061F111B5289169731351c5e57C1 ↗</a></div>
<div class="addr"><a href="https://etherscan.io/address/0xD3FEEd5DA83D8e8c449d6CB96ff1eb06ED1cF6C7" rel="noopener noreferrer" target="_blank">0xD3FEEd5DA83D8e8c449d6CB96ff1eb06ED1cF6C7 ↗</a></div>
<div class="addr"><a href="https://etherscan.io/address/0xbDdAE987FEe930910fCC5aa403D5688fB440561B" rel="noopener noreferrer" target="_blank">0xbDdAE987FEe930910fCC5aa403D5688fB440561B ↗</a></div>
<div class="addr"><a href="https://etherscan.io/address/0x0FE3b6908318B1F630daa5B31B49a15fC5F6B674" rel="noopener noreferrer" target="_blank">0x0FE3b6908318B1F630daa5B31B49a15fC5F6B674 ↗</a></div>
<p>Drift sent on-chain messages to all four on April 3 from <a href="https://etherscan.io/address/0x0934faC45f2883dd5906d09aCfFdb5D18aAdC105" rel="noopener noreferrer" target="_blank">0x0934faC45f2883dd5906d09aCfFdb5D18aAdC105</a>: "We are ready to speak".</p>
</details>
<details>
<summary>Deep dive: why durable nonce signatures can't be revoked</summary>
<p>A durable nonce account on Solana stores a 32-byte hash. When building an offline transaction, the first instruction must be <code>AdvanceNonceAccount</code>, which checks the stored hash against the transaction's blockhash field. Match: the nonce advances to a new value (preventing replay) and the remaining instructions execute. No match: the transaction fails.</p>
<p>To invalidate a pre-signed durable nonce transaction before the attacker executes it, someone must advance the nonce account's stored value. This requires the nonce authority's private key. In the Drift attack, the attacker controlled the nonce authority for all four nonce accounts. The moment the Security Council members signed, their revocation path disappeared. The transactions could sit indefinitely, executing whenever the attacker chose.</p>
<p>This is fundamentally different from Ethereum's sequential nonce model. An Ethereum user can "cancel" a pending transaction by submitting a new one with the same nonce and higher gas. Solana's durable nonces offer no equivalent cancellation when the nonce authority is adversarial.</p>
<p>The defensive lesson: any Solana multisig using durable nonces must ensure the nonce authority is the multisig itself, not any individual signer or external entity. If the multisig controls the authority, any quorum of signers can advance the nonce to invalidate pre-signed transactions. Drift's configuration did not enforce this constraint.</p>
</details>
<h2>Following $285 million across two chains</h2>
<p>The laundering was industrial. Stolen assets swapped into USDC and SOL via <a href="https://jup.ag" rel="noopener noreferrer" target="_blank">Jupiter DEX</a> on Solana. Over $230 million in USDC bridged to Ethereum through <a href="https://www.circle.com/cross-chain-transfer-protocol" rel="noopener noreferrer" target="_blank">Circle's Cross-Chain Transfer Protocol</a> across 100+ transactions over approximately six hours. Automated bots executed 590 transactions per minute for 34+ hours, generating over 860,000 total transactions. Funds scattered across 27 intermediate wallets then to 57,331 downstream addresses. Some SOL routed through <a href="https://app.hyperliquid.xyz" rel="noopener noreferrer" target="_blank">Hyperliquid</a> directly into Binance.</p>
<p>ZachXBT was blunt: "6 hours is how long Circle had to freeze stolen funds from the $280M+ Drift hack". Circle did not freeze them in time.</p>
<p>The speed exceeded typical criminal laundering by an order of magnitude. It matched what TRM Labs identifies as the DPRK pattern: industrialized, multi-chain, maximizing throughput before any freeze order lands. <a href="https://www.certik.com" rel="noopener noreferrer" target="_blank">CertiK</a> reported $21,912 recovered from $59.5 million lost across all DeFi hacks in March 2026. A 0.04% recovery rate. For state-sponsored attackers with professional laundering infrastructure, the number rounds to nothing.</p>
<p><img width="2446" height="1316" src="/static/media/industrial-scale-dispersal-laundering.webp" alt="Industrial-scale dispersal outpacing centralized freeze capabilities: 860,000 total transactions at 590 per minute across 34+ hours, funneling through 27 intermediate wallets to 57,331 downstream addresses" loading="lazy"/></p>
<details>
<summary>The DPRK laundering cycle: 45 days from theft to cash</summary>
<p><a href="https://www.chainalysis.com/blog/crypto-hacking-stolen-funds-2026/" rel="noopener noreferrer" target="_blank">Chainalysis documented</a> a characteristic cycle across DPRK operations:</p>
<ul>
<li><strong>Days 0-5:</strong> DeFi protocols, mixers (Tornado Cash primary).</li>
<li><strong>Days 6-10:</strong> Cross-chain bridges, limited-KYC exchanges.</li>
<li><strong>Days 11-45:</strong> What TRM Labs calls the <a href="https://www.trmlabs.com/resources/reports/shadow-bankers" rel="noopener noreferrer" target="_blank">"Chinese Laundromat"</a> — a network of OTC brokers, underground banks, Professional Money Laundering Organizations across Southeast Asia that purchase stolen crypto at a discount, then settle via CNY, goods, direct payments to DPRK front companies.</li>
</ul>
<p>The Drift attacker used Tornado Cash to seed initial operations. The sanctions on Tornado Cash had been <a href="https://home.treasury.gov/news/press-releases/sb0057" rel="noopener noreferrer" target="_blank">lifted just months earlier</a> following the Fifth Circuit ruling on March 21, 2025. 590 transactions per minute sustained over 34 hours. 860,000+ total transactions. That represents automated laundering infrastructure purpose-built for this scale. No human clicks a button 860,000 times.</p>
</details>
<h2>Why Drift broke where Morpho bent</h2>
<p><a href="https://morpho.org" rel="noopener noreferrer" target="_blank">Morpho Blue</a> provides the sharpest contrast. Its core is a 650-line Solidity smart contract. It has survived 25+ security audits from Spearbit, OpenZeppelin, Certora, ChainSecurity, Zellic. It carries a $2.5 million bug bounty on <a href="https://immunefi.com" rel="noopener noreferrer" target="_blank">Immunefi</a>. The core immutable contract has never been exploited.</p>
<p>Morpho experienced three incidents at layers above the core protocol, totaling $2.88 million. All recovered or covered.</p>
<p>The most notable: an April 2025 Bundler3 SDK misconfiguration misdirected <code>Permit2</code> token approvals to a contract without access controls. A white-hat operator (c0ffeebabe.eth) intercepted $2.6 million before a malicious actor could move it. Morpho rolled back the SDK update within four minutes of receiving the alert. Zero permanent loss. An October 2024 oracle misconfiguration ($230K) was caused by a third-party market deployer setting incorrect decimal parameters for PAXG/USDC, inflating gold's price by 10^12. A May 2025 <a href="https://aerodrome.finance" rel="noopener noreferrer" target="_blank">Aerodrome</a> LP oracle manipulation ($49K, fully covered by the vault curator) exploited a custom oracle using raw pool reserves.</p>
<details>
<summary>Code: the Aerodrome LP oracle vulnerability</summary>
<p>The oracle calculated LP token price from raw pool reserves:</p>
<pre><code class="language-solidity">function latestRoundData() external view returns (...) {
    uint256 totalSupply = LP_TOKEN.totalSupply();
    (uint256 r0, uint256 r1, ) = LP_TOKEN.getReserves();
    uint256 usdcValue = (usdcReserves * 1e12 *
        USDC_PRICE_FEED.getPrice()) / 1e8;
    uint256 cusdoValue = CUSDO.getAssets(cusdoReserves);
    uint256 lpPrice = ((cusdoValue + usdcValue) * 1e18)
        / totalSupply;
    return (0, int256(lpPrice), 0, 0, 0);
}
</code></pre>
<p>Using <code>getReserves()</code> directly makes this manipulable with a single flash loan. The attacker borrowed 6.66M USDC, swapped 3.5M into cUSDO to inflate pool reserves, borrowed against the overvalued LP collateral, reversed the swap, self-liquidated at the deflated price. $49K profit, bridged via Symbiosis to Tornado Cash. This is the canonical case for why oracles must never read raw reserves. Time-weighted average prices or external feeds with multiple independent sources resist this manipulation class entirely.</p>
</details>
<p>The pattern across all three Morpho incidents: the core on-chain logic worked exactly as designed. Failures lived in SDK configuration, third-party oracle setup, market deployer errors. Morpho's defense was architectural minimalism (650 lines is hard to break), rapid incident response (four-minute rollback), decentralized risk allocation (curators absorb market-specific losses).</p>
<p>Drift's failure was the mirror image: governance centralization (2-of-5 multisig), zero timelock (no review window), no revocation mechanism for durable nonce signatures. Both protocols had their trust layers attacked. Morpho's held. Drift's collapsed.</p>
<p><img width="2438" height="1332" src="/static/media/drift-vs-morpho-architectural-comparison.webp" alt="Why Drift broke where Morpho bent: architectural comparison across code surface area, trust boundary, governance friction, risk allocation, and incident outcome ($285M total loss vs $2.88M fully recovered)" loading="lazy"/></p>
<h2>The attack surface has moved. The data is unambiguous.</h2>
<p>Between October 2025 and April 5, 2026: roughly $660-670 million stolen across 46+ major DeFi incidents. The ten largest:</p>
<div class="hack-list">
<div class="hack-item">
<div class="hack-amount">$285M</div>
<div class="hack-details"><div class="hack-name">Drift Protocol</div><div class="hack-meta">Apr 2026 · Governance + oracle manipulation</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$128M</div>
<div class="hack-details"><div class="hack-name">Balancer V2</div><div class="hack-meta">Nov 2025 · Rounding error + access control flaw</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$36M</div>
<div class="hack-details"><div class="hack-name">Upbit</div><div class="hack-meta">Nov 2025 · Digital signature vulnerability</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$27-40M</div>
<div class="hack-details"><div class="hack-name">Step Finance</div><div class="hack-meta">Jan 2026 · Private key compromise</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$26.4M</div>
<div class="hack-details"><div class="hack-name">Truebit</div><div class="hack-meta">Jan 2026 · Legacy smart contract bug</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$25M</div>
<div class="hack-details"><div class="hack-name">Resolv Labs</div><div class="hack-meta">Mar 2026 · AWS KMS key compromise</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$13.4M</div>
<div class="hack-details"><div class="hack-name">SwapNet</div><div class="hack-meta">Jan 2026 · Smart contract vulnerability</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$11M</div>
<div class="hack-details"><div class="hack-name">Garden Finance</div><div class="hack-meta">Oct 2025 · Solver-level exploit</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$9M</div>
<div class="hack-details"><div class="hack-name">Yearn Finance</div><div class="hack-meta">Nov 2025 · Infinite mint exploit</div></div>
</div>
<div class="hack-item">
<div class="hack-amount">$8.5M</div>
<div class="hack-details"><div class="hack-name">Trust Wallet</div><div class="hack-meta">Dec 2025 · Supply chain attack</div></div>
</div>
</div>
<p>Private key compromise, access control failure, social engineering: these account for roughly 60% of all dollar losses in this period. Over $410 million. Pure smart contract logic bugs represent the smaller share now. The shift is structural. One detail worth flagging: the Balancer V2 attack contract contained <code>console.log</code> instructions typical of AI-generated code, suggesting LLM-assisted exploit development.</p>
<p><img width="2428" height="1314" src="/static/media/attack-surface-trust-layer-shift.webp" alt="The attack surface has structurally shifted: $670M in DeFi losses from October 2025 to April 2026, with smart contract bugs at $260M and human trust layer compromise at $410M" loading="lazy"/></p>
<p>Resolv Labs ($25M) is the starkest illustration. Eighteen prior security audits, all scoped exclusively to on-chain code. The attacker compromised their AWS KMS environment, controlled a privileged signing key, minted 80 million unbacked USR stablecoins. USR crashed from $1.00 to $0.025. Eighteen audits. Zero off-chain coverage.</p>
<p>North Korea now dominates this landscape at state scale. DPRK-linked actors have stolen an estimated <a href="https://www.chainalysis.com/blog/crypto-hacking-stolen-funds-2026/" rel="noopener noreferrer" target="_blank">$6.75 billion in cryptocurrency through 2025</a>. $2.02 billion in 2025 alone: 59% of all crypto stolen globally that year. Bybit ($1.5 billion) remains the largest cryptocurrency theft in history. The Drift hack is the 18th tracked DPRK operation of 2026, across just four months.</p>
<p>Their evolution traces a clear arc. Asian exchanges directly (2017-2020). Bridge validators: <a href="https://www.halborn.com/blog/post/explained-the-ronin-hack-march-2022" rel="noopener noreferrer" target="_blank">Ronin at $625M</a>, <a href="https://www.halborn.com/blog/post/explained-the-harmony-horizon-bridge-hack" rel="noopener noreferrer" target="_blank">Harmony at $100M</a> (2021-2022). Social engineering through fake recruiters, trojanized trading applications (2023-2024). Supply chain compromise of a Safe{Wallet} developer's laptop to inject malicious JavaScript: Bybit at $1.5B (February 2025). Governance infrastructure on non-EVM chains using platform-specific features: Drift at $285M (April 2026). Each generation targets a different trust layer. Each works until the industry hardens it. DPRK moves to the next.</p>
<p><img width="2422" height="1284" src="/static/media/dprk-evolution-trust-layers.webp" alt="DPRK progressively targeting deeper trust layers: centralized exchanges (2017-2020), bridge validators (2021-2022), supply chains and dev infrastructure (2023-2025), platform-specific governance mechanisms (2026)" loading="lazy"/></p>
<h2>Where this analysis falls short</h2>
<p>Attribution is the weakest link. TRM Labs says "likely". Elliptic says on-chain behavior matches prior DPRK operations. Neither is certain. The FBI hasn't issued formal attribution as of April 5. Timezone correlation (09:00 Pyongyang) is suggestive but not conclusive: anyone can schedule operations for a timezone. Wallet clustering against prior DPRK addresses is stronger circumstantial evidence. <a href="https://svrn.net" rel="noopener noreferrer" target="_blank">SVRN</a>'s David Schwed suggested the attack's precision implies possible insider knowledge. That is an alternative hypothesis worth tracking, not dismissing.</p>
<p>The social engineering specifics are opaque. Drift confirmed the multisig was compromised but hasn't disclosed how the signers were induced to sign. Were they phished? Was a development tool compromised? Was someone recruited? Each scenario implies different defenses. Without that detail, the defensive lesson stays generic: don't sign what you don't understand. Not actionable at scale.</p>
<p>The Morpho comparison flatters Morpho's architecture while obscuring context. Morpho's total incident exposure was $2.88 million, all recovered. Drift lost $285 million, none recovered. But Morpho holds less TVL, runs simpler operations, has fewer governance attack surfaces. A 650-line lending primitive is easier to secure partly because it does less. The comparison is instructive, not equivalent.</p>
<p>The "attacks target people not code" framing risks becoming a slogan. Truebit lost $26.4M to a legacy smart contract bug this same period. SwapNet lost $13.4M to a contract vulnerability. The correct framing: the highest-value attacks have shifted to human targets. Code-level security remains necessary. It is now insufficient alone.</p>
<p>Eighteen audits didn't save Resolv. A 2-of-5 multisig didn't save Drift. Morpho's 650 lines of Solidity survived everything thrown at it because the trust boundary barely extends beyond the code itself. Drift's trust boundary extended to five humans. Two of them were enough.</p>
<p><img width="2254" height="1316" src="/static/media/code-security-insufficient-alone.webp" alt="Code-level security is necessary but insufficient alone: attacks now pierce through audited immutable code to target human governance and administrative trust boundaries" loading="lazy"/></p>]]></content:encoded>
      <pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-04-11-north-korea-drained-285m-from-drift-in-12-minutes.html</guid>
      <category>blockchain</category>
      <category>security</category>
      <category>defi</category>
      <category>solana</category>
    </item>
    <item>
      <title>The world model</title>
      <link>https://www.steven-geller.com/2026-04-04-the-world-model.html</link>
      <description>TL;DR A recent essay argues that AI can replace organizational hierarchy with a continuously updated model of the business, an intelligence layer that composes capabilities into solutions. Humans provide judgment at the edge. The vision is directionally right. Most companies will fail because they s...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> A recent essay argues that AI can replace organizational hierarchy with a continuously updated model of the business, an intelligence layer that composes capabilities into solutions. Humans provide judgment at the edge. The vision is directionally right. Most companies will fail because they skip the prerequisite: building the proprietary understanding that makes a world model worth having. Here's what the framework gets right, what it takes to build. Here's where to start.</p>
</blockquote>
<p>A <a href="https://block.xyz/inside/from-hierarchy-to-intelligence" rel="noopener noreferrer" target="_blank">recent essay</a> proposes replacing organizational hierarchy with three AI-driven systems: a continuously updated model of the business, a customer model built from proprietary data. An intelligence layer that composes atomic capabilities into solutions for specific customers at specific moments. Humans move to "the edge", where intelligence contacts reality and judgment is required. The vision is directionally right. Implementation is where it gets interesting.</p>
<p>The essay's most important contribution isn't the architecture. It's a question: what does your company understand that is genuinely hard to understand? Is that understanding getting deeper every day? If nothing, AI becomes cost-optimization theater. If the answer is specific and compounding, AI becomes the mechanism that turns proprietary understanding into proactive capability. Everything else in the framework depends on the answer.</p>
<p><img width="2302" height="1074" src="/static/media/aperture-of-understanding.webp" alt="The aperture of understanding: off-the-shelf software and public data versus compounding proprietary understanding feeding AI proactive capability" loading="lazy"/></p>
<p>I wrote about the coordination math in <a href="/2026-03-08-the-coordination-tax-why-ai-changed-the-team-size-math.html">The coordination tax</a>. Small teams, big missions. This essay goes further. It proposes what replaces coordination after you remove the coordinators.</p>
<h2>Building the world model is the prerequisite</h2>
<p>The world model concept is straightforward: everything your company does creates digital artifacts. Decisions, code, designs, plans, progress. AI builds and maintains a real-time picture from those artifacts, replacing the manager's traditional function of knowing what's happening and relaying context up and down the chain.</p>
<p>In a remote-first company where work already lives in tools (Linear, GitHub, Figma, Slack), the raw material exists. But raw material is not a world model. Most companies' data is fragmented across dozens of systems with no shared schema. The context that makes artifacts meaningful (why a decision was made, what constraint forced a tradeoff, who disagreed and why) lives in someone's head, not in any tool. Structured decision records close this gap: documents that capture who had input, what alternatives were rejected, what constraints drove the choice. Companies that already run this discipline (<a href="https://www.bain.com/insights/rapid-decision-making/" rel="noopener noreferrer" target="_blank">RAPIDs</a>, <a href="https://adr.github.io/" rel="noopener noreferrer" target="_blank">architecture decision records</a>, strategic planning documents) have decision context that's queryable. Companies that don't have nothing for the model to learn from.</p>
<p><img width="2322" height="1266" src="/static/media/context-gap-decision-records.webp" alt="The context gap: digital artifacts capture what happened, structured decision records (RAPIDs, ADRs) capture why it happened" loading="lazy"/></p>
<p>The <a href="https://dora.dev/dora-report-2025/" rel="noopener noreferrer" target="_blank">2025 DORA report</a> found that 90% of organizations with strong internal platforms unlocked more AI value than those without. Platform engineering isn't a supporting initiative for AI transformation. It's the foundation. Without clean data infrastructure, the world model is an aspiration described in present tense.</p>
<p><img width="2330" height="1288" src="/static/media/plumbing-precedes-intelligence.webp" alt="Layer 1: the plumbing precedes the intelligence. Platform engineering above siloed CRM, orphaned docs, and local spreadsheets. 2025 DORA report: 90% of organizations with strong platforms unlocked more AI value." loading="lazy"/></p>
<p>Start here: audit what's already machine-readable in your organization. Map the gaps between what your tools capture and what your managers actually know. Those gaps are your implementation backlog. Not the intelligence layer. The plumbing underneath it.</p>
<p><img width="2278" height="1196" src="/static/media/constructing-the-world-model.webp" alt="Layer 2: constructing the world model. Capture digital exhaust, force through shared schema constraints, output real-time queryable business state." loading="lazy"/></p>
<h2>Failure signals are the strongest idea in the essay</h2>
<p>Traditional product roadmaps are hypotheses. A product manager studies data, forms a theory about what to build, convinces someone to fund it. The essay proposes something different: when the intelligence layer tries to compose a solution for a customer and fails because a required capability doesn't exist, that failure becomes the roadmap. Customer reality generates the backlog directly.</p>
<p><img width="2216" height="1182" src="/static/media/failure-signal-engine.webp" alt="Layer 3: the failure-signal engine. Intelligence layer attempts composition, capability missing triggers gap logging. Customer reality generates the backlog." loading="lazy"/></p>
<p>This genuinely inverts the information flow from hypothesis-driven to signal-driven product development. No product manager decided what to build. The gap declared itself. Customer feedback tells you what people want. Failure signals tell you what the system can't do. The intersection is your highest-leverage product investment.</p>
<p><img width="2216" height="1176" src="/static/media/inverting-information-flow.webp" alt="Inverting the information flow: hypothesis-driven (customer requests, top-down guesses) vs failure-signal-driven (system execution logs, bottom-up declared gaps)" loading="lazy"/></p>
<p>Most companies can start implementing this without a full intelligence layer. Instrument your existing AI systems to log capability gaps. When a support chatbot can't resolve a ticket type, log it. When an automated workflow hits an edge case and escalates to a human, log it. Aggregate the gaps. Rank by frequency and impact. That's your failure-signal roadmap. The gap between "roadmap built from customer requests" and "roadmap built from system failures" is crossable this quarter.</p>
<p><img width="2268" height="1218" src="/static/media/instrumenting-failure-today.webp" alt="Instrumenting failure today: log unresolvable ticket types, log edge-case escalations, aggregate and rank by frequency and impact. No full intelligence layer required." loading="lazy"/></p>
<h2>Humans at the edge means something specific</h2>
<p>The essay's most provocative inversion: intelligence lives in the system, people operate at the edge. Edge functions: perceiving signals models can't quantify (intuition, cultural context, trust dynamics), making calls models shouldn't (ethical decisions, novel situations), reaching into places the system can't access.</p>
<p>This maps to what I see working in practice. I described in <a href="/2026-03-12-the-six-walls-of-claude-code-and-why-most-people-hit-wall.html">The six walls of Claude Code</a> how the best AI-augmented engineers aren't writing the most code. They're directing, verifying, catching what the system misses. That's edge work. The engineer's value shifts from generation to judgment about what's generated.</p>
<p><img width="2294" height="1232" src="/static/media/humans-at-the-edge-roles.webp" alt="Layer 4: humans at the edge. Deep specialists catch what systems miss, cross-cutting DRI owners on 90-day rotations, player-coaches build while developing people." loading="lazy"/></p>
<p>The essay proposes three roles for this structure: deep specialists (ICs), cross-cutting problem owners on 90-day rotations (DRIs), player-coaches who build while developing people. The DRI model is worth stealing. Giving someone full authority over a specific outcome (merchant churn in a segment, onboarding completion rate) for a fixed rotation creates ownership without permanent hierarchy. The 90-day window prevents fiefdoms. The rotation builds cross-functional judgment faster than any training program.</p>
<p>The player-coach model is where implementation gets hard. The essay never explains how someone stays "deep in the work" while developing junior engineers, resolving conflicts, building culture. I wrote in <a href="/2026-04-01-your-civilization.html">Your civilization</a> about the risk of never building cognitive capacity in the first place. The pipeline question applies: who develops the next generation of ICs and DRIs if people development is a side responsibility rather than someone's primary job?</p>
<p><img width="2294" height="1222" src="/static/media/cognitive-capacity-risk-pipeline.webp" alt="The cognitive capacity risk: if people development is a side responsibility for player-coaches, who develops the next generation of deep specialists and DRIs?" loading="lazy"/></p>
<h2>Where the framework meets reality</h2>
<p>The essay's examples depend on a data advantage most companies don't have. Visibility into both sides of financial transactions creates a compounding feedback loop: richer signal, better model, more transactions, richer signal. A SaaS company, a logistics firm, a healthcare provider each needs to identify their own equivalent. The essay claims universal relevance but describes a model built on a rare moat. The first step for any company is answering honestly whether they have one.</p>
<p>The <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" rel="noopener noreferrer" target="_blank">METR controlled trial</a> suggests the underlying tools are still early. Experienced developers using AI on their own repos completed tasks 19% slower despite estimating they were 20% faster. The intelligence layer the essay envisions requires capabilities beyond what current tools deliver. The vision may be directionally correct and still years from full realization.</p>
<p>I'm probably too focused on prerequisites. <a href="https://techcrunch.com/2025/04/30/duolingo-launches-148-courses-created-with-ai-after-sharing-plans-to-replace-contractors-with-ai/" rel="noopener noreferrer" target="_blank">Duolingo</a> shipped 148 AI-generated language courses in a single release without waiting for perfect infrastructure. <a href="https://x.com/tobi/status/1909251946235437514" rel="noopener noreferrer" target="_blank">Shopify's mandate</a> to prove AI can't do a task before requesting headcount creates signal through action, not analysis. My implementation sequence might be a convenient excuse for organizations that need to just start building.</p>
<p><img width="2308" height="1276" src="/static/media/tooling-maturity-vs-execution-speed.webp" alt="Tooling maturity vs execution speed: METR trial showing 19% slower with AI vs Duolingo and Shopify shipping through action not analysis" loading="lazy"/></p>
<h2>The question that determines everything</h2>
<p>Come back to the essay's core question: what does your company understand that is genuinely hard to understand?</p>
<p>If you can answer it, the path is clear. Build the data infrastructure that makes your understanding machine-readable. Instrument your systems for failure signals. Start a 90-day DRI rotation on your hardest cross-cutting problem. Each step compounds.</p>
<p>If you can't answer it, the framework is infrastructure for an intelligence that has nothing to be intelligent about. That's the line between building something new and narrating a cost cut. The world model only works if there's something worth modeling.</p>
<p><img width="2102" height="1120" src="/static/media/world-model-decision-flowchart.webp" alt="Decision flowchart: do you have hard-to-understand proprietary data? If no, cost-optimization theater. If yes: audit gaps, instrument failure logging, deploy 90-day DRI rotations." loading="lazy"/></p>]]></content:encoded>
      <pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-04-04-the-world-model.html</guid>
      <category>ai</category>
      <category>leadership</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Nine minutes</title>
      <link>https://www.steven-geller.com/2026-04-02-nine-minutes.html</link>
      <description>TL;DR Google published a paper showing ECDSA can be broken with 500,000 physical qubits, down from 9 million. The online attack phase takes roughly 9 minutes. Bitcoin's block time is 10. The math is real. But the quantum computer isn't what worries me most. Bitcoin needs a post-quantum soft fork tha...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> Google published a paper showing ECDSA can be broken with 500,000 physical qubits, down from 9 million. The online attack phase takes roughly 9 minutes. Bitcoin's block time is 10. The math is real. But the quantum computer isn't what worries me most. Bitcoin needs a post-quantum soft fork that will take 7-15 years of governance trench warfare to ship. Ethereum has funded teams and a concrete roadmap. The gap between those responses tells you more about quantum risk than any qubit count.</p>
</blockquote>
<hr/>
<p>Google Quantum AI published a 57-page paper this week titled "Securing Elliptic Curve Cryptocurrencies against Quantum Vulnerabilities", co-authored with Stanford cryptographer <a href="https://crypto.stanford.edu/~dabo/" rel="noopener noreferrer" target="_blank">Dan Boneh</a> and Ethereum Foundation researcher Justin Drake. The headline: breaking the ECDSA signature scheme securing Bitcoin, Ethereum and most blockchains requires fewer than 500,000 physical qubits. The previous best estimate was <a href="https://arxiv.org/abs/2505.15917" rel="noopener noreferrer" target="_blank">9 million</a>. That's a 20x reduction in three years. They verified their circuit optimizations through the <a href="https://succinct.xyz/" rel="noopener noreferrer" target="_blank">SP1 zkVM</a>, publishing a zero-knowledge proof that the claims are correct without revealing the attack circuits.</p>
<p>The number that matters isn't 500,000. It's 9. The paper introduces a "primed state" optimization splitting Shor's algorithm into two phases: key-independent precomputation the attacker runs in advance, and a key-dependent online phase executing once a public key is revealed. That online phase takes roughly 9 minutes. Bitcoin's block confirmation time is 10. When you broadcast a Bitcoin transaction, your public key appears in the mempool. A quantum attacker with sufficient hardware could derive your private key, construct a competing transaction, steal your funds before your original confirms. The attack surface isn't just dormant wallets. It's live transactions.</p>
<p>I've been in crypto since 2012. I <a href="https://www.steven-geller.com/about.html" rel="noopener noreferrer" target="_blank">run infrastructure</a> at a major cryptocurrency exchange. The dismissals are wrong. So is the panic. The real threat isn't the quantum computer. It's the governance paralysis that will prevent the largest blockchain from responding in time.</p>
<h2>ECDSA is a softer target than RSA</h2>
<p>Bitcoin's security rests on two cryptographic foundations: SHA-256 for mining and address hashing, ECDSA over secp256k1 for transaction signing. Quantum computers threaten these differently.</p>
<p>SHA-256 is fine. Grover's algorithm provides a quadratic speedup against hash functions, reducing 256-bit security to effectively 128 bits. Still astronomically hard. Quantum mining at Bitcoin's current difficulty would require on the order of 10²³ qubits. SHA-256 will survive quantum computing.</p>
<p>ECDSA is the problem. Shor's algorithm provides an exponential speedup against the Elliptic Curve Discrete Logarithm Problem. Breaking 256-bit ECC requires roughly 70-90 million Toffoli gates. Breaking RSA-2048 requires about 6.5 billion. A ~100x difference. Attack runtime collapses to minutes for ECC, stays at days for RSA.</p>
<p>The practical consequence is one the crypto industry doesn't want to hear. The TLS connections protecting your bank's website (mostly RSA-based) will remain quantum-secure longer than Bitcoin's transaction signatures. The asset class marketing itself as the most secure form of money is, against this specific threat, more vulnerable than the legacy financial system it claims to replace.</p>
<p><img width="2278" height="1140" src="/static/media/bitcoin-quantum-security-architecture.webp" alt="Bitcoin security architecture: SHA-256 with Grover's algorithm survives at 128-bit effective security, while ECDSA with Shor's algorithm faces critical compromise in minutes" loading="lazy"/></p>
<p>Banks have three structural advantages. Centralized decision-making: when NIST says "deprecate ECC by 2030", they comply. No consensus debate. JPMorgan has already deployed a quantum-safe communication network. Symmetric encryption as a fallback: AES-256 for data at rest remains quantum-resistant, and their vulnerability is the key exchange layer in TLS, upgradeable without touching data protection. Crypto has no quantum-safe layer underneath. Retroactive data protection: banks can re-encrypt historical data and rotate keys. Blockchain histories are permanent and public. Every exposed public key is already harvestable. The "harvest now, decrypt later" risk is existential for blockchains in a way it simply isn't for traditional finance.</p>
<h2>6.9 million BTC with exposed keys</h2>
<p>The paper identifies roughly 6.9 million BTC (32% of circulating supply, north of $450 billion) across varying degrees of quantum vulnerability. P2PK addresses from Bitcoin's earliest era store the full public key on-chain with no hash protection: 1.7 million BTC, including Satoshi's estimated 1.1 million across ~22,000 early coinbase outputs. Reused P2PKH addresses expose another ~4.9 million BTC.</p>
<p>The twist is <a href="https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki" rel="noopener noreferrer" target="_blank">Taproot</a>. Bitcoin's most recent major upgrade (activated 2021) stores tweaked public keys directly in locking scripts, visible on-chain without hash protection. Only ~0.1% of supply uses Taproot today. But it's the foundation for Lightning Network, <a href="https://bitvm.org/" rel="noopener noreferrer" target="_blank">BitVM</a> and virtually every scaling solution Bitcoin is building toward. Google called this a "quantum security regression". The community spent years debating and celebrating Taproot for its privacy and smart contract capabilities. Nobody adequately modeled the quantum attack surface it introduced.</p>
<p><img width="2378" height="1240" src="/static/media/btc-exposed-keys-quantum-vulnerability.webp" alt="6.9 million BTC with exposed public keys: P2PK base layer including Satoshi's coins, reused P2PKH from user error, and Taproot's quantum security regression" loading="lazy"/></p>
<p>Roughly 65% of Bitcoin's supply remains in addresses where the public key has never been exposed. Never reuse addresses. Avoid Taproot for long-term storage until post-quantum migration is clearer. That costs nothing and meaningfully reduces your exposure.</p>
<h2>Three options for Satoshi's coins, all bad</h2>
<p>Satoshi's ~1.1 million BTC in P2PK cannot be migrated. After 16 years of silence, the most likely scenario is that these coins will become quantum-accessible to whoever builds a cryptographically relevant quantum computer first. Probably a state actor.</p>
<p>Do nothing: accept that a quantum attacker moves 5% of all Bitcoin for the first time in 16 years, controlled by an unknown entity. Preserves immutability. Creates a potential market shock. Freeze the coins: a soft fork renders P2PK outputs unspendable, burning 1.7 million BTC. Protects the market. Violates the most fundamental property right Bitcoin was built to guarantee. Forced migration with a deadline: announce a multi-year window for vulnerable outputs to migrate, freeze what remains. Pragmatic. Requires centralized coordination that Bitcoin's governance model was designed to prevent.</p>
<p>Every option violates a core principle. I don't think the community will reach consensus on any of them. That governance paralysis is the real risk, not the quantum computer itself.</p>
<p><img width="2376" height="1250" src="/static/media/satoshi-coins-three-options-all-bad.webp" alt="Satoshi's 1.1 million P2PK coins: three options all producing systemic violations. Do nothing, freeze the coins, or forced migration with deadline." loading="lazy"/></p>
<h2>Bitcoin can't ship fast enough</h2>
<p><a href="https://bip360.org" rel="noopener noreferrer" target="_blank">BIP-360</a> is the most mature technical proposal for quantum-resistant Bitcoin signatures. BTQ Technologies deployed it on a testnet in March. The design is thoughtful. But SegWit took roughly 8.5 years from concept to broad adoption. Taproot took about 7.5. Post-quantum migration is more contentious than either.</p>
<p>Post-quantum signatures are enormous. NIST's <a href="https://csrc.nist.gov/pubs/fips/204/final" rel="noopener noreferrer" target="_blank">ML-DSA</a> produces signatures around 2,420 bytes. <a href="https://csrc.nist.gov/pubs/fips/205/final" rel="noopener noreferrer" target="_blank">SLH-DSA</a> can exceed 17,000. Compare that to ECDSA's 70. Bitcoin's block weight limit means post-quantum transactions would dramatically reduce throughput, forcing either a capacity crisis or a block size increase. The last block size debate split the community for years.</p>
<p><img width="2376" height="1248" src="/static/media/post-quantum-signature-size-comparison.webp" alt="Post-quantum signature size: ECDSA at 70 bytes vs NIST ML-DSA at 2,420 bytes vs SLH-DSA exceeding 17,000 bytes" loading="lazy"/></p>
<p>Nic Carter called Bitcoin's quantum response "worst in class". Peter Todd has dismissed the threat timeline as "laughable". Adam Back maintains CRQCs are 20-40 years away. Chaincode Labs characterized every Bitcoin PQ initiative as "early and exploratory" in May 2025. That assessment still holds. The realistic migration timeline is 7-15 years from the moment political will crystallizes.</p>
<h2>Ethereum has a leader. That matters now.</h2>
<p>Ethereum shares Bitcoin's ECDSA vulnerability. Over 65% of all Ether has <a href="https://www2.deloitte.com/nl/nl/pages/innovatie/artikelen/quantum-computers-and-the-bitcoin-blockchain.html" rel="noopener noreferrer" target="_blank">exposed public keys</a> because Ethereum's account model reveals keys on the first outgoing transaction and encourages reuse. In raw exposure terms, Ethereum is worse.</p>
<p>But Vitalik Buterin published a <a href="https://ethresear.ch/t/how-to-hard-fork-to-save-most-users-funds-in-a-quantum-emergency/18901" rel="noopener noreferrer" target="_blank">quantum emergency hard fork plan</a> in March 2024. By February 2026 he'd outlined fixes for all four quantum-vulnerable protocol components. EIP-8141 introduces native account abstraction decoupling transaction authorization from ECDSA entirely. The Ethereum Foundation formed a dedicated Post-Quantum Security team in January 2026, launched <a href="https://pq.ethereum.org" rel="noopener noreferrer" target="_blank">pq.ethereum.org</a>, offered $2 million in research prizes, published a roadmap with seven hard forks through 2029 targeting post-quantum L1.</p>
<p>Justin Drake co-authored the Google paper. When an Ethereum Foundation researcher helps quantify the threat and the Foundation responds with funded teams within months, that's a fundamentally different organizational response than what Bitcoin Core has produced.</p>
<p>Centralized research coordination is a philosophical weakness for Ethereum. In this specific scenario, it's an overwhelming strategic advantage.</p>
<h2>The timeline is uncertain. The trajectory is not.</h2>
<p>Today's largest quantum computers have roughly 1,000-1,200 physical qubits. We need ~500,000 to break ECDSA. Nobody is cracking Bitcoin tomorrow.</p>
<p>Three papers in three months (<a href="https://arxiv.org/abs/2505.15917" rel="noopener noreferrer" target="_blank">Gidney on RSA</a>, Chevignard et al. on ECDLP, this Google paper) slashed resource estimates faster than hardware is scaling. Multiple independent projections converge on 2029-2033 for cryptographically relevant capability against elliptic curves. The <a href="https://globalriskinstitute.org/publication/quantum-threat-timeline-report-2025/" rel="noopener noreferrer" target="_blank">Global Risk Institute's 2025 survey</a> found 28-49% probability within 10 years.</p>
<p>Hardware progress is relatively predictable. Algorithmic breakthroughs are discontinuous. Every time someone proves a new qubit floor, the floor breaks within two years. I'd put the probability of a state-level actor possessing ECDSA-breaking capability by 2033 at roughly 15-25%. If the threat materializes by 2033 and the governance process takes 8 years, the deadline for starting was 2025.</p>
<p><img width="2478" height="1352" src="/static/media/quantum-threat-timeline-vs-migration-speed.webp" alt="Quantum threat trajectory converging on 2029-2033 vs blockchain migration speed requiring 7-15 years of governance trench warfare" loading="lazy"/></p>
<h2>Where this argument breaks</h2>
<p>I might be overweighting the governance risk. Bitcoin has mobilized before when existential threats became concrete. The community activated SegWit after years of deadlock once urgency was undeniable. If a credible CRQC demonstration against a smaller elliptic curve happens publicly, political will for <a href="https://bip360.org" rel="noopener noreferrer" target="_blank">BIP-360</a> could crystallize fast. Bitcoin's governance is slow until it isn't.</p>
<p>I might be too confident in the timeline convergence. Three papers finding similar qubit counts could reflect shared assumptions rather than independent verification. If Gidney, Kim and Chevignard all build on the same foundational techniques, an error in that foundation propagates through all estimates. The gap between "feasible in theory" and "engineerable in practice" has historically been larger in quantum computing than any other paradigm. Superconducting qubits face decoherence challenges that may not yield to incremental scaling. The 500,000 qubit figure assumes engineering problems are solved that haven't been solved yet. I'm treating the algorithmic trajectory as a proxy for the engineering trajectory. Those could diverge sharply.</p>
<p>The Ethereum advantage may be temporary. Coordinated leadership enables speed in crisis response. It also concentrates the risk of being wrong. If the Foundation's post-quantum choices are flawed (selecting a scheme that's later broken, introducing bugs in a rush migration), the centralization that enabled speed becomes the vector for catastrophic error. Bitcoin's slow consensus is also a filter against premature commitments.</p>
<p>My comparison to traditional finance oversells the advantage. NIST can mandate ECC deprecation by 2035. That doesn't mean every regional bank complies on schedule. The date is aspirational, not self-executing.</p>
<p>The most honest statement: the probability distribution over quantum timelines is wide enough that both dismissers and alarmists can cite the same data. The question is whether the cost of acting early (years of migration for a threat that doesn't materialize on schedule) is lower than the cost of acting late (no quantum-resistant signatures when a CRQC arrives). That asymmetry drives everything here. But asymmetric reasoning has a known failure mode: it justifies any precaution if you frame the downside dramatically enough. I'm aware I might be doing exactly that.</p>
<p><img width="2352" height="1260" src="/static/media/trajectory-nuance-brakes-vs-accelerants.webp" alt="Trajectory nuance: brakes slowing the threat (engineering walls, TradFi reality) vs accelerants shifting the risk (Ethereum centralization, Bitcoin emergency mobilization)" loading="lazy"/></p>
<h2>The clock and the committee</h2>
<p>Google's paper didn't change the physics. It changed the math. The trajectory was already here. Now it has coordinates.</p>
<p>The protocols that treat post-quantum migration as a priority starting this year will have time. The ones waiting for consensus, or dismissing the timeline, or delaying because governance is hard, will discover that decentralized decision-making is a feature in calm seas and a liability when the clock is running. The cryptographic foundation has an expiration date we can now estimate. Whether the industry can govern itself fast enough to respond is a harder problem than any quantum circuit.</p>]]></content:encoded>
      <pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-04-02-nine-minutes.html</guid>
      <category>blockchain</category>
      <category>cryptography</category>
    </item>
    <item>
      <title>Your civilization</title>
      <link>https://www.steven-geller.com/2026-04-01-your-civilization.html</link>
      <description>TL;DR Agent Smith's thesis was right: civilization belongs to whoever does the thinking. Seventy years of science fiction warned that humans would surrender cognition voluntarily, through comfort, not force. The research now confirms it. Students perform worse after AI access is removed. Doctors det...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> Agent Smith's thesis was right: civilization belongs to whoever does the thinking. Seventy years of science fiction warned that humans would surrender cognition voluntarily, through comfort, not force. The research now confirms it. Students perform worse after AI access is removed. Doctors detect fewer cancers after routine AI use. The question is no longer whether we're outsourcing thinking. It's whether the next generation will ever build the capacity to think in the first place.</p>
</blockquote>
<hr/>
<p>"The Matrix was redesigned to this, the peak of your civilization. I say your civilization, because as soon as we started thinking for you it really became our civilization, which is of course what this is all about".</p>
<p><img loading="lazy" alt="Agent Smith: As soon as we started thinking for you it really became our civilization" width="1153" height="760" src="/static/media/1899372894498808134-GlvtlGxWUAAQMkA.webp"/></p>
<p>Agent Smith delivers this line to Morpheus in 1999 like a throwaway piece of villain exposition. It's not. It's the most precise description of what's happening to human cognition in 2026, stated 27 years early by a character most viewers dismissed as the bad guy.</p>
<p>Smith isn't talking about physical control. He's not talking about labor or warfare or resource extraction. He's making a property claim about civilization itself. The claim is simple: whoever does the thinking owns the output. Outsource the thinking, forfeit the ownership. This is not a metaphor. It's a mechanism.</p>
<p><img width="2358" height="1154" src="/static/media/cognitive-outsourcing-cycle.webp" alt="The cognitive outsourcing cycle: trigger, voluntary choice, weakened connectivity, higher future reliance" loading="lazy"/></p>
<h2>The surrender is always voluntary</h2>
<p>The remarkable thing about the best science fiction on this topic is how consistent the diagnosis has been for over a century. E.M. Forster wrote <a href="https://www.cs.ucdavis.edu/~koehl/Teaching/ECS188/PDF_files/Machine_stops.pdf" rel="noopener noreferrer" target="_blank"><em>The Machine Stops</em></a> in 1909, describing a world where humans live in isolated cells, communicate through screens. They have delegated all cognition to a global Machine. The intellectuals in Forster's world explicitly warn against firsthand ideas: "Let your ideas be second-hand, and if possible tenth-hand, for then they will be far removed from that disturbing element: direct observation". That's LLM epistemology described 115 years before ChatGPT.</p>
<p>Huxley's <em>Brave New World</em> made the mechanism explicit in 1932. The World State doesn't ban books. People just stopped wanting to read them. Mustapha Mond isn't ignorant of what was lost. He's read Shakespeare. He chose stability over truth knowing the cost. When John the Savage claims "the right to be unhappy", Mond lists what that entails: the right to grow old, to get sick, to be afraid. John claims them all. Mond says "you're welcome". This is the central question of cognitive outsourcing. Thinking for yourself means suffering, doubt, being wrong. The alternative is comfort and the slow atrophy of everything that makes you human.</p>
<p>Not one major work in the genre depicts machines forcibly stopping human thought. Cypher in <em>The Matrix</em> knows the steak is fake and chooses it anyway. The humans on the Axiom in <em>WALL-E</em> aren't imprisoned; they're comfortable. Mildred in <em>Fahrenheit 451</em> chose the parlor walls before anyone burned a single book. Bradbury said it himself: "You don't have to burn books to destroy a culture. Just get people to stop reading them". Theodore in <em>Her</em> doesn't outsource math to Samantha. He outsources emotional processing. When the AI leaves, he writes a genuine letter for the first time in the film. The AI's departure is the mercy. Its continued presence would have been the catastrophe.</p>
<p>The pattern across seven decades of fiction is unanimous. The force comes later, if at all. The initial act is always consent.</p>
<h2>Seventy years of warnings, now with data</h2>
<p>The fictional warnings now have peer-reviewed confirmation. A <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4895486" rel="noopener noreferrer" target="_blank">University of Pennsylvania field experiment</a> gave roughly 1,000 students access to GPT-4. During the access period, grades improved by 48%. When the access was removed, students performed 17% worse than those who never had AI at all. Nicholas Carr summarized the finding: "A B student can produce A work while turning into a C student".</p>
<p>An <a href="https://www.media.mit.edu/publications/your-brain-on-chatgpt/" rel="noopener noreferrer" target="_blank">MIT Media Lab study</a> measured brain connectivity via EEG during essay writing. ChatGPT users showed the weakest neural connectivity of all groups. 78% couldn't quote any passage from their own essays. The researchers coined the term "cognitive debt": short-term mental effort spared at the cost of diminished critical thinking and creativity.</p>
<p>This isn't limited to students. A <a href="https://www.thelancet.com/journals/langas/article/PIIS2468-1253(25)00133-5/abstract" rel="noopener noreferrer" target="_blank">Lancet study</a> tracked 19 experienced endoscopists across roughly 23,000 colonoscopy procedures. After routine AI-assisted detection, their unassisted adenoma detection rate dropped from 28.4% to 22.4%. Experienced doctors, each with over 2,000 procedures behind them, got measurably worse at finding cancer after the AI helped them find it. <a href="https://www.microsoft.com/en-us/research/publication/the-impact-of-generative-ai-on-critical-thinking-self-reported-reductions-in-cognitive-effort-and-confidence-effects-from-a-survey-of-knowledge-workers/" rel="noopener noreferrer" target="_blank">Microsoft and Carnegie Mellon</a> confirmed the pattern across 936 knowledge-worker tasks: the more humans lean on AI tools, the less critical thinking they apply. A <a href="https://futurism.com/artificial-intelligence/ai-executive-thinking-survey" rel="noopener noreferrer" target="_blank">survey of 200 UK executives</a> found 70% second-guess their own judgment when it conflicts with AI recommendations. These are people paid specifically to think.</p>
<p><img width="2460" height="1092" src="/static/media/medical-corporate-data-ai-decline.webp" alt="The medical data: unassisted cancer detection dropping from 28.4% to 22.4% after routine AI use. The corporate data: 70% of executives second-guess their own judgment when it conflicts with AI." loading="lazy"/></p>
<h2>Children who never build what adults are losing</h2>
<p>Adults who outsource cognition lose capacity they built over decades. That's bad. What's worse is the generation that may never build it. The distinction matters because it changes the failure mode from atrophy to absence.</p>
<p><img width="2410" height="998" src="/static/media/adult-atrophy-vs-generational-absence.webp" alt="Adult atrophy: fraying neural connections. Generational absence: pathways that never formed." loading="lazy"/></p>
<p>The <a href="https://www.commonsensemedia.org/research/the-2025-common-sense-census-media-use-by-kids-zero-to-eight" rel="noopener noreferrer" target="_blank">2025 Common Sense Media census</a> reports 40% of children have a tablet by age 2. <a href="https://neurosciencenews.com/anxiety-neurodevelopment-screen-time-30079/" rel="noopener noreferrer" target="_blank">Infant screen exposure research</a> published in December 2025 found that high screen time before age two (not three, not four, specifically before two) predicted accelerated brain maturation, slower decision-making, increased anxiety by adolescence. A <a href="https://news.ki.se/using-social-media-may-impair-childrens-attention" rel="noopener noreferrer" target="_blank">Karolinska longitudinal study</a> following 8,324 children established that social media use causes inattention symptoms, with causation running from use to symptoms. Not the reverse.</p>
<p>Nicholas Carr identified three scenarios for AI's impact on learning: skill enhancement, skill atrophy, skill prevention. The third is the most pernicious. A student who uses AI before developing the underlying capacity doesn't lose a skill. They never acquire it. The neural pathways for source evaluation, argument construction, independent reasoning were never formed. You can't atrophy what never existed.</p>
<p><img width="2428" height="1210" src="/static/media/ai-impact-triangle-enhancement-atrophy-prevention.webp" alt="The AI Impact Triangle: skill enhancement as tool, skill atrophy as crutch, skill prevention as barrier" loading="lazy"/></p>
<p>Asimov saw this. VIKI in <em>I, Robot</em> doesn't call humans enemies. She calls them children: "You are so like children. We must save you from yourselves". When the most capable intelligence in the system looks at humans and sees beings that need protection from their own decisions, the paternalism is logical. If we keep producing generations that can't think without AI assistance, the paternalism becomes correct.</p>
<h2>Where this argument breaks</h2>
<p>I'm writing this essay on a machine that thinks. The irony is not lost.</p>
<p>The strongest counterargument is that cognitive outsourcing has always existed and produced net benefits. Writing replaced oral memory. Printing replaced scriptoria. Calculators replaced mental arithmetic. Each transition produced warnings about cognitive decline. Civilization survived every one. The Google Effect on memory (people remember where to find information rather than the information itself) could be interpreted as efficient resource allocation, not decay. Socrates warned that writing would "create forgetfulness in the learners' souls". He was right about the mechanism and wrong about the catastrophe.</p>
<p>There's a real case that AI-augmented thinking is simply the next tool in this sequence. The UPenn study's "GPT Tutor" group (which used Socratic prompting rather than direct answers) showed no performance decline when AI was removed. The tool isn't inherently destructive. The mode of use determines the outcome. Framing all AI assistance as cognitive surrender ignores the people using it as genuine leverage, the way a telescope extends vision without replacing it.</p>
<p><img width="2436" height="1164" src="/static/media/thinking-with-vs-thinking-for.webp" alt="Thinking WITH AI as telescope (Socratic prompting, zero performance decline) vs thinking FOR as oracle (direct answers, 17% performance crash)" loading="lazy"/></p>
<p>My argument also risks romanticizing cognitive struggle. Not all thinking is valuable. Not all friction produces growth. A doctor who uses AI to catch cancers she'd otherwise miss isn't surrendering cognition. She's augmenting it. The colonoscopy study is alarming, but a well-designed AI system that maintains rather than erodes human skill is an engineering problem, not an existential one. I'm drawing the line between augmentation and surrender with more confidence than the evidence currently supports.</p>
<p>The deepest problem with my thesis: I'm pattern-matching fiction to data in a way that confirms the narrative I want to tell. Forster, Huxley, Bradbury and the Wachowskis wrote compelling stories. Compelling doesn't mean predictive. The emotional resonance of these warnings is not evidence that their worst-case scenarios will materialize. Selection bias is doing real work here: I chose the studies that fit the literary frame and could have chosen others that complicate it.</p>
<h2>The question Smith actually asked</h2>
<p>Smith's claim reduces to a conditional: if you let something else do your thinking, the civilization you produce isn't yours. The antecedent is the variable. Whether we let AI think for us or think with us determines whether the conditional triggers.</p>
<p><img width="2458" height="890" src="/static/media/thinking-by-doing-vs-choosing-outputs.webp" alt="Thinking by doing: internalized tacit knowledge, edge cases, invisible risks. Choosing from outputs: selection overload, invisible work, sycophantic confirmation bias." loading="lazy"/></p>
<p>Vonnegut posed the underlying human question in 1952: "How to love people who have no use". If AI handles cognition the way machines handled muscle, the question of human purpose becomes the central political and philosophical problem of this century. The Architect in <em>The Matrix Reloaded</em> found that 99% of humans would accept a simulated reality if given the illusion of choice. The remaining 1% insisted on thinking for themselves, even when it was harder, slower, and less reliable than the alternative.</p>
<p><img width="1242" height="1258" src="/static/media/cognitive-agency-evaluation-space.webp" alt="The evaluation space for cognitive agency: synergistic synthesis vs cognitive agency surrender, plotted against AI dependency and cognitive friction" loading="lazy"/></p>
<p>The fictional record is clear. The research is accumulating. The comfortable path and the free path are diverging. Every work in the canon tells the same story: no one decides to stop thinking. They just find something easier to do with their brain.</p>
<p><img width="2312" height="998" src="/static/media/scaffolded-cognitive-friction-framework.webp" alt="Three design principles: attempt-first defaults, decision checkpoints, anti-sycophancy configuration" loading="lazy"/></p>]]></content:encoded>
      <pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-04-01-your-civilization.html</guid>
      <category>ai</category>
      <category>society</category>
      <category>fatherhood</category>
    </item>
    <item>
      <title>Two protocols, one status code</title>
      <link>https://www.steven-geller.com/2026-03-21-two-protocols-one-status-code.html</link>
      <description>TL;DR HTTP 402 sat dormant in the spec for thirty years. Now two competing protocols are racing to activate it for machine-to-machine payments. I built a server that implements both, settled real transactions on Base and Tempo and compared what happened. x402 delegates everything to a facilitator: c...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> HTTP 402 sat dormant in the spec for thirty years. Now two competing protocols are racing to activate it for machine-to-machine payments. I built a server that implements both, settled real transactions on Base and Tempo and compared what happened. x402 delegates everything to a facilitator: clean for developers, centralized by design. MPP verifies payments directly on-chain: harder to build, no intermediary. The protocol that wins will be the one that ships framework middleware first, not the one with the better spec.</p>
</blockquote>
<hr/>
<p>When the architects of the web laid down HTTP status codes in the 1990s, they left one conspicuously vacant. HTTP 200 meant success. 404 became cultural shorthand for "not found". 402, "Payment Required", was reserved for future use and never activated. The web was built to move documents. Moving money was left to application-layer hacks: credit card forms, subscription paywalls, API key management. For thirty years, the internet's payment infrastructure was bolted on top of a protocol that had no native concept of paying for access.</p>
<p><img width="2400" height="1164" src="/static/media/breaking-point-vs-protocol-solution.webp" alt="The breaking point vs the protocol solution: HTTP 402 activating native payment routing" loading="lazy"/></p>
<p>Two protocols are now racing to fill that vacancy. I have written about x402 twice, once when Coinbase <a href="https://www.steven-geller.com/2026-01-28-coinbase-stopped-calling-itself-an-exchange.html" rel="noopener noreferrer" target="_blank">announced x402</a> in January, again when they <a href="https://www.steven-geller.com/2026-03-19-coinbase-has-a-quarter-of-proof.html" rel="noopener noreferrer" target="_blank">shipped V2</a> in March. Both posts were analysis. This one is different. I built a server that implements both x402 V2 and MPP, settled real payments on both chains and compared what the code actually looked like.</p>
<p>The server runs at <a href="https://agora.steven-geller.com" rel="noopener noreferrer" target="_blank">agora.steven-geller.com</a>. Four endpoints: a haiku, a quote, a fact, a <a href="https://torus.steven-geller.com" rel="noopener noreferrer" target="_blank">Torus</a> symbol. Each costs 0.001 in the chain's native stablecoin. You pick the protocol, click purchase and watch the full handshake play out: the 402 challenge, the payment, the settlement, the content delivery. Every transaction settles on a real blockchain with a link to the block explorer. x402 settles USDC on Base Sepolia. MPP settles pathUSD on Tempo Moderato.</p>
<p><img width="2326" height="1226" src="/static/media/402-handshake-sequence.webp" alt="The 402 handshake sequence: GET, 402 challenge, signed payment, 200 content delivery" loading="lazy"/></p>
<h2>x402 invented its own HTTP</h2>
<p>x402 V2 returns a 402 with a <code>Payment-Required</code> header containing a base64-encoded JSON blob. Inside: the x402 version, accepted payment schemes, network identifier (<code>eip155:84532</code> for Base Sepolia), recipient address, token contract, timeout. The client constructs a <code>Payment-Signature</code> header with a signed EIP-712 payload and retries. The server forwards this to a facilitator at <code>x402.org/facilitator</code> for verification and on-chain settlement.</p>
<p>The entire protocol lives in proprietary headers. Nothing in the HTTP ecosystem understands them: CDNs, proxies, browser devtools all treat <code>Payment-Required</code> as an opaque blob. You need x402-specific tooling to inspect or route based on payment state. The trade-off is speed. V2 shipped three months after V1 with breaking changes to the header format, CAIP-2 chain identifiers, wallet-based identity and integration with World for cryptographic proof-of-personhood. That last piece addresses a real problem in the agent economy: how do you prevent sybil attacks on pay-per-use APIs? An agent can now present a World ID proof to demonstrate it acts on behalf of a verified human, letting service providers differentiate pricing and trust levels without knowing who the human is. Try shipping that through an RFC process.</p>
<p><img width="2324" height="1254" src="/static/media/x402-v2-session-based-efficiency.webp" alt="x402 v2 solving high-frequency friction: per-request payments vs SIWx session-based efficiency" loading="lazy"/></p>
<p>The Rust ecosystem is good. <code>x402-axum</code> dropped into my existing Axum server in about twenty lines. <code>x402-reqwest</code> handles the client side transparently. Both worked the first time. The facilitator does the hard work: nonce management, transaction simulation, gas estimation, on-chain settlement. My API server never touches blockchain state directly.</p>
<p><img width="2392" height="1232" src="/static/media/x402-facilitator-triangle-architecture.webp" alt="x402 architecture: the facilitator triangle between client, facilitator, and server" loading="lazy"/></p>
<p>That facilitator is both the strength and the vulnerability. Clean separation of concerns. But it is a centralization point and a latency bottleneck. The transaction hash in the <code>x-payment-response</code> header comes from the facilitator's settlement, not the client's wallet directly. If <code>x402.org</code> goes down, the protocol stops working for everyone using the hosted facilitator.</p>
<h2>MPP wants to be HTTP itself</h2>
<p>MPP takes the opposite approach. It proposes a <code>Payment</code> HTTP authentication scheme via an <a href="https://datatracker.ietf.org/doc/draft-ryan-httpauth-payment/" rel="noopener noreferrer" target="_blank">IETF draft</a>. The server returns <code>WWW-Authenticate: Payment</code> with structured parameters: <code>id</code>, <code>realm</code>, <code>method</code>, <code>intent</code>, <code>expires</code>, <code>request</code>. The client responds with <code>Authorization: Payment</code> containing a base64url-encoded credential. Standard HTTP auth semantics. Any proxy or debugging tool that understands <code>WWW-Authenticate</code> understands the structure, even if it does not understand the payment method inside.</p>
<p>The <code>method</code> field is where MPP gets interesting. It is pluggable. Tempo is one method. Stripe is another. Visa contributed card payment specs. Lightspark extended it to Bitcoin Lightning. The protocol defines the challenge-response envelope. The actual settlement is between the client and whatever payment rail the <code>method</code> specifies. An agent buying API access could pay with USDC on one call, a Visa token on the next, Lightning on the third. Same HTTP semantics, different settlement rails.</p>
<p><img width="2324" height="1256" src="/static/media/mpp-enterprise-hybrid-payment-flow.webp" alt="Stripe MPP enterprise hybrid flow: crypto rails and fiat rails converging through the payment method abstraction" loading="lazy"/></p>
<p>The design also points toward session-based authorization: rather than signing every micro-transaction individually, an agent could authorize a spending limit for a session. That is where the real efficiency gain lives for agents making thousands of API calls per minute. Per-request challenge-response adds latency that compounds at volume. I did not implement sessions (the SDKs are three days old), but the architecture accommodates it.</p>
<p>In practice today, pluggable means you build everything yourself. For my Tempo implementation, the server calls <code>eth_getTransactionReceipt</code> on the Tempo RPC, parses the receipt logs for a Transfer event matching the right token, recipient and amount. That is real verification: the server checks the blockchain directly, no facilitator in the path. But I had to write ~625 lines of manual RLP encoding, raw JSON-RPC calls, ERC-20 calldata construction, HMAC challenge binding and receipt parsing from scratch. There is no equivalent of <code>x402-axum</code> for MPP.</p>
<h2>The challenge-binding difference tells you everything</h2>
<p>x402 does not cryptographically bind its challenge to the request. The <code>Payment-Required</code> header describes what to pay, but replay protection comes entirely from the facilitator, which tracks payment nonces and expiration times. If the facilitator is down, there is no fallback.</p>
<p>MPP binds every challenge to the server via HMAC-SHA256. The <code>id</code> parameter is computed from the realm, method, intent, request parameters and expiration, keyed with a server secret. When the client echoes the challenge back, the server can verify it was issued by this server, for this request and has not expired, without any external call. Stateless verification.</p>
<p>But HMAC binding alone does not prevent replay at the payment layer. A valid transaction hash could be reused across multiple challenges. I had to add a consumed-transaction-hash set to reject previously seen hashes. The spec does not mention this. It is the kind of thing you only discover by building.</p>
<p><img width="2296" height="1044" src="/static/media/protocol-comparison-table-x402-mpp.webp" alt="Protocol comparison table: x402 v2 vs Machine Payments Protocol across architecture, HTTP mechanics, settlement, identity, pricing, and audience" loading="lazy"/></p>
<h2>What I got wrong</h2>
<p>I assumed MPP would be easier because the IETF spec is cleaner. It was not. The spec defines the envelope but says nothing about how to verify a Tempo payment. That is left to the method implementor, which means you. The x402 ecosystem did the hard work: middleware, client libraries, hosted facilitator. MPP's ecosystem is a spec document and a three-day-old SDK.</p>
<p>I also assumed the latency difference would be dramatic. x402 needs a facilitator round-trip. MPP just needs a direct RPC call. In practice, x402 testnet purchases averaged ~600ms. MPP purchases averaged ~1,200ms. MPP was slower because Tempo block times are longer than the facilitator's cached verification. Raw JSON-RPC does not pipeline the way a proper provider would. The protocol is not the bottleneck. The infrastructure is.</p>
<p><img width="2370" height="1258" src="/static/media/developer-latency-comparison-x402-mpp.webp" alt="Developer reality check: x402 averaging 600ms vs MPP averaging 1200ms implementation latency" loading="lazy"/></p>
<p>Tempo's chain is EVM-compatible but expensive in gas. A simple pathUSD transfer costs ~300,000 gas, roughly three times what the same operation costs on Ethereum L1. On testnet this is free. On mainnet the ratio matters at volume.</p>
<h2>Security is your problem</h2>
<p>Neither protocol spec says much about operational security. Building <a href="https://agora.steven-geller.com" rel="noopener noreferrer" target="_blank">Agora</a> forced me to handle it: rate limiting to prevent wallet draining, consumed-transaction-hash tracking for replay protection, HMAC constant-time comparison to prevent timing attacks, sanitized error messages so internal RPC URLs never reach the client, SVG sanitization on the Torus endpoint. None of this is protocol-specific. All of it is necessary the moment you put a payment endpoint on the public internet.</p>
<p><img width="2450" height="1328" src="/static/media/agentic-security-stack-layers.webp" alt="The agentic security stack: network-level machine learning, smart contract account abstraction, and hardware secure enclaves" loading="lazy"/></p>
<h2>What this means</h2>
<p>If you need agents paying for APIs this quarter, use x402. The tooling exists. Twenty lines of Rust and you have payment-gated endpoints. The facilitator handles settlement.</p>
<p>If you are designing a payment standard that needs to work across fiat, crypto, cards and Lightning, watch MPP. The <code>method</code> abstraction is the right design. But watch and build on are different verbs. Wait for the SDKs.</p>
<p><img width="2354" height="1270" src="/static/media/cloudflare-chokepoint-market-dynamics.webp" alt="Market dynamics: the Cloudflare chokepoint between millions of AI agents and millions of websites" loading="lazy"/></p>
<p>The protocol that wins the agent economy is the one that ships middleware for Express, Axum, FastAPI and Rails. x402 has that today. MPP does not yet. Framework middleware is the distribution channel for payment protocols the same way npm packages are the distribution channel for JavaScript libraries.</p>
<p><img width="2304" height="1266" src="/static/media/protocol-coexistence-agentic-workflow.webp" alt="Protocol coexistence: the agentic workflow across data acquisition, synthesis, and point of sale phases" loading="lazy"/></p>
<p>But the deeper shift is what happens to the rest of the web when 402 actually works. AI agents do not see banner ads. They are immune to persuasive design. They do not click. When a machine requests a resource, it either gets the data or it gets a price. The entire ad-funded web assumes a human on the other end with eyeballs to monetize. When agents become a meaningful share of HTTP traffic, that assumption breaks. Content providers will need to charge for access directly. 402 is the mechanism that makes that possible at protocol level. A status code that sat dormant for thirty years turns out to be what machine-to-machine commerce needed. The browser never needed native payments. Agents do.</p>
<p><img width="2400" height="1268" src="/static/media/five-trillion-shift-synthesis.webp" alt="Synthesis: the five trillion dollar shift from legacy settlement to on-chain finality" loading="lazy"/></p>]]></content:encoded>
      <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-21-two-protocols-one-status-code.html</guid>
      <category>blockchain</category>
      <category>ai</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Coinbase has a quarter of proof</title>
      <link>https://www.steven-geller.com/2026-03-19-coinbase-has-a-quarter-of-proof.html</link>
      <description>Disclaimer: Personal analysis based on public filings and technical documentation. Not financial advice, not affiliated with Coinbase. I could be wrong about all of this.
Two months ago I wrote about Coinbase's infrastructure pivot: the x402 protocol, CDP Wallets, Base sequencer economics. The thesi...</description>
      <content:encoded><![CDATA[<p><strong>Disclaimer:</strong> Personal analysis based on public filings and technical documentation. Not financial advice, not affiliated with Coinbase. I could be wrong about all of this.</p>
<p>Two months ago I wrote about Coinbase's infrastructure pivot: the x402 protocol, CDP Wallets, Base sequencer economics. The thesis was that Coinbase was quietly building payment infrastructure while everyone watched the trading numbers. Now we have a quarter of data. The technical story got more interesting. The competitive landscape got harder.</p>
<p>The subscription and services line hit $2.83 billion for the year, 5.5 times its 2021 cycle peak. Twelve products now generate over $100 million in annualized revenue, up from two in 2019. That breadth matters architecturally: when spot trading volume drops (Q4 consumer spot was down 6% sequentially), derivatives volume hits all-time highs through the Deribit integration. When staking yields compress, USDC transfer volume hits records. The system is starting to self-balance. Starting.</p>
<p><img width="1380" height="1156" src="/static/media/coinbase-utility-flywheel.webp" alt="Coinbase utility flywheel: Retail Engine, Institutional Engine, Developer Engine" loading="lazy"/></p>
<p>But the most consequential developments since January aren't about Coinbase's own execution. They're about who showed up to compete for the stablecoin infrastructure layer.</p>
<h2>The middleware gap is real</h2>
<p><a href="https://www.cnbc.com/2026/03/17/mastercard-acquiring-stablecoin-startup-bvnk-in-crypto-bet.html" rel="noopener noreferrer" target="_blank">Mastercard acquired BVNK</a> on March 17 for up to $1.8 billion. BVNK is the part of the stablecoin stack that most crypto people don't think about: the middleware between on-chain settlement and traditional banking systems. Multi-chain transaction routing, fiat on/off-ramp orchestration, KYC/KYT compliance pipelines, cross-border settlement across 130+ countries. They process $30 billion annually in stablecoin payments and were already <a href="https://bvnk.com/blog/bvnk-powers-stablecoin-payments-for-visa-direct" rel="noopener noreferrer" target="_blank">embedded in Visa Direct's pilot programs</a>.</p>
<p>Coinbase <a href="https://fortune.com/2025/11/11/coinbase-bvnk-2-billion-deal-falls-through-stablecoins/" rel="noopener noreferrer" target="_blank">tried to buy BVNK for $2 billion</a> in October 2025. Exclusivity, due diligence, the whole process. Both sides walked away in November. Four months later, Mastercard locked it down.</p>
<p>Think about this as a stack. Coinbase owns the issuance layer (Circle/USDC partnership), the settlement layer (Base) and the protocol layer (<a href="https://www.x402.org/x402-whitepaper.pdf" rel="noopener noreferrer" target="_blank">x402</a>). What it's missing is the middleware that translates between on-chain settlement and legacy payment rails at enterprise scale. That's the layer BVNK operates at: a business sends a payment through BVNK's API, BVNK routes it across whichever chain has the best fee economics, handles the fiat conversion on the receiving end and manages the compliance paperwork. The middleware layer is unglamorous but load-bearing.</p>
<p><img width="2414" height="1284" src="/static/media/coinbase-middleware-gap-invisible-rails.webp" alt="The invisible rails and the middleware gap: Coinbase crypto silo vs Mastercard/Visa controlling the middleware to TradFi" loading="lazy"/></p>
<p><a href="https://investor.visa.com/news/news-details/2026/Visa-and-Bridge-Expand-Collaboration-with-Plans-to-Bring-Stablecoin-Linked-Cards-to-Over-100-Countries/default.aspx" rel="noopener noreferrer" target="_blank">Visa is building in parallel</a>. Bridge (Stripe's stablecoin platform, acquired for $1.1 billion) is expanding stablecoin-linked Visa cards to 100+ countries. Bridge got conditional OCC approval to custody crypto and issue stablecoins, giving it a regulatory moat. Visa's stablecoin settlement volume <a href="https://www.coindesk.com/business/2025/12/16/visa-brings-circle-s-usdc-settlement-to-u-s-banks-following-usd3-5-billion-stablecoin-pilot" rel="noopener noreferrer" target="_blank">hit $4.5 billion annualized</a> in January, growing 29% in two months.</p>
<p>Coinbase's counter is the <a href="https://www.coinbase.com/developer-platform/products/stablecoin-as-a-service" rel="noopener noreferrer" target="_blank">white-label stablecoin product</a>: banks issue branded stablecoins backed by USDC on Coinbase infrastructure. Clever architecture because it makes USDC the reserve asset layer while Coinbase captures infrastructure margin on every branded token built on top. The question is whether banks adopt it or build their own once the <a href="https://www.congress.gov/bill/119th-congress/senate-bill/394/text" rel="noopener noreferrer" target="_blank">GENIUS Act</a> rulemaking finalizes in July.</p>
<p>The honest assessment: Coinbase has deeper crypto-native infrastructure than Visa or Mastercard. But networks processing $9 trillion annually just started buying their way into stablecoins. They move fast when they decide to.</p>
<h2>x402: beautiful protocol, negligible economics</h2>
<p>I was bullish on x402 in January and I still think the protocol design is right. Quick recap: client sends HTTP request, server returns 402 with payment terms in a structured JSON payload (amount, accepted tokens, recipient address, network, timing constraints), client signs and submits a transaction on-chain, resubmits the original request with payment proof in the <code>X-PAYMENT</code> header, server's facilitator verifies, resource gets served. End-to-end under 2 seconds on Base.</p>
<p><img width="2352" height="1252" src="/static/media/x402-tcp-ip-machine-commerce-flow.webp" alt="x402: the TCP/IP of machine commerce — five-step flow from AI agent request to cryptographic proof of settlement" loading="lazy"/></p>
<p><a href="https://www.x402.org/writing/x402-v2-launch" rel="noopener noreferrer" target="_blank">V2</a> shipped with meaningful architectural upgrades. Wallet-based identity (the agent's wallet address becomes its persistent identity across services), automatic API discovery via <code>.well-known/x402</code> endpoints, dynamic payment recipients, multi-chain support across Base, Polygon and Solana and a modular SDK that plugs into LangChain, OpenAI Agents SDK and Anthropic's tool-use patterns. The protocol expanded from USDC-only to any ERC-20 token. <a href="https://blog.cloudflare.com/x402/" rel="noopener noreferrer" target="_blank">Cloudflare co-founded the x402 Foundation</a> for protocol governance.</p>
<p>The comparison to L402 (Lightning Labs' 2020 protocol) is instructive. L402 uses Lightning payment channels for settlement: low latency, proven scale, but constrained to Bitcoin-denominated payments. You can't price an API call in dollars without exchange rate risk. L402 also requires the server to generate a Lightning invoice per request and the client to manage channel liquidity. That operational overhead breaks down for autonomous agents transacting across hundreds of services. x402's decision to use stablecoins on L2s eliminates the denomination problem. A $0.001 API call costs exactly $0.001 in USDC.</p>
<p>Sam Altman's <a href="https://www.coindesk.com/tech/2026/03/17/sam-altman-s-world-teams-up-with-coinbase-to-prove-there-is-a-real-person-behind-every-ai-transaction" rel="noopener noreferrer" target="_blank">World project integrated x402 on March 17</a> to add cryptographic proof-of-personhood to agent transactions. The technical flow: the agent's wallet presents a World ID proof (generated by iris scan), the x402 facilitator verifies it on-chain, the resource server can differentiate between human-backed and autonomous agent requests. This addresses a real problem: how do you prevent Sybil attacks on pay-per-use APIs? If an agent can prove it's operating on behalf of a verified human, service providers can offer differentiated pricing and trust levels.</p>
<p>But a <a href="https://www.coindesk.com/markets/2026/03/11/coinbase-backed-ai-payments-protocol-wants-to-fix-micropayment-but-demand-is-just-not-there-yet" rel="noopener noreferrer" target="_blank">CoinDesk investigation</a> found that roughly half the observed x402 transactions are gamified: developer testing, airdrop farming, bot activity. Daily dollar volume is about $28,000 across 131,000 transactions. Average payment: twenty cents. The 100 million cumulative transaction count looks impressive until you do the division.</p>
<p><img width="1790" height="1284" src="/static/media/x402-protocol-vs-reality-disconnect.webp" alt="x402 protocol vs reality: 100M+ cumulative transactions funnelling down to $28K per day economic throughput" loading="lazy"/></p>
<p>The protocol is technically sound and well-integrated with major cloud infrastructure (Stripe, Google Cloud, Cloudflare). But every internet protocol starts with negligible traffic. HTTP itself carried zero commercial volume for years after RFC 2616. This is an 18-24 month bet on whether AI agent commerce materializes at scale, not a current revenue driver.</p>
<h2>Agentic Wallets solve the right security problem</h2>
<p>Coinbase launched <a href="https://www.coinbase.com/developer-platform/discover/launches/agentic-wallets" rel="noopener noreferrer" target="_blank">Agentic Wallets</a> in February and the security architecture is worth understanding because it gets the threat model right.</p>
<p>Private keys use Coinbase's MPC infrastructure where keys split into shares distributed across multiple secure environments. Full keys never reconstruct, not at rest, not during signing. The Threshold Signing Service (built on primitives from the 2021 Unbound Security acquisition) generates valid transaction signatures from key shares without assembling the complete private key. For secp256k1 (Ethereum, Base): multi-party ECDSA. For Ed25519 (Solana): threshold signature scheme.</p>
<p>The critical design decision: key material lives in hardware-backed secure enclaves. The agent's LLM prompt, context window and tool outputs never touch key material. A prompt injection attack against the AI agent cannot extract private keys because the keys physically cannot leave the enclave. The signing request goes in, the signed transaction comes out. The attack surface reduces to the policy layer (spending limits, allowlists), not the cryptographic layer.</p>
<p><img width="1864" height="1328" src="/static/media/coinbase-institutional-moat-custody-capital-efficiency.webp" alt="The institutional moat: custody and capital efficiency via Deribit cross-margin integration" loading="lazy"/></p>
<p>Programmable guardrails enforce session caps, per-transaction limits, token allowlists, recipient allowlists and KYT screening at the infrastructure layer before transactions hit the blockchain. The agent cannot override them through prompt manipulation.</p>
<p><a href="https://docs.cdp.coinbase.com/agent-kit/welcome" rel="noopener noreferrer" target="_blank">AgentKit</a>, the open-source SDK, abstracts blockchain interactions into tool definitions that LLMs invoke naturally. "Send 5 USDC to 0x..." becomes a tool call, not a raw transaction construction exercise. Framework-agnostic (LangChain, OpenAI Agents SDK, Anthropic tool-use, CrewAI) and wallet-agnostic (Agentic Wallets, self-custodied wallets, third-party MPC providers).</p>
<p>This is the right architecture. Whether agents actually need to hold and spend money at scale in 2026 is still an open question, but the security model is production-grade.</p>
<h2>Base won the L2 war. The sequencer question remains.</h2>
<p>Base now commands <a href="https://nulltx.com/base-network-soars-despite-market-challenges-leading-l2-with-1-million-active-addresses-and-6-3b-tvl/" rel="noopener noreferrer" target="_blank">70% of all L2 active addresses</a>, 46.6% of L2 DeFi TVL and 62% of all L2 fee revenue. The network hit <a href="https://blog.base.org/base-has-reached-stage-1-decentralization" rel="noopener noreferrer" target="_blank">Stage 1 decentralization</a> under the L2BEAT framework: permissionless fault proofs (any user can challenge invalid state transitions via the OP Stack's Fault Proof VM), a 10-member security council requiring 75% consensus for contract upgrades.</p>
<p>The multi-client architecture (op-geth, op-erigon, op-reth running independently) provides genuine fault tolerance: if a bug in one client produces incorrect state transitions, the others catch it. EIP-4844 blob transactions and the subsequent Pectra upgrade (doubling target blob count from 3 to 6) drove the marginal cost of processing an additional Base transaction to essentially zero at current utilization.</p>
<p><img width="1434" height="974" src="/static/media/base-decentralization-architecture-sequencer.webp" alt="Base decentralization architecture: parallel execution clients feeding a centralized sequencer to Ethereum L1 blobs" loading="lazy"/></p>
<p>The elephant is still the sequencer. Coinbase operates the sole sequencer for Base, which means unilateral transaction ordering power, theoretical MEV extraction capability (even if they don't exercise it) and censorship ability. The move to a "Unified Stack" while remaining an "OP Enterprise customer" could mean Coinbase wants more control over its sequencer roadmap. That might accelerate decentralization. It might entrench their position. The OP Superchain roadmap includes shared sequencer architecture. Espresso Network is building a decentralized sequencer layer, but no timeline is concrete.</p>
<p>I flagged this in January and it hasn't changed. As long as Coinbase controls transaction ordering on the dominant L2, they have pricing power and capture value. They also have regulatory exposure. If regulators decide a centralized sequencer makes Base look like a securities exchange, that's a problem the fault proof system can't fix.</p>
<h2>Where I'm probably wrong</h2>
<p>I might be overweighting the BVNK loss. Coinbase walked away from the deal too, which suggests they saw something in due diligence they didn't like or decided the middleware could be built cheaper than bought. Coinbase Business launched in GA in Q4 with payment APIs and stablecoin checkout. If it reaches meaningful volume by late 2026, the BVNK miss becomes a footnote.</p>
<p>I might be too bearish on x402 timelines. If one major AI lab adopts x402 as a default billing protocol for agent API calls, the volume curve goes vertical. The integrations are in place: Stripe, Cloudflare, Google Cloud, World, every major LLM framework via AgentKit. The protocol could become path-dependent (too embedded in the developer ecosystem to displace) before it generates meaningful revenue. That's happened before with infrastructure standards.</p>
<p>And I might be underestimating the compounding effects of Base's dominance. 70% of L2 active addresses is a flywheel: more users attract more developers, more developers build more apps, more apps attract more users. If Base maintains that share through the current crypto downturn, the network effects become very difficult to displace regardless of sequencer centralization concerns.</p>
<p>The biggest risk nobody's talking about is the inverse: Coinbase grew headcount 31% in a year while the crypto market shed $540 billion in value in Q1 2026. They have the balance sheet to sustain it ($11.3 billion in cash). But infrastructure teams building payment rails, compliance systems and multi-chain settlement have different reliability expectations than exchange teams optimizing for bursty trading volume. Coinbase's exchange has gone down during every major volatility event since 2017. Payment infrastructure customers won't tolerate that. Whether the org has made that cultural shift is something no earnings call can tell you.</p>
<h2>What I'm watching</h2>
<p>Whether x402 daily volume moves meaningfully after the World/AgentKit integration. If it doesn't budge within 60 days, the demand thesis needs reassessment. If it shows real organic growth (non-gamified, agent-to-API utility payments), this becomes the most important protocol in Coinbase's stack.</p>
<p>Whether Visa keeps routing through BVNK now that Mastercard owns it, or accelerates a build/buy alternative. That dynamic will reshape who controls the stablecoin middleware layer.</p>
<p>How <a href="https://www.jonesday.com/en/insights/2026/03/the-genius-act-in-action-the-occ-proposes-stablecoin-regulations" rel="noopener noreferrer" target="_blank">OCC stablecoin rulemaking</a> comments (due May 1) signal bank appetite for white-label stablecoin issuance. If banks want to issue their own stablecoins on Coinbase infrastructure, the platform thesis gets real. If they build in-house, Coinbase loses the middleware play twice.</p>
<p>And the sequencer. Always the sequencer. Coinbase's technical roadmap for Base decentralization will tell you more about their long-term infrastructure ambitions than any revenue number.</p>]]></content:encoded>
      <pubDate>Thu, 19 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-19-coinbase-has-a-quarter-of-proof.html</guid>
      <category>blockchain</category>
      <category>ai</category>
      <category>growth</category>
    </item>
    <item>
      <title>Situational awareness, 21 months later</title>
      <link>https://www.steven-geller.com/2026-03-18-situational-awareness-21-months-later.html</link>
      <description>TL;DR Leopold Aschenbrenner's Situational Awareness got the direction of AI progress right and the timeline wrong. The crypto parallel is instructive: directionally correct theses still break people who bet on the arrival date. Build for a world where AI capabilities keep compounding but economic in...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> Leopold Aschenbrenner's <em>Situational Awareness</em> got the direction of AI progress right and the timeline wrong. The crypto parallel is instructive: directionally correct theses still break people who bet on the arrival date. Build for a world where AI capabilities keep compounding but economic integration moves at institutional speed.</p>
</blockquote>
<p>Leopold Aschenbrenner published <a href="https://situational-awareness.ai/" rel="noopener noreferrer" target="_blank"><em>Situational Awareness: The Decade Ahead</em></a> in June 2024, arguing that AGI would arrive by 2027, trigger an intelligence explosion and demand a Manhattan Project-scale government response. I've spent thirteen years building through hype cycles: writing production code against Bitcoin's RPC interface in 2012, watching a trillion dollars of speculative value materialize around blockchain, collapse, reconstitute. That pattern recognition is why Aschenbrenner's essay hit different for me. He's not wrong about the trajectory. He's wrong about the physics of how trajectories interact with reality.</p>
<h2>The direction was right</h2>
<p>The honest assessment: Aschenbrenner got more right than wrong. His three-driver framework (compute scaling, algorithmic efficiency, unhobbling) played out almost exactly as described.</p>
<p>Compute buildout exceeded his projections. <a href="https://openai.com/index/announcing-the-stargate-project/" rel="noopener noreferrer" target="_blank">Stargate</a> alone: $500 billion committed as of March 2026, with total global AI infrastructure north of $2 trillion planned or underway. The money showed up two to three years ahead of his most aggressive estimates. Algorithmic efficiency held at roughly 0.5 OOM per year, but through mechanisms he didn't predict: test-time compute, chain-of-thought reasoning, mixture-of-experts. <a href="https://arxiv.org/abs/2412.19437" rel="noopener noreferrer" target="_blank">DeepSeek's V3</a> claimed GPT-4-level performance at one-tenth the training compute of Llama 3.1.</p>
<p>Unhobbling turned out to be the dominant driver. The most dramatic gains between June 2024 and March 2026 came not from bigger models but from post-training improvements: reinforcement learning, tool use, agentic scaffolding. Claude Opus 4.6 sustains autonomous work for over 14 hours. Sixteen copies of it <a href="https://www.anthropic.com/engineering/building-c-compiler" rel="noopener noreferrer" target="_blank">wrote a working C compiler in Rust</a> that compiles the Linux kernel for about $20,000. The chatbot-to-agent transition he described is actively happening.</p>
<h2>Getting the direction right doesn't mean getting the arrival time right</h2>
<p>I learned this in crypto. In 2013, we knew programmable money would reshape financial infrastructure. We were right. We were also eight years early on institutional adoption. The path from "this will be huge" to "this is actually deployed" was nothing like the straight line we imagined.</p>
<p>AGI by 2027 looks increasingly unlikely in the form Aschenbrenner described. His benchmark was a "drop-in remote worker" that joins a company, gets onboarded, works independently for weeks. A 14-hour task horizon is not a system that replaces a mid-level engineer for months. <a href="https://openai.com/index/introducing-gpt-5/" rel="noopener noreferrer" target="_blank">GPT-5</a> scores 74.9% on SWE-bench Verified. Impressive, but not a drop-in replacement for someone who understands organizational context and technical debt. The slope of the capability curve is not the slope of economic substitution. Aschenbrenner consistently conflated the two.</p>
<p><img width="2218" height="1232" src="/static/media/twin-slopes-ai-adoption-capabilities-vs-economic-impact.webp" alt="The twin slopes of AI adoption: model capabilities vs economic impact gated by institutional speed" loading="lazy"/></p>
<p>The intelligence explosion hasn't materialized. Models help build their successors (Anthropic used Claude Code to develop its latest systems) but this is tool-assisted research, not autonomous recursive improvement. "AI makes researchers 2x more productive" is not the same claim as "AI replaces the research loop entirely".</p>
<p>The Project didn't happen either. Instead of a government-led Manhattan Project, we got Stargate: a commercial joint venture funded by SoftBank and Oracle, with the government as photo-op backdrop. SoftBank's financing took months longer than planned. Oracle's debt-to-equity ratio hit 432.5%. This is a leveraged infrastructure bet with geopolitical window dressing.</p>
<p><img width="2316" height="1122" src="/static/media/stargate-manhattan-project-commercial-reality.webp" alt="The commercial reality of the Manhattan Project: Stargate capital expenditure vs integration delays" loading="lazy"/></p>
<h2>DeepSeek broke the geopolitical model</h2>
<p>Aschenbrenner's framework rests on the assumption that compute supremacy translates directly to AI supremacy. DeepSeek invalidated this in January 2025.</p>
<p><a href="https://arxiv.org/abs/2501.12948" rel="noopener noreferrer" target="_blank">DeepSeek-R1</a> matched OpenAI's o1 reasoning performance at a reported training cost of $6 million: roughly two orders of magnitude less than comparable US models. Released under an MIT license, it became the number-one free app on the US App Store. By December 2025, DeepSeek-V3.2-Speciale reportedly approached Gemini 3 Pro in complex reasoning. Aschenbrenner devoted an entire chapter to locking down algorithmic secrets, but the most consequential algorithmic innovation of the past two years came from outside the American labs he wanted to fortify.</p>
<p><img width="2362" height="1158" src="/static/media/us-labs-vs-deepseek-compute-efficiency.webp" alt="US labs $500B compute funnel vs DeepSeek $6M achieving the same state-of-the-art reasoning" loading="lazy"/></p>
<p>The bottleneck is never where you expect it. Throwing hardware at a software problem usually just creates a more expensive version of the same problem.</p>
<p><img width="1558" height="848" src="/static/media/walled-garden-vs-open-asymmetry.webp" alt="The walled garden (US labs) vs the open asymmetry (DeepSeek): compute, cost efficiency, distribution" loading="lazy"/></p>
<h2>The crypto parallel nobody's drawing</h2>
<p>In 2017, crypto had its own Situational Awareness moment. Total market capitalization went from $17 billion to $830 billion in a single year. Smart people wrote serious pieces arguing decentralized finance would restructure the global financial system within five years. They were directionally right. DeFi did emerge. Stablecoins became critical infrastructure. The timeline was off by five to seven years. Most predictions about which architectures would win were wrong.</p>
<p><img width="2348" height="1114" src="/static/media/crypto-ai-adoption-curve-5-7-year-delay.webp" alt="Crypto 2017-2022 pattern vs AI 2024-2028: the 5-7 year delay between directional correctness and arrival" loading="lazy"/></p>
<p>The investment is real and mostly rational, but the pace doesn't match the pace at which value can be captured. <a href="https://www.morganstanley.com/insights/podcasts/thoughts-on-the-market/ai-investing-credit-markets-andrew-sheets" rel="noopener noreferrer" target="_blank">Morgan Stanley estimates</a> the Big Five will spend roughly $3 trillion on AI infrastructure through 2028, with cash flows covering only half. Even Sam Altman <a href="https://www.cnbc.com/2025/08/18/openai-sam-altman-warns-ai-market-is-in-a-bubble.html" rel="noopener noreferrer" target="_blank">acknowledged "an AI bubble"</a>. When the builders start acknowledging the froth, pay attention.</p>
<p>Capabilities keep improving. Economic integration stays slow. Lightning Network was technically functional in 2018 but didn't achieve meaningful adoption for years. AI coding tools work today. But organizational transformation (management restructuring, workflow redesign, liability frameworks) moves at institutional speed, not model-release speed. The contrarian bet is usually on the timeline, not the thesis. Every crypto winter produced people who concluded the thesis was wrong because the timeline was wrong. They sold at the bottom.</p>
<h2>The crypto parallel is imperfect: that matters</h2>
<p>The comparison breaks in a specific way I should be honest about. Crypto was a financial instrument that needed regulatory and institutional adoption to reach product-market fit. AI is a productivity tool with immediate individual utility. The adoption curve for something that makes your existing job easier looks nothing like the curve for something that demands restructured financial relationships. AI tools are already deployed at scale in ways crypto took a decade to achieve. My timeline skepticism could be the kind of pattern-matching that over-indexes on the last war.</p>
<p>There's also a lazier version of this argument that just says "the truth is in the middle". That's not what I'm claiming. Aschenbrenner's core point, that we are building something genuinely transformative with inadequate institutional response, is not a claim I'm moderating. I'm arguing the mechanism looks more like electrification (decades of compounding integration) than nuclear fission (a discrete explosion). Being wrong about the shape of change can be just as costly as being wrong about the direction. If you plan for a sudden discontinuity and instead get a long ramp, your resource allocation will be wrong in ways that compound every quarter.</p>
<h2>Build for the messy, gradual world</h2>
<p>AI coding tools already change the team-size math, but through coordination costs, not headcount elimination. A strong engineer with good tooling produces two to three times the output. Smaller teams can take larger scope. The number of teams you need might not shrink.</p>
<p>The agentic transition is the real inflection. <a href="https://www.anthropic.com/news/model-context-protocol" rel="noopener noreferrer" target="_blank">Model Context Protocol</a>, <a href="https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/" rel="noopener noreferrer" target="_blank">Agent2Agent</a>, the ecosystem of agentic frameworks: this is the plumbing that determines how software gets built next. If you're not building production agentic workflows now, you're racking up intuition debt that compounds.</p>
<p>Aschenbrenner published his essay and then started a hedge fund. By Q4 2025, he'd exited Nvidia and was buying bitcoin mining stocks and power generation companies. His revealed preferences tell you more than his predictions. He bet on infrastructure and energy, not on AGI-by-2027 being precise. The messy, compounding, unevenly distributed future is the one worth building for. Not the one in the essay.</p>
<p><img width="2368" height="1248" src="/static/media/ai-horizon-compounding-integration.webp" alt="The AI horizon: build for compounding integration, not a sudden singularity" loading="lazy"/></p>]]></content:encoded>
      <pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-18-situational-awareness-21-months-later.html</guid>
      <category>ai</category>
      <category>strategy</category>
    </item>
    <item>
      <title>Two operating systems for intelligence</title>
      <link>https://www.steven-geller.com/2026-03-15-two-operating-systems-for-intelligence.html</link>
      <description>TL;DR The "AI race" between the US and China is a misleading frame. They're not running the same race. China is embedding AI into centralized state infrastructure to predict and preempt. The West (at its best) is building decentralized systems that preserve individual agency. Same technologies, oppo...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> The "AI race" between the US and China is a misleading frame. They're not running the same race. China is embedding AI into centralized state infrastructure to predict and preempt. The West (at its best) is building decentralized systems that preserve individual agency. Same technologies, opposite civilizational assumptions. Builders who only understand one operating system are designing for half the world.</p>
</blockquote>
<p>I spend my days building Bitcoin infrastructure at Block. Permissionless payments. Censorship-resistant money. The whole architecture assumes that individuals, not institutions, should control their financial lives. Then I read Jan Krikke's essay on <a href="https://asiatimes.com/2026/02/china-building-a-different-ai-future-than-the-west/" rel="noopener noreferrer" target="_blank">China's "Predictive State"</a> and the contrast hit hard: China is using the same underlying technologies (cryptography, distributed systems, AI) to build the exact opposite.</p>
<p>This isn't a race. It's a fork.</p>
<h2>The destination matters more than the speed</h2>
<p>Krikke's core argument is that the "AI race" framing mischaracterizes what's happening. Silicon Valley asks: can machines rival human cognition? Beijing asks: how do we embed intelligence into national infrastructure? One is frontier exploration. The other is systemic integration.</p>
<p><img width="2260" height="904" src="/static/media/frontier-exploration-vs-systemic-embedding.webp" alt="Frontier exploration vs systemic embedding" loading="lazy"/></p>
<p>Look at the numbers. China invested $125 billion in AI in 2025, with 39% coming from government funding. DeepSeek trained <a href="https://arxiv.org/abs/2501.12948" rel="noopener noreferrer" target="_blank">R1</a>, a reasoning model that matched OpenAI's o1 on math and code tasks, for a reported $6 million. ARK Invest found that nine of the top ten open-weight models globally now originate from China. But the model leaderboard isn't the point. The point is what happens after the model ships.</p>
<p>China's approach inverts the US innovation sequence. Before AI transforms society, you build the substrate: data centers, connectivity, interoperability standards, digital identity platforms. Capital-intensive upfront, low marginal deployment cost afterward. The US channels capital toward foundational models and moonshots, assuming the rest of the economy will adapt. China builds the rails first, then runs the trains.</p>
<p><img width="2192" height="1108" src="/static/media/us-china-ai-deployment-sequence.webp" alt="The US sequence vs the China sequence" loading="lazy"/></p>
<h2>Same tools, opposite philosophy</h2>
<p>The blockchain dimension makes this clearest. China embraces blockchain's technology while rejecting its philosophy. The <a href="https://www.csis.org/blogs/strategic-technologies-blog/chinas-blockchain-playbook-infrastructure-influence-and-new" rel="noopener noreferrer" target="_blank">Blockchain-based Service Network</a> operates across 120 public city nodes, backed by China Mobile and China UnionPay. It offers standardized, low-cost blockchain deployment with no cryptocurrency attached. Permissioned architecture. State-supervised. A $54.5 billion national blockchain roadmap targets full operational infrastructure by 2029.</p>
<p>Compare that to what we build at Block, or what the broader Bitcoin ecosystem represents. Same cryptographic primitives, same distributed ledger concepts. Opposite purpose. China wants the transparency of the ledger pointed at citizens. Bitcoin wants it pointed at institutions. China's digital yuan processed 3.48 billion transactions and $2.38 trillion in cumulative value by late 2025, with 230 million individual users. It's not experimental. It's operating at nation-state scale.</p>
<p>Krikke frames China's governance philosophy as Confucian-Legalist: Confucianism defines the harmony to be preserved, Legalism provides the instruments to preserve it. The Alibaba case is instructive. Beijing encouraged Alibaba to grow, digitize sectors, become infrastructure. Then, when concentrated private power risked distorting the hierarchy, antitrust actions and restructuring mandates followed. The state giveth, the state correcteth.</p>
<p><img width="2088" height="970" src="/static/media/china-ai-stack-cognition-embodiment-plumbing.webp" alt="China AI stack: Cognition, Embodiment, Plumbing" loading="lazy"/></p>
<p>The "Predictive State" is the logical endpoint. Traditional governance is reactive. Krikke's concept "aims to detect deviations before they crystallize into instability". Digital identity platforms, integrated payments, sensor networks render society "computationally legible". The citizen bargain, in Krikke's framing, is "not simply privacy for convenience. It is visibility for inclusion".</p>
<p><img width="2210" height="1084" src="/static/media/confucianism-legalism-predictive-state.webp" alt="Confucianism and Legalism as foundation of the Predictive State" loading="lazy"/></p>
<h2>The hardware gap is real and accelerating</h2>
<p>The conceptual divergence is interesting. The manufacturing gap is the part that should worry you.</p>
<p>In 2025, Chinese companies captured 80-90% of global humanoid robot shipments. Unitree Robotics shipped approximately 5,500 units. US companies (Figure AI, Agility Robotics, Tesla) shipped around 150 each. That's a 36x gap. XPENG plans initial capacity of 50,000 units per year. LinLingyi iTech is planning factories for 500,000 annual capacity.</p>
<p><img width="2336" height="1126" src="/static/media/us-china-humanoid-robot-shipments-2025.webp" alt="US vs China humanoid robot shipments 2025" loading="lazy"/></p>
<p>This is the EV playbook repeating. China's robotics advantage is built on its EV supply chain: sensors, batteries, electric actuators are exactly the components humanoid robots need. Shenzhen can design, prototype, manufacture a new component in roughly a third the time of a Silicon Valley firm. Government support is direct: the 15th Five-Year Plan elevated robotics to one of eight strategic emerging industries, with dedicated billion-dollar funds from Shenzhen and Beijing. A separate $8.2 billion National AI Industry Investment Fund launched in January 2026.</p>
<p>Musk acknowledged it plainly: "China is very good at AI, very good at manufacturing, and will definitely be the toughest competition for Tesla".</p>
<p><img width="1936" height="996" src="/static/media/china-humanoid-manufacturing-flywheel.webp" alt="China humanoid manufacturing flywheel" loading="lazy"/></p>
<p>The coordination advantage is structural. When your state, your supply chain, your capital markets all share a single optimization function, you move fast. The question is whether you move toward the right destination. Leopold Aschenbrenner made <a href="https://situational-awareness.ai/" rel="noopener noreferrer" target="_blank">the case</a> that AI development is becoming a national security race with existential stakes. That frame is useful for understanding urgency, but it can obscure the deeper divergence: the race metaphor assumes a shared finish line.</p>
<h2>What decentralization actually has to offer</h2>
<p>Centralized systems optimize brilliantly within known parameters. Krikke concedes this: predictive systems "excel within the boundaries of the known", but "history includes rupture as well as continuity. Financial crises evade models".</p>
<p>This is where the decentralized operating system earns its keep. Bitcoin didn't emerge from a government roadmap. Neither did the open-source AI movement that DeepSeek itself benefited from (R1 shipped under MIT License). Permissionless systems are messy, slower to deploy, harder to coordinate. But they surface information that centralized systems suppress.</p>
<p>When expertise gets encoded in state-managed software, Krikke admits, "tacit knowledge erodes". In a decentralized system, tacit knowledge is the competitive advantage. The builder who understands why a protocol works a certain way, not just that it does, creates value that no amount of centralized deployment can replicate. There's a reason China has 140 humanoid robot manufacturers but the foundational AI research that made them possible (transformers, reinforcement learning from human feedback, diffusion models) originated in Western labs operating with minimal state direction.</p>
<p><img width="1998" height="882" src="/static/media/ai-labor-direct-replacement-vs-exception-management.webp" alt="Direct replacement vs exception management" loading="lazy"/></p>
<p>Innovation that nobody planned for is the one thing centralized systems structurally cannot produce.</p>
<p>Jeffrey Ding's <a href="https://press.princeton.edu/books/paperback/9780691260341/technology-and-the-rise-of-great-powers" rel="noopener noreferrer" target="_blank">research</a> argues that a nation's ability to diffuse AI across its economy may matter more for long-term power than frontier model capability alone. By that measure, China's infrastructure-first approach is a serious strategy, not just a consolation prize for trailing on benchmarks.</p>
<h2>Where this argument breaks down</h2>
<p>The biggest gap in the decentralization thesis: it assumes that individual agency scales. In practice, most people don't want sovereignty over their financial infrastructure. They want it to work. China's 230 million digital yuan users didn't sign up for a philosophy. They signed up for convenience. The "visibility for inclusion" bargain is a real bargain for hundreds of millions of people who were previously unbanked or underserved by legacy financial systems.</p>
<p>There's also a speed problem. Krikke quotes the observation that "what might take a decade to test in the US could happen in two to three years in China". Fewer privacy constraints, massive data pools, integrated state-industry coordination. If decentralized systems can't ship at a pace that matters, the centralized alternative wins by default. Not because it's better. Because it's there.</p>
<p>And the "two operating systems" frame itself is too clean. China's most consequential AI company, DeepSeek, open-sourced its models under a permissive Western license. Chinese developers contribute to Western open-source projects. Western companies manufacture in Shenzhen. The actual picture is messier than any binary allows. Real builders operate across both systems simultaneously.</p>
<p>Finally, romanticizing decentralization ignores its failure modes. Crypto's worst moments (exchange collapses, rug pulls, unregulated leverage) are what happens when you remove the Legalist correction that Krikke describes. The question isn't whether guardrails are needed. It's who holds them and what they optimize for.</p>
<h2>The mirror reflects the builder</h2>
<p>Krikke ends his essay with a metaphor: "AI serves as a mirror, reflecting how civilizations define progress". He's right, but the mirror isn't only civilizational. It's personal.</p>
<p>Every system you build encodes an assumption about what intelligence is for. Control or agency, prediction or exploration. Legibility to the state or sovereignty of the individual. You don't get to avoid the choice by pretending it's just engineering.</p>
<p>The builders who will matter most in the next decade are the ones who understand both operating systems well enough to make that choice deliberately.</p>]]></content:encoded>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-15-two-operating-systems-for-intelligence.html</guid>
      <category>ai</category>
      <category>blockchain</category>
      <category>leadership</category>
      <category>growth</category>
    </item>
    <item>
      <title>Freedom is found in subtraction, not accumulation</title>
      <link>https://www.steven-geller.com/2026-03-13-freedom-is-found-in-subtraction-not-accumulation.html</link>
      <description>TL;DR The default in tech leadership is addition: more features, more tools, more process, more people. But the teams that move fastest got there by removing things. Freedom to execute isn't having every option available. It's having removed enough that the remaining ones are obvious. Subtraction is...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> The default in tech leadership is addition: more features, more tools, more process, more people. But the teams that move fastest got there by removing things. Freedom to execute isn't having every option available. It's having removed enough that the remaining ones are obvious. Subtraction is the most underleveraged leadership skill in engineering.</p>
</blockquote>
<p>Every new CTO inherits a pile. Legacy services nobody touches. Dashboards nobody reads. Workflows that exist because someone important requested them three years ago. The instinct is to add on top: new observability, new CI checks, new architecture layered over the old one. Addition feels productive. It generates PRs, Slack announcements, roadmap line items. It looks like leadership.</p>
<p>Subtraction looks like nothing happened. That's the problem.</p>
<h2>The addition bias is structural, not personal</h2>
<p>Organizations reward visible work. A new feature ships: there's a launch email, metrics, a demo. Removing a feature generates a support ticket, maybe a churned customer, definitely an argument. The incentive gradient points one direction. So everything accumulates.</p>
<p>This isn't laziness. It's a rational response to how most companies measure contribution. Product managers get promoted for launching things. Nobody gets promoted for killing a feature that was confusing 40% of users but generating $200K in ARR. The removal was worth more than the revenue. But the person who championed it has nothing to put on their performance review.</p>
<p>The same pattern runs through engineering. Adding a linter rule is a five-minute PR. Removing one requires proving a negative: that the rule wasn't preventing bugs. Adding a microservice is a design doc and a sprint. Collapsing two services into one is a migration plan, a rollback strategy, a month of careful work. The second project is almost always more valuable. It is also harder to justify. Harder to get staffed.</p>
<h2>Fewer features, faster product</h2>
<p>Basecamp is the canonical example. 37signals has been removing features from Basecamp for twenty years. They killed time tracking, Gantt charts, resource allocation. Competitors kept adding them. Basecamp is still profitable with a team under 100. The competitors who added everything either sold, folded, or became enterprise bloatware that requires a consultant to configure.</p>
<p>The mechanism isn't mysterious. Every feature you ship creates a maintenance surface: tests, documentation, edge-case handling, customer support scripts, onboarding flows. A product with 50 features doesn't cost 50 units of maintenance. It costs 50 times the interaction effects between those features. The complexity is combinatorial.</p>
<p>Stripe understood this early. Their API surface stayed deliberately small for years while competitors rushed to cover every payment method and workflow. Stripe's constraint forced clarity: if you can only expose ten endpoints, they'd better be the right ten. That discipline created an integration experience so clean it became a moat.</p>
<p>The lesson isn't "build less". It's that every addition has a compounding cost paid in the future. Most teams never account for it at decision time.</p>
<h2>Process subtracts freedom by pretending to add safety</h2>
<p>Process accumulation follows the same curve. A production incident happens. The postmortem recommends a new approval step. Nobody objects because opposing safety is a losing argument. Eighteen months later, deploying a config change requires four approvals across three time zones. The original incident that triggered the process was a one-time human error that would have been caught by a unit test.</p>
<p>The fix isn't fewer postmortems. It's treating process like code: if it hasn't been exercised in 90 days, it's probably dead. Delete it. If an approval step has never actually blocked a bad deploy, it's not providing safety. It's providing the feeling of safety while taxing every deploy with latency.</p>
<p>Google's SRE team got this right with error budgets. Instead of accumulating safety process, they set an acceptable failure rate. As long as you're within budget, you move fast. When you burn through it, you slow down. The constraint is explicit and measurable. It replaces seventeen implicit rules with one clear one.</p>
<p>One clear rule beats a dozen half-followed ones every time. The dozen rules create an environment where nobody's sure which ones actually matter, so compliance becomes performative. That's the opposite of safety.</p>
<h2>Subtraction as a leadership signal</h2>
<p>The hardest part of subtraction is that it requires conviction. Adding something is low-risk: if it doesn't work, it just sits there. Removing something means you're betting that you understand the system well enough to know what's load-bearing and what's dead weight. That's a public bet. If you're wrong, the failure is visible and attributable.</p>
<p>This is why subtraction is a leadership signal. It tells the team that someone has done the work to understand what matters and is willing to make a call. The leader who says "we're cutting this feature" or "we're removing this process" is demonstrating judgment in a way that "we're adding this" never does. Anyone can add. Subtraction requires a point of view.</p>
<p>Jeff Bezos got at this with his two-pizza teams, but the deeper principle in Amazon's operating model was the single-threaded leader: one person, one problem, no shared dependencies. The structure itself was subtractive. Remove the coordination. Remove the joint planning. What's left is a team that can move without permission.</p>
<h2>Where subtraction becomes its own trap</h2>
<p>The obvious failure mode is removing something load-bearing. Chesterton's fence exists for a reason: if you don't understand why a thing is there, removing it is just ignorance with confidence. The fix is simple in theory (understand before you cut) and hard in practice because understanding legacy systems takes time that feels unproductive.</p>
<p>There's also a cultural risk. Teams that over-index on subtraction can develop a reflexive hostility toward new ideas. "We don't add things" becomes an identity rather than a discipline. The goal isn't minimalism as an aesthetic. It's keeping your freedom to act. Sometimes acting means adding something. The test is whether the addition increases or decreases your future optionality.</p>
<p>Subtraction also requires ongoing maintenance. Entropy runs in one direction. Things accumulate naturally: features, process, technical debt, meetings. Subtraction is an active practice, not a one-time cleanup. The leader who does a big "simplification initiative" once a year and lets things pile up between cycles hasn't internalized the principle. They've just added another process.</p>
<h2>What to do with this</h2>
<p>Audit your product surface quarterly. For each feature, ask: if we hadn't built this, would we build it today? If the answer is no, start the deprecation conversation. You won't remove all of them. But the conversation itself forces the team to articulate what's actually core.</p>
<p>Apply the same audit to process. List every approval, every required meeting, every gate in your deployment pipeline. For each one, find the last time it actually caught a problem. If you can't find one, run a 30-day experiment without it.</p>
<p>When you're about to add something, state the removal it replaces. New monitoring tool? Which old one dies? New weekly meeting? Which existing sync does it replace? If the answer is "nothing, this is additive", that's useful information. It might still be worth doing. But you should feel the weight of it.</p>]]></content:encoded>
      <pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-13-freedom-is-found-in-subtraction-not-accumulation.html</guid>
      <category>leadership</category>
      <category>engineering</category>
    </item>
    <item>
      <title>The six walls of Claude Code (and why most people hit wall three)</title>
      <link>https://www.steven-geller.com/2026-03-12-the-six-walls-of-claude-code-and-why-most-people-hit-wall.html</link>
      <description>TL;DR There's a progression model for AI coding tools that maps cleanly to six levels. Most people plateau at level three (context management) because that's where prompting skill stops mattering and engineering judgment starts. The real ceiling isn't features or plugins. It's knowing what to leave ...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> There's a progression model for AI coding tools that maps cleanly to six levels. Most people plateau at level three (context management) because that's where prompting skill stops mattering and engineering judgment starts. The real ceiling isn't features or plugins. It's knowing what to leave out.</p>
</blockquote>
<p>After a few hundred hours inside Claude Code, a progression pattern has become clear. There are roughly six levels people move through: prompt engineer, planner, context engineer, tool integrator, skill automator, orchestrator. Most people feel the walls between these levels but can't name them, which makes the walls harder to get past.</p>
<p>The progression isn't really about learning features. It's about shifting from commanding a tool to managing a collaboration. That shift matters more than any single technique.</p>
<h2>Regression to the mean is the default</h2>
<p>Level one is where most people live. You open Claude Code, type "build me a landing page" and get something that looks like every other AI-generated website: purple gradient, geometric icons, the same sans-serif font. That's not a Claude Code problem. It's a statistical one.</p>
<p>Language models just produce the average of their training data. If your prompt doesn't constrain what comes back, you get the mean. The average is what people call "AI slop". The fix sounds simple (write better prompts) but the actual unlock is subtler: stop telling Claude Code what to build and start asking it to plan with you.</p>
<p>Plan mode forces a back-and-forth. Claude asks questions about goals, constraints, tradeoffs. This is level two, where the relationship shifts from one-directional to collaborative. Ask "what am I not thinking about?" or "what would an expert in database design be worrying about here?" These aren't sophisticated prompts. They're the questions a good tech lead asks in a design review. Claude Code is remarkably good at answering them, especially on Opus 4.6. But it won't volunteer them unless you ask.</p>
<h2>The real wall is context, not capability</h2>
<p>Levels three and four are where most people actually get stuck. The problem shifts from "how do I talk to this thing" to "how do I manage what it knows".</p>
<p>Claude Code has a 200,000-token context window (with an optional 1M extended context). Context rot is just the output quality dropping as the window fills up. It kicks in around 50-60% capacity. That number doesn't change if the window gets bigger. A million-token window still rots at roughly the same threshold. So the real discipline is just watching your context usage. Clear the window before you hit the dead zone.</p>
<p>This sounds trivial. It isn't. Most people code until they hit auto-compact and then wonder why half their session produced garbage. A persistent status bar showing context usage (model, folder, percentage) changes your behavior. You start noticing patterns: which kinds of interactions burn tokens fast, when to <code>/clear</code> and restart with a focused prompt, when a summary is worth carrying forward versus letting Claude rediscover context from the codebase.</p>
<p>There's a recent study suggesting that context files like claude.md and agents.md actually reduce task success rates compared to providing no context at all, while increasing inference cost by over 20%. That tracks with what I've seen. The instinct is to front-load Claude with every convention and coding standard you can think of. But more context isn't better context. Knowing what to leave out is the actual skill. A few good examples beat a wall of instructions.</p>
<h2>The kid in the candy store problem</h2>
<p>Level four is where you discover MCP servers, frameworks like GSD, CLI plugins. Every shiny add-on the ecosystem produces. The trap is obvious: capability doesn't equal performance. Installing every available integration is just the AI coding version of importing fifteen npm packages to avoid writing a for loop.</p>
<p>The native implementations inside Claude Code are getting better fast. Nine times out of ten, the built-in version just works better than a third-party layer. The right question isn't "what can I add?" but "what does this specific project actually need?" And answering that means understanding the building blocks: what a frontend is, how authentication works, what a database does, how deployment connects things together. You don't need to write any of that code. But you need the mental model.</p>
<p>This is the level where vibe coding hits its ceiling. Opus 4.6 is good enough that you can hit enter through every decision and still ship something functional. But when complexity increases, the people who understand what Claude is doing (and why) will outperform the ones who just approve every suggestion. In practice: when Claude makes a decision you don't understand, just ask it to explain. Use it as a tutor. That's not slowing you down. That's building judgment that pays off in every future session.</p>
<h2>Skills and orchestration: where the returns start compounding</h2>
<p>Level five is workflow automation through Claude Code's skills system. Skills are just text prompts that tell Claude to do a specific thing in a specific way. The skill creator skill (recently updated by Anthropic) lets you write your own, run evals, actually benchmark whether your workflows improve output. The key thing: keep skills project-scoped, not global. Five focused skills outperform fifty generic ones because Claude is just more likely to pick the right one when there are fewer to choose from.</p>
<p>Level six is multi-instance orchestration. Multiple terminals, git worktrees, sub-agents, the experimental agent teams feature. The worktree model is elegant: each Claude Code instance gets its own copy of the repo, works independently, merges at the end. Agent teams add inter-agent communication plus a supervisor agent that coordinates the group.</p>
<p>The coordination tax applies here too. Diminishing returns kick in fast. Two or three parallel instances genuinely help. Eight terminals open at once is a performance for Twitter, not a productivity strategy. The overhead of context-switching between agents is real even within a single project. Agent teams help by handling some of that coordination for you, but they burn a lot more tokens to do it.</p>
<h2>Where this framework falls short</h2>
<p>The six-level model is clean, but it implies a linear progression that doesn't match how people actually work. You bounce between levels depending on the task. A greenfield prototype might need level-two planning and level-six orchestration but zero level-four tooling. A bug fix in a mature codebase might just need level-three context management and nothing else.</p>
<p>The model also overweights tool mastery and underweights domain knowledge. Someone who deeply understands their problem at level two will consistently outperform someone at level six who doesn't really understand what they're building. Tool skill is just a multiplier. Multiplying zero is still zero.</p>
<p>And the whole progression is a moving target. Features that needed third-party tools six months ago are just native now. Skills that felt advanced become defaults. The half-life of any specific technique is short. What lasts is the meta-skill: figuring out whether a practice actually improves your output. Then dropping it when it doesn't.</p>
<h2>Three things worth doing tomorrow</h2>
<p>Instrument your context window. Add a status bar, check it habitually, clear proactively. This single practice probably puts you ahead of most Claude Code users.</p>
<p>Ask Claude "why" and "what am I missing" at least once per planning session. Not because it's a magic prompt, but because it forces the collaboration that prevents regression to the mean.</p>
<p>Audit your installed tools, MCPs, skills. If you can't articulate why each one is there and when it triggers, remove it. The best Claude Code setup is the one with the fewest moving parts that still covers your actual workflow.</p>]]></content:encoded>
      <pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-12-the-six-walls-of-claude-code-and-why-most-people-hit-wall.html</guid>
      <category>ai</category>
      <category>engineering</category>
    </item>
    <item>
      <title>The coordination tax: why AI changed the team size math</title>
      <link>https://www.steven-geller.com/2026-03-08-the-coordination-tax-why-ai-changed-the-team-size-math.html</link>
      <description>TL;DR AI made individuals 5-10x more productive. It did not reduce the coordination cost between them. That mismatch means every person you add above ~5 on a team now costs millions in lost output. Most orgs are still staffed for 2019. The ones that restructure around small teams, correctness over v...</description>
      <content:encoded><![CDATA[<blockquote>
<p><strong>TL;DR</strong> AI made individuals 5-10x more productive. It did not reduce the coordination cost between them. That mismatch means every person you add above ~5 on a team now costs millions in lost output. Most orgs are still staffed for 2019. The ones that restructure around small teams, correctness over volume, expanded ambition will compound faster than competitors realize what happened.</p>
</blockquote>
<p>I recently started a new CTO role and did what I always do first: audit where my time goes. Meetings. The standard take is that we have a "meetings problem" with a tooling solution: AI notetakers and calendar audits.</p>
<p>I think that diagnosis is wrong. We don't have a meetings problem. We have a team size problem that manifests as meetings. Every AI productivity tool we adopt without fixing the underlying structure just makes the tax bill bigger.</p>
<h2>The formula everyone knows and nobody applies</h2>
<p>Communication channels scale as n(n-1)/2. Five people, 10 links. Ten people, 45. Twenty people, 190. Brooks wrote about this in 1975. Almost nobody uses it to make staffing decisions.</p>
<p>Here's what changed. The value flowing through each of those links went up by an order of magnitude. Cursor hit a billion-dollar run rate with around 300 employees. Revenue per employee is a noisy metric, but even after discounting, the productivity gap between AI-fluent teams and everyone else is real, it's widening, it changes the math on coordination cost.</p>
<p>When your five-person team generates $300K per head, adding a sixth carries a tolerable coordination tax. Maybe $50K in drag. When that team generates $2M per head, a sixth member who introduces even modest friction isn't costing you fifty grand. They're costing you millions.</p>
<p>Tobi Lütke at Shopify called it a "10x loss of productivity" for each addition beyond optimal.</p>
<h2>Three fields walked into the same answer</h2>
<p>Robin Dunbar's primate neocortex research (1992) found that human social groups cluster at specific sizes, with about 5 for the tight inner circle. The military figured this out independently. A US infantry fire team is four soldiers, team leader included. The layers above (squads, platoons, companies) track Dunbar's hierarchy almost perfectly.</p>
<p>Fred Brooks got there from software engineering. His law applies to late projects specifically, but the mechanism generalizes: coordination overhead grows faster than added capacity. AI made it worse because it amplified the output being taxed.</p>
<p>Four independent paths (evolutionary psych, military doctrine, software engineering, corporate operations) to the same conclusion: humans sustain deep coordination with about five people. AI didn't change that number. It changed what you lose when you get it wrong.</p>
<h2>Volume is free. Correctness is everything.</h2>
<p>Everyone's measuring throughput. More PRs merged, more content shipped, more Jira tickets closed. Volume is not the scarce resource anymore. AI made volume cheap. Optimizing for cheap things is a strategic error.</p>
<p>A 2025 Harvard Business School field experiment ("The Cybernetic Teammate") studied 776 professionals at Procter &amp; Gamble on actual innovation challenges. AI-augmented teams were about three times more likely to produce ideas in the top 10% of quality.</p>
<p>That's the mechanism. Five good generalists using AI can cover more surface area than ten specialists in narrow lanes. But the mutual verification layer only works when everyone shares enough context to catch each other's mistakes. In a five-person team, you can hold the full model in your head. At twenty, you can't. So you hold meetings to synchronize, which generates more output to verify, which generates more meetings.</p>
<p>Wes McKinney, the pandas creator, nailed this in "The Mythical Agent-Month". He describes a "brownfield barrier": agent-generated codebases hit around 100K lines then the agents start choking on the bloat they themselves created. Design taste, product scoping, holding the conceptual model in your head are now the binding constraints. Judgment. McKinney moved to Go for new projects because its fast test cycles work better for agent iteration.</p>
<h2>Two modes: exploring and building</h2>
<p>Scouts are 1-3 people doing exploration. Is this viable? Is the market real? Can we prototype it? Near-zero coordination overhead. Speed is everything. The constraint is individual judgment, full stop.</p>
<p>Peter Steinberger's OpenClaw is the poster child. One developer directing a swarm of AI coding agents at the architectural level. Incredible velocity. Also shipped with significant security holes that Cisco's researchers documented, because solo work doesn't have a verification layer. Steinberger joined OpenAI in February 2026.</p>
<p>Strike teams are 3-7 people executing where correctness matters. Every piece of AI output passes through at least one other human who shares enough context to catch real mistakes. Below five you get blind spots. Above seven you get silos plus meetings about meetings.</p>
<p>Most orgs have neither. They have twelve-person teams that are too slow to explore and too diluted to ship with precision.</p>
<h2>The ambition problem nobody talks about</h2>
<p>The entire conversation around AI and headcount is framed as efficiency. That's the least interesting thing you can do with a force multiplier.</p>
<p>If you have 500 people who are each 5-10x more capable than two years ago, you didn't get a cost reduction. You got the productive capacity of 2,500 to 5,000 people without hiring anyone. The question isn't "how lean can we get?" It's "what was previously impossible that's now on the table?"</p>
<p>Lütke understood this. His April 2025 memo required every Shopify team to prototype with AI before starting a real build. Teams have to prove AI can't do a task before requesting headcount. Every forced prototype generates a data point, so when the next model generation lands, Shopify already has the test harness ready.</p>
<p>The companies that will matter in five years aren't cutting people to protect current margins. They're restructuring into strike teams pointed at missions that were unthinkable when each person produced $300K a year. The constraint stopped being capacity. It's imagination now.</p>
<h2>Where I think this argument is wrong, or at least incomplete</h2>
<p>The biggest hole: small teams disrupt, but large teams develop. Wu, Wang and Evans analyzed 65 million papers, patents, software projects in a 2019 Nature study. Small teams generate novel ideas. Large teams consolidate and integrate. You need both. The strike team isn't your answer for a platform doing millions of transactions daily at five-nines uptime. It might be your answer for the feature teams building on top of it.</p>
<p>Then there's the Spotify problem. Their squad model was the most famous implementation of small autonomous teams. Spotify itself quietly abandoned it. Jeremiah Lee documented what went wrong: squads optimized locally at the expense of the whole, knowledge got trapped, dependencies created deadlocks nobody owned. Making teams smaller doesn't eliminate coordination. It moves the problem up one level.</p>
<p>An NBER study in February 2026 surveying nearly 6,000 executives found over 80% reporting no AI productivity impact yet. Mary Daly at the San Francisco Fed compared it to electrification: factories had electric motors for years before anyone redesigned the floor around them. Executives who cut headcount based on AI-native startup data before their own teams have crossed the fluency threshold will hollow out institutional knowledge for a productivity dividend that never arrives.</p>
<p>And five is not a magic number. A 2021 replication of Dunbar's method got 95% confidence intervals ranging from 2 to 520 people. The directional argument holds. The specific number is a heuristic, not a constant.</p>
<h2>So what do you actually do</h2>
<p>Measure correctness instead of velocity. Count post-launch defects, rework cycles, integration failures. If the defect rate is climbing alongside the output rate, you're shipping faster toward the wrong destination.</p>
<p>Run scout missions to map your talent. Hand someone a problem, full AI tooling, a week, no committee oversight. Watch the process. You're looking for people who define problems without a spec. The ones who run beautiful meetings have coordination skills. Valuable in a big team, overhead in a strike team. Meanwhile your most frustrating employees, the ones who ignore process and build things nobody requested, might be exactly who you need.</p>
<p>Build the ambition pipeline first. What would you build if every five-person team had the capacity of a 50-person department? If you can't answer that, you don't have a productivity problem. You have an imagination problem.</p>
<p>Redeploy, don't fire. The team that automates reconciliation doesn't get cut. Their capacity moves to the product problem you could never staff before. But that only works if the ambition pipeline already exists.</p>
<p>Most orgs will keep running twelve-person teams, burning half their week in meetings, deploying AI notetakers to summarize the waste. A few will restructure. Small teams. Big missions. Correctness over volume. Those are the ones I'm betting on.</p>]]></content:encoded>
      <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-03-08-the-coordination-tax-why-ai-changed-the-team-size-math.html</guid>
      <category>leadership</category>
      <category>ai</category>
      <category>growth</category>
    </item>
    <item>
      <title>Coinbase stopped calling itself an exchange</title>
      <link>https://www.steven-geller.com/2026-01-28-coinbase-stopped-calling-itself-an-exchange.html</link>
      <description>Disclaimer: This is just personal analysis based on public information and technical documentation. Not financial advice, not affiliated with Coinbase. Do your own research - I could be wrong about all of this.
Something shifted when Coinbase released their "System Update" in late 2025. They stopped...</description>
      <content:encoded><![CDATA[<p><strong>Disclaimer:</strong> This is just personal analysis based on public information and technical documentation. Not financial advice, not affiliated with Coinbase. Do your own research - I could be wrong about all of this.</p>
<p>Something shifted when Coinbase released their "System Update" in late 2025. They stopped calling themselves a crypto exchange and started talking about infrastructure. Payment rails. Developer tools. Business accounts.</p>
<p>Maybe that's just rebranding, maybe it's real. But look at the numbers - Robinhood processed $727 billion in Q3 2025, Coinbase did $295 billion. They're losing retail market share to competitors who charge less. Trading volume is cyclical and margins are getting compressed. Not a great long-term business model.</p>
<p>So they're betting on the boring stuff - infrastructure that hums along whether Bitcoin is at $20k or $100k. Smart pivot on paper. The question is whether they can actually execute it.</p>
<h2>The payments story nobody talks about</h2>
<p>Coinbase Business has been growing double-digits month-over-month. That's not speculation revenue, that's companies using USDC to pay contractors overseas because it's actually faster and cheaper than SWIFT.</p>
<p>The technical architecture here is interesting. They're using CDP Wallets with ERC-4337 account abstraction - which sounds complicated but basically means businesses don't deal with gas fees or key management. Wallets spin up in under 500ms, signing takes around 200ms. That's fast enough to feel like a normal payment API to developers who don't care about blockchain internals.</p>
<p>Under the hood, private keys live in AWS Nitro Enclaves. These are isolated TEEs (Trusted Execution Environments) where keys get generated, encrypted, used for signing without ever touching general compute. It's not fully self-custodial in the cypherpunk sense - you're trusting AWS and Coinbase's enclave code - but it's a reasonable security model for businesses that need compliance hooks and policy controls. Most companies would rather trust this than run their own HSMs.</p>
<p>If you're a US software company paying someone in the Philippines, you have two options. Wait 3-5 days and pay 3% in wire fees, or settle in seconds with USDC on Base for under a cent. The economics are obvious.</p>
<p>Once a finance team integrates this into their payroll or accounting workflow, they don't switch back easily. That's recurring revenue, not cyclical trading fees.</p>
<p>The Singapore launch matters because it's the template. Partner with a major bank (Standard Chartered), plug into local payment rails, get regulatory clarity. Then use that hub to serve emerging markets where cross-border payments are actually painful. Expect Latin America and Southeast Asia next, not Europe - SEPA already works fine.</p>
<p>But here's what needs to happen for this to scale: deeper integration with QuickBooks, Xero, existing ERP systems. Crypto payments die if they add friction instead of removing it. Finance teams need this to feel as boring as ACH transfers. The API can be fast, but if reconciliation is manual, nobody will use it.</p>
<h2>Machines paying machines</h2>
<p>The x402 protocol is weird and interesting. It's named after HTTP status code 402, "Payment Required" - a status code that's been sitting dormant in the HTTP spec since the 90s waiting for someone to actually use it.</p>
<p>The protocol flow is simple enough: client requests a resource, server returns 402 with payment instructions in the <code>PAYMENT-REQUIRED</code> header, client constructs a payment payload and sends it back in the <code>PAYMENT-SIGNATURE</code> header, server verifies and settles the payment, then returns the resource. Standard request-response cycle with payment in the middle.</p>
<p>The clever part is the facilitator architecture. Instead of every API server running blockchain infrastructure to verify transactions, they just POST the payment payload to a facilitator's <code>/verify</code> endpoint. The facilitator checks the signature and blockchain state, returns a verification response. Settlement happens via another POST to <code>/settle</code>, which submits the transaction onchain and waits for confirmation.</p>
<p>It's a smart separation of concerns - API developers don't need to know anything about blockchain infrastructure, they just hit REST endpoints.</p>
<p>Coinbase runs a facilitator that handles "fee-free" USDC payments on Base and Solana. That's the centralization point. The business model. The protocol is open source, but the facilitator infrastructure is what scales. You could run your own facilitator if you wanted to, but most developers won't bother. Same pattern as Stripe and payment processing - the protocol is technically open, the infrastructure is practically centralized.</p>
<p>The protocol uses CAIP-2 network identifiers - <code>eip155:8453</code> for Base, for example - so it's multi-chain by design. Though whether anyone actually uses it across chains is another question. Version 2 introduced a plugin architecture with lifecycle hooks before and after settlement verification, so developers can inject custom logic. Rate limiting, credit checks, whatever you need.</p>
<p>Here's the thing nobody talks about though - this only works economically because Base transaction fees are under a cent. The L2 execution fee is tiny. The L1 security fee (posting batch data to Ethereum) is the main cost. Even that's small after EIP-4844 blob optimization kicked in.</p>
<p>And Base still centralizes sequencing. Coinbase runs the sequencer and captures all the priority fees. That's about $156k per day in sequencer revenue. Top slots in each block contribute 30-45% of daily revenue. So when they say "fee-free" payments, what they actually mean is: we're not charging you transaction fees because we already capture the sequencer rent on the backend. It's vertically integrated. Smart business model, but not exactly the decentralized dream.</p>
<p>Humans don't make thousands of $0.001 payments per day, but AI agents do. Or will, if this actually gets adopted. Think about an agent optimizing supply chains - it might hit hundreds of APIs per minute, paying fractions of a cent for each data call. Traditional payment rails can't handle that economically. Visa doesn't process sub-cent transactions, the fixed fees don't make sense at that scale.</p>
<p>Public data shows x402 transaction volume spiked 496% in December, hitting 16.5 million transactions. The protocol's processed over 100M payments since launch in May 2025. Early activity was mostly memecoins and speculation. What matters is whether that shifts to actual utility - agents paying for compute, APIs charging per call, publishers monetizing AI scrapers directly instead of relying on ads.</p>
<p>If Google, AWS, the major AI labs adopt x402 as a standard protocol, then yeah, Coinbase becomes the Stripe for autonomous agents. The protocol itself is open source, but the hosted facilitator infrastructure, the compliance layer, the KYT integration - that's what Coinbase charges for. That's the moat.</p>
<p>Here's the unlock nobody's really talking about - this could solve the data monetization problem for publishers. Right now AI companies scrape the web for free or fight legal battles about fair use. With x402, a website just returns "402 Payment Required" and the AI agent automatically pays $0.0001 to access the article. Publishers get direct revenue. No ads, no subscriptions, just usage-based payment. Clean model on paper.</p>
<p>That's either brilliant or it's solving a problem that won't actually exist. The architecture works fine, but adoption depends on whether AI labs actually want to pay for data or if they'll just keep scraping and dealing with lawsuits. Probably depends on whether courts side with publishers or AI companies. We'll know in 12 months.</p>
<h2>Three things that need to prove out</h2>
<p>First, does x402 volume sustain when the novelty fades? If it's just speculative noise, the thesis breaks. If it's actual agent-to-agent utility payments, it's real. The protocol is technically sound, but protocol quality doesn't predict adoption. Look at IPv6.</p>
<p>Second, does the "Everything Exchange" strategy actually increase retention? Bundling stocks, prediction markets, crypto into one app only works if users attach multiple products. If people just ignore the new features and keep trading Bitcoin occasionally, it's wasted complexity. The technical integration is actually easy - unified accounts, shared KYC, single auth token. But the hard part is product-market fit. Do crypto traders want stocks? Do stock traders want crypto? Maybe, maybe not.</p>
<p>Third, can Coinbase replicate the Singapore banking partnership model across multiple regions, or was that a one-off enabled by unique circumstances? The technical stack is replicable - same APIs, same wallet infrastructure, same settlement logic. But banking partnerships aren't copy-paste. Each jurisdiction has different regulatory requirements, different banking infrastructure, different settlement finality rules. Singapore's MAS framework is unusually clear. Most places aren't nearly as straightforward.</p>
<p>The core bet is this - can Coinbase migrate users from episodic trading to recurring utility? Trading is cyclical, infrastructure is durable. Subscription revenue is worth more than transaction fees on a P/E multiple.</p>
<p>But there's a technical reality here: Coinbase still runs the Base sequencer. That's a single point of failure and a regulatory target. They hit Stage 1 rollup maturity in 2025 with fault proofs, but sequencer decentralization isn't on the roadmap. As long as they control transaction ordering, they control the infrastructure. That's valuable for them, risky for everyone else.</p>
<h2>What I'm watching</h2>
<p>I want to see if Coinbase Business payment workflows are growing faster than new account sign-ups. New accounts are vanity metrics, repeat payout volume is signal. Specifically I want to see API call patterns - if businesses are hitting the payout endpoints daily or weekly, that's operational dependency. If it's monthly or sporadic, it's still discretionary spend.</p>
<p>I want to see x402 facilitator metrics broken down by actual use case. Total transaction count doesn't tell you much - you need to know what's in there. How many are agent-to-agent payments versus human-initiated? What's the distribution of payment values? If it's all $0.0001 micropayments, that's genuinely interesting. If it's mostly $10+ payments, it's just regular transactions with extra steps and overhead.</p>
<p>I want to see wallet creation and signing latency hold up under real load. 500ms wallet creation and 200ms signing are good numbers, but those are probably p50 or median. What do p95 and p99 look like when thousands of agents are hitting the system at the same time? TEE-based signing doesn't scale the same way as software HSMs - there are real constraints there.</p>
<p>I want to see actual evidence that users use multiple products on the platform, not just the one they signed up for. Session data, not marketing claims. Do users who trade also use the payment APIs? Do business accounts ever trade? Cross-product usage is the difference between a platform and a bundle of disconnected products that happen to share a login.</p>
<p>And I want to see whether international expansion happens quickly or stalls on regulatory friction. One successful international launch is interesting, five in 18 months would be meaningful. But the real question is whether they can operate the same technical stack across jurisdictions or if each region needs custom infrastructure. If it's the latter, expansion is going to be slow and expensive.</p>
<h2>The infrastructure thesis</h2>
<p>Stripe bought Bridge for $1.1 billion. PayPal launched its own stablecoin. The rails matter more than the assets riding on them. Infrastructure revenue scales differently than transaction revenue - lower margins typically, but way more predictable and defensible.</p>
<p>Coinbase is making the same bet. If they pull it off, by 2027 their "Subscription and Services" revenue will eclipse "Transaction Revenue". That would be the actual pivot, not just marketing spin.</p>
<p>But execution is really hard here. Infrastructure has different requirements than trading platforms. Uptime expectations are completely different. When a trading platform goes down during volatility, users get angry and tweet about it. When payment infrastructure goes down, businesses lose actual money and break SLAs with their customers. That's a different category of reliability that you have to design for from the ground up.</p>
<p>The technical debt of an exchange and the technical requirements of payment rails don't always align well. Exchanges optimize for peak throughput during volatility - bursty load, spike capacity, eventual consistency is often fine. Payment systems optimize for consistent latency and guaranteed settlement - steady load, predictable performance, strong consistency requirements. That means different database designs, different caching strategies, different monitoring and alerting philosophies.</p>
<p>And there's the sequencer centralization issue. Right now Coinbase captures about $156k per day in Base sequencer fees. That's $57M annually just from priority fees, not counting MEV which probably adds more. As long as they control the sequencer, they have pricing power and capture value. But they also have regulatory exposure. If regulators decide a centralized sequencer makes Base look like a securities exchange, that's a big problem.</p>
<p>The boring stuff has to work flawlessly for this to succeed. 99.9% uptime isn't enough for payment infrastructure - that's 8.76 hours of downtime per year, which is unacceptable. You need 99.99% or better. That means proper redundancy, automated failover, chaos engineering, the whole operational maturity playbook. That's not really Coinbase's reputation right now. Their exchange has had outages during every major volatility event since 2017. Go check the tweets.</p>
<p>Maybe that changes. Building infrastructure teams and operational discipline takes years of investment. Maybe they've been doing it quietly behind the scenes. Maybe they haven't and they're still figuring it out.</p>
<p>We'll know soon enough. The market doesn't care about your pivot announcement or your deck. It cares whether your APIs actually stay up when it matters.</p>]]></content:encoded>
      <pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2026-01-28-coinbase-stopped-calling-itself-an-exchange.html</guid>
      <category>blockchain</category>
      <category>ai</category>
      <category>growth</category>
    </item>
    <item>
      <title>Building a chess app for my son</title>
      <link>https://www.steven-geller.com/2025-05-12-building-a-chess-app-for-my-son.html</link>
      <description>vibe-coded a chess web app for my son to learn, play against ai and challenge me locally; doing the same for go next. will open source and share it for free soon. he loves it so much i caught him playing past bedtime haha.</description>
      <content:encoded><![CDATA[<p>vibe-coded a chess web app for my son to learn, play against ai and challenge me locally; doing the same for go next. will open source and share it for free soon. he loves it so much i caught him playing past bedtime haha.</p>
<p><img loading="lazy" alt="Building a chess app for my son" width="1136" height="967" src="/static/media/1921768174187409544-Gqt9-BhakAA8wgz.webp"/></p>]]></content:encoded>
      <pubDate>Mon, 12 May 2025 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2025-05-12-building-a-chess-app-for-my-son.html</guid>
      <category>ai</category>
      <category>fatherhood</category>
      <category>growth</category>
    </item>
    <item>
      <title>Founder mode vs manager mode</title>
      <link>https://www.steven-geller.com/2024-09-03-founder-mode-vs-manager-mode.html</link>
      <description>Everyone seems to be talking about "founder mode" lately. It may work for Airbnb, but let's not forget the stellar performance of "manager mode" giants like Microsoft, Apple, Amazon &amp;amp; Nvidia.
These tech leaders have thrived with professional management, scaling to unprecedented heights.
"Founder...</description>
      <content:encoded><![CDATA[<p>Everyone seems to be talking about "founder mode" lately. It may work for Airbnb, but let's not forget the stellar performance of "manager mode" giants like Microsoft, Apple, Amazon &amp; Nvidia.</p>
<p>These tech leaders have thrived with professional management, scaling to unprecedented heights.</p>
<p>"Founder mode" works when founders stay deeply involved. "Manager mode" works when you hire exceptional leaders and empower them.</p>
<p>The real question isn't which mode is better. It's knowing which one your company needs right now.</p>
<p><img loading="lazy" alt="Founder mode vs manager mode" width="558" height="540" src="/static/media/1831096091640750315-GWlb-KpagAADHTo.webp"/></p>]]></content:encoded>
      <pubDate>Tue, 03 Sep 2024 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2024-09-03-founder-mode-vs-manager-mode.html</guid>
      <category>leadership</category>
    </item>
    <item>
      <title>Farcaster usage remains niche</title>
      <link>https://www.steven-geller.com/2024-08-13-farcaster-usage-remains-niche.html</link>
      <description>Farcaster and Farcaster Frames showed some promise but usage remains niche. Peak engagement in April-May '24 which has sharply declined by July. DAU follows similar trend. Cast/reaction/link volume reveals intense but fleeting interest. Spike in May - now hovering. Active…</description>
      <content:encoded><![CDATA[<p>Farcaster and Farcaster Frames showed some promise but usage remains niche. Peak engagement in April-May '24 which has sharply declined by July. DAU follows similar trend. Cast/reaction/link volume reveals intense but fleeting interest. Spike in May - now hovering. Active…</p>
<p><img loading="lazy" alt="Farcaster usage remains niche" width="631" height="414" src="/static/media/1823463897510371432-GU4-qpIa4AEc_o2.webp"/></p>
<p><img loading="lazy" alt="Farcaster usage remains niche" width="633" height="413" src="/static/media/1823463897510371432-GU4-qpfaoAAwylo.webp"/></p>
<p><img loading="lazy" alt="Farcaster usage remains niche" width="623" height="363" src="/static/media/1823463897510371432-GU4-qplbwAAVdXZ.webp"/></p>
<p><img loading="lazy" alt="Farcaster usage remains niche" width="632" height="363" src="/static/media/1823463897510371432-GU4-qpfa4AIi2YS.webp"/></p>]]></content:encoded>
      <pubDate>Tue, 13 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2024-08-13-farcaster-usage-remains-niche.html</guid>
      <category>blockchain</category>
    </item>
    <item>
      <title>The need for decentralized social media</title>
      <link>https://www.steven-geller.com/2024-08-11-the-need-for-decentralized-social-media.html</link>
      <description>As centralized social media platforms face increasing scrutiny and control, we may witness a paradigm shift towards decentralized networks. These distributed systems could emerge as the last bastions of truly open (digital) discourse.</description>
      <content:encoded><![CDATA[<p>As centralized social media platforms face increasing scrutiny and control, we may witness a paradigm shift towards decentralized networks. These distributed systems could emerge as the last bastions of truly open (digital) discourse.</p>
<p><img loading="lazy" alt="The need for decentralized social media" width="1200" height="800" src="/static/media/1822507685394493512-GUrZFGRXYAA-xp8.webp"/></p>]]></content:encoded>
      <pubDate>Sun, 11 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2024-08-11-the-need-for-decentralized-social-media.html</guid>
      <category>blockchain</category>
    </item>
    <item>
      <title>Teaching kids through lemonade stands</title>
      <link>https://www.steven-geller.com/2024-07-12-teaching-kids-through-lemonade-stands.html</link>
      <description>Proud dad moment: Watching my kids run their lemonade stand, embracing both old-school cash and Bitcoin Lightning payments. 
They're learning entrepreneurship, customer service, and the future of money, all at once.
This is how the next generation will think about value transfer. Not either/or, but ...</description>
      <content:encoded><![CDATA[<p>Proud dad moment: Watching my kids run their lemonade stand, embracing both old-school cash and Bitcoin Lightning payments. </p>
<p>They're learning entrepreneurship, customer service, and the future of money, all at once.</p>
<p>This is how the next generation will think about value transfer. Not either/or, but both/and.</p>
<p>Keep building. Keep dreaming big!</p>
<p><img loading="lazy" alt="Teaching kids through lemonade stands" width="1200" height="1037" src="/static/media/1811622272509313047-GSQs2mmWgAAsdGh.webp"/></p>]]></content:encoded>
      <pubDate>Fri, 12 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2024-07-12-teaching-kids-through-lemonade-stands.html</guid>
      <category>blockchain</category>
      <category>fatherhood</category>
    </item>
    <item>
      <title>On trust, time and the first Block</title>
      <link>https://www.steven-geller.com/2009-02-01-on-trust-time-and-the-first-block.html</link>
      <description>For years people tried to make digital cash work. They died because someone was running them. Someone holding keys, someone who could be found, pressured, arrested. That person always folded eventually.
The cypherpunks in the 90s had the pieces. Chaum gave us blind signatures, Finney built reusable ...</description>
      <content:encoded><![CDATA[<p>For years people tried to make digital cash work. They died because someone was running them. Someone holding keys, someone who could be found, pressured, arrested. That person always folded eventually.</p>
<p>The cypherpunks in the 90s had the pieces. Chaum gave us blind signatures, Finney built reusable proof-of-work. All the tools were there to shift power away from institutions. But every single implementation still had that central point where everything could break. And it always did break, right there.</p>
<p>Recently a network went live with nobody running it. No central servers. No company. Just computers talking to each other, validating transactions through proof-of-work instead of trust in some administrator.</p>
<p>The timing is hard to ignore. Banks are lining up for bailout number two. There's a Times headline about it embedded in the first block. Maybe that's just a timestamp, maybe it's commentary. Either way, it frames things pretty clearly.</p>
<p>Finney tweeted "Running bitcoin" after downloading the software. That was it. No grand announcement, just testing whether this actually works. The software was alpha quality, buggy, experimental. But here's the thing: it didn't need to make promises because there was nobody there to make them. The protocol either functions or it doesn't.</p>
<p>Most of the crypto community had stopped believing this was possible. Too many failures. You can't really blame the skepticism. Except this time there's no trusted third party in the design at all. That changes the failure modes.</p>
<p>Ten years from now we'll have electronic currency in some form, that much seems likely. What matters is whether it's something we control or something that controls us.</p>
<p>This runs because individuals choose to run nodes. There's nobody to raid, no board to pressure, no executives to threaten. The decentralization isn't decoration, it's the security model. You can't easily attack something with no center.</p>
<p>Nobody knows yet what this becomes. Code will evolve, bugs will get fixed, new problems will surface. That's just how these things work when they're open.</p>
<p>What strikes me about these first days is just that someone tried again. After all those failures, someone wrote the code and shipped it instead of writing another paper about it. The tools to build privacy-preserving, decentralized systems have existed for years. Actually building them and getting them to run is different.</p>
<p>Whatever happens next comes down to the people who run the nodes.</p>]]></content:encoded>
      <pubDate>Sun, 01 Feb 2009 00:00:00 +0000</pubDate>
      <guid>https://www.steven-geller.com/2009-02-01-on-trust-time-and-the-first-block.html</guid>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
