Protocol U Support and imported upstream fixes from ecadlabs beacon patches
What's Changed since 4.8.4
This release rolls up an upstream resilience import, Protocol U (Ushuaia) / tz5 address support, and a Firefox browser-extension connection fix. Most changes are internal hardening that require no integration work — the action items for dApps and wallets are summarized at the bottom.
✨ Protocol U (Ushuaia) — tz5 / ML-DSA-44 addresses (#35)
- Adds support for the new
tz5account prefix (post-quantum ML-DSA-44 keys) and the correspondingmdpkpublic-key prefix introduced in Protocol U. tz5is now accepted by address validation, signature-verification, and public-key classification paths. No API changes — existing address handling continues to work.
🦊 Firefox browser-extension connection fix (#37)
- dApps embedded in a Firefox MV3 content-script could not connect: Firefox's isolated "Xray" compartment breaks the WalletConnect provider, and the client previously hung forever awaiting a WC transport that could never initialize.
- New
disableWalletConnectoption onDAppClientOptions. Whentrue, the WalletConnect transport is never constructed or listened to, andwalletConnectPeerInfois omitted from thePAIR_INITpairing event — so the UI never waits on a sync code for a transport that isn't there. postMessage and P2P are unaffected. fix(matrix): a cached relay node is now retained through a transient offline state (navigator.onLine === false) instead of being deleted and triggering a doomed rediscovery — fixes dropped pairings on flaky mobile connections.
🛠️ Upstream resilience import from beacon patches (#34)
Imported and conformed a large batch of upstream fixes. Highlights:
- Storage: all three backends (LocalStorage / ChromeStorage / IndexedDB) now route through one normalization helper. Fixes the bug where clearing a key wrote the literal string
"undefined", so a disconnected account read back as truthy. WCStorage key prefix-mismatch and empty-array detection corrected. - WalletConnect: single-flight
SignClient/pairing initialization; boundedpairing.disconnecton wallet-initiatedsession_delete; cleanup that survives a stalled transport close; listener teardown robust against client swaps; synthesized peersenderIdnow matches the stored account. - DAppClient: coalesces concurrent permission requests and concurrent disconnects; rejects requests to an unreachable wallet peer; recovers from invalid stored session state; stops reusing a destroyed client singleton; repairs orphaned active-account pointers; observes
ACCOUNTSchanges to recover the active account across tabs. - Matrix: manual sync-stop treated as a clean shutdown;
sendMessagefailures rethrown; transaction ids serialized; broadcast send kept resilient withPromise.allSettled. - Wallet: an inbound
Disconnectis now scoped to the peer that sent it. - New error type:
BeaconErrorType.PEER_UNREACHABLE— returned when the wallet peer does not acknowledge or answer a request before the request timeout. - New
requestTimeoutMsoption onDAppClientOptions(set0or negative to disable request timeouts).
🧹 Other
- Removed the discontinued Spire wallet from the supported-wallet list.
👉 What integrators should address
dApps
- Firefox extension dApps: if you embed the SDK in a Firefox MV3 content script, set
disableWalletConnect: trueto fall back to postMessage/P2P. (No change needed for normal web dApps — WalletConnect stays enabled by default.) - Handle the new
PEER_UNREACHABLEerror: requests now reject withBeaconErrorType.PEER_UNREACHABLEwhen a wallet peer never responds, instead of hanging. Surface a "wallet didn't respond — try again" state in your UI. - Optional: tune
requestTimeoutMsif the default request timeout doesn't fit your UX (set0/negative to disable). - Protocol U: upgrade to accept
tz5accounts. If you do any client-side address/prefix validation of your own, allow thetz5prefix.
Wallets
- Protocol U: upgrade to advertise and pair
tz5accounts; ensure your own address/public-key validation acceptstz5/mdpk. - Disconnect handling: a
Disconnectmessage is now scoped to the originating peer — verify multi-peer sessions behave as expected after upgrade.
Everything else (storage normalization, disconnect/permission coalescing, Matrix and WalletConnect resilience) is internal and requires no code changes — just upgrade the dependency.
Full Changelog: v4.8.4...v4.8.5