UNPKG

solutaut

Version:

Multicoin address validator for Bitcoin and other Altcoins.

794 lines (786 loc) 20.1 kB
var XRPValidator = require('./ripple_validator'); var ETHValidator = require('./ethereum_validator'); var BTCValidator = require('./bitcoin_validator'); var ADAValidator = require('./ada_validator'); var XMRValidator = require('./monero_validator'); var NANOValidator = require('./nano_validator'); var SCValidator = require('./siacoin_validator'); var TRXValidator = require('./tron_validator'); var NEMValidator = require('./nem_validator'); var BCHValidator = require('./bch_validator'); var XLMValidator = require('./stellar_validator'); var EOSValidator = require('./eos_validator'); var XTZValidator = require('./tezos_validator'); var USDTValidator = require('./usdt_validator'); var AlgoValidator = require('./algo_validator'); var DotValidator = require('./dot_validator'); var BIP173Validator = require('./bip173_validator') var Base58Validator = require('./base58_validator') // defines P2PKH and P2SH address types for standard (prod) and testnet networks var CURRENCIES = [{ name: 'Bitcoin', symbol: 'btc', addressTypes: { prod: ['00', '05'], testnet: ['6f', 'c4', '3c', '26'] }, bech32Hrp: { prod: ['bc'], testnet: ['tb'] }, validator: BTCValidator }, { name: 'BitcoinCash', symbol: 'bch', regexp: '^[qQpP]{1}[0-9a-zA-Z]{41}$', addressTypes: { prod: ['00', '05'], testnet: ['6f', 'c4'] }, validator: BCHValidator }, { name: 'Bitcoin SV', symbol: 'bsv', regexp: '^[qQ]{1}[0-9a-zA-Z]{41}$', addressTypes: { prod: ['00', '05'], testnet: ['6f', 'c4'] }, validator: BCHValidator }, { name: 'LiteCoin', symbol: 'ltc', addressTypes: { prod: ['30', '05', '32'], testnet: ['6f', 'c4', '3a'] }, bech32Hrp: { prod: ['ltc'], testnet: ['tltc'] }, validator: BTCValidator }, { name: 'PeerCoin', symbol: 'ppc', addressTypes: { prod: ['37', '75'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'DogeCoin', symbol: 'doge', addressTypes: { prod: ['1e', '16'], testnet: ['71', 'c4'] }, validator: BTCValidator }, { name: 'BeaverCoin', symbol: 'bvc', addressTypes: { prod: ['19', '05'], testnet: ['6f', 'c4'] }, validator: BTCValidator, }, { name: 'FreiCoin', symbol: 'frc', addressTypes: { prod: ['00', '05'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'ProtoShares', symbol: 'pts', addressTypes: { prod: ['38', '05'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'MegaCoin', symbol: 'mec', addressTypes: { prod: ['32', '05'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'PrimeCoin', symbol: 'xpm', addressTypes: { prod: ['17', '53'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'AuroraCoin', symbol: 'aur', addressTypes: { prod: ['17', '05'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'NameCoin', symbol: 'nmc', addressTypes: { prod: ['34'], testnet: [] }, validator: BTCValidator }, { name: 'BioCoin', symbol: 'bio', addressTypes: { prod: ['19', '14'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'GarliCoin', symbol: 'grlc', addressTypes: { prod: ['26', '05'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'VertCoin', symbol: 'vtc', addressTypes: { prod: ['0x', '47', '71', '05'], testnet: ['6f', 'c4'] }, bech32Hrp: { prod: ['vtc'], testnet: ['tvtc'] }, validator: BTCValidator }, { name: 'BitcoinGold', symbol: 'btg', addressTypes: { prod: ['26', '17'], testnet: ['6f', 'c4'] }, validator: BTCValidator }, { name: 'Komodo', symbol: 'kmd', addressTypes: { prod: ['3c', '55'], testnet: ['0', '5'] }, validator: BTCValidator }, { name: 'BitcoinZ', symbol: 'btcz', expectedLength: 26, addressTypes: { prod: ['1cb8', '1cbd'], testnet: ['1d25', '1cba'] }, validator: BTCValidator }, { name: 'BitcoinPrivate', symbol: 'btcp', expectedLength: 26, addressTypes: { prod: ['1325', '13af'], testnet: ['1957', '19e0'] }, validator: BTCValidator }, { name: 'Hush', symbol: 'hush', expectedLength: 26, addressTypes: { prod: ['1cb8', '1cbd'], testnet: ['1d25', '1cba'] }, validator: BTCValidator }, { name: 'SnowGem', symbol: 'sng', expectedLength: 26, addressTypes: { prod: ['1c28', '1c2d'], testnet: ['1d25', '1cba'] }, validator: BTCValidator }, { name: 'ZCash', symbol: 'zec', expectedLength: 26, addressTypes: { prod: ['1cb8', '1cbd'], testnet: ['1d25', '1cba'] }, validator: BTCValidator }, { name: 'ZClassic', symbol: 'zcl', expectedLength: 26, addressTypes: { prod: ['1cb8', '1cbd'], testnet: ['1d25', '1cba'] }, validator: BTCValidator }, { name: 'ZenCash', symbol: 'zen', expectedLength: 26, addressTypes: { prod: ['2089', '2096'], testnet: ['2092', '2098'] }, validator: BTCValidator }, { name: 'VoteCoin', symbol: 'vot', expectedLength: 26, addressTypes: { prod: ['1cb8', '1cbd'], testnet: ['1d25', '1cba'] }, validator: BTCValidator }, { name: 'Decred', symbol: 'dcr', addressTypes: { prod: ['073f', '071a'], testnet: ['0f21', '0efc'] }, hashFunction: 'blake256', expectedLength: 26, validator: BTCValidator }, { name: 'GameCredits', symbol: 'game', addressTypes: { prod: ['26', '05'], testnet: [] }, validator: ETHValidator }, { name: 'PIVX', symbol: 'pivx', addressTypes: { prod: ['1e', '0d'], testnet: [] }, validator: BTCValidator }, { name: 'SolarCoin', symbol: 'slr', addressTypes: { prod: ['12', '05'], testnet: [] }, validator: BTCValidator }, { name: 'DigiByte', symbol: 'dgb', addressTypes: { prod: ['1e', '3f'], testnet: [] }, bech32Hrp: { prod: ['dgb', 'S'], testnet: [] }, validator: BTCValidator }, { name: 'Tether', symbol: 'usdt', addressTypes: { prod: ['00', '05', '65'], testnet: ['6f', 'c4', '65'] }, validator: USDTValidator }, { name: 'Ripple', symbol: 'xrp', validator: XRPValidator, }, { name: 'Dash', symbol: 'dash', addressTypes: { prod: ['4c', '10'], testnet: ['8c', '13'] }, validator: BTCValidator }, { name: 'Neo', symbol: 'neo', addressTypes: { prod: ['17'], testnet: [] }, validator: BTCValidator }, { name: 'NeoGas', symbol: 'gas', addressTypes: { prod: ['17'], testnet: [] }, validator: BTCValidator }, { name: 'Qtum', symbol: 'qtum', addressTypes: { prod: ['3a', '32'], testnet: ['78', '6e'] }, validator: BTCValidator }, { name: 'Waves', symbol: 'waves', addressTypes: { prod: ['0157'], testnet: ['0154'] }, expectedLength: 26, hashFunction: 'blake256keccak256', regex: /^[a-zA-Z0-9]{35}$/, validator: BTCValidator }, { name: 'Ethereum', symbol: 'eth', validator: ETHValidator, }, { name: 'EthereumPow', symbol: 'ethw', validator: ETHValidator, }, { name: 'EtherZero', symbol: 'etz', validator: ETHValidator, }, { name: 'EthereumClassic', symbol: 'etc', validator: ETHValidator, }, { name: 'Celo', symbol: 'celo', validator: ETHValidator, }, { name: 'Callisto', symbol: 'clo', validator: ETHValidator, }, { name: 'Bankex', symbol: 'bkx', validator: ETHValidator }, { name: 'Cardano', symbol: 'ada', bech32Hrp: { prod: ['addr'], testnet: ['addr']}, validator: ADAValidator }, { name: 'Monero', symbol: 'xmr', addressTypes: { prod: ['18', '42'], testnet: ['53', '63'], stagenet: ['24'] }, iAddressTypes: { prod: ['19'], testnet: ['54'], stagenet: ['25'] }, validator: XMRValidator }, { name: 'Aragon', symbol: 'ant', validator: ETHValidator }, { name: 'Basic Attention Token', symbol: 'bat', validator: ETHValidator }, { name: 'Bancor', symbol: 'bnt', validator: ETHValidator }, { name: 'Civic', symbol: 'cvc', validator: ETHValidator }, { name: 'District0x', symbol: 'dnt', validator: ETHValidator }, { name: 'Gnosis', symbol: 'gno', validator: ETHValidator }, { name: 'Golem (GNT)', symbol: 'gnt', validator: ETHValidator }, { name: 'Golem', symbol: 'glm', validator: ETHValidator }, { name: 'Matchpool', symbol: 'gup', validator: ETHValidator }, { name: 'Melon', symbol: 'mln', validator: ETHValidator }, { name: 'Numeraire', symbol: 'nmr', validator: ETHValidator }, { name: 'OmiseGO', symbol: 'omg', validator: ETHValidator }, { name: 'TenX', symbol: 'pay', validator: ETHValidator }, { name: 'Ripio Credit Network', symbol: 'rcn', validator: ETHValidator }, { name: 'Augur', symbol: 'rep', validator: ETHValidator }, { name: 'iExec RLC', symbol: 'rlc', validator: ETHValidator }, { name: 'Salt', symbol: 'salt', validator: ETHValidator }, { name: 'Status', symbol: 'snt', validator: ETHValidator }, { name: 'Storj', symbol: 'storj', validator: ETHValidator }, { name: 'Swarm City', symbol: 'swt', validator: ETHValidator }, { name: 'TrueUSD', symbol: 'tusd', validator: ETHValidator }, { name: 'Wings', symbol: 'wings', validator: ETHValidator }, { name: '0x', symbol: 'zrx', validator: ETHValidator }, { name: 'Expanse', symbol: 'exp', validator: ETHValidator }, { name: 'Viberate', symbol: 'vib', validator: ETHValidator }, { name: 'Odyssey', symbol: 'ocn', validator: ETHValidator }, { name: 'Polymath', symbol: 'poly', validator: ETHValidator }, { name: 'Storm', symbol: 'storm', validator: ETHValidator }, { name: 'Nano', symbol: 'nano', validator: NANOValidator, }, { name: 'RaiBlocks', symbol: 'xrb', validator: NANOValidator, }, { name: 'Siacoin', symbol: 'sc', validator: SCValidator }, { name: 'HyperSpace', symbol: 'xsc', validator: SCValidator }, { name: 'loki', symbol: 'loki', addressTypes: { prod: ['114', '115', '116'], testnet: [] }, iAddressTypes: { prod: ['115'], testnet: [] }, validator: XMRValidator }, { name: 'LBRY Credits', symbol: 'lbc', addressTypes: { prod: ['55'], testnet: [] }, validator: BTCValidator }, { name: 'Tron', symbol: 'trx', addressTypes: { prod: ['65'], testnet: ['65'] }, validator: TRXValidator }, { name: 'Nem', symbol: 'xem', validator: NEMValidator }, { name: 'Stellar', symbol: 'xlm', validator: XLMValidator, }, { name: 'BTU Protocol', symbol: 'btu', validator: ETHValidator, }, { name: 'Crypto.com Coin', symbol: 'cro', bech32Hrp: { prod: ['cro'], testnet: ['tcro']}, validator: BIP173Validator, }, { name: 'Multi-collateral DAI', symbol: 'dai', validator: ETHValidator, }, { name: 'Enjin Coin', symbol: 'enj', validator: ETHValidator, }, { name: 'HedgeTrade', symbol: 'hedg', validator: ETHValidator, }, { name: 'Cred', symbol: 'lba', validator: ETHValidator, }, { name: 'Chainlink', symbol: 'link', validator: ETHValidator, }, { name: 'Loom Network', symbol: 'loom', validator: ETHValidator, }, { name: 'Maker', symbol: 'mkr', validator: ETHValidator, }, { name: 'Metal', symbol: 'mtl', validator: ETHValidator, }, { name: 'Ocean Protocol', symbol: 'ocean', validator: ETHValidator, }, { name: 'Quant', symbol: 'qnt', validator: ETHValidator, }, { name: 'Synthetix Network', symbol: 'snx', validator: ETHValidator, }, { name: 'SOLVE', symbol: 'solve', validator: ETHValidator, }, { name: 'Spendcoin', symbol: 'spnd', validator: ETHValidator, }, { name: 'TEMCO', symbol: 'temco', validator: ETHValidator, }, { name: 'EOS', symbol: 'eos', validator: EOSValidator }, { name: 'Tezos', symbol: 'xtz', validator: XTZValidator }, { name: 'VeChain', symbol: 'vet', validator: ETHValidator }, { name: 'StormX', symbol: 'stmx', validator: ETHValidator }, { name: 'AugurV2', symbol: 'repv2', validator: ETHValidator }, { name: 'FirmaChain', symbol: 'fct', validator: ETHValidator }, { name: 'BlockTrade', symbol: 'btt', validator: ETHValidator }, { name: 'Quantum Resistant Ledger', symbol: 'qrl', validator: ETHValidator }, { name: 'Serve', symbol: 'serv', validator: ETHValidator }, { name: 'Tap', symbol: 'xtp', validator: ETHValidator }, { name: 'Compound', symbol: 'comp', validator: ETHValidator }, { name: 'Paxos', symbol: 'pax', validator: ETHValidator }, { name: 'USD Coin', symbol: 'usdc', validator: ETHValidator }, { name: 'CUSD', symbol: 'cusd', validator: ETHValidator }, { name: 'Algorand', symbol: 'algo', validator: AlgoValidator }, { name: 'Polkadot', symbol: 'dot', validator: DotValidator }, { name: 'Uniswap Coin', symbol: 'uni', validator: ETHValidator }, { name: 'Aave Coin', symbol: 'aave', validator: ETHValidator }, { name: 'Matic', symbol: 'matic', validator: ETHValidator }, { name: 'Decentraland', symbol: 'mana', validator: ETHValidator }, { name: 'Solana', symbol: 'sol', validator: Base58Validator, maxLength: 44, minLength: 43 }, { name: 'Bonk', symbol: 'bonk', validator: Base58Validator, maxLength: 44, minLength: 43 }, { name: 'Binance', symbol: 'bnb', validator: ETHValidator, }, { name: 'Avalanche', symbol: 'avax', validator: ETHValidator, }, { name: 'Flare', symbol: 'flr', validator: ETHValidator, }, { name: 'Yearn.finance', symbol: 'yfi', validator: ETHValidator, }, { name: 'Optimism', symbol: 'op', validator: ETHValidator, }, { name: 'Lido DAO Token', symbol: 'ldo', validator: ETHValidator, }, { name: 'Curve DAO', symbol: 'crv', validator: ETHValidator, }, { name: 'Arbitrum', symbol: 'arb', validator: ETHValidator, }, { name: 'Hashflow', symbol: 'hft', validator: ETHValidator, }, { name: 'Apecoin', symbol: 'ape', validator: ETHValidator, }, { name: 'Band Protocol', symbol: 'band', validator: ETHValidator, }, { name: 'The Graph', symbol: 'grt', validator: ETHValidator, }, { name: 'Magic', symbol: 'magic', validator: ETHValidator, }, { name: 'Biconomy', symbol: 'bico', validator: ETHValidator, }, { name: 'API3', symbol: 'api3', validator: ETHValidator, }, { name: 'Axie Infinity', symbol: 'axs', validator: ETHValidator, }, { name: 'Blur', symbol: 'blur', validator: ETHValidator, }, { name: 'Chiliz', symbol: 'chz', validator: ETHValidator, }, { name: 'Ethereum Name Service', symbol: 'ens', validator: ETHValidator, }, { name: 'Fetch.ai', symbol: 'fet', validator: ETHValidator, }, { name: 'Illuvium', symbol: 'ilv', validator: ETHValidator, }, { name: 'Injective', symbol: 'inj', validator: ETHValidator, }, { name: 'Immutable', symbol: 'imx', validator: ETHValidator, }, { name: 'Mask Network', symbol: 'mask', validator: ETHValidator, }, { name: 'Origin Protocol', symbol: 'ogn', validator: ETHValidator, }, { name: 'Onyx Protocol', symbol: 'xcn', validator: ETHValidator, }, { name: 'Unifi Protocol DAO', symbol: 'unfi', validator: ETHValidator, }, { name: 'Tellor', symbol: 'trb', validator: ETHValidator, }, { name: 'SuperVerse', symbol: 'super', validator: ETHValidator, }, { name: 'Skale', symbol: 'skl', validator: ETHValidator, }, { name: 'The Sandbox', symbol: 'sand', validator: ETHValidator, }, { name: 'Vulcan Forged PYR', symbol: 'pyr', validator: ETHValidator, }, { name: 'Marlin', symbol: 'pond', validator: ETHValidator, }, { name: 'PayPal USD', symbol: 'pyusd', validator: ETHValidator, }, ]; module.exports = { getByNameOrSymbol: function (currencyNameOrSymbol) { var nameOrSymbol = currencyNameOrSymbol.toLowerCase(); return CURRENCIES.find(function (currency) { return currency.name.toLowerCase() === nameOrSymbol || currency.symbol.toLowerCase() === nameOrSymbol }); }, getAll: function () { return CURRENCIES; } }; ////spit out details for readme.md // CURRENCIES // .sort((a, b) => a.name.toUpperCase() > b.name.toUpperCase() ? 1 : -1) // .forEach(c => console.log(`* ${c.name}/${c.symbol} \`'${c.name}'\` or \`'${c.symbol}'\` `)); ////spit out keywords for package.json // CURRENCIES // .sort((a, b) => a.name.toUpperCase() > b.name.toUpperCase() ? 1 : -1) // .forEach(c => console.log(`"${c.name}","${c.symbol}",`)); //