Skip to content

Commit a4be9da

Browse files
chore: bump sdk version (#1380)
* chore: bump sdk version * fix(extension): add most updated addresses to wallets cache addresses * fix(extension): receive info address now always picks the lowest derivaiton index * fix: do not update new wallet metadata with a previously active wallet's address --------- Co-authored-by: Martynas Kazlauskas <martynas.kazlauskas@iohk.io>
1 parent e470338 commit a4be9da

File tree

11 files changed

+249
-220
lines changed

11 files changed

+249
-220
lines changed

apps/browser-extension-wallet/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@
4141
},
4242
"dependencies": {
4343
"@ant-design/icons": "^4.7.0",
44-
"@cardano-sdk/cardano-services-client": "0.20.0",
45-
"@cardano-sdk/core": "0.38.0",
46-
"@cardano-sdk/dapp-connector": "0.12.29",
47-
"@cardano-sdk/input-selection": "0.13.11",
48-
"@cardano-sdk/tx-construction": "0.20.0",
44+
"@cardano-sdk/cardano-services-client": "0.20.1",
45+
"@cardano-sdk/core": "0.38.1",
46+
"@cardano-sdk/dapp-connector": "0.12.30",
47+
"@cardano-sdk/input-selection": "0.13.12",
48+
"@cardano-sdk/tx-construction": "0.20.1",
4949
"@cardano-sdk/util": "0.15.4",
50-
"@cardano-sdk/wallet": "0.42.0",
51-
"@cardano-sdk/web-extension": "0.31.0",
50+
"@cardano-sdk/wallet": "0.42.2",
51+
"@cardano-sdk/web-extension": "0.31.2",
5252
"@emurgo/cip14-js": "~3.0.1",
5353
"@input-output-hk/lace-ui-toolkit": "1.15.1",
5454
"@lace/cardano": "0.1.0",
@@ -95,7 +95,7 @@
9595
"zustand": "3.5.14"
9696
},
9797
"devDependencies": {
98-
"@cardano-sdk/hardware-ledger": "0.11.1",
98+
"@cardano-sdk/hardware-ledger": "0.11.2",
9999
"@emurgo/cardano-message-signing-asmjs": "1.0.1",
100100
"@openpgp/web-stream-tools": "0.0.11-patch-0",
101101
"@pdfme/common": "^4.0.2",

apps/browser-extension-wallet/src/features/dapp/components/confirm-transaction/DappTransactionContainer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export const DappTransactionContainer = withAddressBookContext(
113113
const rewardAccountsAddresses = useMemo(() => userRewardAccounts?.map((key) => key.address), [userRewardAccounts]);
114114
const protocolParameters = useObservable(inMemoryWallet?.protocolParameters$);
115115
const eraSummaries = useObservable(inMemoryWallet?.eraSummaries$);
116-
const allWalletsAddresses = getAllWalletsAddresses(useObservable(walletRepository.wallets$));
116+
const allWalletsAddresses = [...userAddresses, ...getAllWalletsAddresses(useObservable(walletRepository.wallets$))];
117117

118118
useEffect(() => {
119119
if (!req || !protocolParameters) {

apps/browser-extension-wallet/src/features/dapp/components/confirm-transaction/__tests__/DappTransactionContainer.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ describe('Testing DappTransactionContainer component', () => {
397397
coinSymbol: 'ADA',
398398
collateral: BigInt(1_000_000),
399399
txInspectionDetails,
400-
ownAddresses: [sendingAddress.address],
400+
ownAddresses: [walletInfo.addresses[0].address],
401401
addressToNameMap: new Map()
402402
},
403403
{}

apps/browser-extension-wallet/src/features/receive-info/components/ReceiveInfoContainer.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { useMemo } from 'react';
22
import { useRedirection } from '../../../hooks';
33
import { walletRoutePaths } from '../../../routes';
44
import { useWalletStore } from '../../../stores';
@@ -10,10 +10,15 @@ export const ReceiveInfoContainer = (): React.ReactElement => {
1010
const { walletInfo } = useWalletStore();
1111
const handles = useGetHandles();
1212

13+
const userAddresses = useMemo(() => {
14+
const addresses = [...walletInfo.addresses];
15+
return addresses.sort((a, b) => a.index - b.index);
16+
}, [walletInfo.addresses]);
17+
1318
return (
1419
<ReceiveInfo
1520
name={walletInfo?.name}
16-
address={walletInfo?.addresses[0].address}
21+
address={userAddresses[0].address}
1722
handles={handles}
1823
goBack={redirectToOverview}
1924
/>
Lines changed: 61 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
/* eslint-disable no-magic-numbers */
22
/* eslint-disable unicorn/no-useless-undefined */
3-
import { WalletManager, WalletRepository } from '@cardano-sdk/web-extension';
4-
import { cacheActivatedWalletAddressSubscription } from '../cache-wallets-address';
3+
import { AnyWallet, WalletManager, WalletRepository } from '@cardano-sdk/web-extension';
4+
import { createTestScheduler } from '@cardano-sdk/util-dev';
5+
import { walletMetadataWithAddresses, cacheActivatedWalletAddressSubscription } from '../cache-wallets-address';
56
import { Wallet } from '@lace/cardano';
6-
import { BehaviorSubject, of } from 'rxjs';
7+
import { Observable, of } from 'rxjs';
8+
9+
const eachSubscription = <T>(...observables: Observable<T>[]) => {
10+
let numSubscription = 0;
11+
return new Observable((subscriber) => observables[numSubscription++].subscribe(subscriber));
12+
};
713

814
describe('cacheActivatedWalletAddressSubscription', () => {
915
afterEach(() => {
@@ -52,56 +58,59 @@ describe('cacheActivatedWalletAddressSubscription', () => {
5258
});
5359
});
5460

55-
it('should subscribe and update metadata when a new wallet is added and activated', () => {
56-
const activeWallet$ = new BehaviorSubject({
57-
addresses$: of([{ address: 'address1' }])
58-
});
59-
const activeWalletId$ = new BehaviorSubject({
60-
walletId: 'walletId1'
61-
});
62-
const wallets$ = new BehaviorSubject<{ walletId: string; metadata: { walletAddresses?: string[] } }[]>([
63-
{
64-
walletId: 'walletId1',
65-
metadata: { walletAddresses: ['address1'] }
66-
}
67-
]);
68-
const mockWalletManager = {
69-
activeWallet$,
70-
activeWalletId$
71-
} as unknown as WalletManager<Wallet.WalletMetadata, Wallet.AccountMetadata>;
72-
73-
const mockWalletRepository = {
74-
wallets$,
75-
updateWalletMetadata: jest.fn()
76-
} as unknown as WalletRepository<Wallet.WalletMetadata, Wallet.AccountMetadata>;
77-
78-
cacheActivatedWalletAddressSubscription(mockWalletManager, mockWalletRepository);
79-
80-
wallets$.next([
81-
{
82-
walletId: 'walletId1',
83-
metadata: { walletAddresses: ['address1'] }
84-
},
85-
{
86-
walletId: 'walletId2',
87-
metadata: {}
88-
}
89-
]);
90-
activeWalletId$.next({ walletId: 'walletId2' });
91-
activeWallet$.next({ addresses$: of([{ address: 'address2' }, { address: 'address3' }]) });
61+
it('should update metadata when a new wallet is added and activated', () => {
62+
createTestScheduler().run(({ cold, expectObservable }) => {
63+
const mockWalletManager = {
64+
activeWalletId$: cold('a----f', {
65+
a: { walletId: 'walletId1' },
66+
f: { walletId: 'walletId2' }
67+
}),
68+
activeWallet$: eachSubscription(
69+
cold('a', { a: { addresses$: cold('a', { a: [{ address: 'address1' }] }) } }),
70+
cold('a', { a: { addresses$: cold('a', { a: [{ address: 'address2' }] }) } })
71+
)
72+
} as unknown as WalletManager<Wallet.WalletMetadata, Wallet.AccountMetadata>;
73+
const mockWalletRepository = {
74+
wallets$: eachSubscription(
75+
cold('a-b', {
76+
a: [
77+
{
78+
walletId: 'walletId1',
79+
metadata: { walletAddresses: [] }
80+
} as AnyWallet<Wallet.WalletMetadata, Wallet.AccountMetadata>
81+
],
82+
b: [
83+
{
84+
walletId: 'walletId1',
85+
metadata: { walletAddresses: ['address1'] }
86+
} as AnyWallet<Wallet.WalletMetadata, Wallet.AccountMetadata>
87+
]
88+
}),
89+
cold('a', {
90+
a: [
91+
{
92+
walletId: 'walletId2',
93+
metadata: {}
94+
} as AnyWallet<Wallet.WalletMetadata, Wallet.AccountMetadata>
95+
]
96+
})
97+
)
98+
} as unknown as WalletRepository<Wallet.WalletMetadata, Wallet.AccountMetadata>;
9299

93-
expect(mockWalletRepository.updateWalletMetadata).toHaveBeenNthCalledWith(1, {
94-
walletId: 'walletId1',
95-
metadata: {
96-
walletAddresses: ['address1']
97-
}
98-
});
99-
100-
expect(mockWalletRepository.updateWalletMetadata).toHaveBeenNthCalledWith(2, {
101-
walletId: 'walletId2',
102-
metadata: {
103-
walletAddresses: ['address2', 'address3']
104-
}
100+
expectObservable(walletMetadataWithAddresses(mockWalletManager, mockWalletRepository)).toBe('a----f', {
101+
a: {
102+
walletId: 'walletId1',
103+
metadata: {
104+
walletAddresses: ['address1']
105+
}
106+
},
107+
f: {
108+
walletId: 'walletId2',
109+
metadata: {
110+
walletAddresses: ['address2']
111+
}
112+
}
113+
});
105114
});
106115
});
107116
});
Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
1-
import { WalletManager, WalletRepository } from '@cardano-sdk/web-extension';
1+
import { UpdateWalletMetadataProps, WalletManager, WalletRepository } from '@cardano-sdk/web-extension';
2+
import { blockingWithLatestFrom } from '@cardano-sdk/util-rxjs';
23
import { Wallet } from '@lace/cardano';
3-
import { filter, switchMap, withLatestFrom, zip } from 'rxjs';
4+
import { EMPTY, filter, map, Observable, switchMap } from 'rxjs';
5+
import { isNotNil } from '@cardano-sdk/util';
46

5-
export const cacheActivatedWalletAddressSubscription = (
7+
export const walletMetadataWithAddresses = (
68
walletManager: WalletManager<Wallet.WalletMetadata, Wallet.AccountMetadata>,
79
walletRepository: WalletRepository<Wallet.WalletMetadata, Wallet.AccountMetadata>
8-
): void => {
9-
zip([
10-
walletManager.activeWalletId$.pipe(filter((activeWalletId) => Boolean(activeWalletId))),
11-
walletManager.activeWallet$.pipe(
12-
filter((wallet) => Boolean(wallet)),
13-
switchMap((wallet) => wallet.addresses$)
10+
): Observable<UpdateWalletMetadataProps<Wallet.WalletMetadata>> =>
11+
walletManager.activeWalletId$.pipe(
12+
switchMap((activeWallet) =>
13+
activeWallet
14+
? walletManager.activeWallet$.pipe(
15+
switchMap((observableWallet) => observableWallet.addresses$),
16+
map((addresses) => addresses.map(({ address }) => address)),
17+
blockingWithLatestFrom(
18+
walletRepository.wallets$.pipe(
19+
map((wallets) => wallets.find(({ walletId }) => walletId === activeWallet.walletId)),
20+
filter(isNotNil)
21+
)
22+
),
23+
map(([walletAddresses, walletEntity]) => ({
24+
walletId: activeWallet.walletId,
25+
metadata: {
26+
...walletEntity.metadata,
27+
walletAddresses
28+
}
29+
}))
30+
)
31+
: EMPTY
1432
)
15-
])
16-
.pipe(withLatestFrom(walletRepository.wallets$))
17-
.subscribe(([[activeWallet, walletAddresses], wallets]) => {
18-
const wallet = wallets.find(({ walletId }) => walletId === activeWallet.walletId);
19-
const uniqueAddresses = [
20-
...new Set([...(wallet.metadata.walletAddresses || []), ...walletAddresses.map(({ address }) => address)])
21-
];
33+
);
2234

23-
walletRepository.updateWalletMetadata({
24-
walletId: activeWallet.walletId,
25-
metadata: {
26-
...wallet.metadata,
27-
walletAddresses: uniqueAddresses
28-
}
29-
});
30-
});
35+
export const cacheActivatedWalletAddressSubscription = (
36+
walletManager: WalletManager<Wallet.WalletMetadata, Wallet.AccountMetadata>,
37+
walletRepository: WalletRepository<Wallet.WalletMetadata, Wallet.AccountMetadata>
38+
): void => {
39+
walletMetadataWithAddresses(walletManager, walletRepository).subscribe(walletRepository.updateWalletMetadata);
3140
};

apps/browser-extension-wallet/src/views/browser-view/components/QRInfoWalletDrawer/QRInfoWalletDrawer.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,14 @@ export const QRInfoWalletDrawer = (): React.ReactElement => {
5252
analytics.sendEventToPostHog(PostHogAction.ReceiveCopyAddressIconClick);
5353
};
5454

55+
const userAddresses = useMemo(
56+
() => addresses?.sort((a, b) => a.index - b.index).map((value) => value.address.toString()),
57+
[addresses]
58+
);
59+
5560
const usedAddresses = useMemo(
56-
() => addresses?.filter((addr) => isUsedAddress(addr.address, transactionHistory)),
61+
() =>
62+
addresses?.sort((a, b) => a.index - b.index).filter((addr) => isUsedAddress(addr.address, transactionHistory)),
5763
[addresses, transactionHistory]
5864
);
5965

@@ -65,7 +71,7 @@ export const QRInfoWalletDrawer = (): React.ReactElement => {
6571
{!useAdvancedReceived ? (
6672
<AddressCard
6773
name={name}
68-
address={addresses?.[0].address}
74+
address={userAddresses?.[0]}
6975
getQRCodeOptions={getQRCodeOpts}
7076
copiedMessage={t(addressCopiedTranslation)}
7177
onCopyClick={handleCopyAddress}

packages/cardano/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@
4040
"watch": "yarn build --watch"
4141
},
4242
"dependencies": {
43-
"@cardano-sdk/cardano-services-client": "0.20.0",
44-
"@cardano-sdk/core": "0.38.0",
43+
"@cardano-sdk/cardano-services-client": "0.20.1",
44+
"@cardano-sdk/core": "0.38.1",
4545
"@cardano-sdk/crypto": "0.1.29",
46-
"@cardano-sdk/hardware-ledger": "0.11.1",
47-
"@cardano-sdk/hardware-trezor": "0.5.1",
48-
"@cardano-sdk/key-management": "0.23.0",
46+
"@cardano-sdk/hardware-ledger": "0.11.2",
47+
"@cardano-sdk/hardware-trezor": "0.5.2",
48+
"@cardano-sdk/key-management": "0.23.1",
4949
"@cardano-sdk/util": "0.15.4",
50-
"@cardano-sdk/wallet": "0.42.0",
51-
"@cardano-sdk/web-extension": "0.31.0",
50+
"@cardano-sdk/wallet": "0.42.2",
51+
"@cardano-sdk/web-extension": "0.31.2",
5252
"@lace/common": "0.1.0",
5353
"@ledgerhq/devices": "^8.2.1",
5454
"@stablelib/chacha20poly1305": "1.0.1",
@@ -70,7 +70,7 @@
7070
"webextension-polyfill": "0.8.0"
7171
},
7272
"devDependencies": {
73-
"@cardano-sdk/util-dev": "0.22.2",
73+
"@cardano-sdk/util-dev": "0.22.3",
7474
"@emurgo/cardano-message-signing-browser": "1.0.1",
7575
"rollup-plugin-polyfill-node": "^0.8.0",
7676
"typescript": "^4.9.5"

packages/core/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
},
4444
"dependencies": {
4545
"@ant-design/icons": "^4.7.0",
46-
"@cardano-sdk/wallet": "0.42.0",
47-
"@cardano-sdk/web-extension": "0.31.0",
46+
"@cardano-sdk/wallet": "0.42.2",
47+
"@cardano-sdk/web-extension": "0.31.2",
4848
"@input-output-hk/lace-ui-toolkit": "1.15.1",
4949
"@lace/cardano": "0.1.0",
5050
"@lace/common": "0.1.0",

packages/staking/package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@
7676
},
7777
"devDependencies": {
7878
"@babel/core": "^7.21.0",
79-
"@cardano-sdk/core": "0.38.0",
80-
"@cardano-sdk/input-selection": "0.13.11",
81-
"@cardano-sdk/tx-construction": "0.20.0",
79+
"@cardano-sdk/core": "0.38.1",
80+
"@cardano-sdk/input-selection": "0.13.12",
81+
"@cardano-sdk/tx-construction": "0.20.1",
8282
"@cardano-sdk/util": "0.15.4",
83-
"@cardano-sdk/wallet": "0.42.0",
84-
"@cardano-sdk/web-extension": "0.31.0",
83+
"@cardano-sdk/wallet": "0.42.2",
84+
"@cardano-sdk/web-extension": "0.31.2",
8585
"@storybook/addon-actions": "^7.6.7",
8686
"@storybook/addon-essentials": "^7.6.7",
8787
"@storybook/addon-interactions": "^7.6.7",
@@ -126,11 +126,11 @@
126126
"wait-on": "^7.0.1"
127127
},
128128
"peerDependencies": {
129-
"@cardano-sdk/input-selection": "0.13.11",
130-
"@cardano-sdk/tx-construction": "0.20.0",
129+
"@cardano-sdk/input-selection": "0.13.12",
130+
"@cardano-sdk/tx-construction": "0.20.1",
131131
"@cardano-sdk/util": "0.15.4",
132-
"@cardano-sdk/wallet": "0.42.0",
133-
"@cardano-sdk/web-extension": "0.31.0",
132+
"@cardano-sdk/wallet": "0.42.2",
133+
"@cardano-sdk/web-extension": "0.31.2",
134134
"@lace/cardano": "^0.1.0",
135135
"@lace/common": "^0.1.0",
136136
"@lace/core": "0.1.0",

0 commit comments

Comments
 (0)