Skip to content

Protocol U Support and imported upstream fixes from ecadlabs beacon patches

Choose a tag to compare

@ajinkyasraj ajinkyasraj released this 11 Jun 20:48
05b0893

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 tz5 account prefix (post-quantum ML-DSA-44 keys) and the corresponding mdpk public-key prefix introduced in Protocol U.
  • tz5 is 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 disableWalletConnect option on DAppClientOptions. When true, the WalletConnect transport is never constructed or listened to, and walletConnectPeerInfo is omitted from the PAIR_INIT pairing 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; bounded pairing.disconnect on wallet-initiated session_delete; cleanup that survives a stalled transport close; listener teardown robust against client swaps; synthesized peer senderId now 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 ACCOUNTS changes to recover the active account across tabs.
  • Matrix: manual sync-stop treated as a clean shutdown; sendMessage failures rethrown; transaction ids serialized; broadcast send kept resilient with Promise.allSettled.
  • Wallet: an inbound Disconnect is 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 requestTimeoutMs option on DAppClientOptions (set 0 or 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: true to fall back to postMessage/P2P. (No change needed for normal web dApps — WalletConnect stays enabled by default.)
  • Handle the new PEER_UNREACHABLE error: requests now reject with BeaconErrorType.PEER_UNREACHABLE when a wallet peer never responds, instead of hanging. Surface a "wallet didn't respond — try again" state in your UI.
  • Optional: tune requestTimeoutMs if the default request timeout doesn't fit your UX (set 0/negative to disable).
  • Protocol U: upgrade to accept tz5 accounts. If you do any client-side address/prefix validation of your own, allow the tz5 prefix.

Wallets

  • Protocol U: upgrade to advertise and pair tz5 accounts; ensure your own address/public-key validation accepts tz5 / mdpk.
  • Disconnect handling: a Disconnect message 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