fix(phantom): connect Bitcoin via Wallet Standard when injected provider absent#98
Open
0xepicode wants to merge 1 commit into
Open
fix(phantom): connect Bitcoin via Wallet Standard when injected provider absent#980xepicode wants to merge 1 commit into
0xepicode wants to merge 1 commit into
Conversation
…der absent Phantom deprecated the injected window.phantom.bitcoin provider; newer builds expose Bitcoin only through the Wallet Standard registry (Solana/EVM are still injected, so those chains keep working). Connecting BTC therefore threw wallet_phantom_not_found. getBitcoinAccess now prefers the legacy injected provider when present (no behaviour change for existing users) and falls back to discovering Phantom via @wallet-standard/app getWallets() using the bitcoin:connect / bitcoin:signTransaction features.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Connecting Phantom for Bitcoin throws
SwapKitError: wallet_phantom_not_found. Other chains (Solana, Ethereum) work fine; Phantom is installed.Root cause
Phantom has deprecated the injected
window.phantom.bitcoinprovider (docs) and newer builds expose Bitcoin only through the Wallet Standard registry. Solana and EVM are still injected (window.phantom.solana/window.phantom.ethereum), which is exactly why those chains keep working while BTC fails.The Bitcoin connect path detected the provider solely via
window.phantom.bitcoin?.isPhantom:For users on newer Phantom builds
window.phantom.bitcoinis absent → immediate throw. (Confirms hypothesis #1 of the investigation — the symptom asymmetry, BTC-only failure with Solana working on the samewindow.phantom, can only be explained by the injected BTC provider being gone.)Fix
New
getBitcoinAccess()resolves a Bitcoin signing surface in two steps:window.phantom.bitcoin) — zero behaviour change for users where it still works.@wallet-standard/appgetWallets()and uses the canonical Bitcoin Wallet Standard features:bitcoin:connect→connect({ purposes: ["payment"] })→{ accounts }(uses the payment address, correct for swaps)bitcoin:signTransaction→signTransaction({ psbt, inputsToSign: [{ account, signingIndexes }] })→[{ signedPsbt }]The
getWalletMethodsBitcoin case now delegates togetBitcoinAccess; the toolbox/signer wiring is unchanged.Tests
New
packages/wallet-extensions/test/phantom-bitcoin.test.ts(deterministic, no network):develop, passes here)wallet_phantom_not_foundwhen neither path availablecore_transaction_failedwhen WS signing returns no resultFull suite green (40 pass), typecheck + biome clean.
Preventing this class of bug
Other in-repo wallets still resolve BTC via deprecated injected providers and will break the same way if those wallets follow Phantom's migration (OKX, Bitget, OneKey, CTRL/XDEFI, KeepKey-bex, Vultisig). Worth a follow-up to standardise on Wallet Standard discovery for Bitcoin across extension wallets.