multichain-address-validator
Version:
Multichain address validator for Bitcoin and other blockchains.
126 lines (125 loc) • 3.96 kB
JavaScript
import { NetworkType } from './types.js';
import { AlgorandValidator, BCHValidator, BTCValidator, CardanoValidator, EOSValidator, ETHValidator, HederaValidator, MoneroValidator, MoveValidator, NanoValidator, NemValidator, PolkadotValidator, RippleValidator, SiaValidator, SolanaValidator, TezosValidator, TronValidator, XLMValidator, } from './validators/index.js';
const chainValidators = {
algorand: { validator: AlgorandValidator },
aptos: { validator: MoveValidator },
bitcoin: {
alternatives: ['btc', 'omni'],
validator: {
mainnet: BTCValidator({
addressTypes: ['00', '05'],
bech32Hrp: ['bc'],
}),
testnet: BTCValidator({
addressTypes: ['6f', 'c4', '3c', '26'],
bech32Hrp: ['tb'],
}),
},
},
'bitcoincash': {
alternatives: ['bch', 'bitcoin-cash', 'bitcoin cash'],
validator: {
mainnet: BCHValidator({
addressTypes: ['00', '05'],
bech32Hrp: ['bc'],
networkType: NetworkType.MainNet,
}),
testnet: BCHValidator({
addressTypes: ['6f', 'c4', '3c', '26'],
bech32Hrp: ['tb'],
networkType: NetworkType.TestNet,
}),
}
},
cardano: {
alternatives: ['ada'],
validator: CardanoValidator,
},
doge: {
alternatives: ['dogecoin'],
validator: {
mainnet: BTCValidator({ addressTypes: ['1e', '16'] }),
testnet: BTCValidator({ addressTypes: ['71', 'c4'] }),
}
},
eos: { validator: EOSValidator },
ethereum: {
alternatives: [
'arbitrum',
'avalanche',
'avalanche-c',
'base',
'berachain',
'binance',
'BinanceSmartChain',
'bnb',
'bsc',
'eth',
'EthereumClassic',
'EthereumPow',
'erc20',
'flare',
'optimism',
'sonic',
'story',
],
validator: ETHValidator
},
hedera: {
alternatives: ['hbar'],
validator: HederaValidator
},
litecoin: {
alternatives: ['ltc'],
validator: {
mainnet: BTCValidator({
addressTypes: ['30', '32'],
bech32Hrp: ['ltc'],
}),
testnet: BTCValidator({
addressTypes: ['6f', 'c4', '3a'],
bech32Hrp: ['tltc']
})
}
},
monero: {
validator: {
mainnet: MoneroValidator(NetworkType.MainNet),
testnet: MoneroValidator(NetworkType.TestNet),
}
},
nem: { validator: NemValidator },
nano: { validator: NanoValidator },
polkadot: { validator: PolkadotValidator },
ripple: {
alternatives: ['xrp'],
validator: RippleValidator,
},
sia: {
alternatives: ['SiaCoin'],
validator: SiaValidator
},
solana: {
alternatives: ['sol', 'spl'],
validator: SolanaValidator,
},
sui: { validator: MoveValidator },
tron: {
alternatives: ['trc20'],
validator: TronValidator(),
},
tezos: { validator: TezosValidator },
xlm: {
alternatives: ['stellar', 'stellarlumens'],
validator: XLMValidator,
},
};
export function getValidatorForChain(chain) {
const chainName = chain.chain || chain;
const networkType = chain.networkType || NetworkType.MainNet;
const key = Object.keys(chainValidators).find(key => key.toUpperCase() === chainName.toUpperCase() || chainValidators[key]
?.alternatives
?.map(alternative => alternative.toUpperCase())
?.includes(chainName.toUpperCase()));
return chainValidators[key]?.validator[networkType] || chainValidators[key]?.validator;
}