3.4 KiB
Morphit v1.0.0-beta.27
A small reliability release with one fix at its heart: your instance now routes around a Blurt RPC node that has gone down, instead of getting stuck on it. Every instance talks to a set of public Blurt nodes for reading the chain and broadcasting operations, and it already prefers the fastest one and fails over when a node times out or refuses the connection. But if a node's upstream proxy answered with an "origin is unreachable" error (the 520–527 status range), the instance treated that as a normal rejection and gave up on that request rather than trying another node. That's fixed: those errors are now recognized as "this node is unreachable — try the next one," so reads and broadcasts hop past a dead node automatically.
The most visible symptom of the old behavior: a relay with a healthy BLURT balance could still mint zero account-creation tokens if the one node it reached for that broadcast happened to be down — the auto-minter would log a single failure and stop. With this release, a single down node no longer stalls account-creation token minting, signups, or anything else the relay or indexer broadcasts; the instance simply uses a node that's up.
For operators: morphit-ops upgrade handles this release the usual way — it runs
npm ci and rebuilds the web frontend, the command-line tools, and the MCP
server for you. Like the last several betas, this release changes no
third-party dependencies, so there's no special install step. Managing which
Blurt RPC nodes your instance uses is the relay and indexer's job (with the
upgrade flow keeping the defaults current) — never something you should have to
hand-edit while the software is running.
Fixed
- Your instance routes around a downed Blurt RPC node. When a node's upstream proxy returns an "origin unreachable" error (HTTP 520–527 — e.g. 521 "web server is down"), the instance now classifies it as an unreachable endpoint and rotates to a healthy node, applying the same back-off it already uses for timeouts and rate limits. Previously these surfaced as ordinary errors, so a single down node could dead-end a request. This is what could leave a fully-funded relay minting zero account-creation tokens — its fastest node was down and it didn't fail over. Reads and broadcasts both recover now.
For operators
- Fresh Ansible deployments point at the current Blurt nodes. The Ansible
deployment defaults pinned the indexer to a Blurt RPC node that has since been
decommissioned (and the egress firewall opened only that node), so a brand-new
Ansible install could come up unable to reach a working node. The defaults now
use the current canonical set of six Blurt RPC endpoints, and the egress
allowlist matches. If you deployed via Ansible and chose your own endpoints,
nothing changes for you. (Installs created by
morphit-ops initwere never affected — they already used the canonical set.)
Under the hood
- More regression guards. New automated checks pin both fixes so a future change can't quietly undo them: the RPC pool's "try another node" logic is tested against the full origin-unreachable status range (including the exact error a relay saw in the field), and the canonical-endpoint guard — which keeps every copy of the node list in sync — now also covers the Ansible deployment defaults, the one place the list had been allowed to drift.