UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

74 lines 6.83 kB
import { Base58 } from '@vechain/ethers/utils/basex'; import * as HD from '@vechain/ethers/utils/hdnode'; import { createHash } from 'crypto'; import { ec as EC } from 'elliptic'; import { address } from './address'; import { Buffer } from 'buffer'; // see https://github.com/satoshilabs/slips/blob/master/slip-0044.md const VET_DERIVATION_PATH = `m/44'/818'/0'/0`; const xpubPrefix = Buffer.from('0488b21e000000000000000000', 'hex'); const xprivPrefix = Buffer.from('0488ade4000000000000000000', 'hex'); const curve = new EC('secp256k1'); export 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 node = HD.fromMnemonic(joinedWords).derivePath(path); return createHDNode(node); } 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.concat([xpubPrefix, chainCode, Buffer.from(compressed)]); const checksum = sha256(sha256(key)).slice(0, 4); const node = HD.fromExtendedKey(Base58.encode(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.concat([xprivPrefix, chainCode, Buffer.from([0]), priv]); const checksum = sha256(sha256(key)).slice(0, 4); const node = HD.fromExtendedKey(Base58.encode(Buffer.concat([key, checksum]))); return createHDNode(node); } HDNode.fromPrivateKey = fromPrivateKey; function createHDNode(ethersNode) { const pub = Buffer.from(curve.keyFromPublic(ethersNode.publicKey.slice(2), 'hex').getPublic(false, 'array')); const priv = ethersNode.privateKey ? Buffer.from(ethersNode.privateKey.slice(2), 'hex') : null; const cc = Buffer.from(ethersNode.chainCode.slice(2), 'hex'); const addr = 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.derivePath('' + index)); } }; } function sha256(data) { return createHash('sha256').update(data).digest(); } })(HDNode || (HDNode = {})); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGRub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hkbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDcEQsT0FBTyxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUUvQixvRUFBb0U7QUFDcEUsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQTtBQUM3QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFBO0FBQ25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDcEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUE7QUFXakMsTUFBTSxLQUFXLE1BQU0sQ0FnRXRCO0FBaEVELFdBQWlCLE1BQU07SUFDbkIsc0NBQXNDO0lBQ3RDLFNBQWdCLFlBQVksQ0FBQyxLQUFlLEVBQUUsSUFBSSxHQUFHLG1CQUFtQjtRQUNwRSwrQkFBK0I7UUFDL0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUNqRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJ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