@onekeyfe/blockchain-libs
Version:
OneKey Blockchain Libs
38 lines • 1.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidAddress = exports.pubkeyToAddress = void 0;
const bech32_1 = require("./bech32");
const hash_1 = require("./hash");
function rawEd25519PubkeyToRawAddress(pubkey) {
if (pubkey.length !== 32) {
throw new Error(`Invalid Ed25519 pubkey length: ${pubkey.length}`);
}
return (0, hash_1.sha256)(pubkey).slice(0, 20);
}
function rawSecp256k1PubkeyToRawAddress(pubkey) {
if (pubkey.length !== 33) {
throw new Error(`Invalid Secp256k1 pubkey length (compressed): ${pubkey.length}`);
}
return (0, hash_1.ripemd160)((0, hash_1.sha256)(pubkey));
}
function pubkeyToAddress(curve, prefix, pubkey) {
const digest = curve === 'secp256k1'
? rawSecp256k1PubkeyToRawAddress(pubkey)
: rawEd25519PubkeyToRawAddress(pubkey);
return bech32_1.Bech32.encode(prefix, digest);
}
exports.pubkeyToAddress = pubkeyToAddress;
function isValidAddress(input, requiredPrefix) {
try {
const { prefix, data } = bech32_1.Bech32.decode(input);
if (prefix !== requiredPrefix) {
return false;
}
return data.length === 20;
}
catch {
return false;
}
}
exports.isValidAddress = isValidAddress;
//# sourceMappingURL=address.js.map