UNPKG

@bcpros/crypto-wallet-core

Version:

A multi-currency support library for address derivation, private key creation, and transaction creation

63 lines 3.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EthDeriver = void 0; var web3_utils_1 = __importDefault(require("web3-utils")); var BitcoreLib = require('@bcpros/bitcore-lib'); var EthDeriver = (function () { function EthDeriver() { } EthDeriver.prototype.padTo32 = function (msg) { while (msg.length < 32) { msg = Buffer.concat([new Buffer([0]), msg]); } if (msg.length !== 32) { throw new Error("invalid key length: ".concat(msg.length)); } return msg; }; EthDeriver.prototype.deriveAddress = function (network, xpubkey, addressIndex, isChange) { var xpub = new BitcoreLib.HDPublicKey(xpubkey, network); var changeNum = isChange ? 1 : 0; var path = "m/".concat(changeNum, "/").concat(addressIndex); var derived = xpub.derive(path).publicKey; return this.deriveAddressWithPath(network, xpubkey, path); }; EthDeriver.prototype.addressFromPublicKeyBuffer = function (pubKey) { var ecPoint = new BitcoreLib.PublicKey.fromBuffer(pubKey).point; var x = ecPoint.getX().toBuffer({ size: 32 }); var y = ecPoint.getY().toBuffer({ size: 32 }); var paddedBuffer = Buffer.concat([x, y]); var address = web3_utils_1.default.keccak256("0x".concat(paddedBuffer.toString('hex'))).slice(26); return web3_utils_1.default.toChecksumAddress(address); }; EthDeriver.prototype.derivePrivateKey = function (network, xPriv, addressIndex, isChange) { var changeNum = isChange ? 1 : 0; var path = "m/".concat(changeNum, "/").concat(addressIndex); return this.derivePrivateKeyWithPath(network, xPriv, path); }; EthDeriver.prototype.deriveAddressWithPath = function (network, xpubKey, path) { var xpub = new BitcoreLib.HDPublicKey(xpubKey, network); var derived = xpub.derive(path).publicKey; return this.addressFromPublicKeyBuffer(derived.toBuffer()); }; EthDeriver.prototype.derivePrivateKeyWithPath = function (network, xprivKey, path) { var xpriv = new BitcoreLib.HDPrivateKey(xprivKey, network); var derivedPrivKey = xpriv.derive(path); var privKey = derivedPrivKey.privateKey.toString('hex'); var pubKeyObj = derivedPrivKey.publicKey; var pubKey = pubKeyObj.toString('hex'); var pubKeyBuffer = pubKeyObj.toBuffer(); var address = this.addressFromPublicKeyBuffer(pubKeyBuffer); return { address: address, privKey: privKey, pubKey: pubKey, path: path }; }; EthDeriver.prototype.getAddress = function (network, pubKey) { pubKey = new BitcoreLib.PublicKey(pubKey, network); return this.addressFromPublicKeyBuffer(pubKey.toBuffer()); }; return EthDeriver; }()); exports.EthDeriver = EthDeriver; //# sourceMappingURL=index.js.map