UNPKG

crypto-wallet-address-validator

Version:

Cryptocurrency wallet address validator for Bitcoin, Litecoin and other Altcoins.

242 lines (199 loc) 11.5 kB
var isNode = typeof module !== 'undefined' && typeof module.exports !== 'undefined' var chai = isNode ? require('chai') : window.chai, expect = chai.expect; var WAValidator = isNode ? require('../src/wallet_address_validator') : window.WAValidator; function valid (address, currency, networkType) { var result = WAValidator.validate(address, currency, networkType); expect(result).to.be.true; } function invalid (address, currency, networkType) { var result = WAValidator.validate(address, currency, networkType); expect(result).to.be.false; } describe('WAValidator.validate()', function () { describe('valid results', function () { it('should return true for correct bitcoin addresses', function () { valid('12KYrjTdVGjFMtaxERSk3gphreJ5US8aUP', 'bitcoin'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'bitcoin'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'BTC'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'Bitcoin'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc', 'prod'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'btc', 'both'); valid('1oNLrsHnBcR6dpaBpwz3LSwutbUNkNSjs', 'bitcoin'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'bitcoin', 'testnet'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'bitcoin', 'both'); valid('1SQHtwR5oJRKLfiWQ2APsAd9miUc4k2ez'); valid('116CGDLddrZhMrTwhCVJXtXQpxygTT1kHd'); // p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt'); valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bitcoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'bitcoin', 'testnet'); }); it('should return true for correct bcash addresses', function () { valid('12KYrjTdVGjFMtaxERSk3gphreJ5US8aUP', 'bcash'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'bcash'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'BCH'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'Bitcoin'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'bch'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'bch', 'prod'); valid('12QeMLzSrB8XH8FvEzPMVoRxVAzTr5XM2y', 'bch', 'both'); valid('1oNLrsHnBcR6dpaBpwz3LSwutbUNkNSjs', 'bcash'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'bcash', 'testnet'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'bcash', 'both'); // p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'bcash'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'bcash', 'testnet'); }); it('should return true for correct litecoin addresses', function () { valid('LVg2kJoFNg45Nbpy53h7Fe1wKyeXVRhMH9', 'litecoin'); valid('LVg2kJoFNg45Nbpy53h7Fe1wKyeXVRhMH9', 'LTC'); valid('LTpYZG19YmfvY2bBDYtCKpunVRw7nVgRHW', 'litecoin'); valid('Lb6wDP2kHGyWC7vrZuZAgV7V4ECyDdH7a6', 'litecoin'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'litecoin', 'testnet'); // p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'litecoin'); valid('MCyAqan5JAkmvm94gqHNKNjbvcfSnytyJm', 'litecoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'litecoin', 'testnet'); valid('QYkcLRbhqftzUUubHfyMdK5NsUA9S5LdaY', 'litecoin', 'testnet'); }); it('should return true for correct peercoin addresses', function () { valid('PHCEsP6od3WJ8K2WKWEDBYKhH95pc9kiZN', 'peercoin'); valid('PSbM1pGoE9dnAuVWvpQqTTYVpKZU41dNAz', 'peercoin'); valid('PUULeHrJL2WujJkorc2RsUAR3SardKUauu', 'peercoin'); valid('PUULeHrJL2WujJkorc2RsUAR3SardKUauu', 'PPC'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'peercoin', 'testnet'); // p2sh addresses valid('pNms4CaWqgZUxbNZaA1yP2gPr3BYnez9EM', 'peercoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'peercoin', 'testnet'); }); it('should return true for correct dogecoin addresses', function () { valid('DPpJVPpvPNP6i6tMj4rTycAGh8wReTqaSU', 'dogecoin'); valid('DNzLUN6MyYVS5zf4Xc2yK69V3dXs6Mxia5', 'dogecoin'); valid('DPS6iZj7roHquvwRYXNBua9QtKPzigUUhM', 'dogecoin'); valid('DPS6iZj7roHquvwRYXNBua9QtKPzigUUhM', 'DOGE'); //TODO: NEED A DOGECOIN TESTNET ADDRESS //p2sh addresses valid('A7JjzK9k9x5b2MkkQzqt91WZsuu7wTu6iS', 'dogecoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'dogecoin', 'testnet'); }); it('should return true for correct beavercoin addresses', function () { valid('BPPtB4EpPi5wCaGXZuNyKQgng8ya579qUh', 'beavercoin'); valid('BC1LLYoE4mTCHTJhVYvLGxhRTwAHyWTQ49', 'beavercoin'); valid('BBuyeg2vjtyFdMNj3LTxuVra4wJMKVAY9C', 'beavercoin'); valid('BBuyeg2vjtyFdMNj3LTxuVra4wJMKVAY9C', 'BVC'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'beavercoin', 'testnet'); // p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'beavercoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'beavercoin', 'testnet'); }); it('should return true for correct litecoin freicoin', function () { valid('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa', 'freicoin'); valid('1oNLrsHnBcR6dpaBpwz3LSwutbUNkNSjs', 'freicoin'); valid('1SQHtwR5oJRKLfiWQ2APsAd9miUc4k2ez', 'freicoin'); valid('1SQHtwR5oJRKLfiWQ2APsAd9miUc4k2ez', 'FRC'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'freicoin', 'testnet'); // p2sh addresse valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'freicoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'freicoin', 'testnet'); }); it('should return true for correct protoshares addresses', function () { valid('PaNGELmZgzRQCKeEKM6ifgTqNkC4ceiAWw', 'protoshares'); valid('Piev8TMX2fT5mFtgxx2TXJaqXP37weMPuD', 'protoshares'); valid('PgsuLoe9ojRKFGJGVpqqk37gAqNJ4ozboD', 'protoshares'); valid('PgsuLoe9ojRKFGJGVpqqk37gAqNJ4ozboD', 'PTS'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'protoshares', 'testnet'); //p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'protoshares'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'protoshares', 'testnet'); }); it('should return true for correct megacoin addresses', function () { valid('MWUHaNxjXGZUYTh92i3zuDmsnH1rHSBk5M', 'megacoin'); valid('MSAkrhRyte7bz999Ga5SqYjzypFFYa2oEb', 'megacoin'); valid('MLUTAtDQFcfo1QACWocLuufFq5fBDTpCHE', 'megacoin'); valid('MLUTAtDQFcfo1QACWocLuufFq5fBDTpCHE', 'MEC'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'megacoin', 'testnet'); //p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'megacoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'megacoin', 'testnet'); }); it('should return true for correct primecoin addresses', function () { valid('AVKeiZ5JadfWdH2EYVgVRfX4ufoyd4ehuM', 'primecoin'); valid('AQXBRPyob4dywUJ21RUKrR1xetQCDVenKD', 'primecoin'); valid('ANHfTZnskKqaBU7oZuSha9SpbHU3YBfeKf', 'primecoin'); valid('AYdiYMKSGYxLcZNDmqB8jNcck7SQibrfiK', 'primecoin'); valid('AYdiYMKSGYxLcZNDmqB8jNcck7SQibrfiK', 'XPM'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'primecoin', 'testnet'); //p2sh addresses valid('af5CvTQq7agDh717Wszb5QDbWb7nT2mukP', 'primecoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'primecoin', 'testnet'); }); it('should return true for correct auroracoin addresses', function () { valid('ARM3GLZXF1PDTZ5vz3wh5MVahbK9BHTWAN', 'auroracoin'); valid('AUtfc6ThCLb7FuEu7QPrWpJuaXaJRPciDF', 'auroracoin'); valid('AUN1oaj5hjispGnczt8Aruw3TxgGyRqB3V', 'auroracoin'); valid('AXGcBkGX6NiaDXj85C5dCrhTRUgwxSkKDK', 'auroracoin'); valid('AXGcBkGX6NiaDXj85C5dCrhTRUgwxSkKDK', 'AUR'); valid('mzBc4XEFSdzCDcTxAgf6EZXgsZWpztRhef', 'auroracoin', 'testnet'); //p2sh addresses valid('3NJZLcZEEYBpxYEUGewU4knsQRn1WM5Fkt', 'auroracoin'); valid('2MxKEf2su6FGAUfCEAHreGFQvEYrfYNHvL7', 'auroracoin', 'testnet'); }); it('should return true for correct namecoin addresses', function () { valid('NEpeRmS775fnti8TDgJA28m8KLEfNNRZvT', 'namecoin'); valid('MyJ691bGJ48RBK2LS8n1U57wcFLFScFXxi', 'namecoin'); valid('NFY9aw1RXLGtWpeqgNQXprnUcZXyKNinTh', 'namecoin'); valid('NCPPc7Pzb75CpRPJQPRRh6ouJTq7BCy1H4', 'namecoin'); valid('NCPPc7Pzb75CpRPJQPRRh6ouJTq7BCy1H4', 'NMC'); }); }); describe('invalid results', function () { function commonTests(currency) { invalid('', currency); //reject blank invalid('%%@', currency); //reject invalid base58 string invalid('1A1zP1ePQGefi2DMPTifTL5SLmv7DivfNa', currency); //reject invalid address invalid('bd839e4f6fadb293ba580df5dea7814399989983', currency); //reject transaction id's //testnet invalid('', currency, 'testnet'); //reject blank invalid('%%@', currency, 'testnet'); //reject invalid base58 string invalid('1A1zP1ePQGefi2DMPTifTL5SLmv7DivfNa', currency, 'testnet'); //reject invalid address invalid('bd839e4f6fadb293ba580df5dea7814399989983', currency, 'testnet'); //reject transaction id's } it('should return false for incorrect bitcoin addresses', function () { commonTests('bitcoin'); }); it('should return false for incorrect bcash addresses', function () { commonTests('bcash'); }); it('should return false for incorrect litecoin addresses', function () { commonTests('litecoin'); }); it('should return false for incorrect peercoin addresses', function () { commonTests('peercoin'); }); it('should return false for incorrect dogecoin addresses', function () { commonTests('dogecoin'); }); it('should return false for incorrect beavercoin addresses', function () { commonTests('beavercoin'); }); it('should return false for incorrect freicoin addresses', function () { commonTests('freicoin'); }); it('should return false for incorrect protoshares addresses', function () { commonTests('protoshares'); }); it('should return false for incorrect megacoin addresses', function () { commonTests('megacoin'); }); it('should return false for incorrect primecoin addresses', function () { commonTests('primecoin'); }); it('should return false for incorrect auroracoin addresses', function () { commonTests('auroracoin'); }); it('should return false for incorrect namecoin addresses', function () { commonTests('namecoin'); }); }); });