MetaFlux 0.9.6 — An account could have been credited money nothing backed, and two order lanes settled fills that nothing recorded
This release is live. MetaFlux 0.9.6 swapped in at block height 4,680,000 on chain 114514. It closes a hole that could have credited an account money nothing backed, records the fills two order lanes were settling in silence, tells you when an order is dropped instead of leaving you to time out, and repairs an entire read lane that the official client could not reach at all.
An account could have been credited money nothing backed — When a portfolio-margin account's spot collateral was seized to cover a deficit, the account's cash balance rose and nothing anywhere fell. No money moved and no shortfall was recorded: the credit stood against nothing. The seizure now settles through the same waterfall every other tier uses, so the credit is either funded from the insurance pot or booked as a debt, and never neither. A guard the code relied on to keep this shut turned out to leak on the very case it was written for, so it is deleted and the overlap it feared is refused at the governance vote instead — where it is one rejected vote rather than an accounting hole. The lane was never armed on this chain, so no account was ever affected.
Two order lanes settled fills that nothing recorded — An order placed from MetaFluxEVM that crossed the book on placement, and any fill from a batch auction, moved both positions and moved the money while appearing in no fill list, no trade tape, no history and no stream — for either side. Both now record. Two earlier lanes with the same defect were fixed in 0.9.5; that is all four.
A dropped order told you nothing for five seconds — When the chain refused an action at commit time — an expiry, a retired action type — the sender learned nothing until their own client timed out. There is now a notice on the notifications channel carrying the verdict and the reason. It is sent only to a sender the chain has verified, so nobody can push a notice at someone else's account.
Nine methods of the official TypeScript client were broken against a whole read lane — The historical reads answered with their type marker in a different place from every other read, and the client rejects that as a malformed response. So `historical_orders`, `user_funding`, `user_position_history`, the money-history read and the withdrawal history all threw, from the published client, against the live exchange. Every read now answers one shape.
Two reads that had no answer — Borrow interest is now its own query: every open borrow with its principal, what it has accrued, and both index points so you can check the arithmetic yourself. And a daily volume history, per UTC day, with the exchange's traded volume beside your own maker and taker share. Neither existed in any form before. Note that the volume read is not the fee ladder — the ladder counts thirty days, weighs each product apart, and counts only volume that paid a fee.
Interest was computed two ways — The reads that report a debt carried their own copy of the accrual formula, and it multiplied where the settlement engine divides. On a debt of three units against a one-to-three index ratio the engine says 0.9999999999999999999999999999 and the copy said 1. Three surfaces read the copy: the margin rows, the account summary and the live feed. There is one implementation now, and it is the one the chain settles on.
A Chase order is finally listed — The terminal could place a chase order and then never show it again. There is a Chase tab now, beside TWAP. The node keeps no readable chase list, so the tab lists the chases that browser placed: one started on another device, or in a cleared browser, does not appear there, and is cancelled with its handle from that device. Deposits and withdrawals also gained their history: that tab previously showed only what had arrived since the page opened.