@pharosnames/address-encoder
Version:
Encodes and decodes address formats for various cryptocurrencies with Pharos network support
45 lines • 1.74 kB
JavaScript
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