UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

77 lines 6.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HDNode = void 0; const ethers_1 = require("ethers"); const crypto_1 = require("crypto"); const elliptic_1 = require("elliptic"); const address_1 = require("./address"); const buffer_1 = require("buffer"); // see https://github.com/satoshilabs/slips/blob/master/slip-0044.md const VET_DERIVATION_PATH = 'm/44\'/818\'/0\'/0'; const xpubPrefix = buffer_1.Buffer.from('0488b21e000000000000000000', 'hex'); const xprivPrefix = buffer_1.Buffer.from('0488ade4000000000000000000', 'hex'); const curve = new elliptic_1.ec('secp256k1'); var HDNode; (function (HDNode) { /** create node from mnemonic words */ function fromMnemonic(words, path = VET_DERIVATION_PATH) { // normalize words to lowercase const joinedWords = words.join(' ').toLowerCase(); const wallet = ethers_1.HDNodeWallet.fromPhrase(joinedWords, undefined, path); return createHDNode(wallet); } HDNode.fromMnemonic = fromMnemonic; /** * create node from xpub * @param pub public key * @param chainCode chain code */ function fromPublicKey(pub, chainCode) { const compressed = curve.keyFromPublic(pub).getPublic(true, 'array'); const key = buffer_1.Buffer.concat([xpubPrefix, chainCode, buffer_1.Buffer.from(compressed)]); const checksum = sha256(sha256(key)).slice(0, 4); const node = ethers_1.HDNodeWallet.fromExtendedKey((0, ethers_1.encodeBase58)(buffer_1.Buffer.concat([key, checksum]))); return createHDNode(node); } HDNode.fromPublicKey = fromPublicKey; /** * create node from xpriv * @param priv private key * @param chainCode chain code */ function fromPrivateKey(priv, chainCode) { const key = buffer_1.Buffer.concat([xprivPrefix, chainCode, buffer_1.Buffer.from([0]), priv]); const checksum = sha256(sha256(key)).slice(0, 4); const node = ethers_1.HDNodeWallet.fromExtendedKey((0, ethers_1.encodeBase58)(buffer_1.Buffer.concat([key, checksum]))); return createHDNode(node); } HDNode.fromPrivateKey = fromPrivateKey; function createHDNode(ethersNode) { const pub = buffer_1.Buffer.from(curve.keyFromPublic(ethersNode.publicKey.slice(2), 'hex').getPublic(false, 'array')); const rawPriv = ethersNode.privateKey; const priv = rawPriv ? buffer_1.Buffer.from(rawPriv.slice(2), 'hex') : null; const cc = buffer_1.Buffer.from(ethersNode.chainCode.slice(2), 'hex'); const addr = address_1.address.fromPublicKey(pub); return { get publicKey() { return pub; }, get privateKey() { return priv; }, get chainCode() { return cc; }, get address() { return addr; }, derive(index) { return createHDNode(ethersNode.deriveChild(index)); } }; } function sha256(data) { return (0, crypto_1.createHash)('sha256').update(data).digest(); } })(HDNode || (exports.HDNode = HDNode = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGRub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hkbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBcUU7QUFDckUsbUNBQW1DO0FBQ25DLHVDQUFtQztBQUNuQyx1Q0FBbUM7QUFDbkMsbUNBQStCO0FBRS9CLG9FQUFvRTtBQUNwRSxNQUFNLG1CQUFtQixHQUFHLG9CQUFvQixDQUFBO0FBQ2hELE1BQU0sVUFBVSxHQUFHLGVBQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDbkUsTUFBTSxXQUFXLEdBQUcsZUFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLGFBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQVdqQyxJQUFpQixNQUFNLENBaUV0QjtBQWpFRCxXQUFpQixNQUFNO0lBQ25CLHNDQUFzQztJQUN0QyxTQUFnQixZQUFZLENBQUMsS0FBZSxFQUFFLElBQUksR0FBRyxtQkFBbUI7UUFDcEUsK0JBQStCO1FBQy9CLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDakQsTUFBTSxNQUFNLEdBQUcscUJBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNwRSxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBTGUsbUJBQVksZUFLM0IsQ0FBQTtJQUVEOzs7O09BSUc7SUFDSCxTQUFnQixhQUFhLENBQUMsR0FBVyxFQUFFLFNBQWlCO1FBQ3hELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUNwRSxNQUFNLEdBQUcsR0FBRyxl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