Sixteen Hours Is Not a Week
Sixteen Hours Is Not a Week
At 18:00:01 UTC on Thursday, Base produced block 53,556,127, two seconds after block 53,556,126. Coinbase’s layer 2 had just flipped a constant: from that block on, the chain targets a new block every 200 milliseconds instead of every two seconds. Nothing in that sentence sounds like an event. It was one. Every contract on Base that counts time in blocks started counting ten times faster, because the number written into the contract did not change and the second underneath it did.
A timelock spelled 302,400 blocks used to mean one week. The same 302,400 blocks now mean sixteen hours and forty-eight minutes. No migration, no notification, no consent. Base’s own Denim specification says it without euphemism: a system “that treats a block count as a duration will see that duration shrink to one tenth of its intended length after activation.”

This is the quiet class of failure that deserves more attention than the loud ones. Not a hack, not a depeg, not a bug in a signature check. A unit of account drifted, and every promise denominated in it silently re-priced. The sharp part is the comparison: the same parameter change was executed the same week on another chain, Zcash, going from 75-second to 25-second blocks, and there it arrived with a rewritten halving schedule, a recalculated emission curve with the rounding error stated to eight decimal places, and a public invoice for what the upgrade would destroy. Two chains, one identical edit, two entirely different standards of care.
The clock that was never a clock
A blockchain has no clock. It has a sequence. Block height is an ordinal number, not a timestamp, and the gap between two heights is not a duration but a random variable with a target mean. That is fine as long as everyone who reads the number understands it. The trouble starts when the ordinal gets used as a calendar, which happens constantly: vesting cliffs, governance voting windows, cooldowns, oracle observation windows, expiry deadlines.
From July 2025 until Thursday, Base ran a hybrid. Blocks came every two seconds, and inside each one Flashblocks pushed out partial results every 200 milliseconds, which applications could treat as preconfirmations. Denim ended the hybrid. Each 200-millisecond slice is now a block in its own right, numbered and taken through the usual unsafe, safe and finalized stages, and the Flashblocks streams are gone. Applications had to migrate to canonical block and RPC streams; the pending block tag has, in Base’s words, “no direct equivalent after Denim.”
Most of the damage is arithmetic nobody had to do until it was done for them. A Uniswap-V3-style price oracle keeps producing correct values, but a fixed number of stored observations now covers, in the specification’s phrasing, “as little as half as much wall-clock history,” so the lookback window shrank along with the block time. Contracts that read block.timestamp are untouched, because seconds are seconds. Contracts with a block count baked into an immutable cannot be adjusted at all. Base added a BaseTime contract so new code can read millisecond precision. That is a good fix for code written from now on, and no help whatsoever to code written last year.
One chain did not survive the change. Horizen, a layer 3 on the OP Stack that settles to Base, said in October that it “cannot follow” Denim and that, according to its infrastructure provider, no fix exists. Roughly forty minutes after activation it could no longer include user transactions, permanently, per Unchained’s reporting. Its DAO plans to return remaining ZEN and ETH balances to holders on Base. Whatever one thinks of a layer 3 that cannot absorb a block-time change on its settlement layer, the cost of this migration did not fall on the party that decided it.
The first minutes were not clean either. Fourteen minutes after activation Base reported “periodic transaction inclusion delays, causing a higher than expected rate of empty blocks.” In Unchained’s check of the public RPC, 146 of the first 300 blocks carried only system transactions. Node operators had to be on base/base v1.5.1 or later, released on 22 October; a later v1.5.3 fixed a separate state-root bug.
What my node says about a week
Bitcoin has carried the same conceptual bug for a decade, only with a gentler constant. CHECKLOCKTIMEVERIFY and CHECKSEQUENCEVERIFY are denominated in blocks. A thousand and eight blocks is the usual gloss for “one week,” because 1,008 times 600 seconds is 604,800 seconds.
I measured what that gloss is worth. From my own node, at height 974,781 on the morning of 6 November, the last 2,100 block intervals: mean 588 seconds, median 410. A median far below the mean is exactly what a Poisson process looks like, since 600 times ln 2 comes to 416, and it is the first thing people forget about block time. The mean is close to target. The typical block is not.
Two more facts from the same sample. Of 2,100 intervals, 70 are negative: a block whose header timestamp is earlier than its parent’s, which consensus permits because the rule is median-time-past plus two hours of future drift, not monotonicity. And 268 intervals exceed twenty minutes, while 8 percent are shorter than one minute. Time on a blockchain is not a sequence of equal ticks. It is a sequence of unequal ticks with a fixed average.

