@pharosnames/address-encoder
Version:
Encodes and decodes address formats for various cryptocurrencies with Pharos network support
36 lines • 1.32 kB
JavaScript
import { equalBytes } from "@noble/curves/abstract/utils";
import { blake2b } from "@noble/hashes/blake2b";
import { keccak_256 } from "@noble/hashes/sha3";
import { base58UncheckedDecode, base58UncheckedEncode, } from "../utils/base58.js";
const name = "vsys";
const coinType = 360;
const vsysChecksum = (source) => {
if (source[0] !== 5 || source[1] !== 77 || source.length !== 26)
return false;
const checksum = source.slice(-4);
const newChecksum = keccak_256(blake2b(source.slice(0, -4), { dkLen: 32 })).slice(0, 4);
if (!equalBytes(checksum, newChecksum))
return false;
return true;
};
export const encodeVsysAddress = (source) => {
if (!vsysChecksum(source))
throw new Error("Unrecognised address format");
return base58UncheckedEncode(source);
};
export const decodeVsysAddress = (source) => {
const encoded = source.startsWith("address:") ? source.slice(8) : source;
if (encoded.length > 36)
throw new Error("Unrecognised address format");
const decoded = base58UncheckedDecode(encoded);
if (!vsysChecksum(decoded))
throw new Error("Unrecognised address format");
return decoded;
};
export const vsys = {
name,
coinType,
encode: encodeVsysAddress,
decode: decodeVsysAddress,
};
//# sourceMappingURL=vsys.js.map