Loading...
Guest user 

First recorded build

 
All history
 

Last recorded build

[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] expect(received).toBe(expected) // Object.is equality
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] Expected: 60000
[22:53:43][Step 1/1] Received: 10
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] Ignored nodes: comments, script, style
[22:53:43][Step 1/1] <html>
[22:53:43][Step 1/1] <head />
[22:53:43][Step 1/1] <body>
[22:53:43][Step 1/1] <div />
[22:53:43][Step 1/1] </body>
[22:53:43][Step 1/1] </html>
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 89 | // Expect the wallet refresh interval to have been set from TRIGGER_UTXO_REFRESH_INTERVAL_MS to standard setting
[22:53:43][Step 1/1] 90 | // i.e. the update function has been called
[22:53:43][Step 1/1] > 91 | expect(result.current.walletRefreshInterval).toBe(
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 92 | websocketConfig.websocketRefreshInterval,
[22:53:43][Step 1/1] 93 | ),
[22:53:43][Step 1/1] 94 | );
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at toBe (src/hooks/__tests__/useWalletStorage.test.js:91:58)
[22:53:43][Step 1/1] at runWithExpensiveErrorDiagnosticsDisabled (node_modules/@testing-library/dom/dist/config.js:47:12)
[22:53:43][Step 1/1] at checkCallback (node_modules/@testing-library/dom/dist/wait-for.js:124:77)
[22:53:43][Step 1/1] at checkRealTimersCallback (node_modules/@testing-library/dom/dist/wait-for.js:118:16)
[22:53:43][Step 1/1] at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state on successful API fetch
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state on successful API fetch
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state on successful API fetch
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state on successful API fetch
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:53:43][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:53:43][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:53:43][Step 1/1] | ^
[22:53:43][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:53:43][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:53:43][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:53:43][Step 1/1]
[22:53:43][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:53:43][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:53:43][Step 1/1]
[22:54:30][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state on successful API fetch
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state to fiat currency of user settings on successful API fetch
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state to fiat currency of user settings on successful API fetch
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state to fiat currency of user settings on successful API fetch
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state to fiat currency of user settings on successful API fetch
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] ##teamcity[importData timestamp='2024-02-13T22:53:43.625' path='results/artifacts/junit/*.xml' type='junit']
[22:54:30][Step 1/1] Importing data from 'results/artifacts/junit/*.xml' (not existing file) with 'junit' processor
[22:54:30][Step 1/1] Publishing artifacts (2s)
[22:54:30][Publishing artifacts] Collecting files to publish: [+:results/artifacts=>artifacts.tar.gz]
[22:54:30][Step 1/1] Ant JUnit report watcher
[22:54:30][Ant JUnit report watcher] Watching paths:
[22:54:30][Ant JUnit report watcher] /home/teamcity/buildAgent/work/jailed-build/results/artifacts/junit/*.xml
[22:54:30][Publishing artifacts] Creating archive artifacts.tar.gz
[22:54:30][Creating archive artifacts.tar.gz] Creating /home/teamcity/buildAgent/temp/buildTmp/TarPreprocessor6202228140830778406/artifacts.tar.gz
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Validation utils isValidSideshiftObj() returns true for a valid sideshift library object
[22:54:30][CashTab Unit Tests] Validation utils isValidSideshiftObj() returns false if the sideshift library object failed to instantiate
[22:54:30][CashTab Unit Tests] Validation utils isValidSideshiftObj() returns false for an invalid sideshift library object
[22:54:30][CashTab Unit Tests] Validation utils isValidRecipient() returns true for a valid and registered alias input
[22:54:30][CashTab Unit Tests] Validation utils isValidRecipient() returns false for a valid but unregistered alias input
[22:54:30][CashTab Unit Tests] Validation utils isValidRecipient() returns false for an invalid eCash address / alias input
[22:54:30][CashTab Unit Tests] Validation utils isValidRecipient() returns true for a valid eCash address
[22:54:30][CashTab Unit Tests] Validation utils isValidRecipient() returns true for a valid prefix-less eCash address
[22:54:30][CashTab Unit Tests] Validation utils validateMnemonic() returns true for a valid mnemonic
[22:54:30][CashTab Unit Tests] Validation utils validateMnemonic() returns false for an invalid mnemonic
[22:54:30][CashTab Unit Tests] Validation utils validateMnemonic() returns false for an empty string mnemonic
[22:54:30][CashTab Unit Tests] Validation utils Returns 'false' if XEC send amount is a valid send amount
[22:54:30][CashTab Unit Tests] Validation utils Returns 'false' if XEC send amount is a valid send amount in USD
[22:54:30][CashTab Unit Tests] Validation utils Returns not a number if XEC send amount is not a number
[22:54:30][CashTab Unit Tests] Validation utils Returns amount must be greater than 0 if XEC send amount is 0
[22:54:30][CashTab Unit Tests] Validation utils Returns amount must be greater than 0 if XEC send amount is less than 0
[22:54:30][CashTab Unit Tests] Validation utils Returns balance error if XEC send amount is greater than user balance
[22:54:30][CashTab Unit Tests] Validation utils Returns balance error if XEC send amount is greater than user balance
[22:54:30][CashTab Unit Tests] Validation utils Returns error if XEC send amount is less than 5.5 minimum
[22:54:30][CashTab Unit Tests] Validation utils Returns error if XEC send amount is less than 5.5 minimum in fiat currency
[22:54:30][CashTab Unit Tests] Validation utils Returns balance error if XEC send amount is greater than user balance with fiat currency selected
[22:54:30][CashTab Unit Tests] Validation utils Returns precision error if XEC send amount has more than 2 decimal places
[22:54:30][CashTab Unit Tests] Validation utils Returns expected crypto amount with 2 decimals of precision even if inputs have higher precision
[22:54:30][CashTab Unit Tests] Validation utils Returns expected crypto amount with 2 decimals of precision even if inputs have higher precision
[22:54:30][CashTab Unit Tests] Validation utils Returns expected crypto amount with 2 decimals of precision even if inputs have lower precision
[22:54:30][CashTab Unit Tests] Validation utils Accepts a valid eToken token name
[22:54:30][CashTab Unit Tests] Validation utils Accepts a valid eToken token name that is a stringified number
[22:54:30][CashTab Unit Tests] Validation utils Rejects eToken token name if longer than 68 characters
[22:54:30][CashTab Unit Tests] Validation utils Rejects eToken token name if empty string
[22:54:30][CashTab Unit Tests] Validation utils Accepts a 4-char eToken token ticker
[22:54:30][CashTab Unit Tests] Validation utils Accepts a 12-char eToken token ticker
[22:54:30][CashTab Unit Tests] Validation utils Rejects eToken token ticker if empty string
[22:54:30][CashTab Unit Tests] Validation utils Rejects eToken token ticker if > 12 chars
[22:54:30][CashTab Unit Tests] Validation utils Accepts tokenDecimals if zero
[22:54:30][CashTab Unit Tests] Validation utils Accepts tokenDecimals if between 0 and 9 inclusive
[22:54:30][CashTab Unit Tests] Validation utils Rejects tokenDecimals if empty string
[22:54:30][CashTab Unit Tests] Validation utils Rejects tokenDecimals if non-integer
[22:54:30][CashTab Unit Tests] Validation utils Accepts tokenDecimals initial genesis quantity at minimum amount for 3 decimal places
[22:54:30][CashTab Unit Tests] Validation utils Accepts initial genesis quantity at minimum amount for 9 decimal places
[22:54:30][CashTab Unit Tests] Validation utils Accepts initial genesis quantity at amount below 100 billion
[22:54:30][CashTab Unit Tests] Validation utils Accepts highest possible initial genesis quantity at amount below 100 billion
[22:54:30][CashTab Unit Tests] Validation utils Accepts initial genesis quantity if decimal places equal tokenDecimals
[22:54:30][CashTab Unit Tests] Validation utils Accepts initial genesis quantity if decimal places are less than tokenDecimals
[22:54:30][CashTab Unit Tests] Validation utils Rejects initial genesis quantity of zero
[22:54:30][CashTab Unit Tests] Validation utils Rejects initial genesis quantity if tokenDecimals is not valid
[22:54:30][CashTab Unit Tests] Validation utils Rejects initial genesis quantity if 100 billion or higher
[22:54:30][CashTab Unit Tests] Validation utils Rejects initial genesis quantity if it has more decimal places than tokenDecimals
[22:54:30][CashTab Unit Tests] Validation utils Accepts a valid eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Accepts a valid eToken token document URL including special URL characters
[22:54:30][CashTab Unit Tests] Validation utils Accepts a blank string as a valid eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Rejects eToken token name if longer than 68 characters
[22:54:30][CashTab Unit Tests] Validation utils Accepts a domain input with https protocol as eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Accepts a domain input with http protocol as eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Accepts a domain input with a primary and secondary top level domain as eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Accepts a domain input with just a subdomain as eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Rejects a domain input with no top level domain, protocol or subdomain eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Rejects a domain input as numbers eToken token document URL
[22:54:30][CashTab Unit Tests] Validation utils Recognizes the default cashtabCache object as valid
[22:54:30][CashTab Unit Tests] Validation utils Recognizes a valid cashtabCache object
[22:54:30][CashTab Unit Tests] Validation utils Rejects a cashtabCache object if one token id is invalid
[22:54:30][CashTab Unit Tests] Validation utils Rejects a cashtabCache object if decimals is not a number
[22:54:30][CashTab Unit Tests] Validation utils Rejects a cashtabCache object if tokenName is not a string
[22:54:30][CashTab Unit Tests] Validation utils Rejects a cashtabCache object if tokenName is missing
[22:54:30][CashTab Unit Tests] Validation utils Recognizes a valid cashtab settings object
[22:54:30][CashTab Unit Tests] Validation utils Rejects a cashtab settings object for an unsupported currency
[22:54:30][CashTab Unit Tests] Validation utils Rejects a corrupted cashtab settings object for an unsupported currency
[22:54:30][CashTab Unit Tests] Validation utils Rejects a valid fiatCurrency setting but undefined sendModal setting
[22:54:30][CashTab Unit Tests] Validation utils Rejects a valid fiatCurrency setting but invalid sendModal setting
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount accepts the dust minimum
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount accepts arbitrary number above dust minimum
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects zero
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount accepts a string with 1 decimal place
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount accepts a string with 2 decimal places
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects a string with more than 2 decimal places
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects a non-number string
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount accepts arbitrary number above dust minimum as a string
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects null
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects undefined
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects a value including non-numerical characters
[22:54:30][CashTab Unit Tests] Validation utils isValidXecSendAmount rejects a value including decimal marker that is not a period
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount rejects null
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount rejects undefined
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount rejects a burn amount that is 0
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount rejects a burn amount that is negative
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount rejects a burn amount that is more than the maxAmount param
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount accepts a valid burn amount
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount accepts a valid burn amount with decimal points
[22:54:30][CashTab Unit Tests] Validation utils isValidEtokenBurnAmount accepts a valid burn amount that is the same as the maxAmount
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId accepts valid token ID that is 64 chars in length
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects a token ID that is less than 64 chars in length
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects a token ID that is more than 64 chars in length
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects a token ID number that is 64 digits in length
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects null
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects undefined
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects empty string
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects special character input
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects non-alphanumeric input
[22:54:30][CashTab Unit Tests] Validation utils isValidXecAirdrop accepts valid Total Airdrop Amount
[22:54:30][CashTab Unit Tests] Validation utils isValidXecAirdrop rejects null
[22:54:30][CashTab Unit Tests] Validation utils isValidXecAirdrop rejects undefined
[22:54:30][CashTab Unit Tests] Validation utils isValidXecAirdrop rejects empty string
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects an alphanumeric input
[22:54:30][CashTab Unit Tests] Validation utils isValidTokenId rejects a number !> 0 in string format
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray accepts an airdrop list with valid XEC values
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray rejects an airdrop list with invalid XEC values
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray rejects null
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray rejects undefined
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray rejects empty string
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray rejects an airdrop list with multiple invalid XEC values per row
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropOutputsArray rejects an airdrop list with multiple valid XEC values per row
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropExclusionArray accepts a valid airdrop exclusion list
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropExclusionArray rejects an invalid airdrop exclusion list
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropExclusionArray rejects an empty airdrop exclusion list
[22:54:30][CashTab Unit Tests] Validation utils isValidAirdropExclusionArray rejects a null airdrop exclusion list
[22:54:30][CashTab Unit Tests] Validation utils parseInvalidCashtabCacheForMigration updates an invalid cashtabCache object and keeps existing valid cache params intact
[22:54:30][CashTab Unit Tests] Validation utils parseInvalidCashtabCacheForMigration sets cashtabCache object with no exsting valid cache to default values
[22:54:30][CashTab Unit Tests] Validation utils updates an invalid settings object and keeps existing valid settings intact
[22:54:30][CashTab Unit Tests] Validation utils sets settings object with no exsting valid settings to default values
[22:54:30][CashTab Unit Tests] Validation utils does nothing if valid settings object is present in localStorage
[22:54:30][CashTab Unit Tests] Validation utils accepts a valid wallet name
[22:54:30][CashTab Unit Tests] Validation utils rejects wallet name that is too long
[22:54:30][CashTab Unit Tests] Validation utils rejects blank string as new wallet name
[22:54:30][CashTab Unit Tests] Validation utils rejects wallet name of the wrong type
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes "bitcoin" is probably a scam token name
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes "ebitcoin" is probably a scam token name
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes "Lido Staked Ether", from coingeckoTop500Names, is probably a scam token name
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes 'matic-network', from coingeckoTop500Ids, is probably a scam token name
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes 'Australian Dollar', from Cashtab supported fiat currencies, is probably a scam token name
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes 'ebtc', from bannedTickers, is probably a scam token name
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes 'gbp', from bannedTickers, is probably a scam
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes 'Hong Kong Dollar', from fiatNames, is probably a scam
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes '₪', from fiat symbols, is probably a scam
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam recognizes an ordinary token name as acceptable
[22:54:30][CashTab Unit Tests] Validation utils isProbablyNotAScam accepts a token name with fragments of banned potential scam names
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput accepts correctly formed multisend output
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput accepts correctly formed multisend output even if address has extra spaces
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg for invalid address
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg for invalid value (dust)
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg for invalid value (too many decimals)
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg for a blank input
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg for extra spaces on a particular line
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error for non-string input
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg for input without only an address
[22:54:30][CashTab Unit Tests] Validation utils isValidMultiSendUserInput returns expected error msg if line has more than one comma
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects a string that starts with 6a
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects a string that starts with invalid pushdata
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects non-string input
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects non-hex input
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam supports a valid hex string under max length
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam supports a valid hex string under max length with mixed capitalization
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam supports a valid hex string of max length
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects a string with empty spaces
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects an empty string
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects a valid hex string exceeding max length
[22:54:30][CashTab Unit Tests] Validation utils isValidOpreturnParam rejects a valid hex string that has uneven length (i.e., half a byte)
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on startup
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled if address has been entered but no value
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled for valid address and value
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on zero balance
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid address
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid value
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled for invalid opreturn msg
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Disabled on priceApi error
[22:54:30][CashTab Unit Tests] Determining whether Send button should be disabled on SendXec screen shouldSendXecBeDisabled: Enabled if isOneToManyXECSend and value is not entered
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Blank string
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Address only and no querystring
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: prefixless address input
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: alias only and no querystring
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: alias missing .xec suffix
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid amount param, no decimals
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid amount param, with decimals
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Invalid address with valid amount param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: etoken address with valid amount param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid address with invalid amount param (too many decimal places)
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid alias with valid amount param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Invalid alias with valid amount param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid address with valid op_return_raw param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid alias with valid op_return_raw param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid address with invalid op_return_raw param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Valid amount and op_return_raw params
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: invalid querystring (unsupported params)
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Invalid queryString, repeated param
[22:54:30][CashTab Unit Tests] Parses user input address strings with parseAddressInput parseAddressInput: Repeated op_return_raw param
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns true for a valid lowercase alphanumeric input
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains uppercase char
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains special char
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains emoji
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains other special characters
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input is an empty string
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains an empty space
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains symbols
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input is not a string
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if input contains underscores
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns expected error if exceeds byte restriction
[22:54:30][CashTab Unit Tests] Returns true if a given input meets alias spec or expected error msg if it does not meetsAliasSpec: returns true for an alias of max bytecount
[22:54:30][CashTab Unit Tests] Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias send input
[22:54:30][CashTab Unit Tests] Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias missing prefix
[22:54:30][CashTab Unit Tests] Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias with double suffix
[22:54:30][CashTab Unit Tests] Validates user alias input on Send and SendToken screens isValidAliasSendInput: Valid alias with bad suffix
[22:54:30][CashTab Unit Tests] Validates user alias input on Send and SendToken screens isValidAliasSendInput: Invalid alias (too long)
[22:54:30][CashTab Unit Tests] Validates user alias input on Send and SendToken screens isValidAliasSendInput: Invalid alias (nonalphanumeric)
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: Legacy empty contact list
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: Empty contact list
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: Array of more than one empty object is invalid
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: List with one valid entry
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: Multiple valid entries
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: Valid objects but also an empty object is false
[22:54:30][CashTab Unit Tests] Validating Cashtab Contact Lists isValidContactList: Valid alias formats are accepted
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] generateSendOpReturn() returns correct script object for valid tokenUtxo and send quantity
[22:54:30][CashTab Unit Tests] generateSendOpReturnScript() throws error on invalid input
[22:54:30][CashTab Unit Tests] generateBurnOpReturn() returns correct script for valid tokenUtxo and burn quantity
[22:54:30][CashTab Unit Tests] generateBurnOpReturn() throws error on invalid input
[22:54:30][CashTab Unit Tests] generateGenesisOpReturn() returns correct script for a valid configObj
[22:54:30][CashTab Unit Tests] generateGenesisOpReturn() throws error on invalid configObj
[22:54:30][CashTab Unit Tests] signUtxosByAddress() successfully returns a txBuilder object for a one to one XEC tx
[22:54:30][CashTab Unit Tests] signUtxosByAddress() successfully returns a txBuilder object for a one to many XEC tx
[22:54:30][CashTab Unit Tests] sumOneToManyXec() correctly parses the value for a valid one to many send XEC transaction
[22:54:30][CashTab Unit Tests] sumOneToManyXec() correctly parses the value for a valid one to many send XEC transaction with decimals
[22:54:30][CashTab Unit Tests] sumOneToManyXec() returns NaN for an address and value array that is partially typed or has invalid format
[22:54:30][CashTab Unit Tests] generateAliasOpReturnScript() correctly generates OP_RETURN script for a valid alias registration for a p2pkh address
[22:54:30][CashTab Unit Tests] generateAliasOpReturnScript() correctly generates OP_RETURN script for a valid alias registration for a p2sh address
[22:54:30][CashTab Unit Tests] generateTokenTxInput() returns a valid object for a valid create token tx
[22:54:30][CashTab Unit Tests] generateTokenTxInput() returns a valid object for a valid send token tx
[22:54:30][CashTab Unit Tests] generateTokenTxInput() returns a valid object for a valid burn token tx
[22:54:30][CashTab Unit Tests] generateTokenTxOutput() returns a valid object for a valid create token tx
[22:54:30][CashTab Unit Tests] generateTokenTxOutput() returns a valid object for a valid send token tx
[22:54:30][CashTab Unit Tests] generateTokenTxOutput() returns a valid object for a valid burn token tx
[22:54:30][CashTab Unit Tests] generateTxInput() returns an input object for a valid one to one XEC tx
[22:54:30][CashTab Unit Tests] generateTxInput() returns an input object for a valid one to many XEC tx
[22:54:30][CashTab Unit Tests] generateTxInput() throws error for a one to many XEC tx with invalid destinationAddressAndValueArray input
[22:54:30][CashTab Unit Tests] generateTxInput() throws error for a one to many XEC tx with invalid utxos input
[22:54:30][CashTab Unit Tests] generateTxOutput() returns a txBuilder instance for a valid one to one XEC tx
[22:54:30][CashTab Unit Tests] generateTxOutput() returns a txBuilder instance for a valid one to many XEC tx
[22:54:30][CashTab Unit Tests] generateTxOutput() throws an error on invalid input params for a one to one XEC tx
[22:54:30][CashTab Unit Tests] generateTxOutput() throws an error on invalid input params for a one to many XEC tx
[22:54:30][CashTab Unit Tests] signAndBuildTx() successfully returns a raw tx hex for a tx with a single input and a single output
[22:54:30][CashTab Unit Tests] signAndBuildTx() successfully returns a raw tx hex for a tx with a single input and multiple outputs
[22:54:30][CashTab Unit Tests] signAndBuildTx() successfully returns a raw tx hex for a tx with multiple inputs and a single output
[22:54:30][CashTab Unit Tests] signAndBuildTx() successfully returns a raw tx hex for a tx with multiple inputs and multiple outputs
[22:54:30][CashTab Unit Tests] signAndBuildTx() throws error on an empty inputUtxo param
[22:54:30][CashTab Unit Tests] signAndBuildTx() throws error on a null inputUtxo param
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Correctly determines a wallet's balance from its set of non-eToken utxos (nonSlpUtxos)
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Correctly determines a wallet's zero balance from its empty set of non-eToken utxos (nonSlpUtxos)
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions A wallet with format from before the 20221123 migration is invalid
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a stored wallet as valid if it has all required fields in 20221123 updated format
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a stored wallet as invalid if it is missing required fields
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a stored wallet as invalid if it includes hydratedUtxoDetails in the state field
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a stored wallet as invalid if it's missing the Path1899 and mnemonic keys
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Converts a legacy BCH amount to an XEC amount
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Leaves a legacy BCH amount unchanged if appConfig.cashDecimals is 8
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertToEcashPrefix converts a bitcoincash: prefixed address to an ecash: prefixed address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertToEcashPrefix returns an ecash: prefix address unchanged
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a wallet with missing Path1889 is a Legacy Wallet and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a wallet with missing PublicKey in Path1889 is a Legacy Wallet and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a wallet with missing PublicKey in Path145 is a Legacy Wallet and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a wallet with missing PublicKey in Path245 is a Legacy Wallet and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a wallet with missing Hash160 values is a Legacy Wallet and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a latest, current wallet that does not require migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a non-eCash prefixed Path245 address and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a non-eCash prefixed Path1899 address and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Recognizes a non-eCash prefixed Path145 address and requires migration
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEtokenToEcashAddr successfully converts a valid eToken address to eCash
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEtokenToEcashAddr successfully converts prefixless eToken address as input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEtokenToEcashAddr throws error with an invalid eToken address as input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEtokenToEcashAddr throws error with an ecash address as input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEtokenToEcashAddr throws error with null input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEtokenToEcashAddr throws error with empty string input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEcashtoEtokenAddr successfully converts a valid ecash address into an etoken address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEcashtoEtokenAddr successfully converts a valid prefix-less ecash address into an etoken address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEcashtoEtokenAddr throws error with invalid ecash address input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEcashtoEtokenAddr throws error with a valid etoken address input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEcashtoEtokenAddr throws error with a valid bitcoincash address input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions convertEcashtoEtokenPrefix throws error with null ecash address input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions flattenContactList flattens contactList array by returning an array of addresses
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions flattenContactList flattens contactList array of length 1 by returning an array of 1 address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions flattenContactList returns an empty array for invalid input
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions getHashArrayFromWallet returns false for a legacy wallet
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Successfully extracts a hash160 array from a migrated wallet object
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions isActiveWebsocket returns true for an active chronik websocket connection
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions isActiveWebsocket returns false for a disconnected chronik websocket connection
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions isActiveWebsocket returns false for a null chronik websocket connection
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions isActiveWebsocket returns false for an active websocket connection with no subscriptions
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions getCashtabByteCount for 2 inputs, 2 outputs returns the same value as BCH.BitcoinCash.getByteCount( { P2PKH: utxos.length }, { P2PKH: p2pkhOutputNumber }, );
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions getCashtabByteCount for 1 input, 2 outputs returns the same value as BCH.BitcoinCash.getByteCount( { P2PKH: utxos.length }, { P2PKH: p2pkhOutputNumber }, );
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions getCashtabByteCount for 173 input, 1 outputs returns the same value as BCH.BitcoinCash.getByteCount( { P2PKH: utxos.length }, { P2PKH: p2pkhOutputNumber }, );
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions getCashtabByteCount for 1 input, 2000 outputs returns the same value as BCH.BitcoinCash.getByteCount( { P2PKH: utxos.length }, { P2PKH: p2pkhOutputNumber }, );
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions calculates fee correctly for 2 P2PKH outputs
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions Converts a hash160 to an ecash address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions outputScriptToAddress determines P2PKH address type from output script and returns the ecash address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions outputScriptToAddress determines P2SH address type from output script and returns the ecash address
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions outputScriptToAddress throws correct error for an output script that does not parse as P2PKH or P2SH
[22:54:30][CashTab Unit Tests] Correctly executes cash utility functions outputScriptToAddress throws correct error for an output script that for some reason is bracketed by P2PKH markers but is not a valid hash160
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <BalanceHeader /> Renders the loader if balanceSats is not an integer
[22:54:30][CashTab Unit Tests] <BalanceHeader /> Renders the BalanceHeader component correctly with default locale en-US
[22:54:30][CashTab Unit Tests] <BalanceHeader /> Renders the BalanceHeader component correctly with fr-FR locale
[22:54:30][CashTab Unit Tests] <BalanceHeader /> Balance is hidden if cashtabSettings.balanceVisible is false
[22:54:30][CashTab Unit Tests] <BalanceHeader /> Renders fiat price for a non-USD currency
[22:54:30][CashTab Unit Tests] <BalanceHeader /> Fiat price and forex are not displayed if fiatPrice is unavailable
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] getTokenStats successfully returns a token stats object
[22:54:30][CashTab Unit Tests] organizeUtxosByType successfully splits a chronikUtxos array into slpUtxos and nonSlpUtxos
[22:54:30][CashTab Unit Tests] getPreliminaryTokensArray successfully returns an array of all tokenIds and token balances (not yet adjusted for token decimals)
[22:54:30][CashTab Unit Tests] finalizeTokensArray successfully returns finalTokenArray and cachedTokenInfoById even if no cachedTokenInfoById is provided
[22:54:30][CashTab Unit Tests] finalizeTokensArray successfully returns finalTokenArray and cachedTokenInfoById when called with all token info in cache
[22:54:30][CashTab Unit Tests] updateCachedTokenInfoAndFinalizeTokensArray successfully returns finalTokenArray and cachedTokenInfoById when called with some token info in cache
[22:54:30][CashTab Unit Tests] finalizeSlpUtxos successfully adds token quantity adjusted for token decimals to preliminarySlpUtxos
[22:54:30][CashTab Unit Tests] flattenChronikTxHistory successfully combines the result of getTxHistoryChronik into a single array
[22:54:30][CashTab Unit Tests] sortAndTrimChronikTxHistory successfully orders the result of flattenChronikTxHistory by blockheight and firstSeenTime if all txs are confirmed, and returns a result of expected length
[22:54:30][CashTab Unit Tests] sortAndTrimChronikTxHistory successfully orders the result of flattenChronikTxHistory by blockheight and firstSeenTime if some txs are confirmed and others unconfirmed, and returns a result of expected length
[22:54:30][CashTab Unit Tests] sortAndTrimChronikTxHistory successfully orders the result of flattenChronikTxHistory by blockheight and firstSeenTime if all txs are unconfirmed, and returns a result of expected length
[22:54:30][CashTab Unit Tests] getMintAddress successfully parses chronik.tx response to determine mint address for TabCash token
[22:54:30][CashTab Unit Tests] getMintAddress successfully parses chronik.tx response to determine mint address for PoW token
[22:54:30][CashTab Unit Tests] getMintAddress successfully parses chronik.tx response to determine mint address for Alita token
[22:54:30][CashTab Unit Tests] getMintAddress successfully parses chronik.tx response to determine mint address for a BUX self minted token
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Staking rewards coinbase tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Incoming XEC tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Outgoing XEC tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Alias registration
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Incoming eToken
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Outgoing eToken
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Genesis tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Incoming eToken tx with 9 decimals
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Legacy airdrop tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Outgoing encrypted msg (deprecated)
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Incoming encrypted msg (deprecated)
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Token burn tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Token burn tx with decimals
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Incoming eToken tx less than zero with decimals
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: SWaP tx
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Pre-spec alias registration (now off spec)
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: PayButton tx with no data and payment id
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: PayButton tx with data and payment id
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: PayButton tx with no data and no payment id
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: PayButton tx with data and no payment id
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: PayButton tx with unsupported version number
[22:54:30][CashTab Unit Tests] Parses supported tx types parseChronikTx: Paybutton tx that does not have spec number of pushes
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with an input of 0
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with zero XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with a small XEC balance input with 2+ decimal figures
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with 1 Million XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with 1 Billion XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with total supply as XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with > total supply as XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with no balance
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with null input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with undefined as input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatBalance with non-numeric input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions Accepts a valid unix timestamp
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions Accepts an empty string and generates a new timestamp
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions Accepts no parameter and generates a new timestamp
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions Accepts 'undefined' as a parameter and generates a new date
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions Rejects an invalid string containing letters.
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions Rejects an invalid string containing numbers.
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with zero XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with a small XEC balance input with 2+ decimal figures
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with 1 Million XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with 1 Billion XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with total supply as XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with > total supply as XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with no balance
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with null input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with undefined sw.state.balance or sw.state.balance.totalBalance as input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatSavedBalance with non-numeric input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with zero XEC balance input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with a small XEC balance input with 2+ decimal figures
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with a large XEC balance input with 2+ decimal figures
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with no balance
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with null input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatFiatBalance with undefined input
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions returns undefined formatTokenBalance with undefined inputs
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions test formatTokenBalance with valid balance & decimal inputs
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions returns undefined when passed invalid decimals parameter
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions returns undefined when passed invalid balance parameter
[22:54:30][CashTab Unit Tests] Correctly executes formatting functions maintains trailing zeros in balance per tokenDecimal parameter
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput: Alphanumeric string
[22:54:30][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput: String with emojis
[22:54:30][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput: String of max length for Cashtab Msg
[22:54:30][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: String exceeding max length for Cashtab Msg by 1 byte
[22:54:30][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: non-string input
[22:54:30][CashTab Unit Tests] Cashtab Msg building functions getCashtabMsgTargetOutput throws error for: Empty string
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput Airdrop with no optional msg
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput Airdrop with many spaces for optional msg treated as no optional msg
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput Airdrop with optional alphanumeric msg
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput Airdrop with optional emoji and special characters msg
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput Airdrop with optional msg of max allowable length
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput getAirdropTargetOutput throws error for: Invalid tokenId provided
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput getAirdropTargetOutput throws error for: Airdrop msg exceeding max length for airdrop msg by 1 byte
[22:54:30][CashTab Unit Tests] getAirdropTargetOutput getAirdropTargetOutput throws error for: non-string input for airdrop msg
[22:54:30][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput: Valid alias to p2pkh address
[22:54:30][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput: Valid alias to p2sh address
[22:54:30][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput throws error for: Invalid alias
[22:54:30][CashTab Unit Tests] Alias registration target output building functions getAliasTargetOutput throws error for: Invalid address
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with emoji
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with emoji and text
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with special characters
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with Korean text
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with Arabic text
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with Chinese text
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alias with mixed foreign alphabets and emoji
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount: Alphanumeric valid v0 alias
[22:54:30][CashTab Unit Tests] Determines byte count of user input alias registrations getAliasByteCount throws error for: non-text input
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: a single emoji
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with characters and emojis
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with special characters
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: msg input with a mixture of symbols, multilingual characters and emojis
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: Alphanumeric string
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: String with emojis
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount: String of max length for Cashtab Msg
[22:54:30][CashTab Unit Tests] Determines bytecount of user input Cashtab Msg getCashtabMsgByteCount throws error for: non-text input
[22:54:30][CashTab Unit Tests] Build target output for opreturn as bip21 param getOpreturnParamTargetOutput: Valid opreturn param input
[22:54:30][CashTab Unit Tests] Build target output for opreturn as bip21 param getOpreturnParamTargetOutput: Max length for opreturn param
[22:54:30][CashTab Unit Tests] Build target output for opreturn as bip21 param getOpreturnParamTargetOutput throws error for: Invalid opreturn param input
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] useWallet hook Migrating legacy wallet on mainnet
[22:54:30][useWallet hook Migrating legacy wallet on mainnet] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update (/work/cashtab/src/hooks/useWallet.js:1357:9) at runNextTicks (node:internal/process/task_queues:61:5) at processTimers (node:internal/timers:499:9)
[22:54:30][CashTab Unit Tests] useWallet hook Verify default Cashtab settings are initialized
[22:54:30][CashTab Unit Tests] useWallet hook processChronikWsMsg() refreshes alias prices when aliasPrices is null
[22:54:30][useWallet hook processChronikWsMsg() refreshes alias prices when aliasPrices is null] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update (/work/cashtab/src/hooks/useWallet.js:1357:9)
[22:54:30][CashTab Unit Tests] useWallet hook processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match
[22:54:30][useWallet hook processChronikWsMsg() refreshes alias prices when aliasPrices exists, server and cashtab prices array length do not match] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update (/work/cashtab/src/hooks/useWallet.js:1357:9) at runNextTicks (node:internal/process/task_queues:61:5) at processTimers (node:internal/timers:499:9)
[22:54:30][CashTab Unit Tests] useWallet hook processChronikWsMsg() does not refresh alias prices when aliasPrices exists, server and cashtab array length do match
[22:54:30][CashTab Unit Tests] useWallet hook Verify a processChronikWsMsg() new block event updates the `aliasServerError` state var upon a /prices/ endpoint error
[22:54:30][CashTab Unit Tests] useWallet hook Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response
[22:54:30][useWallet hook Verify refreshAliases() updates the `aliases` state variable on a successful /address/ endpoint response] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update (/work/cashtab/src/hooks/useWallet.js:1357:9)
[22:54:30][CashTab Unit Tests] useWallet hook Verify refreshAliases() updates the `aliasServerError` state variable upon an /address/ endpoint error
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] queryAliasServer() correctly throws a network error for server downtime or a malformed fetch url
[22:54:30][CashTab Unit Tests] queryAliasServer() correctly returns an array of alias objects for a valid eCash address that has registered aliases
[22:54:30][CashTab Unit Tests] queryAliasServer() correctly returns an array of alias objects for a valid prefix-less eCash address that has registered aliases
[22:54:30][CashTab Unit Tests] queryAliasServer() returns an empty array for a valid eCash address with no aliases
[22:54:30][CashTab Unit Tests] queryAliasServer() throws an error for an invalid eCash address
[22:54:30][CashTab Unit Tests] queryAliasServer() returns an alias object for a registered alias
[22:54:30][CashTab Unit Tests] queryAliasServer() returns an api error for a non-alphanumeric alias
[22:54:30][CashTab Unit Tests] queryAliasServer() returns a valid object for an unregistered alias
[22:54:30][CashTab Unit Tests] queryAliasServer() returns an error for an alias longer than 21 characters
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <Receive /> Renders the loading component while loading
[22:54:30][CashTab Unit Tests] <Receive /> Renders the Receive screen correctly
[22:54:30][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of expected width for desktop
[22:54:30][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of expected width for smallest supported mobile view
[22:54:30][CashTab Unit Tests] <Receive /> Renders the Receive screen with QR code of size that is fully viewable in extension dimensions
[22:54:30][CashTab Unit Tests] <Receive /> Clicking the QR code copy pastes address to clipboard
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint for token with decimals
[22:54:30][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput: Fixed supply eToken mint for tokenId 50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e
[22:54:30][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Invalid document hash
[22:54:30][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Missing decimals
[22:54:30][CashTab Unit Tests] Generating etoken genesis tx target outputs getSlpGenesisTargetOutput throws error for: Non-string name
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs: Legacy unit test of deprecated function generateSendOpReturn
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs: Token send with change output
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs: Token send with change output
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs: Token send with change output and decimals
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs: Token send with change output and decimals
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs throws error for: sendQty is not a string
[22:54:30][CashTab Unit Tests] Generating etoken send tx target output(s) getSlpSendTargetOutputs throws error for: tokenUtxos insufficient to cover sendQty
[22:54:30][CashTab Unit Tests] Generating etoken burn tx target output getSlpBurnTargetOutput: Burn a fraction of balance
[22:54:30][CashTab Unit Tests] Generating etoken burn tx target output getSlpBurnTargetOutput: Burn all balance
[22:54:30][CashTab Unit Tests] Generating etoken burn tx target output getSlpBurnTargetOutput throws error for: burnQty is not a string
[22:54:30][CashTab Unit Tests] Generating etoken burn tx target output getSlpBurnTargetOutput throws error for: tokenUtxos insufficient to cover burnQty
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist from localforage to context if they are present
[22:54:30][CashTab Unit Tests] useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty
[22:54:30][useWallet hook rendering in different localforage states Cashtab loads wallet, settings, cache, and contactlist as expected defaults if localforage is empty] Error: expect(received).toBe(expected) // Object.is equality Expected: 60000 Received: 10 Ignored nodes: comments, script, style <html> <head /> <body> <div /> </body> </html> at toBe (/work/cashtab/src/hooks/__tests__/useWalletStorage.test.js:91:58) at runWithExpensiveErrorDiagnosticsDisabled (/work/cashtab/node_modules/@testing-library/dom/dist/config.js:47:12) at checkCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:124:77) at checkRealTimersCallback (/work/cashtab/node_modules/@testing-library/dom/dist/wait-for.js:118:16) at Timeout.task [as _onTimeout] (/work/cashtab/node_modules/jsdom/lib/jsdom/browser/Window.js:520:19) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7)
[22:54:30][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch
[22:54:30][useWallet hook rendering in different localforage states XEC price is set in state on successful API fetch] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update [as current] (/work/cashtab/src/hooks/useWallet.js:1357:9)
[22:54:30][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price remains null in state on API error
[22:54:30][CashTab Unit Tests] useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch
[22:54:30][useWallet hook rendering in different localforage states XEC price is set in state to fiat currency of user settings on successful API fetch] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update [as current] (/work/cashtab/src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address if all utxos are mature coinbase utxos
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address with an OP_RETURN output
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2pkh address with an OP_RETURN output at index 0
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 1 sat/byte to p2sh address
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1000 satoshis with 1 change output at 10 sat/byte
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1 satoshi per byte tx with no change outputs
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1 satoshi per byte tx with no change outputs from a wallet with utxos at many addresses
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 1 satoshi per byte tx broadcast actually broadcast with this function
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: No precision error using JS Number on utxo with highest theoretically possible value
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 15000 satoshis with 1 change output at 1 sat/byte to 5 p2pkh addresses
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: 15000 satoshis with 1 change output at 1 sat/byte to 5 p2sh outputs
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Sending below dust threshold
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Sending above wallet balance
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Sending within wallet balance but insufficient to cover fee
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Attempting to create a tx with fee rate below 1 sat/byte
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Tx with utxos for which the wallet has no private keys
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: throws broadcast error from the node
[22:54:30][CashTab Unit Tests] Improved Cashtab transaction broadcasting function sendXec: Insufficient balance due to immature coinbase utxos
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: Airdrop
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: Multisend format with extra space around address and value
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: One address in multi format
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs: Multisend including a non-integer JS result
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Invalid multisend input (dust)
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Too many decimal places
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Use of comma as decimal place marker
[22:54:30][CashTab Unit Tests] Forming multisend targetOutputs getMultisendTargetOutputs throws error for: Too many commas on one line
[22:54:30][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with no coinbase utxos returned unchanged
[22:54:30][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with immature coinbase utxo returned without immature coinbase utxo
[22:54:30][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: Array with some immature coinbase utxos and some mature coinbase utxos returned without immature coinbase utxo
[22:54:30][CashTab Unit Tests] Ignore unspendable coinbase utxos ignoreUnspendableUtxos: If blockheight is zero, all coinbase utxos are removed
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <Home /> if wallet has balance and tx history Renders the loading component while loading
[22:54:30][CashTab Unit Tests] <Home /> if wallet has balance and tx history Renders the Home screen with no API error
[22:54:30][CashTab Unit Tests] <Home /> if wallet has balance and tx history Renders the Home screen with API error
[22:54:30][CashTab Unit Tests] <Home /> if wallet has balance and tx history Renders correctly for a zero balance new wallet
[22:54:30][CashTab Unit Tests] <Home /> if wallet has balance and tx history Renders the onboarding screen for a new wallet
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <Tx /> Renders the timestamp if timeFirstSeen !== 0
[22:54:30][CashTab Unit Tests] <Tx /> Renders the timestamp as block timestamp timeFirstSeen === 0
[22:54:30][CashTab Unit Tests] <Tx /> Does not render a timestamp for an unconfirmed tx with timeFirstSeen === '0'
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Kind of a normal balance calculation
[22:54:30][CashTab Unit Tests] Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Wallet balance of total XEC supply
[22:54:30][CashTab Unit Tests] Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Empty array returns 0 balance
[22:54:30][CashTab Unit Tests] Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Array containing valid and invalid chronik utxos returns NaN
[22:54:30][CashTab Unit Tests] Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats: Array containing invalid chronik utxos returns NaN
[22:54:30][CashTab Unit Tests] Calculates total balance in satoshis from a valid set of chronik utxos getBalanceSats throws error for: Call with non-Array
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: Total XEC supply
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: Total XEC supply
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: Total XEC supply less 1 satoshi
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: Total XEC supply less 1 satoshi
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis Converts satoshis to xec: 0 is 0
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis Converts xec to satoshis: 0 is 0
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis toXec throws error for: Bad XEC amount, too many decimal places
[22:54:30][CashTab Unit Tests] Converts satoshis to XEC and XEC to satoshis toSatoshis throws error for: Bad XEC amount, too many decimal places
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid.
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address and value keys are set and valid. Unsupported legacy params are ignored.
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and value present as undefined
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Address field is populated + disabled while value field is empty + enabled if legacy url params have address defined and no value key present
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Params are ignored if only value param is present
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params. Params are ignored if param is duplicated
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL Legacy params are not parsed as bip21 even if the bip21 param appears in the string
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL bip21 param - valid bip21 param with amount and op_return_raw is parsed as expected
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL bip21 param - an invalid bip21 param shows validation errors but cannot be changed
[22:54:30][CashTab Unit Tests] <SendXec /> rendered with params in URL No params. Send screen loads normally with no rendered input.
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Cashtab transaction broadcasting functions Throws error attempting to burn an eToken ID that is not within the wallet's utxo
[22:54:30][CashTab Unit Tests] Cashtab transaction broadcasting functions creates a token correctly
[22:54:30][CashTab Unit Tests] Cashtab transaction broadcasting functions Throws correct error if user attempts to create a token with an invalid wallet
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Correctly executes token parsing methods checkForTokenById returns 'false' if token ID is not found in wallet token list
[22:54:30][CashTab Unit Tests] Correctly executes token parsing methods checkForTokenById returns 'true' if token ID is found in wallet token list
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] Detect mobile or desktop devices isMobile: Navigator is undefined
[22:54:30][CashTab Unit Tests] Detect mobile or desktop devices isMobile: Navigator.userAgentData is undefined
[22:54:30][CashTab Unit Tests] Detect mobile or desktop devices isMobile: Desktop device on browser with userAgentData support
[22:54:30][CashTab Unit Tests] Detect mobile or desktop devices isMobile: Mobile device on browser with userAgentData support
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <ScanQRCode /> Renders the modal on load if loadWithCameraOpen is true
[22:54:30][CashTab Unit Tests] <ScanQRCode /> Does not render the modal on load if loadWithCameraOpen is false
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <CreateToken /> If wallet has sufficient XEC, renders component and CreateTokenForm
[22:54:30][CashTab Unit Tests] <CreateToken /> If wallet has insufficient XEC, renders component but does not render CreateTokenForm
[22:54:30][CashTab Unit Tests] <CreateToken /> Renders the create token notification upon successful broadcast
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <QRCode /> QRCode copying ecash address
[22:54:30][CashTab Unit Tests] <QRCode /> QRCode copying eToken address
[22:54:30][CashTab Unit Tests] <QRCode /> QRCode without address
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <CreateTokenForm /> Renders the component
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <App /> Renders 404 on a bad route
[22:54:30][CashTab Unit Tests] <App /> Navigation menu routes to expected components
[22:54:30][CashTab Unit Tests] <App /> Renders the App screen showing normal wallet info for a created wallet
[22:54:30][CashTab Unit Tests] <App /> Renders the onboarding screen if the user has no wallet
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <App /> Renders onboarding screen if cashtab.com opened with no local storage and no wallet
[22:54:30][<App /> Renders onboarding screen if cashtab.com opened with no local storage and no wallet] TypeError: Cannot create property 'mnemonic' on boolean 'false' at update (/work/cashtab/src/hooks/useWallet.js:105:30) at Object.update (/work/cashtab/src/hooks/useWallet.js:1357:9) at runNextTicks (node:internal/process/task_queues:61:5) at processTimers (node:internal/timers:499:9)
[22:54:30][CashTab Unit Tests] <App /> Renders API error if called with wallet in localforage but chronik utxo calls fail
[22:54:30][CashTab Unit Tests] <App /> Loads home screen with no error if wallet is in storage and chronik calls are successful
[22:54:30][CashTab Unit Tests] <App /> Adding a contact to Configure.js from clicking on tx history adds it to localforage and wallet context
[22:54:30][CashTab Unit Tests] <App /> Adding a contact to an existing contactList by clicking on tx history adds it to localforage and wallet context
[22:54:30][CashTab Unit Tests] <App /> A user with legacy blank contactList in localstorage is migrated on startup
[22:54:30][CashTab Unit Tests] <App /> Clicking "reply" on a Cashtab Msg correctly populates the SendXec to address and amount fields
[22:54:30][CashTab Unit Tests] <App /> We do not see the camera auto-open setting in the config screen on a desktop device
[22:54:30][CashTab Unit Tests] <App /> We do see the camera auto-open setting in the config screen on a mobile device
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon successfully signing a message
[22:54:30][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon successfully verifying a message
[22:54:30][CashTab Unit Tests] <SignVerifyMsg /> Notification is rendered upon signature verification error
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <Configure /> Deleting a contact from Configure.js removes it from localforage and wallet context. A notification is triggered on success.
[22:54:30][CashTab Unit Tests] <Configure /> Adding a contact from Configure.js adds it to localforage and wallet context. A notification is triggered on success.
[22:54:30][CashTab Unit Tests] <Configure /> Adding a duplicate contact from Configure.js triggers error notification.
[22:54:30][CashTab Unit Tests] <Configure /> Renaming a contact from Configure.js renames it in localforage and wallet context
[22:54:30][CashTab Unit Tests] <Configure /> We can add a savedWallet as a contact. A notification is triggered on success.
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <SendToken /> Renders the SendToken screen with send address input
[22:54:30][CashTab Unit Tests] <SendToken /> Accepts a valid ecash: prefixed address
[22:54:30][CashTab Unit Tests] <SendToken /> Accepts a valid etoken: prefixed address
[22:54:30][CashTab Unit Tests] <SendToken /> Accepts a valid alias
[22:54:30][CashTab Unit Tests] <SendToken /> Displays a validation error for an invalid address
[22:54:30][CashTab Unit Tests] <SendToken /> Displays a validation error for an alias without .xec suffix
[22:54:30][CashTab Unit Tests] <SendToken /> Displays a validation error for valid alias that has not yet been registered
[22:54:30][CashTab Unit Tests] <SendToken /> Displays expected error if alias server gives a bad response
[22:54:30][CashTab Unit Tests] <SendToken /> Displays a validation error if the user includes any query string
[22:54:30][CashTab Unit Tests] <SendToken /> Renders the send token notification upon successful broadcast
[22:54:30][Step 1/1] CashTab Unit Tests
[22:54:30][CashTab Unit Tests] <SendXec /> Renders the SendXec screen with send address input
[22:54:30][CashTab Unit Tests] <SendXec /> Pass valid address to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass valid alias to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass an invalid address to Send To field and get a validation error
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a possibly valid alias without .xec suffix to Send To field and get expected error
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid alias to Send To field that has not yet been registered and get expected error
[22:54:30][CashTab Unit Tests] <SendXec /> Get expected error msg and send disabled if bad response from alias server
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount param to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid alias and bip21 query string with valid amount param to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with invalid amount param (dust) to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Valid address with valid bip21 query string with valid amount param rejected if amount exceeds wallet balance
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid alias and bip21 query string with invalid amount param (too many decimals) to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid address and an invalid bip21 query string
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with op_return_raw param to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Pass a valid address and bip21 query string with valid amount and invalid op_return_raw params to Send To field
[22:54:30][CashTab Unit Tests] <SendXec /> Clicking "Send" will send a valid tx with op_return_raw after entry of a valid address and bip21 query string with valid amount and op_return_raw params to Send To field
[22:54:30][Creating archive artifacts.tar.gz] Archive was created, file size 232.02 KB (237592 bytes)
[22:54:31][Publishing artifacts] Publishing 1 file using [WebPublisher]: results/artifacts => artifacts.tar.gz
[22:54:32][Publishing artifacts] Publishing 1 file using [ArtifactsCachePublisher]: results/artifacts => artifacts.tar.gz
[22:54:30][Step 1/1] ##teamcity[publishArtifacts '+:results/artifacts=>artifacts.tar.gz']
[22:54:32][Step 1/1] Build cashtab-tests failed with exit code 1
[22:54:30][Step 1/1] ##teamcity[buildProblem timestamp='2024-02-13T22:53:43.643' description='Build cashtab-tests failed with exit code 1']
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] ● useWallet hook rendering in different localforage states › XEC price is set in state to fiat currency of user settings on successful API fetch
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update [as current] (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] FAIL src/components/__tests__/AppIntegrations.test.js (18.234 s)
[22:54:30][Step 1/1] ● <App /> › Renders onboarding screen if cashtab.com opened with no local storage and no wallet
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] ● <App /> › Renders onboarding screen if cashtab.com opened with no local storage and no wallet
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] TypeError: Cannot create property 'mnemonic' on boolean 'false'
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 103 | // Clone wallet to not show mnemonic
[22:54:30][Step 1/1] 104 | const clonedWallet = JSON.parse(JSON.stringify(wallet));
[22:54:30][Step 1/1] > 105 | clonedWallet.mnemonic = 'do not render';
[22:54:30][Step 1/1] | ^
[22:54:30][Step 1/1] 106 | console.log(`update called with`, clonedWallet);
[22:54:30][Step 1/1] 107 | // Check if walletRefreshInterval is set to TRIGGER_UTXO_REFRESH_INTERVAL_MS, i.e. this was called by websocket tx detection
[22:54:30][Step 1/1] 108 | if (walletRefreshInterval === TRIGGER_UTXO_REFRESH_INTERVAL_MS) {
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] at update (src/hooks/useWallet.js:105:30)
[22:54:30][Step 1/1] at Object.update (src/hooks/useWallet.js:1357:9)
[22:54:30][Step 1/1]
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] Test Suites: 3 failed, 26 passed, 29 total
[22:54:30][Step 1/1] Tests: 8 failed, 576 passed, 584 total
[22:54:30][Step 1/1] Snapshots: 0 total
[22:54:30][Step 1/1] Time: 43.26 s
[22:54:30][Step 1/1] Ran all test suites.
[22:54:30][Step 1/1] Jest did not exit one second after the test run has completed.
[22:54:30][Step 1/1]
[22:54:30][Step 1/1] 'This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
[22:54:30][Step 1/1] Build cashtab-tests failed with exit code 1
[22:54:30][Step 1/1] Process exited with code 1
[22:54:32][Step 1/1] Process exited with code 1 (Step: Command Line)
[22:54:32][Step 1/1] Waiting for 1 service processes to complete
[22:54:33][Step 1/1] Ant JUnit report watcher
[22:54:33][Ant JUnit report watcher] 1 report found for paths:
[22:54:33][Ant JUnit report watcher] /home/teamcity/buildAgent/work/jailed-build/results/artifacts/junit/*.xml
[22:54:33][Ant JUnit report watcher] Successfully parsed
[22:54:33][Successfully parsed] 1 report
[22:54:33][Successfully parsed] results/artifacts/junit/cashtab.xml
[22:54:33][Step 1/1] Step Command Line failed
[22:54:34]Ant JUnit report watcher
[22:54:34][Ant JUnit report watcher] No reports found for paths:
[22:54:34][Ant JUnit report watcher] +:results/test_bitcoin.xml
[22:54:34][Ant JUnit report watcher] +:results/**/junit_results*.xml
[22:54:34][Ant JUnit report watcher] +:results/**/*junit.xml
[22:54:34]Publishing internal artifacts (2s)
[22:54:35][Publishing internal artifacts] Publishing 1 file using [WebPublisher]
[22:54:35][Publishing internal artifacts] Publishing 1 file using [ArtifactsCachePublisher]
[22:54:34]Publishing artifacts (2s)
[22:54:34][Publishing artifacts] Collecting files to publish: [+:results/**/junit_results*.xml, +:bitcoin-abc/abc-ci-builds/cashtab-tests/gitian-results => cashtab-tests.tar.gz, +:bitcoin-abc/abc-ci-builds/cashtab-tests/*.log => artifacts.tar.gz]
[22:54:34][Publishing artifacts] Artifacts path 'results/**/junit_results*.xml' not found
[22:54:34][Publishing artifacts] Artifacts path 'bitcoin-abc/abc-ci-builds/cashtab-tests/gitian-results' not found
[22:54:34][Publishing artifacts] Artifacts path 'bitcoin-abc/abc-ci-builds/cashtab-tests/*.log' not found
[22:54:36]Build finished
×

×

Pin build

Cancel
×

Add build comment

Cancel
×

Promote Build

×

Add build comment

Cancel
×

Mute test

×

×

Server communication failure

Server is unavailable

Server stopped or communication with the server is not possible due to network failure.

Server shutdown started.

Please relogin to continue your work.

×

Run Custom Build

×

TODO

Loading related builds...
Cancel
×

Responsibility

×

Edit tags

Cancel
×

Loading...

×

Are you sure?

Cancel
×

Cancel