Push that through the unit people actually use. Sliding 1,008-block windows across the sample came out between 6.71 and 7.15 days, standard deviation 5.3 hours. Sliding 144-block windows, the common “one day” in fee and mempool heuristics, ranged from 0.84 to 1.09 days. So a one-week timelock in Bitcoin is a week give or take five hours, and a one-day timelock can be twenty hours. Every Lightning HTLC expiry on earth is written in those units.
None of this is an argument that Lightning is broken. In Lightning, block-denominated timelocks are the right choice, and for a reason that matters: the chain’s own clock is the only clock both parties can verify, and what a channel needs from a timelock is ordering, not seconds. Nobody has to agree what time it is. Everybody has to agree which block came first. The bug is not the unit. The bug is the conversion, the moment a human-facing promise (“your withdrawal unlocks in a week,” “votes close in seven days,” “vesting starts in twelve months”) is implemented as a block count and then never revisited when the rate changes.
That is precisely the difference between Base this week and Bitcoin. Bitcoin’s rate has been roughly stable at ten minutes for a decade and a half, and the difficulty adjustment defends it. Base’s rate changed by an order of magnitude in one block. It is the same abstraction with a much thicker safety margin.
Zcash sent the invoice
On the same Thursday night, at block 3,543,405, mined at 9:34 p.m. ET, Zcash activated NU7 and cut its block target from 75 seconds to 25 seconds. A threefold speed-up: the same class of edit Base made, one order of magnitude smaller. Zcash is the counter-example, and the interesting one.
The emission schedule is stated in blocks, so a faster chain would have reached every halving three times sooner. ZIP 218 does not leave that to chance. It defines a new constant, PostNU7HalvingInterval = floor(PostBlossomHalvingInterval × 3) = 5,040,000 blocks, replacing 1,680,000, and divides the per-block subsidy by three via floor(MaxBlockSubsidy / (BlossomRatio × NU7Ratio × 2^Halving)). The remaining distance to the third halving was tripled from 862,995 blocks to 2,588,985, which is why the date does not move even though the height does.
Then comes the part that reads like an accountant with a conscience. Dividing 1.5625 ZEC by three does not give exactly a third: floor(156250000/3) = 52083333 zatoshi, so three post-NU7 blocks issue one zatoshi less than one pre-NU7 block. After the third halving the gap is two zatoshi per interval. The ZIP runs that through the remaining schedule and finds that the 75-second chain would have fallen 0.1848 ZEC short of the 21 million cap through rounding anyway, while the 25-second chain falls short by 0.68062995 ZEC. The authors then write the sentence most protocol changes never write: “This does noticeably alter the original issuance curve, to a degree which cannot be deemed negligible.”
The funding streams got the same treatment. Under Revision 3 of ZIP 214, three 25-second blocks pay 3 × 4,166,666 and 3 × 6,249,999 zatoshi into the 8 and 12 percent streams, against 12,500,000 and 18,750,000 for one 75-second block. Revision 2 of ZIP 207 extends the address periods in proportion to the spacing change. Per-pool shielded action limits arrived alongside: a global shielded budget of 330 actions, Orchard throughput from 2.9 to 6.6 transactions per second, light-client shielded-sync bandwidth down from 271 to 169 MB per day. Those are the ZIP 218 headline numbers, and every one of them is a conversion done on paper before the fact.
Zcash also paid a visible price, which is the part the cheerleading misses. Version 4 transactions were dropped, and Sprout transfers have no other format, so every coin still sitting in the Sprout pool became unspendable: about 12,224 ZEC, roughly 16 million dollars at the ZEC price of around 1,313 that night, according to Blockchair’s block data as reported by Unchained. The Network Sustainability Mechanism takes 60 percent of each block’s transaction fees out of circulation; the miner keeps 40 percent under ZIP 235, and ZIP 237 pays the withheld ZEC back out gradually from block 8,939,664. By the 25-second arithmetic that is 5,396,259 blocks, about 1,561 days, so early 2031, which is what Shielded Labs’ Jason McGee said in his announcement: “reissuance will begin in 2031.”
Two things follow. First, a block-time change is safe in proportion to how few things on top of the chain are denominated in blocks. Zcash has no smart contracts with timelocks, so the blast radius was the protocol’s own constants, all of which were rewritten. Base has thousands of contracts, many of them immutable, and none of them were rewritten. Second, the standard Zcash held itself to was not “does it compile.” It was “what does the emission curve become, to the eighth decimal, and who loses, by name.” That standard is cheap. It costs one afternoon with a spreadsheet. It was not applied on Base, and a chain died.
The same error, without a blockchain
On 2 November Paraguay’s central bank voted unanimously to open a resolution procedure against Ueno Bank, having found its solvency ratio below half the legal minimum. The announcement came at dawn on 3 November, and with it roughly three million depositors, more than 60 percent of adults in a country of some 6.5 million, lost access to app, card and account. Eight executives were detained. The central bank’s president resigned the same day. President Santiago Peña resigned on 5 November, and the lower house voted 78-0 to impeach him minutes later. Deposit-guarantee payouts began on 5 November, up to PYG 228.3 million, about 38,000 dollars per depositor, with the central bank estimating that 97 percent of depositors sit entirely under the ceiling.
Now the unit. Fitch rated Ueno “BB” as recently as March 2026. This was not a fraudulent rating. It was a rating expressed in a different tense. A credit rating is a statement about the next twelve months, built from the last twelve, and the thing that failed here, a solvency ratio halving past the regulatory floor, happened inside the gap between the two. Ueno held about 8.9 percent of Paraguay’s deposit system as of December 2025, according to FIX, and that concentration inside a single supervised custodian turned an institutional failure into a national one before most people had breakfast.
The guarantee is real, and the guarantee is also a promise in the subjunctive. It requires trusting the state to administer it correctly, without capital controls, without a currency that moves while you wait. None of those risks appear in a letter grade. The depositor asked whether the money would be there when he needed it. The rating answered whether it had been there while the agency looked.
DeFi produced its own version in the same week. On 29 October, per LlamaRisk’s account on Aave’s forum, a wallet that the risk manager places in the Binance hot-wallet exploiter’s cluster posted 60 million USDT, a stablecoin whose issuer can freeze it, as collateral on Aave V3 and drew 19,762 WETH against it, about 44.6 million dollars, in roughly three minutes. Aave’s guardians froze new deposits and new borrowing about forty minutes later. By 5 November a liquidator had repaid about 9,884 WETH and taken 24.38 million USDT, leaving about 9,885 WETH owed against 35.57 million USDT of collateral at a health factor near 1.24. USDT and USDC now carry a loan-to-value of zero. Collateral, it turns out, is not a number either. It is a number plus an assumption about whether you can still sell the thing.
The metric that measured the split
The AI papers this week carried the same disease in a cleaner form. SteelAgent, an LLM-orchestrated model for steel property prediction, reports a result that ought to be pinned above every benchmark leaderboard. For gradient boosting on SteelBench tensile strength, pooled out-of-fold R² fell from 0.859 on a random train-test split to 0.113 when whole steel families were held out. Nominal 90 percent prediction intervals covered 91.0 percent of cases under random splitting and 37.6 percent on held-out sources. Same model, same data, and a metric that goes from publishable to useless depending on what you held out.

