diff --git a/cashtab/src/utils/__mocks__/mockLegacyWalletsUtils.js b/cashtab/src/utils/__mocks__/mockLegacyWalletsUtils.js --- a/cashtab/src/utils/__mocks__/mockLegacyWalletsUtils.js +++ b/cashtab/src/utils/__mocks__/mockLegacyWalletsUtils.js @@ -126,9 +126,9 @@ state: {}, }; -export const notLegacyWallet = { +export const notLegacyWalletWithXecPrefixes = { Path145: { - cashAddress: 'bitcoincash:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9v0lgx569z', + cashAddress: 'ecash:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vkjud0qr4', fundingAddress: 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', fundingWif: 'L2xvTe6CdNxroR6pbdpGWNjAa55AZX5Wm59W5TXMuH31ihNJdDjt', @@ -139,7 +139,47 @@ slpAddress: 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', }, Path1899: { - cashAddress: 'bitcoincash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cptzgcqy6', + cashAddress: 'ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd', + fundingAddress: + 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', + fundingWif: 'Kx4FiBMvKK1iXjFk5QTaAK6E4mDGPjmwDZ2HDKGUZpE4gCXMaPe9', + hash160: 'ba8257db65f40359989c7b894c5e88ed7b6344f6', + legacyAddress: '1J1Aq5tAAYxZgSDRo8soKM2Rb41z3xrYpm', + publicKey: + '02a06bb380cf180d703f6f80796a13555aefff817d1f6f842f1e5c555b15f0fa70', + slpAddress: 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', + }, + Path245: { + cashAddress: 'ecash:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5v6zglsrs', + fundingAddress: + 'simpleledger:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5evac32me', + fundingWif: 'KwgNkyijAaxFr5XQdnaYyNMXVSZobgHzSoKKfWiC3Q7Xr4n7iYMG', + hash160: '960c9ed561f1699f0c49974d50b3bb7cdc118625', + legacyAddress: '1EgPUfBgU7ekho3EjtGze87dRADnUE8ojP', + publicKey: + '03c4a69fd90c8b196683216cffd2943a7b13b0db0812e44a4ff156ac7e03fc4ed7', + slpAddress: 'simpleledger:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5evac32me', + }, + mnemonic: + 'apart vacuum color cream drama kind foil history hurt alone ask census', + name: 'Current Wallet, Not Legacy', + state: {}, +}; + +export const notLegacyWalletWithPath245OnBchPrefix = { + Path145: { + cashAddress: 'ecash:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vkjud0qr4', + fundingAddress: + 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', + fundingWif: 'L2xvTe6CdNxroR6pbdpGWNjAa55AZX5Wm59W5TXMuH31ihNJdDjt', + hash160: '2be0e0c999e7e77a443ea726f82c441912fca92b', + legacyAddress: '1511T3ynXKgCwXhFijCUWKuTfqbPxFV1AF', + publicKey: + '02fe5308d77bcce825068a9e46adc6f032dbbe39167a7b6d05ac563ac71d8b186e', + slpAddress: 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', + }, + Path1899: { + cashAddress: 'ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd', fundingAddress: 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', fundingWif: 'Kx4FiBMvKK1iXjFk5QTaAK6E4mDGPjmwDZ2HDKGUZpE4gCXMaPe9', @@ -166,6 +206,86 @@ state: {}, }; +export const notLegacyWalletWithPath1899OnBchPrefix = { + Path145: { + cashAddress: 'ecash:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vkjud0qr4', + fundingAddress: + 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', + fundingWif: 'L2xvTe6CdNxroR6pbdpGWNjAa55AZX5Wm59W5TXMuH31ihNJdDjt', + hash160: '2be0e0c999e7e77a443ea726f82c441912fca92b', + legacyAddress: '1511T3ynXKgCwXhFijCUWKuTfqbPxFV1AF', + publicKey: + '02fe5308d77bcce825068a9e46adc6f032dbbe39167a7b6d05ac563ac71d8b186e', + slpAddress: 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', + }, + Path1899: { + cashAddress: 'bitcoincash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cptzgcqy6', + fundingAddress: + 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', + fundingWif: 'Kx4FiBMvKK1iXjFk5QTaAK6E4mDGPjmwDZ2HDKGUZpE4gCXMaPe9', + hash160: 'ba8257db65f40359989c7b894c5e88ed7b6344f6', + legacyAddress: '1J1Aq5tAAYxZgSDRo8soKM2Rb41z3xrYpm', + publicKey: + '02a06bb380cf180d703f6f80796a13555aefff817d1f6f842f1e5c555b15f0fa70', + slpAddress: 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', + }, + Path245: { + cashAddress: 'ecash:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5v6zglsrs', + fundingAddress: + 'simpleledger:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5evac32me', + fundingWif: 'KwgNkyijAaxFr5XQdnaYyNMXVSZobgHzSoKKfWiC3Q7Xr4n7iYMG', + hash160: '960c9ed561f1699f0c49974d50b3bb7cdc118625', + legacyAddress: '1EgPUfBgU7ekho3EjtGze87dRADnUE8ojP', + publicKey: + '03c4a69fd90c8b196683216cffd2943a7b13b0db0812e44a4ff156ac7e03fc4ed7', + slpAddress: 'simpleledger:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5evac32me', + }, + mnemonic: + 'apart vacuum color cream drama kind foil history hurt alone ask census', + name: 'Current Wallet, Not Legacy', + state: {}, +}; + +export const notLegacyWalletWithPath145OnBchPrefix = { + Path145: { + cashAddress: 'bitcoincash:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9v0lgx569z', + fundingAddress: + 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', + fundingWif: 'L2xvTe6CdNxroR6pbdpGWNjAa55AZX5Wm59W5TXMuH31ihNJdDjt', + hash160: '2be0e0c999e7e77a443ea726f82c441912fca92b', + legacyAddress: '1511T3ynXKgCwXhFijCUWKuTfqbPxFV1AF', + publicKey: + '02fe5308d77bcce825068a9e46adc6f032dbbe39167a7b6d05ac563ac71d8b186e', + slpAddress: 'simpleledger:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9vryrap6mu', + }, + Path1899: { + cashAddress: 'ecash:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7ccxkrr6zd', + fundingAddress: + 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', + fundingWif: 'Kx4FiBMvKK1iXjFk5QTaAK6E4mDGPjmwDZ2HDKGUZpE4gCXMaPe9', + hash160: 'ba8257db65f40359989c7b894c5e88ed7b6344f6', + legacyAddress: '1J1Aq5tAAYxZgSDRo8soKM2Rb41z3xrYpm', + publicKey: + '02a06bb380cf180d703f6f80796a13555aefff817d1f6f842f1e5c555b15f0fa70', + slpAddress: 'simpleledger:qzagy47mvh6qxkvcn3acjnz73rkhkc6y7cdsfndq6y', + }, + Path245: { + cashAddress: 'ecash:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5v6zglsrs', + fundingAddress: + 'simpleledger:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5evac32me', + fundingWif: 'KwgNkyijAaxFr5XQdnaYyNMXVSZobgHzSoKKfWiC3Q7Xr4n7iYMG', + hash160: '960c9ed561f1699f0c49974d50b3bb7cdc118625', + legacyAddress: '1EgPUfBgU7ekho3EjtGze87dRADnUE8ojP', + publicKey: + '03c4a69fd90c8b196683216cffd2943a7b13b0db0812e44a4ff156ac7e03fc4ed7', + slpAddress: 'simpleledger:qztqe8k4v8ckn8cvfxt5659nhd7dcyvxy5evac32me', + }, + mnemonic: + 'apart vacuum color cream drama kind foil history hurt alone ask census', + name: 'Current Wallet, Not Legacy', + state: {}, +}; + export const missingHash160 = { Path145: { cashAddress: 'bitcoincash:qq47pcxfn8n7w7jy86njd7pvgsv39l9f9v0lgx569z', diff --git a/cashtab/src/utils/__tests__/cashMethods.test.js b/cashtab/src/utils/__tests__/cashMethods.test.js --- a/cashtab/src/utils/__tests__/cashMethods.test.js +++ b/cashtab/src/utils/__tests__/cashMethods.test.js @@ -60,7 +60,10 @@ missingPublicKeyInPath1899Wallet, missingPublicKeyInPath145Wallet, missingPublicKeyInPath245Wallet, - notLegacyWallet, + notLegacyWalletWithXecPrefixes, + notLegacyWalletWithPath145OnBchPrefix, + notLegacyWalletWithPath1899OnBchPrefix, + notLegacyWalletWithPath245OnBchPrefix, missingHash160, } from '../__mocks__/mockLegacyWalletsUtils'; @@ -1194,7 +1197,24 @@ expect(isLegacyMigrationRequired(missingHash160)).toBe(true); }); it(`Recognizes a latest, current wallet that does not require migration`, () => { - expect(isLegacyMigrationRequired(notLegacyWallet)).toBe(false); + expect(isLegacyMigrationRequired(notLegacyWalletWithXecPrefixes)).toBe( + false, + ); + }); + it(`Recognizes a non-eCash prefixed Path245 address and requires migration`, () => { + expect( + isLegacyMigrationRequired(notLegacyWalletWithPath245OnBchPrefix), + ).toBe(true); + }); + it(`Recognizes a non-eCash prefixed Path1899 address and requires migration`, () => { + expect( + isLegacyMigrationRequired(notLegacyWalletWithPath1899OnBchPrefix), + ).toBe(true); + }); + it(`Recognizes a non-eCash prefixed Path145 address and requires migration`, () => { + expect( + isLegacyMigrationRequired(notLegacyWalletWithPath145OnBchPrefix), + ).toBe(true); }); test('toHash160() converts a valid bitcoincash: prefix address to a hash160', () => { diff --git a/cashtab/src/utils/cashMethods.js b/cashtab/src/utils/cashMethods.js --- a/cashtab/src/utils/cashMethods.js +++ b/cashtab/src/utils/cashMethods.js @@ -993,7 +993,10 @@ !wallet.Path145.publicKey || !wallet.Path145.hash160 || !wallet.Path245.publicKey || - !wallet.Path245.hash160 + !wallet.Path245.hash160 || + !wallet.Path1899.cashAddress.startsWith('ecash:') || + !wallet.Path145.cashAddress.startsWith('ecash:') || + !wallet.Path245.cashAddress.startsWith('ecash:') ) { return true; }