From 489de7c77be40d8131b721d81cf89241fe5348b3 Mon Sep 17 00:00:00 2001 From: Felipe Mendes Date: Tue, 14 Jan 2025 19:28:35 -0300 Subject: [PATCH] fix: bitcoin adapter switch network (#3639) --- .changeset/few-birds-speak.md | 23 +++++++++++ packages/adapters/bitcoin/src/adapter.ts | 5 --- .../bitcoin/tests/BitcoinAdapter.test.ts | 39 +++++++++++++++++-- .../tests/mocks/mockUniversalProvider.ts | 1 + 4 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 .changeset/few-birds-speak.md diff --git a/.changeset/few-birds-speak.md b/.changeset/few-birds-speak.md new file mode 100644 index 0000000000..bf7f34575e --- /dev/null +++ b/.changeset/few-birds-speak.md @@ -0,0 +1,23 @@ +--- +'@reown/appkit-adapter-bitcoin': patch +'@reown/appkit-adapter-ethers': patch +'@reown/appkit-adapter-ethers5': patch +'@reown/appkit-adapter-solana': patch +'@reown/appkit-adapter-wagmi': patch +'@reown/appkit': patch +'@reown/appkit-utils': patch +'@reown/appkit-cdn': patch +'@reown/appkit-cli': patch +'@reown/appkit-common': patch +'@reown/appkit-core': patch +'@reown/appkit-experimental': patch +'@reown/appkit-polyfills': patch +'@reown/appkit-scaffold-ui': patch +'@reown/appkit-siwe': patch +'@reown/appkit-siwx': patch +'@reown/appkit-ui': patch +'@reown/appkit-wallet': patch +'@reown/appkit-wallet-button': patch +--- + +Fix BitcoinAdapter `switchNetwork` function execution diff --git a/packages/adapters/bitcoin/src/adapter.ts b/packages/adapters/bitcoin/src/adapter.ts index abb9b4bafa..df82dfe082 100644 --- a/packages/adapters/bitcoin/src/adapter.ts +++ b/packages/adapters/bitcoin/src/adapter.ts @@ -177,11 +177,6 @@ export class BitcoinAdapter extends AdapterBlueprint { return walletConnectProvider as unknown as Provider } - override switchNetwork(_params: AdapterBlueprint.SwitchNetworkParams): Promise { - // Switch network - return Promise.resolve() - } - override async disconnect(params: AdapterBlueprint.DisconnectParams): Promise { if (params?.provider) { await params.provider.disconnect() diff --git a/packages/adapters/bitcoin/tests/BitcoinAdapter.test.ts b/packages/adapters/bitcoin/tests/BitcoinAdapter.test.ts index 8bde664b27..c8a28149ab 100644 --- a/packages/adapters/bitcoin/tests/BitcoinAdapter.test.ts +++ b/packages/adapters/bitcoin/tests/BitcoinAdapter.test.ts @@ -1,7 +1,7 @@ -import { beforeEach, describe, it, vi, type Mock, expect } from 'vitest' +import { beforeEach, describe, it, vi, type Mock, expect, type MockedFunction } from 'vitest' import { BitcoinAdapter, type BitcoinConnector } from '../src' import type { BitcoinApi } from '../src/utils/BitcoinApi' -import { bitcoin, mainnet } from '@reown/appkit/networks' +import { bitcoin, bitcoinTestnet, mainnet } from '@reown/appkit/networks' import { mockUTXO } from './mocks/mockUTXO' import { SatsConnectConnector } from '../src/connectors/SatsConnectConnector' import { mockSatsConnectProvider } from './mocks/mockSatsConnect' @@ -10,6 +10,7 @@ import { OKXConnector } from '../src/connectors/OKXConnector' import { LeatherConnector } from '../src/connectors/LeatherConnector' import { WalletConnectProvider } from '../src/utils/WalletConnectProvider' import { ConstantsUtil } from '@reown/appkit-common' +import { mockUniversalProvider } from './mocks/mockUniversalProvider' function mockBitcoinApi(): { [K in keyof BitcoinApi.Interface]: Mock } { return { @@ -481,6 +482,39 @@ describe('BitcoinAdapter', () => { }) }) + describe('switchNetwork', () => { + it('should execute switch network', async () => { + const provider = new SatsConnectConnector({ + provider: mockSatsConnectProvider().provider, + requestedChains: [bitcoin], + getActiveNetwork: () => bitcoin + }) + + await expect( + adapter.switchNetwork({ + caipNetwork: bitcoinTestnet, + provider, + providerType: provider.type + }) + ).resolves.toBeUndefined() + }) + + it('should execute switch network for WalletConnectConnector', async () => { + const provider = mockUniversalProvider() + const setDefaultChainSpy = provider.setDefaultChain as MockedFunction< + typeof provider.setDefaultChain + > + + await adapter.switchNetwork({ + caipNetwork: bitcoinTestnet, + provider, + providerType: 'WALLET_CONNECT' + }) + + expect(setDefaultChainSpy).toHaveBeenCalledWith(bitcoinTestnet.caipNetworkId) + }) + }) + it('should not throw for not used methods', async () => { expect(await adapter.getProfile({} as any)).toEqual({}) expect(await adapter.estimateGas({} as any)).toEqual({}) @@ -492,6 +526,5 @@ describe('BitcoinAdapter', () => { expect(await adapter.grantPermissions({})).toEqual({}) expect(await adapter.getCapabilities({} as any)).toEqual({}) expect(await adapter.revokePermissions({} as any)).toEqual('0x') - await expect(adapter.switchNetwork({} as any)).resolves.toBeUndefined() }) }) diff --git a/packages/adapters/bitcoin/tests/mocks/mockUniversalProvider.ts b/packages/adapters/bitcoin/tests/mocks/mockUniversalProvider.ts index cdeef792cf..1f9fdf1593 100644 --- a/packages/adapters/bitcoin/tests/mocks/mockUniversalProvider.ts +++ b/packages/adapters/bitcoin/tests/mocks/mockUniversalProvider.ts @@ -9,6 +9,7 @@ export function mockUniversalProvider( return { disconnect: vi.fn(), request: vi.fn(), + setDefaultChain: vi.fn(), ...replaces } as UniversalProvider }