The paper’s own twist is better still. Physics-derived features raised R² by 0.2534 in a 17-family holdout analysis and lowered it by 0.358 in a separate four-grade laboratory analysis. The feature did not change. The population did. So the authors propose something almost quaint: report the evaluation population alongside the estimate, the way a drug trial reports the cohort. That is ZIP 218’s discipline in a different building. Publish the conversion, not just the number.
Which brings up a genuinely new unit. By Latent Space’s account this week, OpenAI’s security researchers built an autonomous pipeline that found, validated and patched 948 local privilege-escalation vulnerabilities in the Linux kernel in a single run, at a stated API cost of 1.2 million dollars. Eric Wallace is quoted putting the human baseline at about twenty such bugs a year; Greg Brockman at about a thousand dollars per vulnerability. Treat those as company claims, not audited figures. But if the unit is even roughly right, a discipline that used to be measured in researcher-years now has a price per bug. Units that arrive that fast tend to arrive without their footnotes, and “948 vulnerabilities” says nothing until you know the population: which kernel versions, which configurations, which severity classes, and how many of the patches survived maintainer review.
Why the fast block is still right
The steel-man deserves its turn, because it is strong. Two hundred milliseconds is a better product. It is faster than a credit-card terminal, it makes Base competitive with the centralised exchanges it is trying to displace, and the block count was always a poor API, an internal counter promoted to a public calendar by developers who had no better option. Anyone building today should write seconds, use block.timestamp, or read BaseTime, and the migration guide is honest about what broke. Slowing the chain back down to protect contracts that encoded an implementation detail would be the tail wagging the dog. No chain has ever won a market by refusing to get faster.
The counter-argument is not that the change was wrong. It is that the change was free for the changer and expensive for everyone downstream, and the ledger was never published. Base could have shipped a list of every immutable contract on the chain with a block-denominated duration, the way Zcash shipped a table of what the emission curve loses to rounding. It could have kept the old rate available, or paused, or paid for migrations. Instead the specification contains the warning, and the warning contains the arithmetic, which is more than most get, and the immutables still broke.
The week’s tape rhymes with the same theme. Bitcoin traded near 75,528 dollars at 09:31 CET this morning by my own check, after a session in which 1.08 billion dollars of leveraged crypto positions were liquidated in 24 hours, 954 million of them longs, per Bitcoin Magazine Pro data. The Nasdaq fell about 5 percent into a correction and the Philadelphia Semiconductor Index about 11 percent. Core Scientific will finish exiting bitcoin mining by year-end: colocation brought 215.4 million of its 232.9 million dollars of quarterly revenue, self-mining fell to 12.3 million from 57.4 million a year earlier and posted a 7.5 million dollar gross loss, and its bitcoin holdings are down to 2.7 million from 222 million at the end of 2025. IREN’s mining revenue fell 58 percent while its AI cloud revenue rose 182 percent to 200 million. A miner used to be priced as a call option on bitcoin. It is now priced as a landlord with a power contract. That is a unit change too, and the market repriced it in a single afternoon.
What I could not verify
Three gaps are worth naming. No inventory of block-denominated contracts on Base appeared in any of the reporting I read, so the size of the affected surface is unknown; Base’s own specification and migration guide describe the mechanism, not the population. Whether any Sprout holder had a late migration path around the version 4 removal is likewise not visible from the sources, only the outcome of 12,224 unspendable coins. And the Linux-kernel numbers are OpenAI’s own claims about an unreleased model, relayed by a newsletter, with no maintainer-side count of how many patches landed unchanged.
Three questions
The lesson is not “never change a constant.” Protocols must change constants or die. The lesson is that a number is a promise about three things, and the promise breaks if any of them moves silently.
What is the unit? Not the label, the actual referent. A block is an ordinal, a second is a duration, a dollar is a claim on convertibility, and a rating is a statement about a period that has not happened yet.
What is the rate, and who can change it? If the answer is “the operator, without asking me,” then the number is not yours, and you should store it twice: once in the unit you can enforce, once in the unit you promised.
What population was it measured on? 0.859 or 0.113. 91.0 percent or 37.6. 302,400 blocks or 16.8 hours. BB or below half the floor. The number is the same object in each pair; only the population moved.
Zcash spent an afternoon on a spreadsheet and disclosed that a rounding artefact costs 0.68 ZEC across the entire remaining issuance of a 21 million coin cap. Base let a week become sixteen hours for contracts that can never be rewritten, and one chain’s users found out forty minutes later. The arithmetic is not bureaucracy. It is the courtesy you extend to people who cannot re-read your constant.
Sources
- Unchained — Base Now Makes a Block Every 0.2 Seconds After Its Denim Upgrade
- Unchained — Zcash Activates NU7, Taking 60% of Transaction Fees Out of Circulation
- Unchained — Aave’s Risk Manager Wants a Borrowing Speed Limit After Binance Hackers Took $44.6 Million
- Zcash — ZIP 218: 25-second Block Target Spacing
- Zcash — ZIP 259: Deployment of the NU7 Network Upgrade
- The Block — Zcash’s major network upgrade NU7 goes live on mainnet, cutting block time by threefold
- CoinDesk — Zcash’s landmark NU7 upgrade goes live, speeding up private payments
- TFTC — Paraguay’s Ueno Bank Collapse Locks Out 60% of Adults, President Resigns
- arXiv — SteelAgent: LLM-Orchestrated, Physics-Informed Steel Property Prediction with Audited Generalization and Calibrated Uncertainty
- Latent Space — AINews: It’s Swapping Season
- Bitcoin Magazine — Bitcoin Price Trades Near $76,000 as Nasdaq Tumbles into Correction
- Bitcoin Magazine — Core Scientific (CORZ) to Exit Bitcoin Mining by Year-End as Colocation Hits $215 Million
- The Block — IREN’s bitcoin mining revenue drops 58% as firm plans full exit by year-end
- Own measurement — Bitcoin block intervals, heights 972,682 to 974,781, and spot prices, 6 November 2026, 09:31 CET
Write a comment