Ecosystem 6.3.7
2 August 2026
This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.
Ecosystem v6.3.7
Release Date: August 2, 2026 Tags: CUSTODY, ADMIN, DASHBOARD, SETTLEMENT, COVERAGE, WITHDRAWALS, PAYOUTS, CHAINS, GAS, VAULT, REPORTING, OPERATIONS, BUG-FIXES
Overview
One body of work: the ecosystem admin console — the landing page of the addon that holds customer coins, which until now reported nothing about the coins.
Its four headline figures — Base Chains, Extended Chains, Active Chains and Wallet Types — were meaningless or wrong. Extended Chains was the number 5 on every installation that has ever existed. Not one figure on the page said anything about whether customer funds were covered, whether a payout had stopped, or whether a chain had gone quiet. It now reports settlement coverage per asset, the payouts that will never restart on their own, and chain readiness.
Nothing about how a withdrawal is sourced, signed or settled changed. This release adds one read-only report and rebuilds one page.
Every headline figure on this page is new or replaced, and four of the old ones were meaningless or wrong — read Upgrade Notes before comparing anything against what you recorded last week.
Requires Core v6.6.1.
Update Instructions
pnpm updatorNo migration and no seeder. Nothing in this release changes the schema, and nothing needs granting — the console reads the same ecosystem admin permission your roles already hold.
One optional setting: ECO_MASTER_WALLET_MIN_BALANCE sets the native balance at or below which a chain's gas payer is called out as a risk. Left unset it is zero, which means a gas payer is flagged only when it is genuinely empty.
Highlights
What the console reports now
Settlement coverage, per asset. What customers are owed — their balance plus anything held against an open ecosystem order — against what the platform records itself holding on-chain for them, less the balance the withdrawal engine has already committed elsewhere. That deduction is the one the engine itself applies before it will source a payout, scoped to the network each chain is actually running on, and the console now applies it too instead of quietly reporting the gross record as cover. Both figures are shown, so the deduction is named rather than silently folded in.
Coverage can only understate, never overstate. Where the platform's own records are ambiguous the console takes the pessimistic reading, and one adjustment the engine makes cannot be reconstructed from grouped records at all — so an asset shown as short may still pay out, but an asset shown as covered is not inflated by it. Upgrade Notes explains how to read that before you act on it.
The payouts that will never restart on their own. The withdrawal recovery watchdog fixes some stuck payouts by itself and deliberately refuses to touch others, because reverting them would risk paying twice. Those are the ones that wait for a person forever, and the customer's balance was already debited when the row was created. They are now counted, ranked and listed, separated from the ones that will resolve without you.
Chain readiness. Per chain: whether its endpoints are configured, whether its extension is switched on, how many customer addresses it carries, what its gas payer holds, and what the last stored diagnostics run said — or not verified, where none has been run.
Every count now links to the register that acts on it, including the master wallet list, where an empty gas payer is topped up.
Upgrade Notes
Coverage is the first thing you will see — read it before you act on it
The console leads with how many assets are short of cover. It is the figure that matters most on this addon and it is the one that is easiest to misread.
- What it compares: what customers are owed in an asset, against what the platform's own records say it holds on-chain for them at customer deposit addresses, less the balance the withdrawal engine has already paid away from those addresses. That last deduction is exactly what the engine subtracts before it will source a payout, so the console and the payout path deduct the same thing.
- What it is not: a live reading of any blockchain. It is the platform's own record, kept in the same locked transaction that credits a deposit and debits a withdrawal, and the page says so rather than implying a chain scan.
- It can only understate. A record that says the platform holds less than it does is treated as a bookkeeping discrepancy and never counted as cover. And the engine has one further way of sourcing a payout — against a wallet balance whose per-chain row has lagged behind it — which cannot be reconstructed from grouped totals without counting the same balance once per chain it holds an address on, so it is left out entirely. An asset shown as short may therefore still pay out; an asset shown as covered is not inflated by it.
Four figures you have been reading were meaningless or wrong
None of the old headline numbers survive, and they should not be compared against anything you recorded.
- Extended Chains was 5 on every installation. It is the length of a fixed list in the source, not a count of anything on your platform.
- Base Chains counted the twelve chains built into the platform plus any custom chain you had added, whether or not a single one had an endpoint configured. A fresh installation with nothing set up read 12.
- Active Chains counted only the five extension chains that were switched on. Every EVM and UTXO chain was excluded, so an installation running eight EVM chains with no blockchain extension installed reported 0 active chains.
- Wallet Types was the number 2 whenever the vault was unlocked, and 0 when it was locked. It counted nothing.
The console now polls, and the polling is bounded
- Changed: the page refreshes every 30 seconds, and every figure on it is a database aggregate rather than a list counted in the browser.
Added
Settlement coverage, per asset
- Added a per-asset coverage table: what customers are owed, what is recorded on-chain, what is left after the engine's committed balance is removed, the shortfall, the percentage, and the chains that asset can settle on.
- Added the split between spendable balance and balance held against an open order, which is money the platform still owes but a customer cannot withdraw today.
- Added the committed deduction as a named line under the recorded figure, so the gap between the record and the cover bar beside it is explained rather than left as an unexplained discrepancy.
- Added three states — Covered, Partly covered and Unbacked — sorted worst first, so a fully unbacked dust asset cannot be buried under the healthy majors. An asset with some cover is a shortfall to investigate; an asset with none is a customer who cannot withdraw at all.
The payouts that need a person
- Added a triage list of in-flight ecosystem payouts, classified by what will happen to them if you do nothing: already broadcast and awaiting settlement, abandoned by recovery, outcome unknown, or still in flight. Only the middle two need you.
- Added the reason recovery walks away, stated rather than left to be discovered: on every chain but the UTXO ones, a payout handler writes its transaction hash only after the broadcast returns, so a crash in that window is indistinguishable from a crash before it — and reverting it would risk paying the customer twice.
- Added a headline alert counting them, with the fact that decides how urgent it is: the customer's balance was debited when the payout was created, so each one is somebody who has paid and not been paid.
- Added an explicit already broadcast — never retry this payout marker on the rows where the coins have already left.
- Added ages in the same format the withdrawal queue uses, so a payout shown as 31h here reads 31h on the queue this links into.
Chain readiness
- Added a row per chain that is actually carrying custody — one holding a derived address, an active token, a custodial wallet or a master wallet. Chains that are merely registered are configuration, not custody, and are one click away rather than burying the two that matter.
- Added per-chain endpoint state, extension state, custody address count, gas balance and the verdict of the last stored diagnostics run with its age.
- Added not verified for a chain that has never been tested from this installation, or whose stored result has aged out. A green tick there would be an invented pass.
- Added endpoints reported as not applicable where no single setting decides them — a UTXO chain reaches its network through a provider with a built-in default, and two of the extension chains reach their explorer through the node itself.
- Added a gas warning where — and only where — the master wallet actually signs. A chain whose active assets are all native never touches it, so it is not flagged; the same chain with one relayed token is.
- Added
ECO_MASTER_WALLET_MIN_BALANCE, and the page names the floor it is applying when you set one. Unset, it is zero, because "empty" is a fact and any other floor is a guess that would have to be per-chain. - Added a row for a chain that holds custody but appears in no registry at all — what a removed extension or a deleted custom chain leaves behind. The coins are still there, and it was the easiest thing on this page to lose.
The pipeline, the registers and the last 24 hours
- Added the ecosystem payout pipeline: waiting, processing, and needing a person, each with the age of the oldest row and each opening the withdrawal queue.
- Added 24-hour counters for deposits credited, payouts completed, payouts failed and transfers failed, each opening the log its figure was counted from.
- Added master wallets, custodial wallets and active tokens as counts that link into their registers — the master wallet list among them, which is where an empty gas payer is topped up.
Vault state where it can be acted on
- Added a blocking alert when the ecosystem vault is locked, in place of a chip beside the old title. With the vault locked no stored key can be decrypted, so nothing signs on any chain — it is the one switch that takes the whole addon down.
- Added the passphrase dialog to the failure state as well as the healthy page, because a locked vault is a likely reason for the console to be unable to read its figures in the first place.
Changed
- Changed every figure on the page to be computed by the database in a single request. The page previously made two list fetches and counted the arrays in the browser.
- Changed the page to keep its last good figures when a refresh fails, marking them stale, instead of discarding a working console over one bad request.
- Removed the "Quick Actions" panel. It was four links the addon's own navigation already carries, dressed as cards. Every count on the new page is a live figure that links to the rows behind it, which is what those cards were standing in for.
Fixed
A console that could not load looked like an installation with nothing in it
- Fixed the page silently ignoring a failed request. It kept its empty starting state and rendered Base Chains 0, Extended Chains 0 with empty chain grids and no message anywhere — an outage and a bare installation produced the same screen.
- Fixed the same failure being unreportable to the operator: the request was made in silent mode, so nothing was raised on screen either.
- Changed: a first load that fails now takes over the page with the reason and a retry, and keeps the vault control and the chain configuration link reachable. A refresh that fails leaves the figures that did arrive on screen, flags them as stale, and stops the live indicator claiming to be live above a failure notice.
"Active Chains" counted five chains out of seventeen
- Fixed the Active Chains figure, which counted only the five extension chains that were switched on and ignored every EVM and UTXO chain the platform runs. On an installation with no blockchain extension installed it read 0 while eight chains were live. It is replaced by a count of chains carrying custody and a count of those that are not ready.
The custom chain figure counted a page of results
- Fixed the custom chain count being the length of one fetched page rather than a count of the table. It stopped at 100.