UNPKG

@pharosnames/address-encoder

Version:

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

45 lines 1.74 kB
import { concatBytes } from "@noble/hashes/utils"; import { base58CheckDecode, base58CheckEncode } from "../utils/base58.js"; const name = "xtz"; const coinType = 1729; export const encodeXtzAddress = (source) => { if (source.length !== 22 && source.length !== 21) throw new Error("Unrecognised address format"); const version = source[0]; if (version === 0) { let prefix; if (source[1] === 0x00) prefix = new Uint8Array([0x06, 0xa1, 0x9f]); else if (source[1] === 0x01) prefix = new Uint8Array([0x06, 0xa1, 0xa1]); else if (source[1] === 0x02) prefix = new Uint8Array([0x06, 0xa1, 0xa4]); else throw new Error("Unrecognised address format"); return base58CheckEncode(concatBytes(prefix, source.slice(2))); } if (version === 1) { return base58CheckEncode(concatBytes(new Uint8Array([0x02, 0x5a, 0x79]), source.slice(1, 21))); } throw new Error("Unrecognised address format"); }; export const decodeXtzAddress = (source) => { const decoded = base58CheckDecode(source).slice(3); const prefix = source.slice(0, 3); if (prefix === "tz1") return concatBytes(new Uint8Array([0x00, 0x00]), decoded); if (prefix === "tz2") return concatBytes(new Uint8Array([0x00, 0x01]), decoded); if (prefix === "tz3") return concatBytes(new Uint8Array([0x00, 0x02]), decoded); if (prefix === "KT1") return concatBytes(new Uint8Array([0x01]), decoded, new Uint8Array([0x00])); throw new Error("Unrecognised address format"); }; export const xtz = { name, coinType, encode: encodeXtzAddress, decode: decodeXtzAddress, }; //# sourceMappingURL=xtz.js.map