@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
63 lines • 5.85 kB
JavaScript
;
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=