CheapbookZ

Market Prices

Coin Price 24h
BTC Bitcoin
$81,131.6 -0.42%
ETH Ethereum
$2,376.25 -1.59%
SOL Solana
$102.01 -1.82%
BNB BNB Chain
$713.3 -0.64%
XRP XRP Ledger
$1.27 -1.75%
DOGE Dogecoin
$0.0777 -2.03%
ADA Cardano
$0.2161 -2.08%
AVAX Avalanche
$9.52 -3.46%
DOT Polkadot
$1.07 -5.00%
LINK Chainlink
$11.76 -1.63%

Fear & Greed

53

Neutral

Market Sentiment

Event Calendar

{{年份}}
22
03
unlock Optimism Unlock

Circulating supply increases by about 2%

15
04
halving Bitcoin Halving

Block reward reduced to 3.125 BTC

10
05
upgrade Ethereum Pectra Upgrade

Raises validator limit and account abstraction

12
05
halving BCH Halving

Block reward halving event

08
04
upgrade Solana Firedancer

Independent validator client goes live on mainnet

28
03
unlock Arbitrum Token Unlock

92 million ARB released

18
03
unlock Sui Token Unlock

Team and early investor shares released

30
04
upgrade Celestia Mainnet Upgrade

Improves data availability sampling efficiency

Altseason Index

40

Bitcoin Season

BTC Dominance Altseason

Gas Tracker

Ethereum 28 Gwei
BNB Chain 3 Gwei
Polygon 42 Gwei
Arbitrum 0.5 Gwei
Optimism 0.3 Gwei

Market Cap

All →
1
Bitcoin
BTC
$81,131.6
1
Ethereum
ETH
$2,376.25
1
Solana
SOL
$102.01
1
BNB Chain
BNB
$713.3
1
XRP Ledger
XRP
$1.27
1
Dogecoin
DOGE
$0.0777
1
Cardano
ADA
$0.2161
1
Avalanche
AVAX
$9.52
1
Polkadot
DOT
$1.07
1
Chainlink
LINK
$11.76

🐋 Whale Tracker

🟢
0x7c43...42d3
6h ago
In
3,244,839 USDT
🔵
0xbd23...c250
3h ago
Stake
49,950 SOL
🔵
0xe977...a5d8
12m ago
Stake
44,508 BNB

💡 Smart Money

0x8911...81c6
Arbitrage Bot
+$1.7M
93%
0x1e06...284b
Early Investor
+$3.2M
79%
0x1e05...1cb1
Early Investor
+$1.3M
79%

🧮 Tools

All →
Special

The Discipline of N/A: When the Data Is Missing, Crypto Fills the Void With Fiction

Neotoshi

At 9:14 on a Tuesday morning in Shenzhen, a message arrived in a research channel with the politeness of a grenade: the pipeline had come back empty, and someone wanted to know whether to fill it in.

I have been asked some version of that question perhaps forty times in fourteen years, and it has never once been asked about something genuinely unknown. It is always asked about a gap that somebody has already decided must be filled — a missing TVL figure, an unreported unlock schedule, a partnership that cannot be located on-chain. The report is due, the template has fields, and the fields are empty. The honest answer is the least popular sentence in this industry: an empty field is a finding. It is not a research failure, a formatting defect, or something to be smoothed over with a plausible estimate. It is evidence about a system that describes itself as transparent, and this industry has spent a decade constructing machinery to erase it.

What follows is an anatomy of that erasure — at the level of a smart contract, a data feed, a front-end one-liner, and the human who signs the report.

Every number in this industry is a rumor with a decimal point, and most of us have forgotten that we did not measure it ourselves. Consider what a serious research process actually touches. A protocol's total value locked is not read from the chain; it is produced by an indexer querying a subgraph, written by the protocol's own team, mapping token balances to a price feed supplied by an oracle, which is a median of exchange prices, which are weighted averages across venues, at least one of which is wash-traded. Six layers, each capable of failing quietly, and at the end of them sits an analyst who has been asked to write a confident paragraph before the newsletter ships on Thursday.

A few weeks ago a report crossed my desk in which every layer had, in effect, failed at once — not through an exploit, but because the first step, the extraction of claims from a source document, returned nothing at all. No project, no supply schedule, no team, no jurisdiction, no architecture. Nine analytical dimensions, each requiring a factual anchor, each arriving at the same answer. What struck me was not the emptiness. It was the note at the top from the analyst who received it, who declined to interpolate, published the blanks, flagged the broken dependency, and stopped.

That restraint was unglamorous and it was correct, and it is rarer than it should be. The temptation to do otherwise is not born of dishonesty; it is structural. Templates exert gravity. Give a framework nine sections and the human instinct is to fill nine sections, and crypto has industrialized that instinct into dashboards, leaderboards, and weekly notes that must ship whether or not anything is known. The pressure is never to fabricate a fact outright. It is to write "approximately," to carry last quarter's figure forward with a footnote, to let a stale number stand because the alternative is an empty row.

Once I stopped reading that report as a pipeline failure and started reading it as a design artifact, I found the same pattern at every layer of the stack.

Start with the primitive. Solidity has no word for "unknown." A uint256 cannot be null, a mapping that has never been written to returns zero rather than reverting, and an uninitialized address is the zero address. This is not a defect; it is the gas-efficient design of a machine built to be deterministic and cheap. But it means that at the lowest level of the stack, absence and zero are the same object, and everything above inherits the ambiguity.

