Skip to content

Commit f7cd377

Browse files
author
lAmeR1
committed
Support multiple address types in wallet handling
Extended wallet logic to manage both receive and change address types. Updated address generation, display, and callbacks to distinguish between the two types. Improved error handling and adjusted state updates accordingly.
1 parent 6c8c5c1 commit f7cd377

File tree

2 files changed

+58
-57
lines changed

2 files changed

+58
-57
lines changed

src/app/wallet/addresses-tab.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export default function AddressesTab(props: IAddressesTabProps) {
5454
<Stack className={styles.small} justify='space-between'>
5555
<Text className={styles.address} w={width - 40}>
5656
<AddressText address={row.address} />
57+
{row.addressType === 1 ? ' ↩ ' : null}
5758
</Text>
5859
<Group justify='space-between'>
5960
<Group>

src/app/wallet/page.tsx

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -154,24 +154,25 @@ async function loadOrScanAddressBatch(bip32, callback, callbackSetRawAddresses,
154154
}
155155

156156
for (let addressIndex = 0; addressIndex <= lastReceiveIndex; addressIndex++) {
157-
const addressType = 0; // Receive
158-
const derivationPath = `44'/111111'/0'/${addressType}/${addressIndex}`;
159-
const address = bip32.getAddress(addressType, addressIndex);
160-
const receiveAddress = {
161-
key: address,
162-
address,
163-
derivationPath,
164-
balance: 0,
165-
loading: true,
166-
addressIndex,
167-
addressType,
168-
utxos: [],
169-
};
170-
171-
rawAddresses.push(receiveAddress);
172-
173-
callbackSetRawAddresses(rawAddresses);
174-
callback(rawAddresses.filter(addressFilter(lastReceiveIndex)));
157+
for (let addressType = 0; addressType <= 1; addressType++) {
158+
const derivationPath = `44'/111111'/0'/${addressType}/${addressIndex}`;
159+
const address = bip32.getAddress(addressType, addressIndex);
160+
const receiveAddress = {
161+
key: address,
162+
address,
163+
derivationPath,
164+
balance: 0,
165+
loading: true,
166+
addressIndex,
167+
addressType,
168+
utxos: [],
169+
};
170+
171+
rawAddresses.push(receiveAddress);
172+
173+
callbackSetRawAddresses(rawAddresses);
174+
callback(rawAddresses.filter(addressFilter(lastReceiveIndex)));
175+
}
175176
}
176177

177178
let promises = [];
@@ -271,7 +272,7 @@ function getDemoXPub() {
271272

272273
export default function Dashboard() {
273274
const [addresses, setAddresses] = useState<IAddressData[]>([]);
274-
const [rawAddresses, setRawAddresses] = useState<IAddressData[]>([]);
275+
const [_, setRawAddresses] = useState<IAddressData[]>([]);
275276
const [selectedAddress, setSelectedAddress] = useState<ISelectedAddress | null>(null);
276277
const [activeTab, setActiveTab] = useState('addresses');
277278
const [isTransportInitialized, setTransportInitialized] = useState(false);
@@ -288,47 +289,46 @@ export default function Dashboard() {
288289
setEnableGenerate(false);
289290
try {
290291
const newReceiveAddressIndex = userSettings.getSetting('lastReceiveIndex') + 1;
292+
for (let addressType = 0; addressType <= 1; addressType++) {
293+
const derivationPath = `44'/111111'/0'/${addressType}/${newReceiveAddressIndex}`;
294+
const { address } =
295+
deviceType === 'demo'
296+
? { address: bip32base.getAddress(addressType, newReceiveAddressIndex) }
297+
: await getAddress(derivationPath);
298+
const rawAddress: IAddressData = {
299+
key: address,
300+
derivationPath,
301+
address,
302+
addressType: addressType,
303+
addressIndex: newReceiveAddressIndex,
304+
balance: 0,
305+
loading: true,
306+
utxos: [],
307+
};
308+
309+
userSettings.setSetting('lastReceiveIndex', newReceiveAddressIndex);
291310

292-
const derivationPath = `44'/111111'/0'/0/${newReceiveAddressIndex}`;
293-
const { address } =
294-
deviceType === 'demo'
295-
? { address: bip32base.getAddress(0, newReceiveAddressIndex) }
296-
: await getAddress(derivationPath);
297-
const rawAddress: IAddressData = {
298-
key: address,
299-
derivationPath,
300-
address,
301-
addressType: 0,
302-
addressIndex: newReceiveAddressIndex,
303-
balance: 0,
304-
loading: true,
305-
utxos: [],
306-
};
307-
308-
setRawAddresses([...rawAddresses, rawAddress]);
309-
setAddresses([...rawAddresses, rawAddress]);
310-
userSettings.setSetting('lastReceiveIndex', newReceiveAddressIndex);
311-
312-
try {
313-
if (deviceType === 'demo') {
314-
rawAddress.balance = Math.round(Math.random() * 10000);
315-
await delay(Math.round(Math.random() * 3000)).then(() => {
316-
rawAddress.loading = false;
311+
try {
312+
if (deviceType === 'demo') {
313+
rawAddress.balance = Math.round(Math.random() * 10000);
314+
await delay(Math.round(Math.random() * 3000)).then(() => {
315+
rawAddress.loading = false;
316+
});
317+
} else {
318+
await loadAddressDetails(rawAddress);
319+
}
320+
321+
setRawAddresses((rawAddresses) => [...rawAddresses, rawAddress]);
322+
setAddresses((rawAddresses) => [...rawAddresses, rawAddress]);
323+
} catch (e) {
324+
console.error(e);
325+
notifications.show({
326+
title: 'Error',
327+
message: 'Unable to load address details. Refresh the page to retry.',
328+
autoClose: false,
329+
color: 'red',
317330
});
318-
} else {
319-
await loadAddressDetails(rawAddress);
320331
}
321-
322-
setRawAddresses([...rawAddresses, rawAddress]);
323-
setAddresses([...rawAddresses, rawAddress]);
324-
} catch (e) {
325-
console.error(e);
326-
notifications.show({
327-
title: 'Error',
328-
message: 'Unable to load address details. Refresh the page to retry.',
329-
autoClose: false,
330-
color: 'red',
331-
});
332332
}
333333
} catch (e) {
334334
console.info(e);

0 commit comments

Comments
 (0)