UNPKG

@pharosnames/address-encoder

Version:

Encodes and decodes address formats for various cryptocurrencies with Pharos network support

53 lines (49 loc) 1.2 kB
import { createBase58VersionedDecoder, createBase58VersionedEncoder, type Base58CheckVersion, } from "./base58.js"; import { createBech32SegwitDecoder, createBech32SegwitEncoder, } from "./bech32.js"; export type BitcoinCoderParameters = { hrp: string; p2pkhVersions: Base58CheckVersion[]; p2shVersions: Base58CheckVersion[]; }; export const createBitcoinDecoder = ({ hrp, p2pkhVersions, p2shVersions, }: BitcoinCoderParameters) => { const decodeBech32 = createBech32SegwitDecoder(hrp); const decodeBase58 = createBase58VersionedDecoder( p2pkhVersions, p2shVersions ); return (source: string): Uint8Array => { if (source.toLowerCase().startsWith(hrp + "1")) { return decodeBech32(source); } return decodeBase58(source); }; }; export const createBitcoinEncoder = ({ hrp, p2pkhVersions, p2shVersions, }: BitcoinCoderParameters) => { const encodeBech32 = createBech32SegwitEncoder(hrp); const encodeBase58 = createBase58VersionedEncoder( p2pkhVersions[0], p2shVersions[0] ); return (source: Uint8Array): string => { try { return encodeBase58(source); } catch { return encodeBech32(source); } }; };