That inheritance is literal. Chainlink's latestRoundData() returns a struct containing updatedAt and answeredInRound. Nothing obliges the consumer to read them. When a feed stops updating — because an aggregator threshold has not been met, because a heartbeat lapsed, because the venue underneath it died — the function does not revert. It returns the last value it computed, stamped with a time you are free to ignore. I have reviewed integrations where the staleness check was omitted on the reasoning that the feed had never gone stale, which is the same logic as removing a seatbelt because you have never crashed. The dangerous outcome is not a wildly wrong price; it is a precisely wrong one. A price of zero is not the absence of a price. It is a liquidation trigger, and a liquidation engine responding to it will dutifully close every position in the book — a function executing exactly as specified, destroying a market in the process.

The arithmetic can mislead just as effectively. Uniswap V3's observe() returns cumulative tick values rather than prices; a time-weighted average price is produced by subtracting two observations and dividing by elapsed time. The soundness of that subtraction depends on the pool's cardinality — how many historical observations the ring buffer retains. Configure it too low and old entries are overwritten, and a "thirty-minute TWAP" becomes a two-second spot price wearing a lab coat. Nobody lied. The number was computed. It simply is not the number the dashboard claims.

Then there is the layer that returns nothing at all. When a subgraph fails to index — a mapping bug, an RPC outage, a reorg it did not handle — the query does not throw. It returns an empty array. The client reads data?.items || [], the chart renders at zero, and an outage becomes indistinguishable from a market with no activity. The distinction is knowable; subgraph metadata exposes indexing errors directly, and almost nobody checks it. In a sideways market this is the most dangerous failure mode of the entire stack, because a quiet market is precisely what everyone expects to see.

And the incantation that binds it together is one line of front-end code: const value = Number(raw) || 0;. Passing null yields zero, undefined yields NaN, and NaN || 0 yields zero again. Missing data and genuine data converge into the same pixel. I have found that expression in liquidation monitors, in governance dashboards, and on the risk page of a lending market whose collateral was being valued by it.

The human layer is worse, because it has an incentive. Solidity's null problem is an engineering artifact; a compliance claim is a business decision. A project reporting that eighty-seven percent of holders are verified and a project reporting nothing look entirely different on a due-diligence call, and only the first one receives the institutional meeting. The verification is usually an attestation of a self-reported figure, and its cost falls on the users who comply in good faith while the wallet next door holds the same exposure through four addresses. Circulating supply is likewise a claim, not an observation — scraped from a project's own endpoint, adjusted by a team's own methodology, delivered as an integer. Integers look like facts. That is their only real property.

And the document layer closes the circuit. When I spent six months in 2017 auditing DAO governance contracts that most readers treated as marketing material, the value of the exercise was that every claim terminated in a line of Solidity — a require, a quorum constant, a msg.sender check. That property has largely vanished from the material this industry reads. A research note can be structurally flawless — nine dimensions, a risk matrix, a competitive table — and informationally empty, and nothing in its format reveals which it is. I once read a forty-page analysis of a lending protocol that contained not a single on-chain reference. Every figure in it was traceable to another article. It was a mirror facing a mirror, and at a glance it was indistinguishable from work that had actually touched the chain.

Underneath all of it sits a sentence I have carried since my first audit. A system that cannot represent "unknown" will eventually report a falsehood, and it will do so without a single line of malicious code. No attacker is required. Only a template, a heartbeat that lapsed, and an analyst too tired to leave a field blank.

The reflex after reading all of that is to build more instrumentation — more feeds, more alerts, more dashboards. That reflex is the blind spot.

This is not a data problem. It is a type problem. The absence of a value and the value of zero are different things, and the crypto stack — from uint256 through JSON through the charting library through the research template through the Thursday newsletter — is built on the assumption that they are identical. Pouring more feeds into a system that cannot express null does not produce truth. It produces more confident zeroes, faster, at higher resolution.

The newest layer is the worst offender. The analytical tooling this industry adopted across 2024 and 2025 is trained on a single objective: to continue. Hand a model an empty context and it will not return an empty field. It will return two thousand fluent words about a protocol, complete with a competitive landscape, three TVL figures, and a funding round — invented, unmarked, and legible. I have watched a room of experienced engineers nod at exactly that. We built a machine constitutionally incapable of saying "I don't know" and wired it directly into a profession whose only real product is judgment.

When I studied the custody arrangements behind the spot ETF approvals in 2024, the pattern held one layer up: public materials describing trust minimization, a verifiable core covering only a fraction of the flow, and a reporting structure that rendered the difference invisible.

So here is the claim I would defend in any room: an empty field is more trustworthy than a confident integer. Absence is auditable. You can see that it is missing, you can go and look yourself, and you can hold the gap open until someone fills it with evidence. A number is not auditable by inspection; it borrows authority from its own format. A note that says a protocol holds four hundred and twelve million dollars will be quoted without a single reader checking the query, while a note that says the figure could not be verified tells every reader precisely where the edge of knowledge lies. Publishing a wrong number is not transparency. It is a costume.

We audit the code, but who audits the conscience? The question sounds rhetorical until you notice it has an engineering answer. The conscience of a system lives in its type system, its staleness checks, its refusal to interpolate, its willingness to render an empty row on a Thursday. Those are not soft virtues. They are the difference between a protocol that fails loudly and one that fails at a price of zero.

In a market that will not pick a direction, the only durable edge is knowing exactly where your knowledge stops — and in a consolidation, almost everything on offer is a claim dressed as a measurement. Build not for the peak, but for the plain.

When your dashboard next shows a zero, will you know whether nothing happened, or only that nobody looked?