@bcpros/crypto-wallet-core
Version:
A multi-currency support library for address derivation, private key creation, and transaction creation
63 lines • 3.03 kB
JavaScript
;
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