const Bitcoin = require('@psf/bitcoincashjs-lib') const coininfo = require('@psf/coininfo') class ECPair { static setAddress (address) { ECPair._address = address } /** * @api Ecpair.fromWIF() fromWIF() * @apiName fromWIF * @apiGroup ECPair * @apiDescription Generates an ECPair from a private key in wallet import format (WIF). Follow these steps to go from a private key to a WIF. This method only works with a compressed private key. * * @apiExample Example usage: * // mainnet WIF * let wif = 'L4vmKsStbQaCvaKPnCzdRArZgdAxTqVx8vjMGLW5nHtWdRguiRi1'; * bchjs.ECPair.fromWIF(wif); * * // testnet WIF * let wif = 'cSNLj6xeg3Yg2rfcgKoWNx4MiAgn9ugCUUro37UDEhn6CzeYqjWW' * bchjs.ECPair.fromWIF(wif) * */ static fromWIF (privateKeyWIF) { let network if (privateKeyWIF[0] === 'L' || privateKeyWIF[0] === 'K') { network = 'mainnet' } else if (privateKeyWIF[0] === 'c') network = 'testnet' let bitcoincash if (network === 'mainnet') bitcoincash = coininfo.bitcoincash.main else bitcoincash = coininfo.bitcoincash.test const bitcoincashBitcoinJSLib = bitcoincash.toBitcoinJS() return Bitcoin.ECPair.fromWIF(privateKeyWIF, bitcoincashBitcoinJSLib) } /** * @api Ecpair.toWIF() toWIF() * @apiName toWIF * @apiGroup ECPair * @apiDescription Gets a private key in wallet import format from an ECPair. * * @apiExample Example usage: * // mainnet wif * let wif = 'L4vmKsStbQaCvaKPnCzdRArZgdAxTqVx8vjMGLW5nHtWdRguiRi1'; * // ecpair from wif * let ecpair = bchjs.ECPair.fromWIF(wif); * // wif from ecpair * bchjs.ECPair.toWIF(ecpair); * // L4vmKsStbQaCvaKPnCzdRArZgdAxTqVx8vjMGLW5nHtWdRguiRi1 * * // testnet wif * let wif = 'cT3tJP7BnjFJSAHbooMXrY8E9t2AFj37amSBAYFMeHfqPqPgD4ZA'; * // ecpair from wif * let ecpair = bchjs.ECPair.fromWIF(wif); * // wif from ecpair * bchjs.ECPair.toWIF(ecpair); * // cT3tJP7BnjFJSAHbooMXrY8E9t2AFj37amSBAYFMeHfqPqPgD4ZA * */ static toWIF (ecpair) { return ecpair.toWIF() } static sign (ecpair, buffer) { return ecpair.sign(buffer) } static verify (ecpair, buffer, signature) { return ecpair.verify(buffer, signature) } /** * @api Ecpair.fromPublicKey() fromPublicKey() * @apiName fromPublicKey * @apiGroup ECPair * @apiDescription Generates an ECPair from a public key buffer. * * @apiExample Example usage: * // create ECPair from mainnet pubkeyBuffer * let pubkeyBuffer = Buffer.from("02fb721b92025e775b1b84774e65d568d24645cb633275f5c26f5c3101b214a8fb", 'hex'); * bchjs.ECPair.fromPublicKey(pubkeyBuffer); * * // create ECPair from testnet pubkeyBuffer * let pubkeyBuffer = Buffer.from("024a6d0737a23c472d078d78c1cbc3c2bbf8767b48e72684ff03a911b463da7fa6", 'hex'); * bchjs.ECPair.fromPublicKey(pubkeyBuffer); * */ static fromPublicKey (pubkeyBuffer) { return Bitcoin.ECPair.fromPublicKeyBuffer(pubkeyBuffer) } /** * @api Ecpair.toPublicKey() toPublicKey() * @apiName toPublicKey * @apiGroup ECPair * @apiDescription Get the public key of an ECPair as a buffer. * * @apiExample Example usage: * // create ecpair from mainnet public key buffer * let ecpair = bchjs.ECPair.fromPublicKey(Buffer.from('02d305772e0873fba6c1c7ff353ce374233316eb5820acd7ff3d7d9b82d514126b', 'hex')); * // create public key buffer * bchjs.ECPair.toPublicKey(ecpair); * // * * // create ecpair from testnet public key buffer * let ecpair = bchjs.ECPair.fromPublicKey(Buffer.from('024a6d0737a23c472d078d78c1cbc3c2bbf8767b48e72684ff03a911b463da7fa6', 'hex')); * // create public key buffer * bchjs.ECPair.toPublicKey(ecpair); * // * */ static toPublicKey (ecpair) { return ecpair.getPublicKeyBuffer() } /** * @api Ecpair.toLegacyAddress() toLegacyAddress() * @apiName toLegacyAddress * @apiGroup ECPair * @apiDescription Get legacy address of ECPair. * * @apiExample Example usage: * // mainnet wif * let wif = 'L5GPEGxCmojgzFoBLUUqT2GegLGqobiYhTZzfLtpkLTfTb9E9NRn'; * // ecpair from wif * let ecpair = bchjs.ECPair.fromWIF(wif); * // to legacy address * bchjs.ECPair.toLegacyAddress(ecpair); * // 1DgxdA5bbMcCNWg3yB2MgKqFazV92BXgxK * * // testnet wif * let wif = 'cSNLj6xeg3Yg2rfcgKoWNx4MiAgn9ugCUUro37UDEhn6CzeYqjWW'; * // ecpair from wif * let ecpair = bchjs.ECPair.fromWIF(wif); * // to legacy address * bchjs.ECPair.toLegacyAddress(ecpair); * // mg4PygFcXoyNJGJkM2Dcpe25av9wXzz1My * */ static toLegacyAddress (ecpair) { return ecpair.getAddress() } /** * @api Ecpair.toCashAddress() toCashAddress() * @apiName toCashAddress * @apiGroup ECPair * @apiDescription Get cash address of ECPair. * * @apiExample Example usage: * // mainnet wif * let wif = 'L5GPEGxCmojgzFoBLUUqT2GegLGqobiYhTZzfLtpkLTfTb9E9NRn'; * // ecpair from wif * let ecpair = bchjs.ECPair.fromWIF(wif); * // to legacy address * bchjs.ECPair.toCashAddress(ecpair); * // bitcoincash:qz9nq206kteyv2t7trhdr4vzzkej60kqtytn7sxkxm * * // testnet wif * let wif = 'cSNLj6xeg3Yg2rfcgKoWNx4MiAgn9ugCUUro37UDEhn6CzeYqjWW'; * // ecpair from wif * let ecpair = bchjs.ECPair.fromWIF(wif); * // to legacy address * bchjs.ECPair.toCashAddress(ecpair); * // bchtest:qqzly4vrcxcjw62u4yq4nv86ltk2mc9v0yvq8mvj6m * */ static toCashAddress (ecpair, regtest = false) { return ECPair._address.toCashAddress(ecpair.getAddress(), true, regtest) } } module.exports = ECPair