@helium/address
Version:
Helium public key utilities
85 lines • 3.59 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.sortAddresses = exports.bs58MultisigPublicKey = exports.bs58N = exports.bs58M = exports.bs58PublicKey = exports.bs58Version = exports.bs58KeyType = exports.bs58NetType = exports.byteToKeyType = exports.byteToNetType = exports.bs58ToBin = exports.bs58CheckEncode = void 0;
/* eslint-disable no-bitwise */
const sha2_1 = require("@noble/hashes/sha2");
const bs58_1 = __importDefault(require("bs58"));
const bs58CheckEncode = (version, binary) => {
const vPayload = Buffer.concat([Buffer.from([version]), binary]);
const checksum = (0, sha2_1.sha256)((0, sha2_1.sha256)(vPayload));
const checksumBytes = Buffer.alloc(4, Buffer.from(checksum).toString('hex'), 'hex');
const result = Buffer.concat([vPayload, checksumBytes]);
return bs58_1.default.encode(result);
};
exports.bs58CheckEncode = bs58CheckEncode;
const bs58ToBin = (bs58Address) => {
const bin = bs58_1.default.decode(bs58Address);
const vPayload = bin.slice(0, -4);
const payload = bin.slice(1, -4);
const checksum = bin.slice(-4);
const checksumVerify = (0, sha2_1.sha256)((0, sha2_1.sha256)(vPayload));
const checksumVerifyBytes = Buffer.alloc(4, Buffer.from(checksumVerify).toString('hex'), 'hex');
if (!checksumVerifyBytes.equals(Buffer.from(checksum))) {
throw new Error('invalid checksum');
}
return Buffer.from(payload);
};
exports.bs58ToBin = bs58ToBin;
const byteToNetType = (byte) => byte & 0xf0;
exports.byteToNetType = byteToNetType;
const byteToKeyType = (byte) => byte & 0x0f;
exports.byteToKeyType = byteToKeyType;
const bs58NetType = (bs58Address) => {
const bin = (0, exports.bs58ToBin)(bs58Address);
const byte = Buffer.from(bin).slice(0, 1)[0];
return (0, exports.byteToNetType)(byte);
};
exports.bs58NetType = bs58NetType;
const bs58KeyType = (bs58Address) => {
const bin = (0, exports.bs58ToBin)(bs58Address);
const byte = Buffer.from(bin).slice(0, 1)[0];
return (0, exports.byteToKeyType)(byte);
};
exports.bs58KeyType = bs58KeyType;
const bs58Version = (bs58Address) => {
const bin = bs58_1.default.decode(bs58Address);
const version = bin.slice(0, 1)[0];
return version;
};
exports.bs58Version = bs58Version;
const bs58PublicKey = (bs58Address) => {
const bin = (0, exports.bs58ToBin)(bs58Address);
const publicKey = Buffer.from(bin).slice(1);
return publicKey;
};
exports.bs58PublicKey = bs58PublicKey;
const bs58M = (bs58Address) => {
const bin = (0, exports.bs58ToBin)(bs58Address);
const M = bin[1];
return M;
};
exports.bs58M = bs58M;
const bs58N = (bs58Address) => {
const bin = (0, exports.bs58ToBin)(bs58Address);
const N = bin[2];
return N;
};
exports.bs58N = bs58N;
const bs58MultisigPublicKey = (bs58Address) => {
const bin = (0, exports.bs58ToBin)(bs58Address);
const publicKey = Buffer.from(bin).slice(3);
return publicKey;
};
exports.bs58MultisigPublicKey = bs58MultisigPublicKey;
const sortAddresses = (addresses) => {
const addressMap = addresses.map((address) => {
const charCodeArray = Array.from(address.b58).map((character) => character.charCodeAt(0));
return { address, buffer: new Uint8Array(charCodeArray) };
});
return addressMap.sort((a, b) => Buffer.compare(a.buffer, b.buffer)).map((obj) => obj.address);
};
exports.sortAddresses = sortAddresses;
//# sourceMappingURL=utils.js.map