Skip to content

Commit a492e24

Browse files
authored
fix: Leather Wallet network mismatch (#5164)
1 parent 06b1e27 commit a492e24

File tree

7 files changed

+4008
-4842
lines changed

7 files changed

+4008
-4842
lines changed

.changeset/large-doors-drive.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@reown/appkit-adapter-bitcoin': patch
3+
'@reown/appkit': patch
4+
---
5+
6+
Fixes issue in Leather wallet where requests would target mainnet instead of testnet

.prettierignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ pnpm-lock.yaml
55
.svelte-kit
66
bundle-analysis.html
77
.open-next
8-
/apps/pay-test-exchange/**.d.ts
8+
/apps/pay-test-exchange/**.d.ts
9+
next-env.d.ts

apps/demo/package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@
3535
"@radix-ui/react-switch": "1.2.6",
3636
"@radix-ui/react-tabs": "1.1.13",
3737
"@radix-ui/react-tooltip": "1.2.8",
38-
"@reown/appkit": "1.8.4",
39-
"@reown/appkit-adapter-bitcoin": "1.8.4",
40-
"@reown/appkit-adapter-ethers": "1.8.4",
41-
"@reown/appkit-adapter-solana": "1.8.4",
42-
"@reown/appkit-common": "1.8.4",
43-
"@reown/appkit-controllers": "1.8.4",
44-
"@reown/appkit-scaffold-ui": "1.8.4",
45-
"@reown/appkit-ui": "1.8.4",
38+
"@reown/appkit": "1.8.8",
39+
"@reown/appkit-adapter-bitcoin": "1.8.8",
40+
"@reown/appkit-adapter-ethers": "1.8.8",
41+
"@reown/appkit-adapter-solana": "1.8.8",
42+
"@reown/appkit-common": "1.8.8",
43+
"@reown/appkit-controllers": "1.8.8",
44+
"@reown/appkit-scaffold-ui": "1.8.8",
45+
"@reown/appkit-ui": "1.8.8",
4646
"@sentry/core": "8.55.0",
4747
"@sentry/nextjs": "8.55.0",
4848
"@solana/web3.js": "1.98.4",
@@ -69,7 +69,7 @@
6969
"@types/react": "19.1.15",
7070
"@types/react-dom": "19.1.9",
7171
"@mailsac/api": "1.0.8",
72-
"@reown/appkit-testing": "1.8.4",
72+
"@reown/appkit-testing": "1.8.8",
7373
"@playwright/test": "1.48.2",
7474
"eslint": "8.56.0",
7575
"eslint-config-next": "14.1.0",

packages/adapters/bitcoin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"sats-connect": "3.5.0"
4040
},
4141
"devDependencies": {
42-
"@leather.io/rpc": "2.1.21",
42+
"@leather.io/rpc": "2.20.13",
4343
"@vitest/coverage-v8": "2.1.9",
4444
"@wallet-standard/features": "1.0.3",
4545
"@walletconnect/types": "2.22.2",

packages/adapters/bitcoin/src/connectors/LeatherConnector.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
import type {
2-
SendTransferRequestParams,
3-
SendTransferResponseBody,
4-
SignPsbtRequestParams,
5-
SignPsbtResponseBody
6-
} from '@leather.io/rpc'
1+
import type { RpcEndpointMap, RpcSendTransferParams } from '@leather.io/rpc'
72

83
import type { BitcoinConnector } from '@reown/appkit-utils/bitcoin'
94
import { bitcoin, bitcoinTestnet } from '@reown/appkit/networks'
@@ -54,8 +49,8 @@ export class LeatherConnector extends SatsConnectConnector {
5449
recipient
5550
}: BitcoinConnector.SendTransferParams): Promise<string> {
5651
const params: LeatherConnector.SendTransferParams = {
57-
address: recipient,
58-
amount
52+
recipients: [{ address: recipient, amount }],
53+
network: this.getNetwork()
5954
}
6055

6156
const res: LeatherConnector.SendTransferResponse = await this.internalRequest(
@@ -109,11 +104,11 @@ export namespace LeatherConnector {
109104

110105
export type Network = 'mainnet' | 'testnet' | 'signet' | 'sbtcDevenv' | 'devnet'
111106

112-
export type SendTransferParams = SendTransferRequestParams
107+
export type SendTransferParams = RpcSendTransferParams
113108

114-
export type SendTransferResponse = SendTransferResponseBody
109+
export type SendTransferResponse = { txid: string }
115110

116-
export type SignPSBTParams = SignPsbtRequestParams
111+
export type SignPSBTParams = RpcEndpointMap['signPsbt']['request']['params']
117112

118-
export type SignPSBTResponse = SignPsbtResponseBody
113+
export type SignPSBTResponse = { hex: string; txid?: string }
119114
}

packages/adapters/bitcoin/tests/connectors/LeatherConnector.test.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,26 @@ describe('LeatherConnector', () => {
5454
const res = await connector.sendTransfer({ amount: '100', recipient: 'address' })
5555

5656
expect(res).toBe(txid)
57-
expect(requestSpy).toHaveBeenCalledWith('sendTransfer', { address: 'address', amount: '100' })
57+
expect(requestSpy).toHaveBeenCalledWith('sendTransfer', {
58+
recipients: [{ address: 'address', amount: '100' }],
59+
network: 'mainnet'
60+
})
61+
})
62+
63+
it('should send a transfer for testnet', async () => {
64+
getActiveNetwork.mockReturnValueOnce(bitcoinTestnet)
65+
66+
const txid = 'txid'
67+
const requestSpy = vi.spyOn(mocks.wallet, 'request')
68+
requestSpy.mockResolvedValue(mockSatsConnectProvider.mockRequestResolve({ txid }))
69+
70+
const res = await connector.sendTransfer({ amount: '100', recipient: 'address' })
71+
72+
expect(res).toBe(txid)
73+
expect(requestSpy).toHaveBeenCalledWith('sendTransfer', {
74+
recipients: [{ address: 'address', amount: '100' }],
75+
network: 'testnet'
76+
})
5877
})
5978

6079
it('should sign a PSBT', async () => {

0 commit comments

Comments
 (0)