@fordefi-public/crypto-address-validator-ts
Version:
Crypto address validator for Bitcoin and other Altcoins, forked to be used with typescript
48 lines (40 loc) • 1.35 kB
text/typescript
var base32 = require('../crypto/externals/base32');
var bech32 = require('../crypto/externals/bech32');
import { Currency, Options } from '../types/types';
import * as BTCValidator from './bitcoin_validator';
function validateAddress(address: string, currency: Currency, opts: Options) {
const networkType = opts ? opts.networkType : ''
const regexp = currency.regexp;
let prefix = 'bitcoincash';
let raw_address;
const res = address.split(':');
if (res.length === 1) {
raw_address = address
} else {
if (res[0] !== 'bitcoincash') {
return false;
}
raw_address = res[1];
}
if (!regexp.test(raw_address)) {
return false;
}
if (raw_address.toLowerCase() != raw_address && raw_address.toUpperCase() != raw_address) {
return false;
}
const decoded = base32.b32decode(raw_address);
if (networkType === 'testnet') {
prefix = 'bchtest';
}
try {
if (bech32.verifyChecksum(prefix, decoded, bech32.encodings.BECH32)) {
return false;
}
} catch(e) {
return false;
}
return true;
}
export function isValidAddress(address: string, currency: Currency, opts: Options) {
return validateAddress(address, currency, opts) || BTCValidator.isValidAddress(address, currency, opts);
}