|
|
@ -1,4 +1,5 @@ |
|
|
|
const sha256 = require('js-sha256'); |
|
|
|
const buggySha256 = require('sha256'); |
|
|
|
const bip39 = require('bip39'); |
|
|
|
const crypto = require('crypto'); |
|
|
|
const bigi = require('bigi'); |
|
|
@ -8,8 +9,10 @@ const bs58check = require('bs58check'); |
|
|
|
|
|
|
|
module.exports = (shepherd) => { |
|
|
|
shepherd.wifToWif = (wif, network) => { |
|
|
|
const key = shepherd.isZcash(network) ? new bitcoinZcash.ECPair(d, null, { network: shepherd.getNetworkData(network) }) : new bitcoinZcash.ECPair(d, null, { network: shepherd.getNetworkData(network) }); |
|
|
|
|
|
|
|
network = network === 'KMD' ? 'komodo' : network.toLowerCase(); |
|
|
|
console.log(shepherd.getNetworkData(network)); |
|
|
|
const key = shepherd.isZcash(network) ? new bitcoinZcash.ECPair.fromWIF(wif, shepherd.getNetworkData(network), true) : new bitcoin.ECPair.fromWIF(wif, shepherd.getNetworkData(network), true); |
|
|
|
|
|
|
|
return { |
|
|
|
pub: key.getAddress(), |
|
|
|
priv: key.toWIF(), |
|
|
@ -20,7 +23,7 @@ module.exports = (shepherd) => { |
|
|
|
let bytes; |
|
|
|
|
|
|
|
if (process.argv.indexOf('spvold=true') > -1) { |
|
|
|
bytes = shepherd.sha256(seed, { asBytes: true }); |
|
|
|
bytes = buggySha256(seed, { asBytes: true }); |
|
|
|
} else { |
|
|
|
const hash = sha256.create().update(seed); |
|
|
|
bytes = hash.array(); |
|
|
@ -33,7 +36,7 @@ module.exports = (shepherd) => { |
|
|
|
} |
|
|
|
|
|
|
|
const d = bigi.fromBuffer(bytes); |
|
|
|
const keyPair = shepherd.isZcash(network) ? new bitcoinZcash.ECPair(d, null, { network: shepherd.getNetworkData(network) }) : new bitcoinZcash.ECPair(d, null, { network: shepherd.getNetworkData(network) }); |
|
|
|
const keyPair = shepherd.isZcash(network) ? new bitcoinZcash.ECPair(d, null, { network: shepherd.getNetworkData(network) }) : new bitcoin.ECPair(d, null, { network: shepherd.getNetworkData(network) }); |
|
|
|
const keys = { |
|
|
|
pub: keyPair.getAddress(), |
|
|
|
priv: keyPair.toWIF(), |
|
|
@ -48,7 +51,7 @@ module.exports = (shepherd) => { |
|
|
|
} |
|
|
|
|
|
|
|
shepherd.get('/electrum/wiftopub', (req, res, next) => { |
|
|
|
let key = shepherd.isZcash(req.query.coin.toLowerCase()) ? bitcoinZcash.ECPair.fromWIF(req.query.wif, shepherd.electrumJSNetworks[req.query.coin], true) : shepherd.bitcoinJS.ECPair.fromWIF(req.query.wif, shepherd.electrumJSNetworks[req.query.coin], true); |
|
|
|
let key = shepherd.isZcash(req.query.coin.toLowerCase()) ? bitcoinZcash.ECPair.fromWIF(req.query.wif, shepherd.electrumJSNetworks[req.query.coin], true) : bitcoin.ECPair.fromWIF(req.query.wif, shepherd.electrumJSNetworks[req.query.coin], true); |
|
|
|
keys = { |
|
|
|
priv: key.toWIF(), |
|
|
|
pub: key.getAddress(), |
|
|
@ -97,7 +100,7 @@ module.exports = (shepherd) => { |
|
|
|
|
|
|
|
if (isWif) { |
|
|
|
try { |
|
|
|
let key = shepherd.isZcash(_abbr.toLowerCase()) ? bitcoinZcash.ECPair.fromWIF(_seed, shepherd.getNetworkData(_abbr.toLowerCase()), true) : shepherd.bitcoinJS.ECPair.fromWIF(_seed, shepherd.getNetworkData(_abbr.toLowerCase()), true); |
|
|
|
let key = shepherd.isZcash(_abbr.toLowerCase()) ? bitcoinZcash.ECPair.fromWIF(_seed, shepherd.getNetworkData(_abbr.toLowerCase()), true) : bitcoin.ECPair.fromWIF(_seed, shepherd.getNetworkData(_abbr.toLowerCase()), true); |
|
|
|
priv = key.toWIF(); |
|
|
|
pub = key.getAddress(); |
|
|
|
} catch (e) { |
|
|
@ -151,7 +154,7 @@ module.exports = (shepherd) => { |
|
|
|
|
|
|
|
shepherd.post('/electrum/seed/bip39/match', (req, res, next) => { |
|
|
|
const seed = bip39.mnemonicToSeed(req.body.seed); |
|
|
|
const hdMaster = shepherd.bitcoinJS.HDNode.fromSeedBuffer(seed, shepherd.electrumJSNetworks.komodo); // seed from above
|
|
|
|
const hdMaster = bitcoin.HDNode.fromSeedBuffer(seed, shepherd.electrumJSNetworks.komodo); // seed from above
|
|
|
|
const matchPattern = req.body.match; |
|
|
|
const _defaultAddressDepth = req.body.addressdepth; |
|
|
|
const _defaultAccountCount = req.body.accounts; |
|
|
@ -169,10 +172,6 @@ module.exports = (shepherd) => { |
|
|
|
priv: _key.keyPair.toWIF(), |
|
|
|
}; |
|
|
|
} |
|
|
|
/*_addresses.push({ |
|
|
|
pub: _key.keyPair.getAddress(), |
|
|
|
priv: _key.keyPair.toWIF(), |
|
|
|
});*/ |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -185,49 +184,5 @@ module.exports = (shepherd) => { |
|
|
|
res.end(JSON.stringify(successObj)); |
|
|
|
}); |
|
|
|
|
|
|
|
// spv v2
|
|
|
|
/*shepherd.get('/electrum/bip39/seed', (req, res, next) => { |
|
|
|
const _seed = ''; |
|
|
|
// TODO
|
|
|
|
const bip39 = require('bip39'); // npm i -S bip39
|
|
|
|
const crypto = require('crypto'); |
|
|
|
|
|
|
|
// what you describe as 'seed'
|
|
|
|
const randomBytes = crypto.randomBytes(16); // 128 bits is enough
|
|
|
|
|
|
|
|
// your 12 word phrase
|
|
|
|
const mnemonic = bip39.entropyToMnemonic(randomBytes.toString('hex')); |
|
|
|
|
|
|
|
// what is accurately described as the wallet seed
|
|
|
|
// var seed = bip39.mnemonicToSeed(mnemonic) // you'll use this in #3 below
|
|
|
|
const seed = bip39.mnemonicToSeed(_seed); |
|
|
|
|
|
|
|
console.log(seed); |
|
|
|
|
|
|
|
const successObj = { |
|
|
|
msg: 'success', |
|
|
|
result: { |
|
|
|
servers: shepherd.electrumServers, |
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
|
res.end(JSON.stringify(successObj)); |
|
|
|
|
|
|
|
console.log(shepherd.bitcoinJS.networks.komodo); |
|
|
|
const hdMaster = shepherd.bitcoinJS.HDNode.fromSeedBuffer(seed, shepherd.electrumJSNetworks.komodo); // seed from above
|
|
|
|
|
|
|
|
const key1 = hdMaster.derivePath("m/44'/141'/0'/0/0"); |
|
|
|
const key2 = hdMaster.derivePath('m/1'); |
|
|
|
console.log(hdMaster); |
|
|
|
|
|
|
|
console.log(key1.keyPair.toWIF()); |
|
|
|
console.log(key1.keyPair.getAddress()); |
|
|
|
console.log(key2.keyPair.toWIF()); |
|
|
|
|
|
|
|
const hdnode = shepherd.bitcoinJS.HDNode.fromSeedBuffer(seed, shepherd.electrumJSNetworks.komodo).deriveHardened(0).derive(0).derive(1); |
|
|
|
console.log(`address: ${hdnode.getAddress()}`); |
|
|
|
console.log(`priv (WIF): ${hdnode.keyPair.toWIF()}`); |
|
|
|
});*/ |
|
|
|
|
|
|
|
return shepherd; |
|
|
|
}; |