1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Merge branch 'master' into open-popup

This commit is contained in:
Frankie 2018-01-15 15:25:14 -08:00 committed by GitHub
commit f18ed8bfd4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 90 additions and 26 deletions

View File

@ -3,6 +3,8 @@
## Current Master ## Current Master
- Open metamask popup for transaction confirmation before gas estimation finishes and add a loading screen over transaction confirmation. - Open metamask popup for transaction confirmation before gas estimation finishes and add a loading screen over transaction confirmation.
- Fix bug that prevented eth_signTypedData from signing bytes.
- Further improve gas price estimation.
## 3.13.4 2018-1-9 ## 3.13.4 2018-1-9

View File

@ -4,7 +4,7 @@
## Support ## Support
If you're a user seeking support, [here is our support site](http://metamask.consensyssupport.happyfox.com). If you're a user seeking support, [here is our support site](https://metamask.helpscoutdocs.com/).
## Developing Compatible Dapps ## Developing Compatible Dapps

View File

@ -1,6 +1,7 @@
const assert = require('assert') const assert = require('assert')
const EventEmitter = require('events') const EventEmitter = require('events')
const createMetamaskProvider = require('web3-provider-engine/zero.js') const createMetamaskProvider = require('web3-provider-engine/zero.js')
const SubproviderFromProvider = require('web3-provider-engine/subproviders/web3.js')
const createInfuraProvider = require('eth-json-rpc-infura/src/createProvider') const createInfuraProvider = require('eth-json-rpc-infura/src/createProvider')
const ObservableStore = require('obs-store') const ObservableStore = require('obs-store')
const ComposedStore = require('obs-store/lib/composed') const ComposedStore = require('obs-store/lib/composed')
@ -133,15 +134,17 @@ module.exports = class NetworkController extends EventEmitter {
_configureInfuraProvider (opts) { _configureInfuraProvider (opts) {
log.info('_configureInfuraProvider', opts) log.info('_configureInfuraProvider', opts)
const blockTrackerProvider = createInfuraProvider({ const infuraProvider = createInfuraProvider({
network: opts.type, network: opts.type,
}) })
const infuraSubprovider = new SubproviderFromProvider(infuraProvider)
const providerParams = extend(this._baseProviderParams, { const providerParams = extend(this._baseProviderParams, {
rpcUrl: opts.rpcUrl, rpcUrl: opts.rpcUrl,
engineParams: { engineParams: {
pollingInterval: 8000, pollingInterval: 8000,
blockTrackerProvider, blockTrackerProvider: infuraProvider,
}, },
dataSubprovider: infuraSubprovider,
}) })
const provider = createMetamaskProvider(providerParams) const provider = createMetamaskProvider(providerParams)
this._setProvider(provider) this._setProvider(provider)

View File

@ -1,11 +1,14 @@
const ObservableStore = require('obs-store') const ObservableStore = require('obs-store')
const extend = require('xtend') const extend = require('xtend')
const BN = require('ethereumjs-util').BN
const EthQuery = require('eth-query')
class RecentBlocksController { class RecentBlocksController {
constructor (opts = {}) { constructor (opts = {}) {
const { blockTracker } = opts const { blockTracker, provider } = opts
this.blockTracker = blockTracker this.blockTracker = blockTracker
this.ethQuery = new EthQuery(provider)
this.historyLength = opts.historyLength || 40 this.historyLength = opts.historyLength || 40
const initState = extend({ const initState = extend({
@ -14,6 +17,7 @@ class RecentBlocksController {
this.store = new ObservableStore(initState) this.store = new ObservableStore(initState)
this.blockTracker.on('block', this.processBlock.bind(this)) this.blockTracker.on('block', this.processBlock.bind(this))
this.backfill()
} }
resetState () { resetState () {
@ -23,12 +27,7 @@ class RecentBlocksController {
} }
processBlock (newBlock) { processBlock (newBlock) {
const block = extend(newBlock, { const block = this.mapTransactionsToPrices(newBlock)
gasPrices: newBlock.transactions.map((tx) => {
return tx.gasPrice
}),
})
delete block.transactions
const state = this.store.getState() const state = this.store.getState()
state.recentBlocks.push(block) state.recentBlocks.push(block)
@ -39,6 +38,73 @@ class RecentBlocksController {
this.store.updateState(state) this.store.updateState(state)
} }
backfillBlock (newBlock) {
const block = this.mapTransactionsToPrices(newBlock)
const state = this.store.getState()
if (state.recentBlocks.length < this.historyLength) {
state.recentBlocks.unshift(block)
}
this.store.updateState(state)
}
mapTransactionsToPrices (newBlock) {
const block = extend(newBlock, {
gasPrices: newBlock.transactions.map((tx) => {
return tx.gasPrice
}),
})
delete block.transactions
return block
}
async backfill() {
this.blockTracker.once('block', async (block) => {
let blockNum = block.number
let recentBlocks
let state = this.store.getState()
recentBlocks = state.recentBlocks
while (recentBlocks.length < this.historyLength) {
try {
let blockNumBn = new BN(blockNum.substr(2), 16)
const newNum = blockNumBn.subn(1).toString(10)
const newBlock = await this.getBlockByNumber(newNum)
if (newBlock) {
this.backfillBlock(newBlock)
blockNum = newBlock.number
}
state = this.store.getState()
recentBlocks = state.recentBlocks
} catch (e) {
log.error(e)
}
await this.wait()
}
})
}
async wait () {
return new Promise((resolve) => {
setTimeout(resolve, 100)
})
}
async getBlockByNumber (number) {
const bn = new BN(number)
return new Promise((resolve, reject) => {
this.ethQuery.getBlockByNumber('0x' + bn.toString(16), true, (err, block) => {
if (err) reject(err)
resolve(block)
})
})
}
} }
module.exports = RecentBlocksController module.exports = RecentBlocksController

View File

@ -5,7 +5,6 @@ const Dnode = require('dnode')
const ObservableStore = require('obs-store') const ObservableStore = require('obs-store')
const asStream = require('obs-store/lib/asStream') const asStream = require('obs-store/lib/asStream')
const AccountTracker = require('./lib/account-tracker') const AccountTracker = require('./lib/account-tracker')
const EthQuery = require('eth-query')
const RpcEngine = require('json-rpc-engine') const RpcEngine = require('json-rpc-engine')
const debounce = require('debounce') const debounce = require('debounce')
const createEngineStream = require('json-rpc-middleware-stream/engineStream') const createEngineStream = require('json-rpc-middleware-stream/engineStream')
@ -96,10 +95,9 @@ module.exports = class MetamaskController extends EventEmitter {
this.recentBlocksController = new RecentBlocksController({ this.recentBlocksController = new RecentBlocksController({
blockTracker: this.blockTracker, blockTracker: this.blockTracker,
provider: this.provider,
}) })
// eth data query tools
this.ethQuery = new EthQuery(this.provider)
// account tracker watches balances, nonces, and any code at their address. // account tracker watches balances, nonces, and any code at their address.
this.accountTracker = new AccountTracker({ this.accountTracker = new AccountTracker({
provider: this.provider, provider: this.provider,
@ -140,7 +138,6 @@ module.exports = class MetamaskController extends EventEmitter {
signTransaction: this.keyringController.signTransaction.bind(this.keyringController), signTransaction: this.keyringController.signTransaction.bind(this.keyringController),
provider: this.provider, provider: this.provider,
blockTracker: this.blockTracker, blockTracker: this.blockTracker,
ethQuery: this.ethQuery,
getGasPrice: this.getGasPrice.bind(this), getGasPrice: this.getGasPrice.bind(this),
}) })
this.txController.on('newUnapprovedTx', opts.showUnapprovedTx.bind(opts)) this.txController.on('newUnapprovedTx', opts.showUnapprovedTx.bind(opts))

View File

@ -4,5 +4,3 @@ When you log in to MetaMask, your current account is visible to every new site y
For your privacy, for now, please sign out of MetaMask when you're done using a site. For your privacy, for now, please sign out of MetaMask when you're done using a site.
Also, by default, you will be signed in to a test network. To use real Ether, you must connect to the main network manually in the top left network menu.

File diff suppressed because one or more lines are too long

View File

@ -72,14 +72,12 @@
"eth-bin-to-ops": "^1.0.1", "eth-bin-to-ops": "^1.0.1",
"eth-block-tracker": "^2.2.0", "eth-block-tracker": "^2.2.0",
"eth-contract-metadata": "^1.1.4", "eth-contract-metadata": "^1.1.4",
"eth-hd-keyring": "^1.2.1",
"eth-json-rpc-filters": "^1.2.5", "eth-json-rpc-filters": "^1.2.5",
"eth-json-rpc-infura": "^1.0.2", "eth-json-rpc-infura": "^2.0.5",
"eth-keyring-controller": "^2.1.2", "eth-keyring-controller": "^2.1.4",
"eth-phishing-detect": "^1.1.4", "eth-phishing-detect": "^1.1.4",
"eth-query": "^2.1.2", "eth-query": "^2.1.2",
"eth-sig-util": "^1.4.0", "eth-sig-util": "^1.4.2",
"eth-simple-keyring": "^1.2.0",
"eth-token-tracker": "^1.1.4", "eth-token-tracker": "^1.1.4",
"ethereumjs-tx": "^1.3.0", "ethereumjs-tx": "^1.3.0",
"ethereumjs-util": "github:ethereumjs/ethereumjs-util#ac5d0908536b447083ea422b435da27f26615de9", "ethereumjs-util": "github:ethereumjs/ethereumjs-util#ac5d0908536b447083ea422b435da27f26615de9",
@ -152,7 +150,7 @@
"valid-url": "^1.0.9", "valid-url": "^1.0.9",
"vreme": "^3.0.2", "vreme": "^3.0.2",
"web3": "^0.20.1", "web3": "^0.20.1",
"web3-provider-engine": "^13.4.0", "web3-provider-engine": "^13.5.0",
"web3-stream-provider": "^3.0.1", "web3-stream-provider": "^3.0.1",
"xtend": "^4.0.1" "xtend": "^4.0.1"
}, },

View File

@ -103,9 +103,9 @@ InfoScreen.prototype.render = function () {
[ [
h('div.fa.fa-support', [ h('div.fa.fa-support', [
h('a.info', { h('a.info', {
href: 'https://support.metamask.io', href: 'https://metamask.helpscoutdocs.com/',
target: '_blank', target: '_blank',
}, 'Visit our Support Center'), }, 'Visit our Knowledge Base'),
]), ]),
h('div', [ h('div', [
@ -138,7 +138,7 @@ InfoScreen.prototype.render = function () {
h('div.fa.fa-envelope', [ h('div.fa.fa-envelope', [
h('a.info', { h('a.info', {
target: '_blank', target: '_blank',
href: 'mailto:help@metamask.io?subject=Feedback', href: 'mailto:support@metamask.io?subject=MetaMask Support',
}, 'Email us!'), }, 'Email us!'),
]), ]),
]), ]),