UNPKG

xecaddrjs

Version:

eCash general purpose address translation.

1,129 lines (1,080 loc) 44.3 kB
/*** * @license * https://github.com/ealmansi/xecaddrjs * Copyright (c) 2018-2020 Emilio Almansi * Distributed under the MIT software license, see the accompanying * file LICENSE or http://www.opensource.org/licenses/mit-license.php. */ const assert = require('chai').assert const xecaddr = require('..') describe('xecaddr', function () { const LEGACY_MAINNET_P2PKH_ADDRESSES = [ '1B9UNtBfkkpgt8kVbwLN9ktE62QKnMbDzR', '185K5yAfcrARrHjNVt4iAUHtkYqcogF4km', '1EUrmffDt4SQQkGVfmDTyFcp57PuByeadW', '1H6YWsFBxvDx6Ce9dyUFZvjG29npxQpBpR', '15z9kQvBaZmTGRTRbP3K1VBM3BQvRsj4U4', '1P238gziZdeS5Wj9nqLhQHSBK2Lz6zPSke', '13WamBttqMB9AHNovKBCeLFGC5sbN4iZkh', '17Sa1fdVXh2NVgcn5xoWzTLGNivg9gUDQ7', '1tQ2P2q5cVERY8AkGD4K8RGc6NmZQVTKN', '1FJSGaq7Wip2ADSJboxMXniPhnYM8ym5Ri', '1GxjvJnjF6t29gDnX4jF3u25u5JRqANYPV', '1N7gqB2GtgJG8ap3uwRoKyrcrrSTa4qfXu', '1JG6fXqEiu9H2fktGxqpFfGGLdy6ie7QgY', '14ipzRgYAbSZUnmeRNhhrPMQ8XQrzGg4wo', '185FScTRCtVXRoy5gSDbuLnnQaQWqCK4A1', '1NPRQpCNaeVvZLYw6Z3Y1XkKxLt9BrFTn5', '1Pa8bRApFwCZ8rkgCJh9mfUmj4XJMUYdom', '13HmTnwyKacGJCt2WseTReCeEAtG5ZAyci', '1Mdob5JY1yuwoj6y76Vf3AQpoqUH5Aft8z', '1D8zGeRj3Vkns6VwKxwNoW2mDsxF25w2Zy' ] const LEGACY_MAINNET_P2SH_ADDRESSES = [ '3BqVJRg7Jf94yJSvj2zxaPFAEYh3MAyyw9', '38mL1Wf7AkUowTRocyjJb6epu58LSafEYf', '3FAshD9fRxknVuxvnrt4PsykDdgckmK7xD', '3HnZSQjdWpYLBNLam58qzZ6CAg5YXBddBW', '36gAfxQd8U5qMb9riUhuS7YHBhhdvjr8u1', '3Pi44EVA7XxpAgRauw1Hpuo7TYdhd7WMon', '34CbgjPLPFVXFT5F3Qqo4xcCLcAJwvkM85', '388awD7w5bLkarKDD4U7R5hCXFDPmHuWW7', '32aQwvXGdWocWhpbsMsejknCkcfVB4ivTM', '3FzTC8KZ4d8QFP8jiucwxR5KrJq4bcevn7', '3HekqrHAo1CQEqvDeAPqUXP23bb9Sf9WoA', '3NohkiWiSaceDkWV336PkcDZ1NjBBWBewT', '3Jx7b5KgGoTf7qTKQ4WQgHdCVAFpCKiqsB', '35QquyAyiVkwZxU5YUNJH1iLH3haZ5TEfC', '38mGN9wrknouWyfWoXtCKy9iZ6hEMRGsyp', '3P5SLMgp8YpJeWFNDei8SA7G6sArkNKQKL', '3QG9WxfFoqWwE2T7KQMkCHqhsap1waSfDu', '33ynPLSQsUvePNaTdyK3rGZaNhAyfeAmbT', '3NKpWcnyZtEKttoQECAFTnmkxMkzgbT4WX', '3Dq1CBvAbQ5AxGCNT4byE8PhNQExZcR6Q2' ] const LEGACY_TESTNET_P2PKH_ADDRESSES = [ 'mqfRfwGeZnFwfFE7KWJjyg6Yx212iGi6Fi', 'mnbGP2FeRsbgdQCzDT35zPWDcYSKm4wrcg', 'mtzp4ikCh5sfBrk7PLBqoAq8w6zc48PsGn', 'mwcVovLAmwfCsK7mMYSdPqwat9PXqcMiFt', 'mkW73U1APbCi3Xw3Jx1gqQPfuB1dHFDiEU', 'n3XzRk5hNf5grdCmWQK5ECeWB1wgzzYzZd', 'mi2Y4EyseNcPwPrRdt9aUFTb45UJHNgtbL', 'mmxXJiiULiTdGo6PoXmtpNYbEiXP2v746S', 'mgQMKS7otdvVCebnTqBS93dbU5yUZPsANB', 'mupPZdv6KkFGwKuvKNvjMhviZn93yznq73', 'mwUhDMsi48KGvnhQEdhcspEQm4u8o754bx', 'n2de8E7FhhjWuhHfdWQB9u4wir3AXqspCt', 'mxn3xavDXvaXonEVzXpC5aUbCdZoaTEB2g', 'mjEnHUmWycspFuFG8wg5gJZizX1ZtEF1XN', 'mnbCjfYQ1uvnCvShQ1ByjG17Ga1Dk3RTXN', 'n2uNhsHMPfwBLT2Yp81uqSxepLUr6zCnCz', 'n465tUFo4xdouyEHusfXbah6b481K5Nivk', 'mhoikr2x8c3X5KMeEScqFZQy6AUy4GeR4M', 'n29kt8PWq1MCaqaapfU2s5d9fq4yytS1xJ', 'msewZhWhrXC3eCyZ3XukdRF65sYwtbmARy' ] const LEGACY_TESTNET_P2SH_ADDRESSES = [ '2N3PhNAc8v7eRB65UQAcqCLERStuD93JXLD', '2MzKY5Fb8nCzA9F4MJ7MBD3e67RLWFE1ciP', '2N6j5kx5h3RG8hhbUTzVw1py1RytnZNYoXo', '2N9LmW9ff8H3gP9y8SCkicW5TP2HiFpeK4z', '2MxENjhLejvbBZNnQPcKn44XYQ3uoiBT3fF', '2NFGG7yRBizUANU48b4dASrnNftqsNwzSM1', '2MukokUKMzhzsTEhniYTfgubTYxNUi6PtTX', '2Mygnzx3xh3r6ndwktC5z32gTjbRZXkJpFr', '2Mt8d1fTJEyJxiVT9YVVXMhmTxxsexLdJiE', '2N7YfFsFag5dkTAmHQ3EpaN4b4f3EPkwQkk', '2N9CxubDCQThkSdYmKJ1i6UNHFwoKBxp2Hj', '2NEMupTSk437zRY92iAiGNZCpDiwLvwnZEL', '2NAWKepFhtFy1Kd5s5C8HJEcThWTyzKiNGA', '2Mvy3yi71KxGHmk6dDbzAtxhbVPukK6MD5u', '2MzKURtstNFKFimJ4UfW4wv8ymSuQCcZPN2', '2NEdeQ6cqk1KerHsutnL1476XKDP2agcCh5', '2NFpMahbHRJ2HRp5ezXycpEpy5w2BmnVM9W', '2MuXzT5NSUwRzbAD1K6vvUDYqb3P9RUvPgK', '2NDt2aMj1BLjg6gRwuKn85jm2AhyAV8e2VF', '2N5PDFvrCCraXA3pv8CDqr5NxakT8KJb3Gg' ] const BITPAY_MAINNET_P2PKH_ADDRESSES = [ 'CScMwvXjdooDnGevHgfHjGWFi9cjk75Aaj', 'CPYCf1WjVu8xkRdoBdPdjyuvNg42oA7g3o', 'CVwkLi1Hm7QwJtAvMWYPYmEqhEcK4KW3my', 'CYZS5ubFqyCUzLYaKioB9SMHeH1Eno9teV', 'CMT3KTGFTcjzAZMrH8NEazoNfJdLLwdA2P', 'CeUvhjLnSgcxyedaUafcyo4Cw9ZPwGq9JJ', 'CJyULEExiQ9g4RHEc4W8DqsHpD61DzD2KS', 'CNuTahyZQjzuPpXCmi8SZxxHzr966Y3NWT', 'CHMHbRNtxfTmKg2bS1Xyte3JEDbBZJdBDR', 'CWmKqdBBPmnZ4MLjHZHH7JLRKukm2ZLsY3', 'CYRdVM8o89rZ3p8DCp4AdQe7XCWqo98EJW', 'CdaaQDNLmjGo2iiUbgkiuVUeUyesW7zuM3', 'CZizEaBJbx7ovofJxiAjqAtHxmBWaYnQ8e', 'CLBiZU2c3eR6Nvg5782dRtyRkedGxq5zep', 'CPY91eoV5wU4KwsWNBYXUrQp2hcvm6nds4', 'CdrJyrYSThUTTUTMnJNTb3NMaU6Z4RU7ZN', 'Cf32ATWt8zB62zf6t425MB6oMBjiHc6XZf', 'CJkf2qJ3CdaoCLnTCcyP19pfrJ6fyRmeF4', 'Cd6hA7ebu2tUhs1Pnqpacg2rRxgh4RX3ij', 'CUbsqgmnvYjKmEQN1iGJP1enr1Aet3jrNW' ] const BITPAY_MAINNET_P2SH_ADDRESSES = [ 'HGfbmE7C9yMjbUKxaif7YmmhGCi4FN8hzH', 'HDbSUK6C24hUZdJqUfPTZVBMvj9MGEzYSY', 'HKzzA1akHGyT85qxeYYDNGWHFHhddvQabB', 'HNcfuDAiN8kzoYDccknzxwcjCL6ZLVoQNQ', 'HBWH8kqhynJVym2taAN4QW4pDMiepA7r24', 'HUYAX2vExrBUnrJcmcfSoJKeVCeiW7ZdQA', 'H92i9XpREZiBscxGu6Vx3M8jNGBKqscBBB', 'HCxhQ1Z1vuZRD2CF4k8GPUDjYuEQdZhDyJ', 'H7QXQixMUq2H8shdj3Xoi9JjnGgW4UtQvF', 'HLpZevkduwM4sZ1mabH6vobrsxr5XLQ9Xh', 'HNUsJeiFeKR4s1oFVr3zSuuZ5FcAJ5fEvi', 'HTdpDWwoHtqJqvPWtikYizk632kC3jeVq5', 'HPnE3skm87gKk1LMFkAZeg9jWpGq5JcGD2', 'HAExNmc4ZoycC8M7QA2TFQEsJhibS24Sff', 'HDbNpxNwc72a99YYfDYMJMgFakiFCURWsc', 'HTuYoA7tys2yGg8Q5LNHQYdo8XBsZkPfms', 'HV6Fym6Lf9jbrCL9B61uAgNEuEq2mwoPKw', 'H8otr8sVio9K1YTVVeyCpf67QMBzV5ieHM', 'HT9vyRE4RCSzX4gS5spQSBJHz1n1ZBCcYM', 'HJf7ezMFSiHqaS5QJkG8CWvEQ4FyTTnjMB' ] const BITPAY_TESTNET_P2PKH_ADDRESSES = [ 'mqfRfwGeZnFwfFE7KWJjyg6Yx212iGi6Fi', 'mnbGP2FeRsbgdQCzDT35zPWDcYSKm4wrcg', 'mtzp4ikCh5sfBrk7PLBqoAq8w6zc48PsGn', 'mwcVovLAmwfCsK7mMYSdPqwat9PXqcMiFt', 'mkW73U1APbCi3Xw3Jx1gqQPfuB1dHFDiEU', 'n3XzRk5hNf5grdCmWQK5ECeWB1wgzzYzZd', 'mi2Y4EyseNcPwPrRdt9aUFTb45UJHNgtbL', 'mmxXJiiULiTdGo6PoXmtpNYbEiXP2v746S', 'mgQMKS7otdvVCebnTqBS93dbU5yUZPsANB', 'mupPZdv6KkFGwKuvKNvjMhviZn93yznq73', 'mwUhDMsi48KGvnhQEdhcspEQm4u8o754bx', 'n2de8E7FhhjWuhHfdWQB9u4wir3AXqspCt', 'mxn3xavDXvaXonEVzXpC5aUbCdZoaTEB2g', 'mjEnHUmWycspFuFG8wg5gJZizX1ZtEF1XN', 'mnbCjfYQ1uvnCvShQ1ByjG17Ga1Dk3RTXN', 'n2uNhsHMPfwBLT2Yp81uqSxepLUr6zCnCz', 'n465tUFo4xdouyEHusfXbah6b481K5Nivk', 'mhoikr2x8c3X5KMeEScqFZQy6AUy4GeR4M', 'n29kt8PWq1MCaqaapfU2s5d9fq4yytS1xJ', 'msewZhWhrXC3eCyZ3XukdRF65sYwtbmARy' ] const BITPAY_TESTNET_P2SH_ADDRESSES = [ '2N3PhNAc8v7eRB65UQAcqCLERStuD93JXLD', '2MzKY5Fb8nCzA9F4MJ7MBD3e67RLWFE1ciP', '2N6j5kx5h3RG8hhbUTzVw1py1RytnZNYoXo', '2N9LmW9ff8H3gP9y8SCkicW5TP2HiFpeK4z', '2MxENjhLejvbBZNnQPcKn44XYQ3uoiBT3fF', '2NFGG7yRBizUANU48b4dASrnNftqsNwzSM1', '2MukokUKMzhzsTEhniYTfgubTYxNUi6PtTX', '2Mygnzx3xh3r6ndwktC5z32gTjbRZXkJpFr', '2Mt8d1fTJEyJxiVT9YVVXMhmTxxsexLdJiE', '2N7YfFsFag5dkTAmHQ3EpaN4b4f3EPkwQkk', '2N9CxubDCQThkSdYmKJ1i6UNHFwoKBxp2Hj', '2NEMupTSk437zRY92iAiGNZCpDiwLvwnZEL', '2NAWKepFhtFy1Kd5s5C8HJEcThWTyzKiNGA', '2Mvy3yi71KxGHmk6dDbzAtxhbVPukK6MD5u', '2MzKURtstNFKFimJ4UfW4wv8ymSuQCcZPN2', '2NEdeQ6cqk1KerHsutnL1476XKDP2agcCh5', '2NFpMahbHRJ2HRp5ezXycpEpy5w2BmnVM9W', '2MuXzT5NSUwRzbAD1K6vvUDYqb3P9RUvPgK', '2NDt2aMj1BLjg6gRwuKn85jm2AhyAV8e2VF', '2N5PDFvrCCraXA3pv8CDqr5NxakT8KJb3Gg' ] const CASHADDR_MAINNET_P2PKH_ADDRESSES = [ 'bitcoincash:qph5kuz78czq00e3t85ugpgd7xmer5kr7c5f6jdpwk', 'bitcoincash:qpxenfpcf975gxdjmq9pk3xm6hjmfj6re56t60smsm', 'bitcoincash:qzfau6vrq980qntgp5e7l6cpfsf7jw88c5u7y85qx6', 'bitcoincash:qzcguejjfxld867ck4zudc9a6y8mf6ftgqqrxzfmlh', 'bitcoincash:qqm2lpqdfjsg8kkhwk0a3e3gypyswkd69urny99j70', 'bitcoincash:qrccfa4qm3xfcrta78v7du75jjaww0ylnss5nxsy9s', 'bitcoincash:qqdcsl6c879esyxyacmz7g6vtzwjjwtznsv65x6znz', 'bitcoincash:qpr2ddwe8qnnh8h20mmn4zgrharmy0vuy5y4gr8gl2', 'bitcoincash:qqymsmh0nhfhs9k5whhnjwfxyaumvtxm8g2z0s4f9y', 'bitcoincash:qzwdmm83qjx7372wxgszaukan73ffn8ct54v6hs3dl', 'bitcoincash:qzh3f9me5z5sn2w8euap2gyrp6kr7gf6my5mhjey6s', 'bitcoincash:qrneuckcx69clprn4nnr82tf8sycqrs3ac4tr8m86f', 'bitcoincash:qz742xef07g9w8q52mx0q6m9hp05hnzm657wqd0ce2', 'bitcoincash:qq5dzl0drx8v0layyyuh5aupvxfs80ydmsp5444280', 'bitcoincash:qpxedxtug7kpwd6tgf5vx08gjamel7sldsc40mxew8', 'bitcoincash:qr4fs2m8tjmw54r2aqmadggzuagttkujgyrjs5d769', 'bitcoincash:qrmed4fxlhkgay9nxw7zn9muew5ktkyjnuuawvycze', 'bitcoincash:qqv3cpvmu4h0vqa6aly0urec7kwtuhe49yz6e7922v', 'bitcoincash:qr39scfteeu5l573lzerchh6wc4cqkxeturafzfkk9', 'bitcoincash:qzzjgw37vwls805c9fw6g9vqyupadst6wgmane0s4l' ] const CASHADDR_MAINNET_P2SH_ADDRESSES = [ 'bitcoincash:pph5kuz78czq00e3t85ugpgd7xmer5kr7crv8a2z4t', 'bitcoincash:ppxenfpcf975gxdjmq9pk3xm6hjmfj6re5dw8qhctx', 'bitcoincash:pzfau6vrq980qntgp5e7l6cpfsf7jw88c5tmegnra8', 'bitcoincash:pzcguejjfxld867ck4zudc9a6y8mf6ftgqhxmdwcy2', 'bitcoincash:pqm2lpqdfjsg8kkhwk0a3e3gypyswkd69u5ke2z39j', 'bitcoincash:prccfa4qm3xfcrta78v7du75jjaww0ylns83wfh87d', 'bitcoincash:pqdcsl6c879esyxyacmz7g6vtzwjjwtznsmlffapgl', 'bitcoincash:ppr2ddwe8qnnh8h20mmn4zgrharmy0vuy5ns4vqtyh', 'bitcoincash:pqymsmh0nhfhs9k5whhnjwfxyaumvtxm8ga8jlj27e', 'bitcoincash:pzwdmm83qjx7372wxgszaukan73ffn8ct5zf8chjkz', 'bitcoincash:pzh3f9me5z5sn2w8euap2gyrp6kr7gf6myr72a78pd', 'bitcoincash:prneuckcx69clprn4nnr82tf8sycqrs3aczw7guyp5', 'bitcoincash:pz742xef07g9w8q52mx0q6m9hp05hnzm65ftazgmzh', 'bitcoincash:pq5dzl0drx8v0layyyuh5aupvxfs80ydmsk3g6jfuj', 'bitcoincash:ppxedxtug7kpwd6tgf5vx08gjamel7slds0sj5p646', 'bitcoincash:pr4fs2m8tjmw54r2aqmadggzuagttkujgy5hdm2apc', 'bitcoincash:prmed4fxlhkgay9nxw7zn9muew5ktkyjnutcnrrmey', 'bitcoincash:pqv3cpvmu4h0vqa6aly0urec7kwtuhe49y4ly3zf33', 'bitcoincash:pr39scfteeu5l573lzerchh6wc4cqkxetu5c5dw4dc', 'bitcoincash:pzzjgw37vwls805c9fw6g9vqyupadst6wgvcwkgnwz' ] const CASHADDR_TESTNET_P2PKH_ADDRESSES = [ 'bchtest:qph5kuz78czq00e3t85ugpgd7xmer5kr7csm740kf2', 'bchtest:qpxenfpcf975gxdjmq9pk3xm6hjmfj6re57e7gjvh8', 'bchtest:qzfau6vrq980qntgp5e7l6cpfsf7jw88c5cvqqkhpx', 'bchtest:qzcguejjfxld867ck4zudc9a6y8mf6ftgqy3z9tvct', 'bchtest:qqm2lpqdfjsg8kkhwk0a3e3gypyswkd69u8pqz89en', 'bchtest:qrccfa4qm3xfcrta78v7du75jjaww0ylns5xhpjnzv', 'bchtest:qqdcsl6c879esyxyacmz7g6vtzwjjwtznsggspc457', 'bchtest:qpr2ddwe8qnnh8h20mmn4zgrharmy0vuy5q8vy9lck', 'bchtest:qqymsmh0nhfhs9k5whhnjwfxyaumvtxm8gwsthh7zc', 'bchtest:qzwdmm83qjx7372wxgszaukan73ffn8ct5377sjx2r', 'bchtest:qzh3f9me5z5sn2w8euap2gyrp6kr7gf6mysfn4mnav', 'bchtest:qrneuckcx69clprn4nnr82tf8sycqrs3ac3e8qesa4', 'bchtest:qz742xef07g9w8q52mx0q6m9hp05hnzm656uy2d07k', 'bchtest:qq5dzl0drx8v0layyyuh5aupvxfs80ydms9x3jhaqn', 'bchtest:qpxedxtug7kpwd6tgf5vx08gjamel7sldsu8tuywfm', 'bchtest:qr4fs2m8tjmw54r2aqmadggzuagttkujgy8q5n0fae', 'bchtest:qrmed4fxlhkgay9nxw7zn9muew5ktkyjnuc02tx099', 'bchtest:qqv3cpvmu4h0vqa6aly0urec7kwtuhe49yxgae8ads', 'bchtest:qr39scfteeu5l573lzerchh6wc4cqkxetu80d9tp3e', 'bchtest:qzzjgw37vwls805c9fw6g9vqyupadst6wgl0h7d8jr' ] const CASHADDR_TESTNET_P2SH_ADDRESSES = [ 'bchtest:pph5kuz78czq00e3t85ugpgd7xmer5kr7c87r6g4jh', 'bchtest:ppxenfpcf975gxdjmq9pk3xm6hjmfj6re5fur840v6', 'bchtest:pzfau6vrq980qntgp5e7l6cpfsf7jw88c50fa0356m', 'bchtest:pzcguejjfxld867ck4zudc9a6y8mf6ftgqn5l2v0rk', 'bchtest:pqm2lpqdfjsg8kkhwk0a3e3gypyswkd69usyadqxzw', 'bchtest:prccfa4qm3xfcrta78v7du75jjaww0ylnsrr2w4se3', 'bchtest:pqdcsl6c879esyxyacmz7g6vtzwjjwtznslddwlk0r', 'bchtest:ppr2ddwe8qnnh8h20mmn4zgrharmy0vuy5hz3tzurt', 'bchtest:pqymsmh0nhfhs9k5whhnjwfxyaumvtxm8ge4kcsae9', 'bchtest:pzwdmm83qjx7372wxgszaukan73ffn8ct5xmrl4937', 'bchtest:pzh3f9me5z5sn2w8euap2gyrp6kr7gf6my8vw6usx3', 'bchtest:prneuckcx69clprn4nnr82tf8sycqrs3acxu607nxg', 'bchtest:pz742xef07g9w8q52mx0q6m9hp05hnzm65dee92v9t', 'bchtest:pq5dzl0drx8v0layyyuh5aupvxfs80ydmsjrvas7mw', 'bchtest:ppxedxtug7kpwd6tgf5vx08gjamel7sldstzknrdjx', 'bchtest:pr4fs2m8tjmw54r2aqmadggzuagttkujgys9fug2xy', 'bchtest:prmed4fxlhkgay9nxw7zn9muew5ktkyjnu02hypv7c', 'bchtest:pqv3cpvmu4h0vqa6aly0urec7kwtuhe49y3dqkq7kd', 'bchtest:pr39scfteeu5l573lzerchh6wc4cqkxetus2s2vz2y', 'bchtest:pzzjgw37vwls805c9fw6g9vqyupadst6wgg2232yf7' ] const XECADDR_MAINNET_P2PKH_ADDRESSES = [ 'ecash:qph5kuz78czq00e3t85ugpgd7xmer5kr7cdywekmgp', 'ecash:qpxenfpcf975gxdjmq9pk3xm6hjmfj6re5rxwytpkv', 'ecash:qzfau6vrq980qntgp5e7l6cpfsf7jw88c59nsv06qd', 'ecash:qzcguejjfxld867ck4zudc9a6y8mf6ftgqewjfjpeq', 'ecash:qqm2lpqdfjsg8kkhwk0a3e3gypyswkd69u67sw7gcc', 'ecash:qrccfa4qm3xfcrta78v7du75jjaww0ylnsfe8dt7r8', 'ecash:qqdcsl6c879esyxyacmz7g6vtzwjjwtzns4hqdpc44', 'ecash:qpr2ddwe8qnnh8h20mmn4zgrharmy0vuy5acugujea', 'ecash:qqymsmh0nhfhs9k5whhnjwfxyaumvtxm8gn0mmwnrn', 'ecash:qzwdmm83qjx7372wxgszaukan73ffn8ct5vpwutttg', 'ecash:qzh3f9me5z5sn2w8euap2gyrp6kr7gf6mydkrez7u8', 'ecash:qrneuckcx69clprn4nnr82tf8sycqrs3acvxhvqau7', 'ecash:qz742xef07g9w8q52mx0q6m9hp05hnzm658r5x5zla', 'ecash:qq5dzl0drx8v0layyyuh5aupvxfs80ydmscep7wspc', 'ecash:qpxedxtug7kpwd6tgf5vx08gjamel7sldspcmsargs', 'ecash:qr4fs2m8tjmw54r2aqmadggzuagttkujgy6lylkyuj', 'ecash:qrmed4fxlhkgay9nxw7zn9muew5ktkyjnu9s68lzyw', 'ecash:qqv3cpvmu4h0vqa6aly0urec7kwtuhe49ymhd47svm', 'ecash:qr39scfteeu5l573lzerchh6wc4cqkxetu6safjvsj', 'ecash:qzzjgw37vwls805c9fw6g9vqyupadst6wgzs8j52ng' ] const XECADDR_MAINNET_P2SH_ADDRESSES = [ 'ecash:pph5kuz78czq00e3t85ugpgd7xmer5kr7c6pnk3cnu', 'ecash:ppxenfpcf975gxdjmq9pk3xm6hjmfj6re55rntvzd3', 'ecash:pzfau6vrq980qntgp5e7l6cpfsf7jw88c5jkdrgems', 'ecash:pzcguejjfxld867ck4zudc9a6y8mf6ftgqwt0x4zza', 'ecash:pqm2lpqdfjsg8kkhwk0a3e3gypyswkd69udmdpetr9', 'ecash:prccfa4qm3xfcrta78v7du75jjaww0ylns7u6zvac6', 'ecash:pqdcsl6c879esyxyacmz7g6vtzwjjwtznszjazxmwg', 'ecash:ppr2ddwe8qnnh8h20mmn4zgrharmy0vuy52ap8m3zq', 'ecash:pqymsmh0nhfhs9k5whhnjwfxyaumvtxm8gy2x5fscw', 'ecash:pzwdmm83qjx7372wxgszaukan73ffn8ct5mynnvgs4', 'ecash:pzh3f9me5z5sn2w8euap2gyrp6kr7gf6my6n7k9a86', 'ecash:prneuckcx69clprn4nnr82tf8sycqrs3acmr2r878r', 'ecash:pz742xef07g9w8q52mx0q6m9hp05hnzm65sxffnpyq', 'ecash:pq5dzl0drx8v0layyyuh5aupvxfs80ydms0uu3fn69', 'ecash:ppxedxtug7kpwd6tgf5vx08gjamel7sldskaxl6qnd', 'ecash:pr4fs2m8tjmw54r2aqmadggzuagttkujgyd6es3880', 'ecash:prmed4fxlhkgay9nxw7zn9muew5ktkyjnuj48gcpln', 'ecash:pqv3cpvmu4h0vqa6aly0urec7kwtuhe49yvjs6enhx', 'ecash:pr39scfteeu5l573lzerchh6wc4cqkxetud4qx40t0', 'ecash:pzzjgw37vwls805c9fw6g9vqyupadst6wg446anfg4' ] const XECADDR_TESTNET_P2PKH_ADDRESSES = [ 'ectest:qph5kuz78czq00e3t85ugpgd7xmer5kr7ct0se3kts', 'ectest:qpxenfpcf975gxdjmq9pk3xm6hjmfj6re59dsyvv4a', 'ectest:qzfau6vrq980qntgp5e7l6cpfsf7jw88c5rcwvghru', 'ectest:qzcguejjfxld867ck4zudc9a6y8mf6ftgql9vf4v63', 'ectest:qqm2lpqdfjsg8kkhwk0a3e3gypyswkd69uu4wwe9mf', 'ectest:qrccfa4qm3xfcrta78v7du75jjaww0ylns0jedvnqk', 'ectest:qqdcsl6c879esyxyacmz7g6vtzwjjwtznsnu7dx4ky', 'ectest:qpr2ddwe8qnnh8h20mmn4zgrharmy0vuy5mnzgml6v', 'ectest:qqymsmh0nhfhs9k5whhnjwfxyaumvtxm8g4y9mf7qz', 'ectest:qzwdmm83qjx7372wxgszaukan73ffn8ct522suvxge', 'ectest:qzh3f9me5z5sn2w8euap2gyrp6kr7gf6mytaae9nlk', 'ectest:qrneuckcx69clprn4nnr82tf8sycqrs3ac2dfv8sl0', 'ectest:qz742xef07g9w8q52mx0q6m9hp05hnzm65pg2xn0uv', 'ectest:qq5dzl0drx8v0layyyuh5aupvxfs80ydms7jl7fazf', 'ectest:qpxedxtug7kpwd6tgf5vx08gjamel7slds8n9s6wtp', 'ectest:qr4fs2m8tjmw54r2aqmadggzuagttkujgyu56l3flr', 'ectest:qrmed4fxlhkgay9nxw7zn9muew5ktkyjnurmy8c08l', 'ectest:qqv3cpvmu4h0vqa6aly0urec7kwtuhe49yaun4ea02', 'ectest:qr39scfteeu5l573lzerchh6wc4cqkxetuumrf4pnr', 'ectest:qzzjgw37vwls805c9fw6g9vqyupadst6wgymejn8se' ] const XECADDR_TESTNET_P2SH_ADDRESSES = [ 'ectest:pph5kuz78czq00e3t85ugpgd7xmer5kr7cu2dkk4sd', 'ectest:ppxenfpcf975gxdjmq9pk3xm6hjmfj6re5jgdtt0wq', 'ectest:pzfau6vrq980qntgp5e7l6cpfsf7jw88c55anr05cp', 'ectest:pzcguejjfxld867ck4zudc9a6y8mf6ftgqgq3xj0pv', 'ectest:pqm2lpqdfjsg8kkhwk0a3e3gypyswkd69utsnp7xq5', 'ectest:prccfa4qm3xfcrta78v7du75jjaww0ylnschyztsmt', 'ectest:pqdcsl6c879esyxyacmz7g6vtzwjjwtznsyerzpkde', 'ectest:ppr2ddwe8qnnh8h20mmn4zgrharmy0vuy5vkl8uup3', 'ectest:pqymsmh0nhfhs9k5whhnjwfxyaumvtxm8gzpc5waml', 'ectest:pzwdmm83qjx7372wxgszaukan73ffn8ct5a0dnt9ny', 'ectest:pzh3f9me5z5sn2w8euap2gyrp6kr7gf6myucqkzsyt', 'ectest:prneuckcx69clprn4nnr82tf8sycqrs3acag5rqnyj', 'ectest:pz742xef07g9w8q52mx0q6m9hp05hnzm65kdhf5v83', 'ectest:pq5dzl0drx8v0layyyuh5aupvxfs80ydmsfhz3w7e5', 'ectest:ppxedxtug7kpwd6tgf5vx08gjamel7sldsskcladsu', 'ectest:pr4fs2m8tjmw54r2aqmadggzuagttkujgyt38sk2y7', 'ectest:prmed4fxlhkgay9nxw7zn9muew5ktkyjnu57eglvuz', 'ectest:pqv3cpvmu4h0vqa6aly0urec7kwtuhe49y2ew6775h', 'ectest:pr39scfteeu5l573lzerchh6wc4cqkxetut77xjzg7', 'ectest:pzzjgw37vwls805c9fw6g9vqyupadst6wgn7ya5yty' ] const LEGACY_ADDRESSES = flatten([ LEGACY_MAINNET_P2PKH_ADDRESSES, LEGACY_MAINNET_P2SH_ADDRESSES, LEGACY_TESTNET_P2PKH_ADDRESSES, LEGACY_TESTNET_P2SH_ADDRESSES ]) const BITPAY_MAINNET_ADDRESSES = flatten([ BITPAY_MAINNET_P2PKH_ADDRESSES, BITPAY_MAINNET_P2SH_ADDRESSES ]) const BITPAY_ADDRESSES = flatten([ BITPAY_MAINNET_ADDRESSES, BITPAY_TESTNET_P2PKH_ADDRESSES, BITPAY_TESTNET_P2SH_ADDRESSES ]) const CASHADDR_ADDRESSES = flatten([ CASHADDR_MAINNET_P2PKH_ADDRESSES, CASHADDR_MAINNET_P2SH_ADDRESSES, CASHADDR_TESTNET_P2PKH_ADDRESSES, CASHADDR_TESTNET_P2SH_ADDRESSES ]) const CASHADDR_ADDRESSES_NO_PREFIX = CASHADDR_ADDRESSES.map(function (address) { const parts = address.split(':') return parts[1] }) const XECADDR_ADDRESSES = flatten([ XECADDR_MAINNET_P2PKH_ADDRESSES, XECADDR_MAINNET_P2SH_ADDRESSES, XECADDR_TESTNET_P2PKH_ADDRESSES, XECADDR_TESTNET_P2SH_ADDRESSES ]) const XECADDR_ADDRESSES_NO_PREFIX = XECADDR_ADDRESSES.map(function (address) { const parts = address.split(':') return parts[1] }) const MAINNET_ADDRESSES = flatten([ LEGACY_MAINNET_P2PKH_ADDRESSES, LEGACY_MAINNET_P2SH_ADDRESSES, BITPAY_MAINNET_P2PKH_ADDRESSES, BITPAY_MAINNET_P2SH_ADDRESSES, CASHADDR_MAINNET_P2PKH_ADDRESSES, CASHADDR_MAINNET_P2SH_ADDRESSES, XECADDR_MAINNET_P2PKH_ADDRESSES, XECADDR_MAINNET_P2SH_ADDRESSES ]) const TESTNET_ADDRESSES = flatten([ LEGACY_TESTNET_P2PKH_ADDRESSES, LEGACY_TESTNET_P2SH_ADDRESSES, BITPAY_TESTNET_P2PKH_ADDRESSES, BITPAY_TESTNET_P2SH_ADDRESSES, CASHADDR_TESTNET_P2PKH_ADDRESSES, CASHADDR_TESTNET_P2SH_ADDRESSES, XECADDR_TESTNET_P2PKH_ADDRESSES, XECADDR_TESTNET_P2SH_ADDRESSES ]) const P2PKH_ADDRESSES = flatten([ LEGACY_MAINNET_P2PKH_ADDRESSES, LEGACY_TESTNET_P2PKH_ADDRESSES, BITPAY_MAINNET_P2PKH_ADDRESSES, BITPAY_TESTNET_P2PKH_ADDRESSES, CASHADDR_MAINNET_P2PKH_ADDRESSES, CASHADDR_TESTNET_P2PKH_ADDRESSES, XECADDR_MAINNET_P2PKH_ADDRESSES, XECADDR_TESTNET_P2PKH_ADDRESSES ]) const P2SH_ADDRESSES = flatten([ LEGACY_MAINNET_P2SH_ADDRESSES, LEGACY_TESTNET_P2SH_ADDRESSES, BITPAY_MAINNET_P2SH_ADDRESSES, BITPAY_TESTNET_P2SH_ADDRESSES, CASHADDR_MAINNET_P2SH_ADDRESSES, CASHADDR_TESTNET_P2SH_ADDRESSES, XECADDR_MAINNET_P2SH_ADDRESSES, XECADDR_TESTNET_P2SH_ADDRESSES ]) const BITCOIN_CASH_ADDRESSES = flatten([ MAINNET_ADDRESSES, TESTNET_ADDRESSES ]) function flatten (arrays) { return [].concat.apply([], arrays) } describe('#isValidAddress()', function () { it('it should return false for invalid inputs', function () { const INVALID_INPUTS = [ undefined, null, {}, [], 1, '', 'some invalid address', 'st1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX' ] INVALID_INPUTS.forEach(function (address) { assert.isFalse(xecaddr.isValidAddress(address)) }) }) it('it should return true for any valid Bitcoin Cash address', function () { BITCOIN_CASH_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isValidAddress(address)) }) }) }) describe('#detectAddressFormat()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.detectAddressFormat() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.detectAddressFormat('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.detectAddressFormat('st1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('it should detect a legacy address format correctly', function () { LEGACY_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressFormat(address), xecaddr.Format.Legacy) }) }) it('it should detect a bitpay address format correctly', function () { BITPAY_MAINNET_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressFormat(address), xecaddr.Format.Bitpay) }) }) it('it should detect a cashaddr address format correctly', function () { CASHADDR_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressFormat(address), xecaddr.Format.Cashaddr) }) }) it('it should detect an xecaddr address format correctly', function () { XECADDR_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressFormat(address), xecaddr.Format.Xecaddr) }) }) }) describe('#detectAddressNetwork()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.detectAddressNetwork() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.detectAddressNetwork('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.detectAddressNetwork('t1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('it should detect a mainnet address\' network correctly', function () { MAINNET_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressNetwork(address), xecaddr.Network.Mainnet) }) }) it('it should detect a testnet address\' network correctly', function () { TESTNET_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressNetwork(address), xecaddr.Network.Testnet) }) }) }) describe('#detectAddressType()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.detectAddressType() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.detectAddressType('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.detectAddressType('somt1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should detect a P2PKH address\' type correctly', function () { P2PKH_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressType(address), xecaddr.Type.P2PKH) }) }) it('should detect a P2SH address\' type correctly', function () { P2SH_ADDRESSES.forEach(function (address) { assert.strictEqual(xecaddr.detectAddressType(address), xecaddr.Type.P2SH) }) }) }) describe('#toLegacyAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.toLegacyAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toLegacyAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toLegacyAddress('some t1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should translate legacy address format to itself correctly', function () { assert.deepEqual( LEGACY_ADDRESSES.map(xecaddr.toLegacyAddress), LEGACY_ADDRESSES ) }) it('should translate bitpay address format to legacy format correctly', function () { assert.deepEqual( BITPAY_ADDRESSES.map(xecaddr.toLegacyAddress), LEGACY_ADDRESSES ) }) it('should translate cashaddr address format to legacy format correctly', function () { assert.deepEqual( CASHADDR_ADDRESSES.map(xecaddr.toLegacyAddress), LEGACY_ADDRESSES ) }) it('should translate xecaddr address format to legacy format correctly', function () { assert.deepEqual( XECADDR_ADDRESSES.map(xecaddr.toLegacyAddress), LEGACY_ADDRESSES ) }) }) describe('#toBitpayAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.toBitpayAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toBitpayAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toBitpayAddress('some t1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should translate legacy address format to bitpay format correctly', function () { assert.deepEqual( LEGACY_ADDRESSES.map(xecaddr.toBitpayAddress), BITPAY_ADDRESSES ) }) it('should translate bitpay address format to itself correctly', function () { assert.deepEqual( BITPAY_ADDRESSES.map(xecaddr.toBitpayAddress), BITPAY_ADDRESSES ) }) it('should translate cashaddr address format to bitpay format correctly', function () { assert.deepEqual( CASHADDR_ADDRESSES.map(xecaddr.toBitpayAddress), BITPAY_ADDRESSES ) }) }) describe('#toCashAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.toCashAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toCashAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toCashAddress('some int1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should translate legacy address format to cashaddr format correctly', function () { assert.deepEqual( LEGACY_ADDRESSES.map(xecaddr.toCashAddress), CASHADDR_ADDRESSES ) }) it('should translate bitpay address format to cashaddr format correctly', function () { assert.deepEqual( BITPAY_ADDRESSES.map(xecaddr.toCashAddress), CASHADDR_ADDRESSES ) }) it('should translate xecaddr address format to cashaddr correctly', function () { assert.deepEqual( XECADDR_ADDRESSES.map(xecaddr.toCashAddress), CASHADDR_ADDRESSES ) }) it('should translate no-prefix xecaddr address to cashaddr', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toCashAddress), CASHADDR_ADDRESSES ) }) it('should translate cashaddr address format to itself correctly', function () { assert.deepEqual( CASHADDR_ADDRESSES.map(xecaddr.toCashAddress), CASHADDR_ADDRESSES ) }) it('should translate no-prefix cashaddr address format to itself correctly', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toCashAddress), CASHADDR_ADDRESSES ) }) }) describe('#toXecAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.toXecAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toXecAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.toXecAddress('some int1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should translate legacy address format to xecaddr format correctly', function () { assert.deepEqual( LEGACY_ADDRESSES.map(xecaddr.toXecAddress), XECADDR_ADDRESSES ) }) it('should translate bitpay address format to xecaddr format correctly', function () { assert.deepEqual( BITPAY_ADDRESSES.map(xecaddr.toXecAddress), XECADDR_ADDRESSES ) }) it('should translate cashaddr address format to xecaddr correctly', function () { assert.deepEqual( CASHADDR_ADDRESSES.map(xecaddr.toXecAddress), XECADDR_ADDRESSES ) }) it('should translate no-prefix cashaddr address format to xecaddr', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toXecAddress), XECADDR_ADDRESSES ) }) it('should translate xecaddr address format to itself correctly', function () { assert.deepEqual( XECADDR_ADDRESSES.map(xecaddr.toXecAddress), XECADDR_ADDRESSES ) }) it('should translate no-prefix xecaddr address format to itself correctly', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toXecAddress), XECADDR_ADDRESSES ) }) }) describe('#isLegacyAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isLegacyAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isLegacyAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isLegacyAddress('some t1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return true for a legacy address', function () { LEGACY_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isLegacyAddress(address)) }) }) it('should return false for a bitpay address', function () { BITPAY_MAINNET_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isLegacyAddress(address)) }) }) it('should return false for a cashaddr address', function () { CASHADDR_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isLegacyAddress(address)) }) }) it('should return false for an xecaddr address', function () { XECADDR_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isLegacyAddress(address)) }) }) }) describe('#isBitpayAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isBitpayAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isBitpayAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isBitpayAddress('some t1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return false for a legacy address', function () { LEGACY_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isBitpayAddress(address)) }) }) it('should return true for a bitpay address', function () { BITPAY_MAINNET_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isBitpayAddress(address)) }) }) it('should return false for a cashaddr address', function () { CASHADDR_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isBitpayAddress(address)) }) }) it('should return false for an xecaddr address', function () { XECADDR_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isBitpayAddress(address)) }) }) }) describe('#isCashAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isCashAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isCashAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isCashAddress('some int1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return false for a legacy address', function () { LEGACY_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isCashAddress(address)) }) }) it('should return false for a bitpay address', function () { BITPAY_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isCashAddress(address)) }) }) it('should return false for an xecaddr address', function () { XECADDR_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isCashAddress(address)) }) }) it('should return true for a cashaddr address', function () { CASHADDR_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isCashAddress(address)) }) }) }) describe('#isXecAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isXecAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isXecAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isXecAddress('some int1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return false for a legacy address', function () { LEGACY_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isXecAddress(address)) }) }) it('should return false for a bitpay address', function () { BITPAY_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isXecAddress(address)) }) }) it('should return false for a cashaddr address', function () { CASHADDR_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isXecAddress(address)) }) }) it('should return true for an xecaddr address', function () { XECADDR_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isXecAddress(address)) }) }) }) describe('#isMainnetAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isMainnetAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isMainnetAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isMainnetAddress('somet1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return true for a mainnet address', function () { MAINNET_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isMainnetAddress(address)) }) }) it('should return false for a testnet address', function () { TESTNET_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isMainnetAddress(address)) }) }) }) describe('#isTestnetAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isTestnetAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isTestnetAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isTestnetAddress('somet1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return false for a mainnet address', function () { MAINNET_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isTestnetAddress(address)) }) }) it('should return true for a testnet address', function () { TESTNET_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isTestnetAddress(address)) }) }) }) describe('#isP2PKHAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isP2PKHAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isP2PKHAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isP2PKHAddress('some it1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return true for a P2PKH address', function () { P2PKH_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isP2PKHAddress(address)) }) }) it('should return false for a P2SH address', function () { P2SH_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isP2PKHAddress(address)) }) }) }) describe('#isP2SHAddress()', function () { it('should fail when called with an invalid address', function () { assert.throws(function () { xecaddr.isP2SHAddress() }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isP2SHAddress('some invalid address') }, xecaddr.InvalidAddressError) assert.throws(function () { xecaddr.isP2SHAddress('some int1LuPdPkGH5QoNSewQrr8EzNbM27ktPdgQX') }, xecaddr.InvalidAddressError) }) it('should return false for a P2PKH address', function () { P2PKH_ADDRESSES.forEach(function (address) { assert.isFalse(xecaddr.isP2SHAddress(address)) }) }) it('should return true for a P2SH address', function () { P2SH_ADDRESSES.forEach(function (address) { assert.isTrue(xecaddr.isP2SHAddress(address)) }) }) }) describe('cashaddr prefix detection', function () { it('should return the same result for detectAddressFormat', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.detectAddressFormat), CASHADDR_ADDRESSES.map(xecaddr.detectAddressFormat) ) }) it('should return the same result for detectAddressNetwork', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.detectAddressNetwork), CASHADDR_ADDRESSES.map(xecaddr.detectAddressNetwork) ) }) it('should return the same result for detectAddressType', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.detectAddressType), CASHADDR_ADDRESSES.map(xecaddr.detectAddressType) ) }) it('should return the same result for toLegacyAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toLegacyAddress), CASHADDR_ADDRESSES.map(xecaddr.toLegacyAddress) ) }) it('should return the same result for toBitpayAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toBitpayAddress), CASHADDR_ADDRESSES.map(xecaddr.toBitpayAddress) ) }) it('should return the same result for isLegacyAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isLegacyAddress), CASHADDR_ADDRESSES.map(xecaddr.isLegacyAddress) ) }) it('should return the same result for isBitpayAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isBitpayAddress), CASHADDR_ADDRESSES.map(xecaddr.isBitpayAddress) ) }) it('should return the same result for isCashAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isCashAddress), CASHADDR_ADDRESSES.map(xecaddr.isCashAddress) ) }) it('should return the same result for isMainnetAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isMainnetAddress), CASHADDR_ADDRESSES.map(xecaddr.isMainnetAddress) ) }) it('should return the same result for isTestnetAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isTestnetAddress), CASHADDR_ADDRESSES.map(xecaddr.isTestnetAddress) ) }) it('should return the same result for isP2PKHAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isP2PKHAddress), CASHADDR_ADDRESSES.map(xecaddr.isP2PKHAddress) ) }) it('should return the same result for isP2SHAddress', function () { assert.deepEqual( CASHADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isP2SHAddress), CASHADDR_ADDRESSES.map(xecaddr.isP2SHAddress) ) }) }) describe('xecaddr prefix detection', function () { it('should return the same result for detectAddressFormat', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.detectAddressFormat), XECADDR_ADDRESSES.map(xecaddr.detectAddressFormat) ) }) it('should return the same result for detectAddressNetwork', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.detectAddressNetwork), XECADDR_ADDRESSES.map(xecaddr.detectAddressNetwork) ) }) it('should return the same result for detectAddressType', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.detectAddressType), XECADDR_ADDRESSES.map(xecaddr.detectAddressType) ) }) it('should return the same result for toLegacyAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toLegacyAddress), XECADDR_ADDRESSES.map(xecaddr.toLegacyAddress) ) }) it('should return the same result for toBitpayAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.toBitpayAddress), XECADDR_ADDRESSES.map(xecaddr.toBitpayAddress) ) }) it('should return the same result for isLegacyAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isLegacyAddress), XECADDR_ADDRESSES.map(xecaddr.isLegacyAddress) ) }) it('should return the same result for isBitpayAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isBitpayAddress), XECADDR_ADDRESSES.map(xecaddr.isBitpayAddress) ) }) it('should return the same result for isCashAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isCashAddress), XECADDR_ADDRESSES.map(xecaddr.isCashAddress) ) }) it('should return the same result for isMainnetAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isMainnetAddress), XECADDR_ADDRESSES.map(xecaddr.isMainnetAddress) ) }) it('should return the same result for isTestnetAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isTestnetAddress), XECADDR_ADDRESSES.map(xecaddr.isTestnetAddress) ) }) it('should return the same result for isP2PKHAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isP2PKHAddress), XECADDR_ADDRESSES.map(xecaddr.isP2PKHAddress) ) }) it('should return the same result for isP2SHAddress', function () { assert.deepEqual( XECADDR_ADDRESSES_NO_PREFIX.map(xecaddr.isP2SHAddress), XECADDR_ADDRESSES.map(xecaddr.isP2SHAddress) ) }) }) })