Where the chain and the docs disagree
Every place where measured behaviour on Hyperliquid contradicts the official docs: what the docs say, what was measured, the sample and the covering page.
The docs lag the chain, and following a stale sentence can fail silently: a transaction that succeeds and does nothing, a timing off by a factor of ten, a field scaled differently. Where they disagree, on-chain measurement wins, then the official docs, then SDK code. Each canonical page flags its own cases; this page lists them all, with the sample size wherever there was one.
Most measurements come from three September 2026 research tracks, settled by transactions and live API responses (borrow-rate options, composable credit, collateral underwriting). The rest come from auditing SDK wire formats against the live exchange.
The docs say one thing, the chain does another
Section titled “The docs say one thing, the chain does another”| Topic | The docs say | Measured | Evidence | Covered on |
|---|---|---|---|---|
| CoreWriter delay | Order actions and vault transfers sent from CoreWriter “are delayed onchain for a few seconds” | Orders are accepted 0.35 to 0.51 s after the EVM block. Only vault transfers are delayed, by 4.05 to 4.10 s | 5,455 mainnet CoreWriter actions over 73,914 blocks; 52 orders matched by client order id across 15 accounts and 14 markets; 6 vault transfers | execution order |
| CoreWriter supply for contracts | The portfolio margin page: “In a future upgrade, CoreWriter will expose the same supply action for smart contracts.” The CoreWriter table on another page already lists action 15 | Live. A testnet contract supplied 500 USDC and held 500.00000051 one block later. Mainnet decodes action 15 into a typed lending action and enforces lending rules on it | Testnet probe contract; two mainnet refusals carrying the CoreWriter-only action shape | composable credit |
| CoreWriter action 14 | The action table runs from 13 to 15 | Action 14 exists on mainnet; its semantics are unknown | 25 emissions in 3,000,001 mainnet blocks | CoreWriter action reference |
| HIP-4 status | The HIP-4 deployer actions page is headed “Testnet-only” | HIP-4 runs on mainnet | 228 active outcomes, 21 questions and 3 venues on mainnet on 2026-09-20; the live page had dropped the line by then, the dated mirror still carries it | HIP-4 |
| Outcome fees | The HIP-4 page: “Fees are currently zero for outcome markets for initial testing.” | Fees are charged on the closing side only, at spot rates x (scale + max(scale, 1)). Every buy was billed 0 and every sell was charged. The docs’ own fees page agrees with the measurement |
7,256 mainnet fills, 2026-09-12 | fees |
| HYPE lending supply cap | “HYPE: 10M HYPE global supply cap” | 10,233,170.44 HYPE supplied: either the cap moved or it is soft | Live reserve read, 2026-09-20 | borrowing and lending |
| Aligned quote token actions | enableAlignedQuoteToken and disableAlignedQuoteToken are documented spotDeploy variants |
Both are rejected at the parse stage on mainnet and testnet | SDK audit using a dummy signature, which the exchange checks only after parsing | quote assets |
outcomeMetaUpdates frame |
Typed as a one-element tuple, [WsOutcomeMetaUpdate] |
Arrives as an array | SDK wire audit | WebSocket |
The docs are silent, and not knowing loses money
Section titled “The docs are silent, and not knowing loses money”Here the docs say nothing, or cover one direction only.
| Topic | The docs say | Measured | Evidence | Covered on |
|---|---|---|---|---|
| CoreWriter failures | CoreWriter burns about 25,000 gas “before emitting a log to be processed by HyperCore as an action”; nothing on failure | The EVM transaction succeeds whether or not HyperCore executes. Four refusals seen with EVM status 1: Invalid number of decimals, Insufficient USDC or HYPE balance for token transfer gas, Borrow/Lend error: Insufficient spot balance for operation, Manual borrow/lend not allowed with portfolio margin |
Testnet transactions and mainnet refusals, each read from HyperCore’s action log | footguns |
| Rounding, HyperCore to HyperEVM | A non-round amount is “burned (guaranteed to be <1 Wei)”, which describes the HyperEVM to HyperCore direction with extra EVM decimals | In the other direction, with USDC’s evmExtraWeiDecimals of -2, an amount that is not a multiple of 100 wei is rejected, not burned |
5 of 5 transfers matched wei % 100: two non-round refused, three round accepted |
moving assets |
| Bridge gas | A transfer from HyperCore to the HyperEVM “costs 200k gas at the base gas price of the next HyperEVM block” | The gas is charged from the sender’s HyperCore balance, so the whole balance can never be sent | On testnet, sending 100 of 100 USDC refused; 99 sent for 0.000588 USDC | moving assets |
| Action 17 units | wei “must be a multiple of size”; no scale given |
1e8 per contract | wei = 100000000 minted exactly one Long and one Short and moved 1 USDC, testnet |
CoreWriter |
| Precompile history | Values match the latest HyperCore state when the EVM block is built; independent archive nodes serve historical state | The precompiles fail at any explicit block number, including the current head, even on an archive node that serves historical eth_getCode |
PrecompileOutOfGas at head, head minus 1, 20 and 10,000 |
precompiles |
0x811 with no record |
Nothing | Reverts rather than returning zeros, even for a HyperCore user holding spot | Mainnet and testnet, including an account holding 31,989 USDC of spot | precompiles |
| USDC on the HyperEVM | The USDC page gives 0xb88339cb7199b77e23db6e890353e22632ba630f as the USDC contract on the HyperEVM |
HyperCore USDC (token 0) is linked to a different contract, 0x6b9e773128f453f5c2c60935ee2de2cbc5390a24. The docs’ USDC is not linked, so moving between the two is a swap |
spotMeta and the tokenInfo precompile |
moving assets |
| Staking links and deployers | Staking links attribute a staking account’s HYPE to a trading account’s fee tier; nothing on deployers | A deployer cannot have one. Activation is refused with Deployer cannot have staking link |
Testnet probe | collateral underwriting |
| Unstaking on testnet | A 7-day unstaking queue | Exactly 7 days on mainnet; about 5 minutes on testnet | One mainnet exit finalised 7 days and 1 second after it started; one testnet withdrawal finalised in 5 minutes | staking |
| Undocumented surface | Nothing | One SDK audit counted 18 exchange actions and 19 info requests that answer on mainnet but that it found no docs page for. Two checked against the current mirror appear nowhere in it: the HTTP borrowLend action and the userToMultiSigSigners info request |
SDK audit against both networks; mirror search | exchange action reference |
Wrong once, corrected since
Section titled “Wrong once, corrected since”These are now right in the current docs mirror; they stay listed for checking older notes and SDKs.
| Topic | What was reported | The docs now | Covered on |
|---|---|---|---|
| Negate key | Earlier documentation and SDK examples used negateQuestion; the wire key is negateOutcome, checked against Hyperliquid’s own interface |
The exchange endpoint page in the current mirror documents negateOutcome |
split, merge, negate |
| HIP-4 deploy action | Deployment used {"type":"spotDeploy","outcome":{...}}; that shape is now rejected |
The current mirror documents a top-level outcomeDeploy with venue and operation |
outcome templates |
Older SDKs still carry superseded forms: one sent outcomeDeploy without the venue and operation envelope, and mainnet answered Failed to deserialize the JSON body into the target type.
Not yet shown to contradict the docs
Section titled “Not yet shown to contradict the docs”| Topic | What is known |
|---|---|
| API wallets per account | The docs allow 1 unnamed and up to 3 named, plus 2 named per sub-account. One live account held 14; without its sub-account count, not yet a contradiction |
| Action 17 timing on mainnet | Split and merge landed in the transaction’s own block on testnet; the mainnet timing window had no action 17 traffic, so mainnet is inferred, not measured |
| Borrow and repay through CoreWriter | The docs list action 15 as supply and withdraw; one tool routes ops 2 and 3 as borrow and repay; measurements cover supply and withdraw only |
| HIP-4 slashing for late settlement | Specified when HIP-4 was announced, disclaimed for the testnet release, not observed on mainnet |
For the timing and failure findings in context, see What one HyperEVM transaction can and cannot do. Every silent failure, with its fix, is in Footguns, measured.