The initial assessment contained three data points. That was the problem.
A verified contract address on the block explorer. A total value locked figure that crossed nine figures. A blue checkmark beside a name everyone in the Telegram group already trusted. Three facts, presented as evidence of substance.
I don't trust blue checkmarks. I trust bytecode. The distance between those two things is where phase-two analysis lives.
This is not an article about a single protocol. It is about a method — the forensic method that separates what a project claims from what a project is. I have run this method since late 2018, when a six-week audit of the Gnosis Safe multisig wallet taught me a lesson no audit lab was teaching: signature malleability does not appear in marketing materials. It appears in compiled output. It appears in edge cases. It appears in the lines that survived early audits because nobody replayed the compiler and checked the ECDSA math.
Phase one tells you what a project claims. Phase two tells you what a project is.
The source material for this analysis was sparse. A few sentences describing a contract, a value, and a promise. No documentation. No test suite. No code pointers. The correct response to that input is not a report. It is a verification plan. The plan starts by making explicit what the three data points claim and what they omit. That distinction — between what is asserted and what is verifiable — is the entire discipline.
Every bull market generates the same artifact: the phase-one assessment. It takes three to five days. Someone reads the documentation. Someone checks the audit badge. Someone reviews the team's LinkedIn histories and writes "no immediate red flags." The report gets filed. The allocation gets made. The token gets bought.
None of this is malicious. It is triage. Investors need to move at market speed, and market speed does not permit compiler replay. But triage conditions the industry to confuse familiarity with verification. The phase-one report is not wrong because it is lazy. It is wrong because it applies the epistemology of a summary to a technology whose entire security case rests on complexity that cannot be absorbed by reading a whitepaper.
The AMM model hides its truth in the invariant. Not in the frontend. Not in the docs. The invariant is a mathematical constraint — x times y equals k for a constant product, or the internal accounting invariants a lending contract must maintain. If the invariant holds, the system is internally consistent. If it does not, you have found the next exploit. You cannot verify an invariant by reading. You have to execute the code.
This is the core asymmetry of crypto diligence: phase one costs three days and tells you nothing; phase two costs three weeks and tells you everything. The market prices the first. The forensics happen in the second.
Phase two begins with three artifacts, and it disassembles each one in turn.

Artifact one is the contract address. The explorer says "verified." That word carries more weight than it deserves.

