Loëck Vézien 7 years ago
parent
commit
467e99b0ad
No known key found for this signature in database GPG Key ID: CBCDCE384E853AC4
  1. 19
      package.json
  2. 6
      src/components/modals/AddAccount.js
  3. 27
      src/internals/usb/wallet.js
  4. 148
      src/internals/usb/wallet/getAddresses.js
  5. 24
      src/internals/usb/wallet/index.js
  6. 215
      yarn.lock

19
package.json

@ -36,8 +36,11 @@
"@ledgerhq/hw-app-eth": "^1.1.2-beta.068e2a14",
"@ledgerhq/hw-transport": "^1.1.2-beta.068e2a14",
"@ledgerhq/hw-transport-node-hid": "^1.1.2-beta.068e2a14",
"axios": "^0.17.1",
"bcryptjs": "^2.4.3",
"bitcoinjs-lib": "^3.3.2",
"blockchain.info": "^2.11.0",
"bs58check": "^2.1.1",
"color": "^2.0.1",
"downshift": "^1.25.0",
"electron-store": "^1.3.0",
@ -61,17 +64,17 @@
"redux-actions": "^2.2.1",
"redux-thunk": "^2.2.0",
"shortid": "^2.2.8",
"source-map-support": "^0.5.0",
"source-map-support": "^0.5.2",
"styled-components": "^2.2.4",
"styled-system": "^1.1.1"
},
"devDependencies": {
"@storybook/addon-actions": "^3.3.9",
"@storybook/addon-knobs": "^3.3.9",
"@storybook/addon-links": "^3.3.9",
"@storybook/addon-options": "^3.3.9",
"@storybook/addons": "^3.3.9",
"@storybook/react": "^3.3.9",
"@storybook/addon-actions": "^3.3.10",
"@storybook/addon-knobs": "^3.3.10",
"@storybook/addon-links": "^3.3.10",
"@storybook/addon-options": "^3.3.10",
"@storybook/addons": "^3.3.10",
"@storybook/react": "^3.3.10",
"babel-core": "^6.26.0",
"babel-eslint": "^8.2.1",
"babel-loader": "^7.1.2",
@ -85,7 +88,7 @@
"electron-builder": "^19.54.0",
"electron-devtools-installer": "^2.2.3",
"electron-webpack": "1.11.0",
"eslint": "^4.13.1",
"eslint": "^4.16.0",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-prettier": "^2.9.0",
"eslint-import-resolver-babel-module": "^4.0.0",

6
src/components/modals/AddAccount.js

@ -127,16 +127,16 @@ class AddAccountModal extends PureComponent<Props, State> {
return
}
const { data: { data }, type } = sendSyncEvent('usb', 'wallet.infos.request', {
const { data: { data }, type } = sendSyncEvent('usb', 'wallet.request', {
path: currentDevice.path,
wallet: inputValue.wallet,
})
if (type === 'wallet.infos.fail') {
if (type === 'wallet.request.fail') {
this._timeout = setTimeout(() => this.getWalletInfos(), 1e3)
}
if (type === 'wallet.infos.success') {
if (type === 'wallet.request.success') {
this.setState({
walletAddress: data.bitcoinAddress,
step: 'confirmation',

27
src/internals/usb/wallet.js

@ -1,27 +0,0 @@
// @flow
import CommNodeHid from '@ledgerhq/hw-transport-node-hid'
import Btc from '@ledgerhq/hw-app-btc'
async function getWalletInfos(path, wallet) {
if (wallet === 'btc') {
const comm = await CommNodeHid.open(path)
const btc = new Btc(comm)
const walletInfos = await btc.getWalletPublicKey(`44'/0'/0'/0`)
return walletInfos
}
throw new Error('invalid wallet')
}
export default (sendEvent: Function) => ({
infos: {
request: async ({ path, wallet }: { path: string, wallet: string }) => {
try {
const data = await getWalletInfos(path, wallet)
sendEvent('wallet.infos.success', { path, wallet, data })
} catch (err) {
sendEvent('wallet.infos.fail', { path, wallet, err: err.stack || err })
}
},
},
})

148
src/internals/usb/wallet/getAddresses.js

@ -0,0 +1,148 @@
/* eslint-disable no-bitwise */
import axios from 'axios'
import bitcoin from 'bitcoinjs-lib'
import bs58check from 'bs58check'
import Btc from '@ledgerhq/hw-app-btc'
const networks = [
{
...bitcoin.networks.bitcoin,
family: 1,
},
{
...bitcoin.networks.testnet,
family: 1,
},
]
function getCompressPublicKey(publicKey) {
let compressedKeyIndex
if (parseInt(publicKey.substring(128, 130), 16) % 2 !== 0) {
compressedKeyIndex = '03'
} else {
compressedKeyIndex = '02'
}
const result = compressedKeyIndex + publicKey.substring(2, 66)
return result
}
function parseHexString(str) {
const result = []
while (str.length >= 2) {
result.push(parseInt(str.substring(0, 2), 16))
str = str.substring(2, str.length)
}
return result
}
function createXPUB({ depth, fingerprint, childnum, chainCode, publicKey, network }) {
return [
network.toString(16).padStart(8, 0),
depth.toString(16).padStart(2, 0),
fingerprint.toString(16).padStart(8, 0),
childnum.toString(16).padStart(8, 0),
chainCode,
publicKey,
].join('')
}
function encodeBase58Check(vchIn) {
vchIn = parseHexString(vchIn)
return bs58check.encode(new Uint8Array(vchIn))
}
function getPath({ coin, account, segwit }) {
return `${segwit ? 49 : 44}'/${coin}'${account !== undefined ? `/${account}'` : ''}`
}
function pubKeyToSegwitAddress(pubKey, scriptVersion) {
const script = [0x00, 0x14].concat(Array.from(bitcoin.crypto.hash160(pubKey)))
const hash160 = bitcoin.crypto.hash160(new Uint8Array(script))
return bitcoin.address.toBase58Check(hash160, scriptVersion)
}
function getPublicAddress(hdnode, path, script, segwit) {
hdnode = hdnode.derivePath(path)
if (!segwit) {
return hdnode.getAddress().toString()
}
return pubKeyToSegwitAddress(hdnode.getPublicKeyBuffer(), script)
}
function getTransactions(addresses) {
return axios.get(
`http://api.ledgerwallet.com/blockchain/v2/btc_testnet/addresses/${addresses.join(
',',
)}/transactions?noToken=true`,
)
}
export default async transport => {
const coin = 1
const account = 0
const segwit = true
const network = networks[coin]
const [p2pkh, p2sh, fam] = [network.pubKeyHash, network.scriptHash, network.family].map(v =>
v.toString(16).padStart(4, 0),
)
await transport.exchange(`e014000005${p2pkh}${p2sh}${fam.substr(-2)}`, [0x9000])
const btc = new Btc(transport)
const getPublicKey = path => btc.getWalletPublicKey(path)
let result = bitcoin.crypto.sha256(
await getPublicKey(getPath({ segwit, coin })).then(
({ publicKey }) => new Uint8Array(parseHexString(getCompressPublicKey(publicKey))),
),
)
result = bitcoin.crypto.ripemd160(result)
const fingerprint = ((result[0] << 24) | (result[1] << 16) | (result[2] << 8) | result[3]) >>> 0
const { publicKey, chainCode } = await getPublicKey(getPath({ segwit, coin, account }))
const compressPublicKey = getCompressPublicKey(publicKey)
const childnum = (0x80000000 | account) >>> 0
const xpub = createXPUB({
depth: 3,
fingerprint,
childnum,
chainCode,
publicKey: compressPublicKey,
network: network.bip32.public,
})
const xpub58 = encodeBase58Check(xpub)
const hdnode = bitcoin.HDNode.fromBase58(xpub58, network)
const script = segwit ? parseInt(network.scriptHash, 10) : parseInt(network.pubKeyHash, 10)
const nextPath = async i => {
if (i <= 0x7fffffff) {
for (let j = 0; j < 2; j++) {
const path = `${j}/${i}`
const address = getPublicAddress(hdnode, path, script, segwit)
console.log('address', address)
const { data: { txs } } = await getTransactions(address) // eslint-disable-line no-await-in-loop
console.log('txs', txs.length)
if (j === 1 && i < 10) {
nextPath(++i)
}
}
} else {
console.log('meeeh')
}
}
nextPath(0)
}

24
src/internals/usb/wallet/index.js

@ -0,0 +1,24 @@
// @flow
import CommNodeHid from '@ledgerhq/hw-transport-node-hid'
import getAddresses from './getAddresses'
async function getWallet(path, wallet) {
const transport = await CommNodeHid.open(path)
console.log('getWallet', path)
if (wallet === 'btc') {
await getAddresses(transport)
}
throw new Error('invalid wallet')
}
export default (sendEvent: Function) => ({
request: async ({ path, wallet }: { path: string, wallet: string }) => {
try {
const data = await getWallet(path, wallet)
sendEvent('wallet.request.success', { path, wallet, data })
} catch (err) {
sendEvent('wallet.request.fail', { path, wallet, err: err.stack || err })
}
},
})

215
yarn.lock

@ -104,9 +104,9 @@
events "^1.1.1"
invariant "^2.2.0"
"@storybook/addon-actions@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.9.tgz#2b191548928467fe1dd26dcba606feafbf182d36"
"@storybook/addon-actions@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-3.3.10.tgz#f3e4b538d8260364c55a3ba1e301a2fab9d8d3f2"
dependencies:
deep-equal "^1.0.1"
global "^4.3.2"
@ -115,9 +115,9 @@
react-inspector "^2.2.2"
uuid "^3.1.0"
"@storybook/addon-knobs@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-3.3.9.tgz#855575557868a97c00ce8de8e2e6960f1580f21c"
"@storybook/addon-knobs@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/addon-knobs/-/addon-knobs-3.3.10.tgz#25f32cd3d32a1667dc9d8ae484ddfd6223fcffef"
dependencies:
babel-runtime "^6.26.0"
deep-equal "^1.0.1"
@ -131,41 +131,41 @@
react-textarea-autosize "^5.2.1"
util-deprecate "^1.0.2"
"@storybook/addon-links@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.9.tgz#13781ac1c21ddfe347ece6ceab8518c8d1f98a0f"
"@storybook/addon-links@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-3.3.10.tgz#4e6c1a0b0bf5b18101bc5001b858b33202ae8209"
dependencies:
"@storybook/components" "^3.3.9"
"@storybook/components" "^3.3.10"
global "^4.3.2"
prop-types "^15.5.10"
"@storybook/addon-options@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.3.9.tgz#8dca85ae5c6713ca13bead0e8c39b23c7e2138c0"
"@storybook/addon-options@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/addon-options/-/addon-options-3.3.10.tgz#536796b6223616a4a8b3c2851c7efbe66036bc8a"
"@storybook/addons@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.9.tgz#356ce7f1de892d88ca4bc5f686d06e07dd8c2108"
"@storybook/addons@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-3.3.10.tgz#8753007d872013d2376ba71b14396eef3159673b"
"@storybook/channel-postmessage@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.9.tgz#a59220f9ecbdbe05deac6ac4339715aa587d41dd"
"@storybook/channel-postmessage@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-3.3.10.tgz#4f22b5a665d3c95eb61cf41bbb06872009ace7b5"
dependencies:
"@storybook/channels" "^3.3.9"
"@storybook/channels" "^3.3.10"
global "^4.3.2"
json-stringify-safe "^5.0.1"
"@storybook/channels@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.9.tgz#3116a6c5e441fd057558870b254c34fe3a9fbfb0"
"@storybook/channels@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-3.3.10.tgz#0b15d47c2ea0cb1c7b735955d74e9d3ca99cdc42"
"@storybook/client-logger@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.9.tgz#a73e382c383c1bfa6d2ff7fa5cae77cd09efa524"
"@storybook/client-logger@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-3.3.10.tgz#6f8b85c3dfad229794fee88f930df59b163ee144"
"@storybook/components@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.9.tgz#1f7ced8b10a0e405c1d3fd6fe7ef7b8957ddf89f"
"@storybook/components@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/components/-/components-3.3.10.tgz#f213a129ed49de33cdaf116da2c2b662b8eb3ea0"
dependencies:
glamor "^2.20.40"
glamorous "^4.11.2"
@ -179,9 +179,9 @@
"@storybook/react-simple-di" "^1.2.1"
babel-runtime "6.x.x"
"@storybook/node-logger@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.9.tgz#c070ef5ced91b1b1aa7bb3e402855db277ed426b"
"@storybook/node-logger@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-3.3.10.tgz#d9c09a622713ec4726cdd292e798aa98c0503c15"
dependencies:
chalk "^2.3.0"
npmlog "^4.1.2"
@ -211,17 +211,17 @@
dependencies:
babel-runtime "^6.5.0"
"@storybook/react@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.9.tgz#2bd203a5b3c5e5fad4a756ca41d78e62cd49b160"
dependencies:
"@storybook/addon-actions" "^3.3.9"
"@storybook/addon-links" "^3.3.9"
"@storybook/addons" "^3.3.9"
"@storybook/channel-postmessage" "^3.3.9"
"@storybook/client-logger" "^3.3.9"
"@storybook/node-logger" "^3.3.9"
"@storybook/ui" "^3.3.9"
"@storybook/react@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/react/-/react-3.3.10.tgz#a55f8f804f3f01d76f1b7e8675e818ee4c107324"
dependencies:
"@storybook/addon-actions" "^3.3.10"
"@storybook/addon-links" "^3.3.10"
"@storybook/addons" "^3.3.10"
"@storybook/channel-postmessage" "^3.3.10"
"@storybook/client-logger" "^3.3.10"
"@storybook/node-logger" "^3.3.10"
"@storybook/ui" "^3.3.10"
airbnb-js-shims "^1.4.0"
autoprefixer "^7.2.3"
babel-loader "^7.1.2"
@ -273,11 +273,11 @@
webpack-dev-middleware "^1.12.2"
webpack-hot-middleware "^2.21.0"
"@storybook/ui@^3.3.9":
version "3.3.9"
resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.9.tgz#abb1df557131b174bf3c0879863a309ee85de8e3"
"@storybook/ui@^3.3.10":
version "3.3.10"
resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-3.3.10.tgz#99a83b988b01cde1df61b87a58227a50ed196dd1"
dependencies:
"@storybook/components" "^3.3.9"
"@storybook/components" "^3.3.10"
"@storybook/mantra-core" "^1.7.2"
"@storybook/react-komposer" "^2.0.3"
babel-runtime "^6.26.0"
@ -682,6 +682,13 @@ aws4@^1.2.1, aws4@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
axios@^0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d"
dependencies:
follow-redirects "^1.2.5"
is-buffer "^1.1.5"
axobject-query@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
@ -1671,6 +1678,12 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
base-x@^3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.4.tgz#94c1788736da065edb1d68808869e357c977fa77"
dependencies:
safe-buffer "^5.0.1"
base64-js@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
@ -1705,10 +1718,18 @@ bcryptjs@^2.4.3:
version "2.4.3"
resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb"
bech32@^1.1.2:
version "1.1.3"
resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.3.tgz#bd47a8986bbb3eec34a56a097a84b8d3e9a2dfcd"
big.js@^3.1.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
bigi@^1.1.0, bigi@^1.4.0:
version "1.4.2"
resolved "https://registry.yarnpkg.com/bigi/-/bigi-1.4.2.tgz#9c665a95f88b8b08fc05cfd731f561859d725825"
binary-extensions@^1.0.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
@ -1724,6 +1745,36 @@ bindings@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
bip66@^1.1.0:
version "1.1.5"
resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22"
dependencies:
safe-buffer "^5.0.1"
bitcoin-ops@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/bitcoin-ops/-/bitcoin-ops-1.4.0.tgz#90d9c95c067e9a34a6ccaa3dd324ffa84e31e3d8"
bitcoinjs-lib@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-3.3.2.tgz#780c9c53ecb1222adb463b58bef26386067b609a"
dependencies:
bech32 "^1.1.2"
bigi "^1.4.0"
bip66 "^1.1.0"
bitcoin-ops "^1.3.0"
bs58check "^2.0.0"
create-hash "^1.1.0"
create-hmac "^1.1.3"
ecurve "^1.0.0"
merkle-lib "^2.0.10"
pushdata-bitcoin "^1.0.1"
randombytes "^2.0.1"
safe-buffer "^5.0.1"
typeforce "^1.11.3"
varuint-bitcoin "^1.0.4"
wif "^2.0.1"
bl@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
@ -1935,6 +1986,19 @@ browserslist@^2.1.2, browserslist@^2.11.1:
caniuse-lite "^1.0.30000792"
electron-to-chromium "^1.3.30"
bs58@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
dependencies:
base-x "^3.0.2"
bs58check@<3.0.0, bs58check@^2.0.0, bs58check@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.1.tgz#8a5d0e587af97b784bf9cbf1b29f454d82bc0222"
dependencies:
bs58 "^4.0.0"
create-hash "^1.1.0"
buffer-indexof@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
@ -2583,7 +2647,7 @@ create-hash@^1.1.0, create-hash@^1.1.2:
ripemd160 "^2.0.0"
sha.js "^2.4.0"
create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.3, create-hmac@^1.1.4:
version "1.1.6"
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
dependencies:
@ -2979,7 +3043,7 @@ doctrine@1.5.0:
esutils "^2.0.2"
isarray "^1.0.0"
doctrine@^2.0.0, doctrine@^2.0.2:
doctrine@^2.0.0, doctrine@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
dependencies:
@ -3080,6 +3144,13 @@ ecc-jsbn@~0.1.1:
dependencies:
jsbn "~0.1.0"
ecurve@^1.0.0:
version "1.0.6"
resolved "https://registry.yarnpkg.com/ecurve/-/ecurve-1.0.6.tgz#dfdabbb7149f8d8b78816be5a7d5b83fcf6de797"
dependencies:
bigi "^1.1.0"
safe-buffer "^5.0.1"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@ -3556,9 +3627,9 @@ eslint-visitor-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
eslint@^4.13.1:
version "4.15.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.15.0.tgz#89ab38c12713eec3d13afac14e4a89e75ef08145"
eslint@^4.16.0:
version "4.16.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.16.0.tgz#934ada9e98715e1d7bbfd6f6f0519ed2fab35cc1"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
@ -3566,7 +3637,7 @@ eslint@^4.13.1:
concat-stream "^1.6.0"
cross-spawn "^5.1.0"
debug "^3.1.0"
doctrine "^2.0.2"
doctrine "^2.1.0"
eslint-scope "^3.7.1"
eslint-visitor-keys "^1.0.0"
espree "^3.5.2"
@ -4024,6 +4095,12 @@ flush-write-stream@^1.0.0:
inherits "^2.0.1"
readable-stream "^2.0.4"
follow-redirects@^1.2.5:
version "1.4.0"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.0.tgz#a146a3a5d402201c7a3e6128643f0e336d212b10"
dependencies:
debug "^3.1.0"
for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@ -5772,6 +5849,10 @@ merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
merkle-lib@^2.0.10:
version "2.0.10"
resolved "https://registry.yarnpkg.com/merkle-lib/-/merkle-lib-2.0.10.tgz#82b8dbae75e27a7785388b73f9d7725d0f6f3326"
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
@ -7064,6 +7145,12 @@ punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
pushdata-bitcoin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz#15931d3cd967ade52206f523aa7331aef7d43af7"
dependencies:
bitcoin-ops "^1.3.0"
q@^1.1.2, q@^1.4.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
@ -8188,6 +8275,12 @@ source-map-support@^0.5.0, source-map-support@^0.5.1:
dependencies:
source-map "^0.6.0"
source-map-support@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.2.tgz#1a6297fd5b2e762b39688c7fc91233b60984f0a5"
dependencies:
source-map "^0.6.0"
source-map-url@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
@ -8775,6 +8868,10 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
typeforce@^1.11.3:
version "1.12.0"
resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.12.0.tgz#ca40899919f1466d7819e37be039406beb912a2e"
ua-parser-js@^0.7.9:
version "0.7.17"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
@ -9028,6 +9125,12 @@ value-equal@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7"
varuint-bitcoin@^1.0.4:
version "1.1.0"
resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.0.tgz#7a343f50537607af6a3059312b9782a170894540"
dependencies:
safe-buffer "^5.1.1"
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
@ -9227,6 +9330,12 @@ widest-line@^2.0.0:
dependencies:
string-width "^2.1.1"
wif@^2.0.1:
version "2.0.6"
resolved "https://registry.yarnpkg.com/wif/-/wif-2.0.6.tgz#08d3f52056c66679299726fade0d432ae74b4704"
dependencies:
bs58check "<3.0.0"
window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"

Loading…
Cancel
Save