UNPKG

@pharosnames/address-encoder

Version:

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

27 lines (23 loc) 963 B
import { secp256k1 } from "@noble/curves/secp256k1"; import { ripemd160 } from "@noble/hashes/ripemd160"; import { utils } from "@scure/base"; import { base58UncheckedDecode, base58UncheckedEncode } from "./base58.js"; const eosChecksum = utils.checksum(4, ripemd160); export const createEosEncoder = (prefix: string) => (source: Uint8Array): string => { const point = secp256k1.ProjectivePoint.fromHex(source); const checksummed = eosChecksum.encode(point.toRawBytes(true)); const encoded = base58UncheckedEncode(checksummed); return `${prefix}${encoded}`; }; export const createEosDecoder = (prefix: string) => (source: string): Uint8Array => { if (!source.startsWith(prefix)) throw new Error("Unrecognised address format"); const prefixStripped = source.slice(prefix.length); const decoded = base58UncheckedDecode(prefixStripped); const checksummed = eosChecksum.decode(decoded); return checksummed; };