UNPKG

@pharosnames/address-encoder

Version:

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

39 lines 1.28 kB
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