Changeset View
Changeset View
Standalone View
Standalone View
web/cashtab/src/hooks/useWallet.js
Show First 20 Lines • Show All 223 Lines • ▼ Show 20 Lines | const update = async ({ wallet, setWalletState }) => { | ||||
newState.balances = normalizeBalance(slpBalancesAndUtxos); | newState.balances = normalizeBalance(slpBalancesAndUtxos); | ||||
newState.tokens = tokens; | newState.tokens = tokens; | ||||
newState.parsedTxHistory = parsedWithTokens; | newState.parsedTxHistory = parsedWithTokens; | ||||
setWalletState(newState); | setWalletState(newState); | ||||
// Write this state to indexedDb using localForage | |||||
writeWalletState(wallet, newState); | |||||
// If everything executed correctly, remove apiError | // If everything executed correctly, remove apiError | ||||
setApiError(false); | setApiError(false); | ||||
} catch (error) { | } catch (error) { | ||||
console.log(`Error in update({wallet, setWalletState})`); | console.log(`Error in update({wallet, setWalletState})`); | ||||
console.log(error); | console.log(error); | ||||
// Set this in state so that transactions are disabled until the issue is resolved | // Set this in state so that transactions are disabled until the issue is resolved | ||||
setApiError(true); | setApiError(true); | ||||
//console.timeEnd("update"); | //console.timeEnd("update"); | ||||
▲ Show 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | const migrateLegacyWallet = async (BCH, wallet) => { | ||||
`Error setting wallet to wallet indexedDb in migrateLegacyWallet()`, | `Error setting wallet to wallet indexedDb in migrateLegacyWallet()`, | ||||
); | ); | ||||
console.log(err); | console.log(err); | ||||
} | } | ||||
return wallet; | return wallet; | ||||
}; | }; | ||||
const writeWalletState = async (wallet, newState) => { | |||||
// Add new state as an object on the active wallet | |||||
wallet.state = newState; | |||||
console.log(`wallet with state`, wallet); | |||||
try { | |||||
await localforage.setItem('wallet', wallet); | |||||
console.log(`Wallet new state successfully written`); | |||||
} catch (err) { | |||||
console.log(`Error in writeWalletState()`); | |||||
console.log(err); | |||||
} | |||||
}; | |||||
const getWalletDetails = async wallet => { | const getWalletDetails = async wallet => { | ||||
if (!wallet) { | if (!wallet) { | ||||
return false; | return false; | ||||
} | } | ||||
// Since this info is in localforage now, only get the var | // Since this info is in localforage now, only get the var | ||||
const NETWORK = process.env.REACT_APP_NETWORK; | const NETWORK = process.env.REACT_APP_NETWORK; | ||||
const mnemonic = wallet.mnemonic; | const mnemonic = wallet.mnemonic; | ||||
const rootSeedBuffer = await BCH.Mnemonic.toSeed(mnemonic); | const rootSeedBuffer = await BCH.Mnemonic.toSeed(mnemonic); | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | */ | ||||
1 - currentlyActiveWallet has Path1899, but its stored keyvalue pair in savedWallets does not | 1 - currentlyActiveWallet has Path1899, but its stored keyvalue pair in savedWallets does not | ||||
> Update savedWallets so that Path1899 is added to currentlyActiveWallet | > Update savedWallets so that Path1899 is added to currentlyActiveWallet | ||||
2 - walletToActivate does not have Path1899 | 2 - walletToActivate does not have Path1899 | ||||
> Update walletToActivate with Path1899 before activation | > Update walletToActivate with Path1899 before activation | ||||
*/ | */ | ||||
// Need to handle a similar situation with state | |||||
// If you find the activeWallet in savedWallets but without state, resave active wallet with state | |||||
// Note you do not have the Case 2 described above here, as wallet state is added in the update() function of useWallet.js | |||||
// Also note, since state can be expected to change frequently (unlike path deriv), you will likely save it every time you activate a new wallet | |||||
// Check savedWallets for currentlyActiveWallet | // Check savedWallets for currentlyActiveWallet | ||||
let walletInSavedWallets = false; | let walletInSavedWallets = false; | ||||
let walletUnmigrated = false; | |||||
for (let i = 0; i < savedWallets.length; i += 1) { | for (let i = 0; i < savedWallets.length; i += 1) { | ||||
if (savedWallets[i].name === currentlyActiveWallet.name) { | if (savedWallets[i].name === currentlyActiveWallet.name) { | ||||
walletInSavedWallets = true; | walletInSavedWallets = true; | ||||
// Check savedWallets for unmigrated currentlyActiveWallet | // Check savedWallets for unmigrated currentlyActiveWallet | ||||
if (!savedWallets[i].Path1899) { | if (!savedWallets[i].Path1899) { | ||||
// Case 1, described above | // Case 1, described above | ||||
console.log( | |||||
`Case 1: Wallet migration in saved wallets still pending, adding Path1899`, | |||||
); | |||||
savedWallets[i].Path1899 = currentlyActiveWallet.Path1899; | savedWallets[i].Path1899 = currentlyActiveWallet.Path1899; | ||||
walletUnmigrated = true; | |||||
} | } | ||||
/* | |||||
Update wallet state | |||||
Note, this makes previous `walletUnmigrated` variable redundant | |||||
savedWallets[i] should always be updated, since wallet state can be expected to change most of the time | |||||
*/ | |||||
savedWallets[i].state = currentlyActiveWallet.state; | |||||
} | } | ||||
} | } | ||||
// Case 1 | |||||
if (walletUnmigrated) { | |||||
// resave savedWallets | // resave savedWallets | ||||
try { | try { | ||||
// Set walletName as the active wallet | // Set walletName as the active wallet | ||||
await localforage.setItem('savedWallets', savedWallets); | await localforage.setItem('savedWallets', savedWallets); | ||||
} catch (err) { | } catch (err) { | ||||
console.log( | console.log( | ||||
`Error in localforage.setItem("savedWallets") in activateWallet() for unmigrated wallet`, | `Error in localforage.setItem("savedWallets") in activateWallet() for unmigrated wallet`, | ||||
); | ); | ||||
} | } | ||||
} | |||||
if (!walletInSavedWallets) { | if (!walletInSavedWallets) { | ||||
console.log(`Wallet is not in saved Wallets, adding`); | console.log(`Wallet is not in saved Wallets, adding`); | ||||
savedWallets.push(currentlyActiveWallet); | savedWallets.push(currentlyActiveWallet); | ||||
// resave savedWallets | // resave savedWallets | ||||
try { | try { | ||||
// Set walletName as the active wallet | // Set walletName as the active wallet | ||||
await localforage.setItem('savedWallets', savedWallets); | await localforage.setItem('savedWallets', savedWallets); | ||||
▲ Show 20 Lines • Show All 748 Lines • Show Last 20 Lines |