2021-03-25 15:28:25 +00:00
import {
HDSegwitElectrumSeedP2WPKHWallet ,
HDLegacyBreadwalletWallet ,
HDSegwitBech32Wallet ,
HDLegacyElectrumSeedP2PKHWallet ,
LegacyWallet ,
SegwitP2SHWallet ,
SegwitBech32Wallet ,
HDLegacyP2PKHWallet ,
HDSegwitP2SHWallet ,
WatchOnlyWallet ,
HDAezeedWallet ,
} from '../../class' ;
import WalletImport from '../../class/wallet-import' ;
import React from 'react' ;
2021-03-25 19:36:00 +00:00
import Notifications from '../../blue_modules/notifications' ;
2021-03-25 15:28:25 +00:00
const assert = require ( 'assert' ) ;
global . net = require ( 'net' ) ; // needed by Electrum client. For RN it is proviced in shim.js
global . tls = require ( 'tls' ) ; // needed by Electrum client. For RN it is proviced in shim.js
const BlueElectrum = require ( '../../blue_modules/BlueElectrum' ) ; // so it connects ASAP
/** @type HDSegwitBech32Wallet */
let lastImportedWallet ;
React . useContext = jest . fn ( ( ) => {
return {
wallets : [ ] ,
pendingWallets : [ ] ,
setPendingWallets : function ( ) { } ,
saveToDisk : function ( ) { } ,
addWallet : function ( wallet ) {
lastImportedWallet = wallet ;
} ,
} ;
} ) ;
2021-03-25 19:36:00 +00:00
jest . mock ( '../../blue_modules/notifications' , ( ) => {
return {
majorTomToGroundControl : jest . fn ( ) ,
} ;
} ) ;
2021-03-25 15:28:25 +00:00
jest . mock ( '../../blue_modules/prompt' , ( ) => {
return jest . fn ( ( ) => {
return 'qwerty' ;
} ) ;
} ) ;
jasmine . DEFAULT _TIMEOUT _INTERVAL = 30000 ;
afterAll ( async ( ) => {
// after all tests we close socket so the test suite can actually terminate
BlueElectrum . forceDisconnect ( ) ;
} ) ;
beforeAll ( async ( ) => {
// awaiting for Electrum to be connected. For RN Electrum would naturally connect
// while app starts up, but for tests we need to wait for it
await BlueElectrum . waitTillConnected ( ) ;
2021-03-25 19:36:00 +00:00
WalletImport ( ) ; // damn i love javascript
Notifications ( ) ; // damn i love javascript
2021-03-25 15:28:25 +00:00
} ) ;
describe ( 'import procedure' , function ( ) {
it ( 'can import BIP84' , async ( ) => {
await WalletImport . processImportText (
'always direct find escape liar turn differ shy tool gap elder galaxy lawn wild movie fog moon spread casual inner box diagram outdoor tell' ,
) ;
assert . strictEqual ( lastImportedWallet . type , HDSegwitBech32Wallet . type ) ;
assert . strictEqual ( lastImportedWallet . _getExternalAddressByIndex ( 0 ) , 'bc1qth9qxvwvdthqmkl6x586ukkq8zvumd38nxr08l' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported HD SegWit (BIP84 Bech32 Native)' ) ;
} ) ;
it ( 'can import Legacy' , async ( ) => {
await WalletImport . processImportText ( 'KztVRmc2EJJBHi599mCdXrxMTsNsGy3NUjc3Fb3FFDSMYyMDRjnv' ) ;
assert . strictEqual ( lastImportedWallet . type , LegacyWallet . type ) ;
assert . strictEqual ( lastImportedWallet . getAddress ( ) , '1AhcdMCzby4VXgqrexuMfh7eiSprRFtN78' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported Legacy (P2PKH)' ) ;
} ) ;
it ( 'can import Legacy P2SH Segwit' , async ( ) => {
await WalletImport . processImportText ( 'L3NxFnYoBGjJ5PhxrxV6jorvjnc8cerYJx71vXU6ta8BXQxHVZya' ) ;
assert . strictEqual ( lastImportedWallet . type , SegwitP2SHWallet . type ) ;
assert . strictEqual ( lastImportedWallet . getAddress ( ) , '3KM9VfdsDf9uT7uwZagoKgVn8z35m9CtSM' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported SegWit (P2SH)' ) ;
} ) ;
it ( 'can import Legacy Bech32 Segwit' , async ( ) => {
await WalletImport . processImportText ( 'L1T6FfKpKHi8JE6eBKrsXkenw34d5FfFzJUZ6dLs2utxkSvsDfxZ' ) ;
assert . strictEqual ( lastImportedWallet . type , SegwitBech32Wallet . type ) ;
assert . strictEqual ( lastImportedWallet . getAddress ( ) , 'bc1q763rf54hzuncmf8dtlz558uqe4f247mq39rjvr' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported P2 WPKH' ) ;
} ) ;
it ( 'can import BIP44' , async ( ) => {
await WalletImport . processImportText (
'sting museum endless duty nice riot because swallow brother depth weapon merge woman wish hold finish venture gauge stomach bomb device bracket agent parent' ,
) ;
assert . strictEqual ( lastImportedWallet . type , HDLegacyP2PKHWallet . type ) ;
assert . strictEqual ( lastImportedWallet . _getExternalAddressByIndex ( 0 ) , '1EgDbwf5nXp9knoaWW6nV6N91EK3EFQ5vC' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported HD Legacy (BIP44 P2PKH)' ) ;
} ) ;
it ( 'can import BIP49' , async ( ) => {
await WalletImport . processImportText (
'believe torch sport lizard absurd retreat scale layer song pen clump combine window staff dream filter latin bicycle vapor anchor put clean gain slush' ,
) ;
assert . strictEqual ( lastImportedWallet . type , HDSegwitP2SHWallet . type ) ;
assert . strictEqual ( lastImportedWallet . _getExternalAddressByIndex ( 0 ) , '3EoqYYp7hQSHn5nHqRtWzkgqmK3caQ2SUu' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported HD SegWit (BIP49 P2SH)' ) ;
} ) ;
it ( 'can import HD Legacy Electrum (BIP32 P2PKH)' , async ( ) => {
await WalletImport . processImportText ( 'eight derive blast guide smoke piece coral burden lottery flower tomato flame' ) ;
assert . strictEqual ( lastImportedWallet . type , HDLegacyElectrumSeedP2PKHWallet . type ) ;
assert . strictEqual ( lastImportedWallet . _getExternalAddressByIndex ( 0 ) , '1FgVfJ5D3HyKWKC4xk36Cio7MUaxxnXaVd' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported HD Legacy Electrum (BIP32 P2PKH)' ) ;
} ) ;
it ( 'can import BreadWallet' , async ( ) => {
await WalletImport . processImportText (
'tired lesson alert attend giggle fancy nose enter ethics fashion fly dove dutch hidden toe argue save fish catch patient waste gift divorce whisper' ,
) ;
assert . strictEqual ( lastImportedWallet . type , HDLegacyBreadwalletWallet . type ) ;
assert . strictEqual ( lastImportedWallet . _getExternalAddressByIndex ( 0 ) , '1j7TbbTv8adcZFr4RC7Cyr7GN9VGYTecu' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported HD Legacy Breadwallet (P2PKH)' ) ;
} ) ;
it ( 'can import HD Electrum (BIP32 P2WPKH)' , async ( ) => {
await WalletImport . processImportText ( 'noble mimic pipe merry knife screen enter dune crop bonus slice card' ) ;
assert . strictEqual ( lastImportedWallet . type , HDSegwitElectrumSeedP2WPKHWallet . type ) ;
assert . strictEqual ( lastImportedWallet . _getExternalAddressByIndex ( 0 ) , 'bc1qzzanxnr3xv9a5ha264kpzpfq260qvuameslddu' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported HD Electrum (BIP32 P2WPKH)' ) ;
} ) ;
it ( 'can import AEZEED' , async ( ) => {
await WalletImport . processImportText (
'abstract rhythm weird food attract treat mosquito sight royal actor surround ride strike remove guilt catch filter summer mushroom protect poverty cruel chaos pattern' ,
) ;
assert . strictEqual ( lastImportedWallet . type , HDAezeedWallet . type ) ;
} ) ;
it ( 'importing empty BIP39 should yield BIP84' , async ( ) => {
const tempWallet = new HDSegwitBech32Wallet ( ) ;
await tempWallet . generate ( ) ;
await WalletImport . processImportText ( tempWallet . getSecret ( ) ) ;
assert . strictEqual ( lastImportedWallet . type , HDSegwitBech32Wallet . type ) ;
} ) ;
it ( 'can import Legacy with uncompressed pubkey' , async ( ) => {
await WalletImport . processImportText ( '5KE6tf9vhYkzYSbgEL6M7xvkY69GMFHF3WxzYaCFMvwMxn3QgRS' ) ;
assert . strictEqual ( lastImportedWallet . getSecret ( ) , '5KE6tf9vhYkzYSbgEL6M7xvkY69GMFHF3WxzYaCFMvwMxn3QgRS' ) ;
assert . strictEqual ( lastImportedWallet . type , LegacyWallet . type ) ;
assert . strictEqual ( lastImportedWallet . getAddress ( ) , '1GsJDeD6fqS912egpjhdjrUTiCh1hhwBgQ' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported Legacy (P2PKH)' ) ;
} ) ;
it ( 'can import BIP38 encrypted backup' , async ( ) => {
await WalletImport . processImportText ( '6PnU5voARjBBykwSddwCdcn6Eu9EcsK24Gs5zWxbJbPZYW7eiYQP8XgKbN' ) ;
assert . strictEqual ( lastImportedWallet . getSecret ( ) , 'KxqRtpd9vFju297ACPKHrGkgXuberTveZPXbRDiQ3MXZycSQYtjc' ) ;
assert . strictEqual ( lastImportedWallet . type , LegacyWallet . type ) ;
assert . strictEqual ( lastImportedWallet . getAddress ( ) , '1639W2kM6UY9PdavMQeLqG4SuUEae9NZfq' ) ;
assert . strictEqual ( lastImportedWallet . getLabel ( ) , 'Imported Legacy (P2PKH)' ) ;
} ) ;
it ( 'can import watch-only address' , async ( ) => {
await WalletImport . processImportText ( '1AhcdMCzby4VXgqrexuMfh7eiSprRFtN78' ) ;
assert . strictEqual ( lastImportedWallet . type , WatchOnlyWallet . type ) ;
await WalletImport . processImportText ( '3EoqYYp7hQSHn5nHqRtWzkgqmK3caQ2SUu' ) ;
assert . strictEqual ( lastImportedWallet . type , WatchOnlyWallet . type ) ;
await WalletImport . processImportText ( 'bc1q8j4lk4qlhun0n7h5ahfslfldc8zhlxgynfpdj2' ) ;
assert . strictEqual ( lastImportedWallet . type , WatchOnlyWallet . type ) ;
await WalletImport . processImportText (
'zpub6r7jhKKm7BAVx3b3nSnuadY1WnshZYkhK8gKFoRLwK9rF3Mzv28BrGcCGA3ugGtawi1WLb2vyjQAX9ZTDGU5gNk2bLdTc3iEXr6tzR1ipNP' ,
) ;
assert . strictEqual ( lastImportedWallet . type , WatchOnlyWallet . type ) ;
} ) ;
} ) ;