@flarenetwork/flare-stake-tool
Version:
Utilities for staking on the Flare network
170 lines • 6.69 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.compressedPublicKey = compressedPublicKey;
exports.uncompressedPublicKey = uncompressedPublicKey;
exports.normalizePublicKey = normalizePublicKey;
exports.equalPublicKey = equalPublicKey;
exports.isPublicKey = isPublicKey;
exports.publicKeyToCAddress = publicKeyToCAddress;
exports.isCAddress = isCAddress;
exports.equalCAddress = equalCAddress;
exports.normalizeCAddress = normalizeCAddress;
exports.publicKeyToPAddress = publicKeyToPAddress;
exports.isPAddress = isPAddress;
exports.equalPAddress = equalPAddress;
exports.pAddressToHex = pAddressToHex;
exports.pAddressToBytes20 = pAddressToBytes20;
exports.pAddressToBech = pAddressToBech;
exports.normalizePAddress = normalizePAddress;
exports.recoverPublicKeyFromMsg = recoverPublicKeyFromMsg;
exports.recoverPublicKeyFromEthMsg = recoverPublicKeyFromEthMsg;
exports.getHashedEthMsg = getHashedEthMsg;
exports.compressPublicKey = compressPublicKey;
const settings = __importStar(require("../settings"));
const utils = __importStar(require("../utils"));
const bech32_1 = require("bech32");
const elliptic_1 = require("elliptic");
const ethutil = __importStar(require("ethereumjs-util"));
const secp256k1 = new elliptic_1.ec('secp256k1');
function compressedPublicKey(publicKey) {
return _getKeyPair(publicKey).getPublic(true, 'hex');
}
function uncompressedPublicKey(publicKey, prefix) {
return _getKeyPair(publicKey)
.getPublic(false, 'hex')
.slice(prefix ? 0 : 2);
}
function normalizePublicKey(publicKey) {
return uncompressedPublicKey(publicKey, false);
}
function equalPublicKey(value1, value2) {
try {
return normalizePublicKey(value1) === normalizePublicKey(value2);
}
catch {
return false;
}
}
function isPublicKey(value) {
try {
_getKeyPair(value);
return true;
}
catch {
return false;
}
}
function publicKeyToCAddress(publicKey) {
let uncompressed = utils.toBuffer(uncompressedPublicKey(publicKey, false));
return normalizeCAddress(utils.toHex(ethutil.publicToAddress(uncompressed)));
}
function isCAddress(value) {
return ethutil.isValidAddress(value);
}
function equalCAddress(value1, value2) {
return utils.isEqualHex(value1, value2) && isCAddress(value1);
}
function normalizeCAddress(cAddress) {
return ethutil.toChecksumAddress(cAddress);
}
function publicKeyToPAddress(network, publicKey) {
let compressed = utils.toBuffer(compressedPublicKey(publicKey));
let address = ethutil.ripemd160(ethutil.sha256(compressed), false);
let hrp = settings.HRP[network];
return normalizePAddress(network, bech32_1.bech32.encode(hrp, bech32_1.bech32.toWords(address)));
}
function isPAddress(network, value) {
return (value.startsWith('P-') ? value.slice(2) : value).startsWith(settings.HRP[network]);
}
function equalPAddress(network, value1, value2) {
let value1Hex = utils.isHex(value1) ? value1 : pAddressToHex(value1.startsWith('P-') ? value1.slice(2) : value1);
let value2Hex = utils.isHex(value2) ? value2 : pAddressToHex(value2.startsWith('P-') ? value2.slice(2) : value2);
return (utils.isEqualHex(value1Hex, value2Hex) &&
isPAddress(network, pAddressToBech(network, value1Hex)));
}
function pAddressToHex(pAddressBech) {
return utils.toHex(bech32_1.bech32.fromWords(bech32_1.bech32.decode(pAddressBech).words));
}
function pAddressToBytes20(pAddress) {
return Buffer.from(bech32_1.bech32.fromWords(bech32_1.bech32.decode(pAddress).words)).toString('hex');
}
function pAddressToBech(network, pAddressHex) {
let hrp = settings.HRP[network];
return bech32_1.bech32.encode(hrp, bech32_1.bech32.toWords(utils.toBuffer(pAddressHex)));
}
function normalizePAddress(network, pAddress) {
if (pAddress.startsWith('P-') || pAddress.startsWith('C-')) {
pAddress = pAddress.slice(2);
}
if (utils.isHex(pAddress)) {
pAddress = pAddressToBech(network, pAddress);
}
return pAddress;
}
function recoverPublicKeyFromMsg(message, signature) {
let msg = utils.toBuffer(message);
let sig = ethutil.fromRpcSig(utils.toHex(signature));
return normalizePublicKey(utils.toHex(ethutil.ecrecover(msg, sig.v, sig.r, sig.s)));
}
function recoverPublicKeyFromEthMsg(message, signature) {
let hashedMsg = getHashedEthMsg(message);
return recoverPublicKeyFromMsg(hashedMsg, signature);
}
function getHashedEthMsg(message) {
return utils.toHex(ethutil.keccakFromString(`\x19Ethereum Signed Message:\n${message.length}${message}`));
}
function _getKeyPair(publicKey) {
publicKey = utils.toHex(publicKey, false);
if (publicKey.length == 128) {
publicKey = '04' + publicKey;
}
return secp256k1.keyFromPublic(publicKey, 'hex');
}
function compressPublicKey(publicKey) {
// Check if the public key is already compressed
if (publicKey.length === 33) {
return publicKey;
}
// Get the x coordinate
const x = publicKey.slice(1, 33);
// Get the y coordinate
const y = publicKey.slice(33, 65);
// Determine the parity of the y coordinate
const prefix = y[y.length - 1] % 2 === 0 ? 0x02 : 0x03;
// Return the compressed public key
return Buffer.concat([Buffer.from([prefix]), x]);
}
//# sourceMappingURL=pubk.js.map