@pharosnames/address-encoder
Version:
Encodes and decodes address formats for various cryptocurrencies with Pharos network support
39 lines • 1.28 kB
JavaScript
import { keccak_256 } from "@noble/hashes/sha3";
import { bytesToHexWithoutPrefix, hexToBytes, stringToBytes, } from "../utils/bytes.js";
import { isAddress } from "../utils/hex.js";
const name = "wan";
const coinType = 5718350;
const wanChecksum = (addressBytes) => {
const addressStr = bytesToHexWithoutPrefix(addressBytes);
const address = addressStr.split("");
const hash = keccak_256(stringToBytes(addressStr));
let hashByte;
for (let i = 0; i < 40; i++) {
hashByte = hash[Math.floor(i / 2)];
if (i % 2 === 0)
hashByte = hashByte >> 4;
else
hashByte &= 0xf;
if (address[i] > "9" && hashByte <= 7)
address[i] = address[i].toUpperCase();
}
return `0x${address.join("")}`;
};
export const encodeWanAddress = (source) => {
return wanChecksum(source);
};
export const decodeWanAddress = (source) => {
if (!isAddress(source))
throw new Error("Unrecognised address format");
const bytes = hexToBytes(source);
if (wanChecksum(bytes) !== source)
throw new Error("Unrecognised address format");
return bytes;
};
export const wan = {
name,
coinType,
encode: encodeWanAddress,
decode: decodeWanAddress,
};
//# sourceMappingURL=wan.js.map