Verification on a block explorer means someone uploaded source code that compiles to the deployed bytecode. That is a weak claim. It does not prove the developer deployed that bytecode intentionally. It does not prove the deployed contract matches the documentation. It does not prove the contract is immutable — and if it is upgradeable, it does not tell you who controls the upgrade path.
The first step is always the same: pull the bytecode, pull the source, replay the build locally. I have done this often enough to know that the Solidity compiler version in the metadata file is the first thing to check. A contract supposedly compiled under 0.8.20 that carries metadata for 0.8.18 is an inconsistency worth investigating. The metadata hash should match byte-for-byte. If it does not, you have found either a sloppy deployment or something worse.
Then the constructor arguments. Then the proxy pattern. Then the owner address.
In the 2018 Gnosis Safe audit, I spent six weeks on this checklist. The result was three signature malleability vulnerabilities the early auditors had missed. They checked the main logic flows. They did not check the ECDSA edge cases. The v0.4.24 compiler permitted something later versions corrected: a signature whose fields could be manipulated without invalidating the recovered signer address. An attacker could alter r, s, and v values, and the contract could not distinguish the altered signature from the original. The fix was not a feature. It was a mathematical constraint, enforced at the contract level.
That lesson has shaped every audit since: the attacker does not break the main path. The attacker finds the edge case where the stated invariant does not hold.
Artifact two is the total value locked. TVL is not a security metric. It is a liquidity metric the market reads as a security metric.
The phase-one view: nine figures of TVL means the protocol has survived enough economic stress to be trusted. The phase-two view: TVL is a measurement of user funds sitting inside a system whose security assumptions remain unverified under adversarial conditions.
This is where I build simulations. During DeFi Summer in 2020, I manually traced the execution flow of Uniswap V2's swap function — the integer overflow protections, the fee distribution logic, the liquidity adjustment mechanics. I wrote a Python simulation to model slippage under varying liquidity depths. The constant product formula has a subtle property: price impact increases nonlinearly as trade size approaches the pool's reserves. Arbitrageurs extract value by trading first against stale prices. The pool's own reserve ratio quotes a price that lags the external market. The arbitrageur's transaction is not an attack on the protocol. It is a tax on passive liquidity.
The same logic applies to every AMM. The invariant does not hide this. It defines this. The documentation says nothing about extractable value. The code does not say anything about it either. The code creates the opportunity, and the market takes it.
The finding phase two produces is not a vulnerability. It is a cost schedule. Every trader pays a slippage tax that scales with trade size and reserve depth. Every protocol that markets itself as safe while running a thin-pool AMM is writing a check the invariant will eventually cash.
The simulation only becomes a vulnerability when combined with an additional condition: a governance mechanism that can alter the fee structure, a router that routes around the pool, a lending market that uses the AMM's liquidity as collateral. The isolated invariant holds. The composed protocol may not.
The same math discipline applies to the layer the bull market is currently overhyping: data availability. Here is the calculation nobody runs in the marketing materials. A rollup posts a state root and a batch commitment to its base layer. The size of that post is roughly constant no matter how many transactions the batch contains. One transaction or ten thousand — the L1 footprint stays in the same order of magnitude. Ninety-nine percent of rollups do not generate enough data to need a dedicated DA layer. The base chain is enough. The DA narrative is a solution looking for a problem, and the problem it is looking for is the need to launch a new token, a new validator set, and a new venture allocation. The technology is real. The demand schedule is not. When I hear "we need a dedicated DA layer," I ask to see the data growth chart. It never exists.
The bull market adds a new wrinkle to this artifact: zero knowledge. "Zero-knowledge proof" is dropped into architecture documents the way "decentralized" was dropped into everything else in 2017.
Zero knowledge isn't magic; it's math you can verify. That is the standard I applied in 2022, when I spent three months compiling ZK-SNARK circuits on local hardware in the aftermath of the LUNA collapse. I wanted to understand the trusted setup. I wanted to measure the generation overhead. I wanted to know whether the circuit's constraints matched the specification the marketing described.
The phase-two checklist for a ZK protocol is short, and every item is non-negotiable.
The circuit must match the specification. A ZK proof proves what the circuit enforces — nothing else. If the circuit permits a withdrawal without validating the merkle path, the proof will happily certify the theft. The proof is sound. The circuit is not. That distinction is the entire game.
The trusted setup must be sound. If the toxic waste was not destroyed, the setup contains a backdoor. You cannot audit the destruction. You can audit the process, the ceremony transcripts, the coordination.
Recursive proof composition must be monotonic. Recursive proofs layer verification on verification. The attacker looks for the layer where verification of the previous layer is weaker than the statement it is supposed to certify.
And the prover must actually prove. Some zero-knowledge protocols use the term to describe a privacy feature that has nothing to do with proof systems. Read the code. Confirm the contract verifies the proof on-chain. If it does not, the zk feature is cosmetic.
Gas is part of the security model, not just an efficiency metric. A circuit that requires thirty seconds to generate a proof creates de facto centralization: only entities with serious hardware can run the prover. The protocol becomes dependent on a small set of proving service providers, and that dependency is a security assumption that no audit report lists. I have measured this. On commodity hardware, a Sapling-style proof lands around one to two seconds. Recursive proofs multiply the cost by the recursion depth. Protocols that claim to "prove everything on user devices" are either making a trade-off in circuit expressiveness or they are not being honest about the hardware requirements.
A practical example shows why the checklist matters. The decision to move from one proof system to another — say, from a pairing-based scheme to a hash-based scheme — changes the soundness assumptions at the foundation. The transition requires re-proving every constraint that the previous system treated as an axiom. I have seen design documents that describe this transition as an upgrade. It is not an upgrade. It is a re-verification of first principles. The market does not distinguish the two, until one of them fails.
Artifact three is the audit badge. It is the most dangerous artifact in all of crypto — not because audits are useless, but because the market treats them as absolutes.
Phase two asks four questions about any audit. First, what did the auditor actually review? Scope matters. Many audits exclude the upgrade logic, the governance contract, or the economic parameters — the exact components that determine how a protocol behaves under stress. Second, what compiler version did the auditor use? Replay the build. If the bytecode does not reproduce, the audit is meaningless. Third, did the auditor perform economic modeling or only logic checks? Most audits check for reentrancy, overflow, and access control. Very few model extractable value, liquidation cascades, or governance attacks. Fourth, what is in the appendix? The informational findings are where the truth hides. The market reads the critical section and stops.
My assessment of the audit badge follows a consistent pattern: the auditor checked the code, but the auditor did not check the threat model. The architecture is a proxy. The proxy is upgradeable. The upgrade is controlled by a multisig. The multisig is a 2-of-3 controlled by the team. The audit covered the implementation contract — the one that will be replaced at some point. It did not cover the replacement. That is not an audit failure. It is an audit scope decision. And the scope decision is the finding.
The same logic applies to custody. In 2024, ahead of the spot Ethereum ETF approvals, I analyzed the custody architectures proposed by major financial institutions. Multi-signature wallets. Threshold signature schemes. Hardware security modules. The technology had improved since 2018, but the question was the same: who held the key shares, and how did the custodian's assumptions interact with the protocol's? The institutional solutions were more centralized than the protocols they protected, and the centralization was the point. Custodians protect users from one adversarial class — attack on the private key — by introducing another — attack on the custodian's access. The multisig still exists. The keys are still split. But the signers sit in the same building, under the same legal jurisdiction, governed by the same compliance officer. The security became legal, not cryptographic. For an ETF product, that trade-off is acceptable. It is not a technical improvement. It is a jurisdictional one, and the industry's failure to distinguish the two is why institutional adoption debates keep producing category errors.
The third data point — the claim, the announcement, the checkmark — is the product of marketing. The market rewards optimistic interpretation of thin data and punishes rigorous verification of thick data. The phase-one report gets read. The phase-two report gets filed.
Why? Because phase two produces complexity, and the market pays for certainty. The certainty of a phase-one report is "no immediate red flags." The certainty of a phase-two report is a list of conditions: the invariant holds under these assumptions; the upgrade key is controlled by these parties; the circuit is sound under this security model.
The second list is more honest. It is also less tradeable.
Consider one manufactured problem the bull market keeps selling: liquidity fragmentation. Fragmented liquidity is not a bug in independent AMMs. It is a pricing signal. A pool's depth is a truth about how much capital the market commits to that market. Aggregation layers do not create liquidity. They tax it. The same capital, routed through an aggregator, still ends up in a pool. The aggregator extracts a fee for the routing. The narrative is not a technical finding. It is a sales funnel.
Now the uncomfortable part. Phase-two forensics has a blind spot of its own, and it is the same blind spot that killed LUNA.
I analyzed ZK-SNARKs versus STARKs for three months. I compiled circuits. I benchmarked prover runtimes. The cryptography was never the problem. The collateral design was. The UST mechanism was a pegging scheme that depended on arbitrage to correct price drift, and the arbitrage depended on the market's willingness to absorb the LUNA dilution. The code implemented that mechanism faithfully. The code was sound. The system was fragile because the economic invariant — that the peg holds under stress — was not a mathematical certainty. It was a prior about human behavior.
The blind spot: we audit the protocol, not the incentive alignment. We check the invariant. We do not check whether the invariant is the one that matters. A collateralized stablecoin's invariant is overcollateralization. A DA layer's invariant is data availability. An AMM's invariant is the constant product. But the meta-invariant — the one that determines survival — is whether user incentives and the security budget stay aligned when the market draws down. I do not have a compiler for that invariant. Nobody does.
The deeper problem is that phase-two analysis optimizes for what can be falsified. The behavioral invariant cannot be falsified until it is too late. That is not an excuse to stop verifying. It is a reason to be honest about what verification covers. Cryptographic verification covers computation. It does not cover coordination, and coordination is what kills protocols in drawdowns.
The same miss applies to stablecoins in emerging markets. I look at a stablecoin for the unbanked and check what it actually stabilizes against. When the local currency's inflation is the problem, a dollar-pegged token is not adopted because the technology is superior. It is a survival alternative. The technology becomes a solution only after the local currency fails. If the stablecoin is collateralized in the same fiat it is trying to escape, the stability invariant is an illusion.
This bears directly on the current bull market. The euphoria does not change the technical facts. The code was flawed before the price went up. It will still be flawed after the price goes down. The market's willingness to fund phase-two analysis is countercyclical. At the peak, everyone is in a hurry. At the bottom, nobody is funding the work. The worst time to audit is exactly the time the market is most convinced it does not need one.
The next phase of the market will not be defined by infrastructure. A rollup is a rollup is a rollup. It will be defined by verification infrastructure: invariant checks that run continuously on deployed contracts; ZK circuit soundness tests that replay compiler versions and audit trusted setup ceremonies; economic simulations that model the behavioral invariant, not just the mathematical one. Verification infrastructure is the scarcest resource in the entire stack. Compiler replay. Bytecode diffing. Invariant monitoring that watches deployed state transitions in real time and alerts on the first sign of a violated constraint. The tools exist. The adoption does not. In 2018, an audit was a PDF. In 2026, it should be a continuous process — but the market still pays for the PDF.
I am watching for the first protocol exploited through a verified but unexamined edge case in a zero-knowledge circuit. When it happens, the market will claim surprise. It will not have been surprised. The phase-one reports said the project was high quality. The phase-two reports said the circuit was sound under specific assumptions. The assumptions were the thing. They always have been.
Every dataset starts with three points. The question is whether the fourth point — the one that breaks the pattern — is already sitting in the deployed bytecode, waiting for someone to replay the compiler and find it.
Three data points. Zero certainty. That was the problem from the start.