UNPKG

@tatumio/tatum-v1

Version:

Tatum API client allows browsers and Node.js clients to interact with Tatum API.

63 lines 5.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const { bech32, derivePrivate, derivePublic, getPubKeyBlake2b224Hash, mnemonicToRootKeypair, packBaseAddress, // tslint:disable-next-line:no-var-requires } = require('cardano-crypto.js'); const constants_1 = require("../constants"); /** * Generate an Ada key for the standard derivation path * @param mnemonic mnemonic seed to use * @returns the key buffer */ const generateKey = async (mnemonic) => { const walletSecret = await mnemonicToRootKeypair(mnemonic, constants_1.ADA_DERIVATION_SCHEME); return constants_1.ADA_DERIVATION_PATH .split('/') .slice(1) .map(index => index.slice(-1) === '\'' ? constants_1.HARDENED_THRESHOLD + parseInt(index.slice(0, -1)) : parseInt(index)) .reduce((secret, index) => derivePrivate(secret, index, constants_1.ADA_DERIVATION_SCHEME), walletSecret); }; /** * Generate an Ada private key for the standard derivation path * @param mnemonic mnemonic seed to use * @param i derivation index of private key to generate * @returns the (extended) private key string */ const generatePrivateKey = async (mnemonic, i) => { // /0/i return derivePrivate(derivePrivate(await generateKey(mnemonic), 0, constants_1.ADA_DERIVATION_SCHEME), i, constants_1.ADA_DERIVATION_SCHEME).toString('hex'); }; /** * Generate an Ada public key for the standard derivation path * @param mnemonic mnemonic seed to use * @returns the extended public key string (spend + stake) */ const generateXPublicKey = async (mnemonic) => { const root = await generateKey(mnemonic); // /0 const spendXPub = derivePrivate(root, 0, constants_1.ADA_DERIVATION_SCHEME).slice(64, 128).toString('hex'); // /2/0 const stakeXPub = derivePrivate(derivePrivate(root, 2, constants_1.ADA_DERIVATION_SCHEME), 0, constants_1.ADA_DERIVATION_SCHEME).slice(64, 128).toString('hex'); return spendXPub + stakeXPub; }; function xpub2blake2b224Hash(xpub) { return getPubKeyBlake2b224Hash(Buffer.from(xpub, 'hex').slice(0, 32)); } /** * Generate Carnado address * @param testnet extended public key to generate address from * @param xpub extended public key to generate address from * @param i derivation index of address to generate. Up to 2^31 addresses can be generated. * @returns blockchain address */ const generateAddress = async (testnet, xpub, i) => { const spendXPub = derivePublic(Buffer.from(xpub.substr(0, 128), 'hex'), i, constants_1.ADA_DERIVATION_SCHEME); const stakeXPub = xpub.substr(128, 128); return bech32.encode(testnet ? 'addr_test' : 'addr', packBaseAddress(xpub2blake2b224Hash(spendXPub), xpub2blake2b224Hash(stakeXPub), testnet ? 0 : 1)); }; exports.default = { generatePrivateKey, generateXPublicKey, generateAddress }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZGFuby5jcnlwdG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvd2FsbGV0L2NhcmRhbm8uY3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxFQUNKLE1BQU0sRUFDTixhQUFhLEVBQ2IsWUFBWSxFQUNaLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsZUFBZTtBQUNqQiwyQ0FBMkM7RUFDMUMsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtBQUVoQyw0Q0FBNEY7QUFFNUY7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFtQixFQUFFO0lBQzlELE1BQU0sWUFBWSxHQUFHLE1BQU0scUJBQXFCLENBQUMsUUFBUSxFQUFFLGlDQUFxQixDQUFDLENBQUE7SUFDakYsT0FBTywrQkFBbUI7U0FDdkIsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUNWLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDUixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyw4QkFBa0IsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUcsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUNBQXFCLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQTtBQUNqRyxDQUFDLENBQUE7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLFFBQWdCLEVBQUUsQ0FBUyxFQUFtQixFQUFFO0lBQ2hGLE9BQU87SUFDUCxPQUFPLGFBQWEsQ0FDbEIsYUFBYSxDQUFDLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxpQ0FBcUIsQ0FBQyxFQUNwRSxDQUFDLEVBQ0QsaUNBQXFCLENBQ3RCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLGtCQUFrQixHQUFHLEtBQUssRUFBRSxRQUFnQixFQUFtQixFQUFFO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3hDLEtBQUs7SUFDTCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxpQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzlGLE9BQU87SUFDUCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQzdCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGlDQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLGlDQUFxQixDQUN4RSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLE9BQU8sU0FBUyxHQUFHLFNBQVMsQ0FBQTtBQUM5QixDQUFDLENBQUE7QUFFRCxTQUFTLG1CQUFtQixDQUFDLElBQVk7SUFDdkMsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDdkUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxPQUFnQixFQUFFLElBQVksRUFBRSxDQUFTLEVBQW1CLEVBQUU7SUFDM0YsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGlDQUFxQixDQUFDLENBQUE7SUFDakcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDdkMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUM5QixlQUFlLENBQ2IsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQzlCLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxFQUM5QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNoQixDQUNGLENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRCxrQkFBZTtJQUNiLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsZUFBZTtDQUNoQixDQUFBIn0=