@pharosnames/address-encoder
Version:
Encodes and decodes address formats for various cryptocurrencies with Pharos network support
51 lines • 1.67 kB
JavaScript
import { utils } from "@scure/base";
const name = "nim";
const coinType = 242;
const CCODE = "NQ";
const ibanCheck = (data) => {
const num = data
.toUpperCase()
.split("")
.map((c) => {
const code = c.charCodeAt(0);
if (code >= 48 && code <= 57) {
return c;
}
else {
return (code - 55).toString();
}
})
.join("");
let tmp = "";
for (let i = 0; i < Math.ceil(num.length / 6); i++) {
const a = num.slice(i * 6, i * 6 + 6);
tmp = (parseInt(tmp + a, 10) % 97).toString();
}
return parseInt(tmp, 10);
};
const nimChecksum = (source) => {
return ("00" + (98 - ibanCheck(source + CCODE + "00"))).slice(-2);
};
const base32Nim = utils.chain(utils.radix2(5), utils.alphabet("0123456789ABCDEFGHJKLMNPQRSTUVXY"), utils.padding(5), utils.join(""));
export const encodeNimAddress = (source) => {
const base32Part = base32Nim.encode(source);
const checksummed = nimChecksum(base32Part);
return `${CCODE}${checksummed}${base32Part}`.replace(/.{4}/g, "$& ").trim();
};
export const decodeNimAddress = (source) => {
if (!source.startsWith(CCODE))
throw new Error("Unrecognised address format");
const noWhitespace = source.replace(/ /g, "");
const checksum = noWhitespace.slice(2, 4);
const base32Part = noWhitespace.slice(4);
if (checksum !== nimChecksum(base32Part))
throw new Error("Unrecognised address format");
return base32Nim.decode(base32Part);
};
export const nim = {
name,
coinType,
encode: encodeNimAddress,
decode: decodeNimAddress,
};
//# sourceMappingURL=nim.js.map