TL;DR
Fluid is Instadapp's money market: one shared Liquidity Layer sitting under a lending side and a vault (borrowing) side, with a smart-collateral and smart-debt design that lets the same capital earn DEX fees while it backs a loan. The audit coverage is real, and individual vault contracts turn out to be immutable once deployed. The deposits, though, sit behind an upgradeable proxy, and this run finally put a measured number on the guard: the timelock delay is 86,400 seconds, one day, not the two days our July report claimed. This run also found something July missed entirely. A contract deployed on 2026-03-29, days after the Resolv exploit, lets the team multisig pull user position NFTs to itself with no timelock and no debt threshold, in seven specific markets. All seven are Resolv (wstUSR) collateral markets, and all seven are still allowlisted today. Nothing new broke since July. The two 2026 marks on the record still stand, and neither of them cost a depositor anything.
Checklist
Audits & contracts. Fluid's own audits page lists seven reports from four firms, all confirmed this run: PeckShield (pre-launch), StateMind (pre-launch, and separately Liquidity Layer updates), MixBytes (vault protocol, DEX protocol, Liquidity Layer) and Cantina (DEX). Immunefi's Instadapp program pays 10% of directly affected funds up to $500,000 for critical smart-contract bugs, and the scope explicitly names the Fluid Liquidity Layer, Lending protocol and Vault protocol. Correcting our own July report while we are here: the guaranteed critical minimum is $25,000, not the $5,000 we printed last month. On-chain, all seven vaults inspected this run read between 20,813 and 23,761 bytes of code with an empty EIP-1967 implementation slot, so a deployed Fluid vault is not a proxy anyone can swap out from under you. The standing caveat is the one the auditors raise themselves: the code is gas-optimized to the point of being genuinely hard to read, which raises the odds that something slipped past review.
Admin control. Verified on-chain this run rather than taken from governance write-ups, and the write-ups were wrong on the number that matters. The Liquidity Layer at 0x52Aa899454998Be5b000Ad077a46Bbe360F4e497 is an EIP-1967 proxy whose admin slot holds 0x2386DC45AdDed673317eF068992F19421B481F4c, a Compound-style timelock reporting delay() of 86,400 seconds and a 14-day grace period. Public write-ups describe a two-day timelock; the contract says one day. Trust the contract. That same timelock owns the lending factory and the DEX factory outright. The vault factory is owned by a wrapper contract, which looked at first like a separate admin for the borrow side, but the wrapper's source settles it: its _getGovernance() reads the Liquidity Layer's own EIP-1967 admin slot, so vault governance is by construction the same timelock. One timelock governs both sides. Above it sits INST Governor Bravo at 0x0204Cd037B2ec03605CFdFe482D8e257C765fa1b, with a proposal threshold of 1,000,000 FLUID and quorum of 4,000,000 FLUID against a verified 100,000,000 total supply, so exactly 1% and 4%.
Now the part our July report missed. That wrapper, deployed 2026-03-29, is not only a passthrough. Reading its verified source rather than guessing from call simulations: seven functions are governance-only (setDeployer, setGlobalAuth, setVaultAuth, setVaultDeploymentLogic, setVaultIdAllowlisted, transferFactoryOwnership, and the arbitrary-delegatecall spell()), but three are open to the team multisig at 0x4F6F977aCDD1177DCD81aB83074855EcB9C2D49e. Two of those three move user property. transferPosition(tokenId) takes any position NFT in an allowlisted vault and transfers it to the team multisig, with no debt threshold, no health check and no delay. transferDustPosition does the same for positions under a dust debt threshold. The constructor hard-coded seven vault IDs into the allowlist, and this run confirms all seven are still allowlisted: 110, 111, 112, 133, 134, 135 and 143. Every one of them is a wstUSR market, meaning Resolv collateral. This is the machinery of the March 2026 bad-debt cleanup, still armed in August. Calibrating it honestly: the Liquidity Layer currently holds zero wstUSR, so those markets look wound down, and the team multisig holds 188 of 18,853 outstanding position NFTs, consistent with the consolidation it performed. The forward-looking shape is what matters. Governance can allowlist any of the 181 vaults after a one-day wait, and once a vault is allowlisted the multisig needs no further delay to take positions in it. The multisig itself is a smart-contract account rather than a Gnosis Safe, so getOwners and getThreshold revert and its signer set and threshold are not readable. refresh. Guardian and pause authority on the Liquidity Layer also went unread. refresh
Oracle. Not verified this run, and last month's green does not carry on trust. The vault's constantsView does not expose an oracle address (the ABI confirms it returns the Liquidity Layer, the factory, two implementation contracts, the two market tokens, decimals, vault ID and four storage slots, and nothing else), and the docs oracle page returns 404. Our July report described Uniswap V3 TWAPs cross-checked against Chainlink with a Redstone fallback in some vault implementations; treat that as an unconfirmed prior claim, not a fresh finding. refresh. July also used the Resolv event to exonerate the oracle, on the reasoning that a collateral-solvency failure upstream says nothing about price-feed quality. That reasoning is weaker than it looked. At least one published account of the incident attributes part of the bad debt to discounted wstUSR entering leveraged positions on outdated oracle pricing as USR collapsed, which is a lag failure rather than a manipulation. We could not adjudicate between the two readings from primary sources this run, so the oracle earns no credit from the Resolv episode in either direction. refresh
Liquidity & exit. Be careful which side of Fluid each number describes. DeFiLlama's fluid-lending reads $667.54M, which is collateral locked net of borrowings, so it is the deposit side; the matching borrow side is $754.52M. Our own /lending board reads $635.6M of supply across 112 markets on five chains at 72.9% utilization, a near-but-differently-built measure of the same deposit side. We deliberately do not scan api.fluid.io vaults, because that endpoint returns the borrowing markets and counting both would double-count the same money. Fluid's three DeFiLlama children sum to $1.09B (Lending $667.5M plus DEX $284.6M plus Lite $142.5M), so lending is about 61% of the whole. Ethereum alone is $464.51M, or 69.6% of the lending TVL. The trend deserves saying plainly: up 4.7% over 30 days, down 18.5% over 90, down 50.8% over a year, and 71.8% below the $2.37B all-time high set on 2025-10-09. Withdrawals depend on non-borrowed liquidity at the moment you exit, as with any pooled lender.
Yield (real vs emission). The base yield is real. Lenders earn borrow interest, and smart-collateral or smart-debt positions additionally collect DEX trading fees, which is the actual point of the architecture. FLUID incentives exist as a separate, clearly labelled rewards layer rather than as the headline rate. Worth remembering that this separate layer is exactly what the May 2026 compromise hit, which is an argument for the separation rather than against it. Live per-market APRs were not pulled this run.
Holder concentration. Total supply is verified on-chain at exactly 100,000,000 FLUID for the token at 0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb, which is also the token the Governor reads. The top-holder distribution is gated behind an Etherscan Pro endpoint and was not pulled. refresh. What did surface is more useful than a holder table anyway: on 2026-07-24 Fluid and AGI3 Group announced a partnership under which Kinetic Group, a Dubai-regulated asset manager, plans to acquire up to 10% of total FLUID supply through secondary-market and OTC purchases, with the Fluid Foundation separately placing 5% with regulated custodians under a lock-up until 2030. Ten percent of supply is 10,000,000 FLUID, which is 2.5 times the governance quorum and ten times the proposal threshold, in a system where governance is the upgrade admin of the contract holding every deposit. This is announced intent, not confirmed accumulation, and nothing here says Kinetic would act against the protocol. It is still the single most consequential concentration fact available, and it is worth tracking as an on-chain balance rather than a press release.
Track record. Fluid's own lending, vault and DEX contracts have never been exploited, which is a real positive after two years and a $2B-plus peak. Two 2026 marks sit against it. In late March 2026 an attacker minted unbacked USR by compromising Resolv's off-chain signing infrastructure; USR was listed collateral in Fluid markets, roughly $21M of positions went underwater, and the loss was split about $9.7M to Resolv, $8.2M to Fluid's treasury and $1.5M deferred against future team revenue, with roughly $19.3M repaid and the resolution announced 2026-05-12. The mechanics are the instructive part: the team multisig drew roughly $8M of USDC and USDT out of the shared Liquidity Layer through a pre-approved credit facility, consolidated thousands of bad-debt positions, and the authorizing governance proposal was posted 2026-05-11, after the on-chain action. The protocol stayed solvent and reporting is consistent that no user deposit was touched and no healthy position was seized, but that was a discretionary backstop exercised ahead of a vote, and the admin section above is what it left behind. Then in May 2026 a compromised operational key drained roughly 125,000 FLUID and 51,900 GHO from off-chain Merkle reward distributors, disclosed 2026-05-31, with core contracts and user funds unaffected. This run's news scan surfaced no protocol incident since our 2026-07-01 report; the notable July item was the AGI3 partnership. A null result from a news scan is weaker evidence than a positive confirmation, so read that as "nothing found" rather than "nothing happened". How the liquidation engine behaved through the October 2025 drawdown is not something I established from a primary source this run. refresh
Worst case
Two paths, and this run sharpened both.
The slow one is governance. A proposal replaces the Liquidity Layer implementation and drains it. That is not hypothetical, it is the documented wiring: the proxy admin is the timelock, the timelock answers to Governor Bravo, quorum is 4% of supply, and execution follows one day after queuing. A holder approaching 10% of supply clears quorum by 2.5 times alone, so the practical defence is a low-turnout vote being noticed and contested inside a one-day window.
The fast one is narrower but needs no vote at all. If your position sits in a vault on the transferPosition allowlist, the team multisig can transfer that position NFT to itself immediately. Today the allowlist covers only the seven wstUSR markets, which appear wound down, so the live exposure is small. But the gate that protects everyone else is a single governance action with a one-day timelock, after which seizure is instant. If you hold a vault position, the question worth re-asking each month is whether your vault ID is on that list.
The likelier repeat, because it already happened once, is a listed-collateral solvency failure: a stablecoin or LST accepted in a Fluid market breaks upstream, positions go underwater, and bad debt lands on the protocol. Last time Fluid absorbed it from treasury and depositors stayed whole. There is no insurance fund and no obligation to do that again. If the next event is larger than the treasury will cover, lender principal is what absorbs the gap. Position sizing, watching which collateral a given market accepts, and watching the governance forum are the mitigations available to you.
Bottom line
Caution, and for sharper reasons than last month. The audits are real, the vaults are immutable, the yield is genuinely earned rather than printed, and nothing in Fluid's own code has ever been exploited. But this run replaced two comfortable secondhand facts with measured ones. The timelock guarding every deposit is one day, not two. And the team multisig is not confined to housekeeping: in seven currently-allowlisted markets it can take a user's position outright, with no delay, under machinery stood up during the March bad-debt cleanup and never stood down. Layer on an oracle description we could not re-verify and can no longer exonerate via the Resolv event, a token concentration story that could put a single entity well past quorum, and a $21M bad-debt episode that only a discretionary backstop cleaned up, and this is a capable, well-built lender whose depositors are relying on governance staying honest and the team staying generous. Size it that way. Re-check the oracle wiring, the guardian set, the on-chain FLUID distribution and the vault allowlist next pass, because those four gaps are doing real work in this verdict.
Data appendix
- TVL (deposit side): $667.54M, DeFiLlama slug
fluid-lending, collateral net of borrowings. Borrow side $754.52M. Chains: Ethereum $464.51M (69.6%), Arbitrum $116.85M, Plasma $64.15M, Base $18.76M, Polygon $3.25M. 30d +4.7% (from $637.39M on 2026-07-13), 90d -18.5% (from $819.43M on 2026-05-14), 365d -50.8% (from $1,356.81M). ATH $2,366.8M on 2025-10-09, so 71.8% below it. Children sum: Lending $667.5M plus DEX $284.6M plus Lite $142.5M = $1.0947B, lending is ~61%. Source: api.llama.fi/protocol/fluid-lending and /protocols, this run. Cross-measure: our /lending board reads $635.6M supply, 112 markets, 5 chains, 72.9% utilization (different construction, same deposit side). - Audits: PeckShield (pre-launch), StateMind (pre-launch; Liquidity Layer updates), MixBytes (vault; DEX; Liquidity Layer), Cantina (DEX). Seven reports, four firms. Source: docs.fluid.instadapp.io/audits-and-security.html, confirmed this run. Bug bounty: Immunefi Instadapp program, 10% of directly affected funds up to $500,000 critical, guaranteed critical minimum $25,000 (corrects the "$5k min" in our 2026-07-01 report), scope covers Liquidity Layer, Lending and Vault.
- Admin / governance (on-chain, this run): Liquidity Layer 0x52Aa899454998Be5b000Ad077a46Bbe360F4e497, EIP-1967 proxy, admin slot = 0x2386DC45AdDed673317eF068992F19421B481F4c, implementation 0xcc331daf69752bece3dc98dbc63eacd5092266a2. Timelock delay() = 86,400s (1 day), GRACE_PERIOD = 1,209,600s (14 days), MINIMUM_DELAY = 3,600s, MAXIMUM_DELAY = 2,592,000s; its admin() is the Governor. Governor: 0x0204Cd037B2ec03605CFdFe482D8e257C765fa1b, name "INST Governor Bravo", proposalThreshold 1,000,000 FLUID (1%), quorumVotes 4,000,000 FLUID (4%), votingDelay 7,200 blocks, votingPeriod 14,400 blocks; its admin() and timelock() are the timelock, and token() is FLUID. Lending factory 0x54B91A0D94cb471F37f949c60F7Fa7935b551D03 owner() = timelock. DEX factory 0x91716C4EDA1Fb55e84Bf8b4c7085f84285c19085 owner() = timelock. Vault factory 0x324c5Dc1fC42c7a4D43d92df1eBA58a54d13Bf2d owner() = wrapper 0xb031913cb7ad81b8a4ba412b471c2da69bea410b, deployed 2026-03-29, whose
_getGovernance()reads the Liquidity Layer EIP-1967 admin slot, so vault governance is the same timelock. - Vault-factory wrapper powers (from verified source):
onlyGovernanceon setDeployer, setGlobalAuth, setVaultAuth, setVaultDeploymentLogic, setVaultIdAllowlisted, transferFactoryOwnership, spell (arbitrary delegatecall on the factory).onlyTeamOrGovernanceon setTransferDustPosAuth and transferPosition, which calls FACTORY.transferFrom(from, TEAM_MULTISIG, tokenId) for any position in an allowlisted vault, with no debt or health condition.onlyDustPosAuthOrTeamOrGovernanceon transferDustPosition (debt below 1e5 raw). TEAM_MULTISIG = 0x4F6F977aCDD1177DCD81aB83074855EcB9C2D49e, a smart-contract account (327 bytes, getOwners/getThreshold/VERSION/nonce all revert), signer set and threshold: refresh. Allowlisted vault IDs, set in the constructor and still true this run: 110 (0xee327311d8640156e87ec33ea55fcbf2309e0ce6, wstUSR/USDC), 111 (0x984636a30ed2b4a61fb7150ced644096349275d3, wstUSR/USDT), 112 (0x676fb78e26fd8f0483371c741fb16a7dd49911bb, wstUSR/GHO), 133 (0xacb58522296b514a0796179c48f85297f0cecb87, wstUSR/USDC), 134 (0xecb05340b48688275a3cc8ab1314f6478c666587, wstUSR/USDC+USDT), 135 (0x44d1a2632fe4ec817fb05b7a003c3194dd561a04, wstUSR/USDC+USDT), 143 (0x528af0f4ad74f84c624c6eaf04ecbfe6a3d7a770, wstUSR/USDC+USDT). Scale check: Liquidity Layer wstUSR balance is 0; VaultFactory position NFTs outstanding 18,853, of which the team multisig holds 188; totalVaults() = 181; no transferDustPosAuth was set at deployment and the team multisig itself is not one. All seven vaults have empty EIP-1967 implementation slots (code 20,813 to 23,761 bytes), so vault code is immutable. - Oracle: refresh. Not established this run; constantsView has no oracle field (confirmed against the vault ABI) and the docs oracle page 404s. Prior (2026-07-01, unverified since): Uniswap V3 TWAP cross-checked against Chainlink, Redstone fallback in some vault implementations. Contested: one incident write-up attributes part of the Resolv bad debt to outdated wstUSR oracle pricing, so the July claim that the event says nothing about oracle quality is itself unconfirmed.
- Holder concentration: total supply verified on-chain at exactly 100,000,000 FLUID (0x6f40d4A6237C257fff2dB00FA0510DeEECd303eb, symbol FLUID). Top-holder table: refresh (Etherscan Pro endpoint). Announced 2026-07-24: Kinetic Group, regulated by the Dubai Financial Services Authority, to acquire up to 10% of supply via secondary market and OTC, not from DAO treasury or team allocations; Fluid Foundation to place 5% with regulated custodians in Switzerland, the EU, Hong Kong and Singapore, locked four years to 2030; AGI3 grants the Foundation a 2% equity stake. Announced intent, not confirmed accumulation.
- Recent-news scan: No protocol incident found between 2026-07-01 and 2026-08-12. Standing 2026 record: (a) late Mar 2026, Resolv USR unbacked-mint upstream, ~$21M bad debt in Fluid markets, split ~$9.7M Resolv / ~$8.2M Fluid treasury / ~$1.5M deferred team revenue, ~$19.3M repaid, cleaned up via a team-multisig draw of ~$8M USDC/USDT on a pre-approved credit facility against the shared Liquidity Layer, governance proposal posted 2026-05-11 after the draw, resolution announced 2026-05-12, no user deposit touched (source: defiprime.com); (b) May 2026 off-chain Merkle rewards key compromise, ~125,000 FLUID and ~51,900 GHO, core contracts and user funds unaffected, disclosed 2026-05-31 (source: cryptotimes.io). A vaguely-worded "compensation plan" item exists in secondary coverage but names no loss and no recipients; not treated as evidence of user losses. Liquidation-engine behaviour through the Oct 2025 drawdown: refresh. Maintained monthly. Methodology: DeFi Research Instruction v2.