crypto-wallet-address-validator
Version:
Cryptocurrency wallet address validator for Bitcoin, Litecoin and other Altcoins.
242 lines (199 loc) • 11.5 kB
JavaScript
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');
});
});
});