mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge branch 'develop' into eip-712
This commit is contained in:
commit
daca7f9b41
@ -5,6 +5,7 @@
|
|||||||
- [#4606](https://github.com/MetaMask/metamask-extension/pull/4606): Add new metamask_watchAsset method.
|
- [#4606](https://github.com/MetaMask/metamask-extension/pull/4606): Add new metamask_watchAsset method.
|
||||||
- [#5189](https://github.com/MetaMask/metamask-extension/pull/5189): Fix bug where Ropsten loading message is shown when connecting to Kovan.
|
- [#5189](https://github.com/MetaMask/metamask-extension/pull/5189): Fix bug where Ropsten loading message is shown when connecting to Kovan.
|
||||||
- [#4752](https://github.com/MetaMask/metamask-extension/issues/4752): Implement latest `eth_signTypedData` specification.
|
- [#4752](https://github.com/MetaMask/metamask-extension/issues/4752): Implement latest `eth_signTypedData` specification.
|
||||||
|
- [#5256](https://github.com/MetaMask/metamask-extension/pull/5256): Add mock EIP-1102 support
|
||||||
|
|
||||||
## 4.9.3 Wed Aug 15 2018
|
## 4.9.3 Wed Aug 15 2018
|
||||||
|
|
||||||
|
@ -22,6 +22,25 @@ var metamaskStream = new LocalMessageDuplexStream({
|
|||||||
// compose the inpage provider
|
// compose the inpage provider
|
||||||
var inpageProvider = new MetamaskInpageProvider(metamaskStream)
|
var inpageProvider = new MetamaskInpageProvider(metamaskStream)
|
||||||
|
|
||||||
|
// Augment the provider with its enable method
|
||||||
|
inpageProvider.enable = function (options = {}) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (options.mockRejection) {
|
||||||
|
reject('User rejected account access')
|
||||||
|
} else {
|
||||||
|
inpageProvider.sendAsync({ method: 'eth_accounts', params: [] }, (error, response) => {
|
||||||
|
if (error) {
|
||||||
|
reject(error)
|
||||||
|
} else {
|
||||||
|
resolve(response.result)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
window.ethereum = inpageProvider
|
||||||
|
|
||||||
//
|
//
|
||||||
// setup web3
|
// setup web3
|
||||||
//
|
//
|
||||||
|
@ -66,13 +66,16 @@ InputNumber.prototype.render = function () {
|
|||||||
}),
|
}),
|
||||||
h('span.gas-tooltip-input-detail', {}, [unitLabel]),
|
h('span.gas-tooltip-input-detail', {}, [unitLabel]),
|
||||||
h('div.gas-tooltip-input-arrows', {}, [
|
h('div.gas-tooltip-input-arrows', {}, [
|
||||||
h('i.fa.fa-angle-up', {
|
h('div.gas-tooltip-input-arrow-wrapper', {
|
||||||
onClick: () => this.setValue(addCurrencies(value, step, { toNumericBase: 'dec' })),
|
onClick: () => this.setValue(addCurrencies(value, step, { toNumericBase: 'dec' })),
|
||||||
}),
|
}, [
|
||||||
h('i.fa.fa-angle-down', {
|
h('i.fa.fa-angle-up'),
|
||||||
style: { cursor: 'pointer' },
|
]),
|
||||||
|
h('div.gas-tooltip-input-arrow-wrapper', {
|
||||||
onClick: () => this.setValue(subtractCurrencies(value, step, { toNumericBase: 'dec' })),
|
onClick: () => this.setValue(subtractCurrencies(value, step, { toNumericBase: 'dec' })),
|
||||||
}),
|
}, [
|
||||||
|
h('i.fa.fa-angle-down'),
|
||||||
|
]),
|
||||||
]),
|
]),
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ class JsonImportSubview extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
createNewKeychain () {
|
createNewKeychain () {
|
||||||
const { firstAddress, displayWarning, importNewJsonAccount, setSelectedAddress } = this.props
|
const { firstAddress, displayWarning, importNewJsonAccount, setSelectedAddress, history } = this.props
|
||||||
const state = this.state
|
const state = this.state
|
||||||
|
|
||||||
if (!state) {
|
if (!state) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import copyToClipboard from 'copy-to-clipboard'
|
import copyToClipboard from 'copy-to-clipboard'
|
||||||
import { addressSlicer } from '../../util'
|
import { addressSlicer, checksumAddress } from '../../util'
|
||||||
|
|
||||||
const Tooltip = require('../tooltip-v2.js').default
|
const Tooltip = require('../tooltip-v2.js').default
|
||||||
|
|
||||||
@ -22,6 +22,7 @@ class SelectedAccount extends Component {
|
|||||||
render () {
|
render () {
|
||||||
const { t } = this.context
|
const { t } = this.context
|
||||||
const { selectedAddress, selectedIdentity } = this.props
|
const { selectedAddress, selectedIdentity } = this.props
|
||||||
|
const checksummedAddress = checksumAddress(selectedAddress)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="selected-account">
|
<div className="selected-account">
|
||||||
@ -34,14 +35,14 @@ class SelectedAccount extends Component {
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.setState({ copied: true })
|
this.setState({ copied: true })
|
||||||
setTimeout(() => this.setState({ copied: false }), 3000)
|
setTimeout(() => this.setState({ copied: false }), 3000)
|
||||||
copyToClipboard(selectedAddress)
|
copyToClipboard(checksummedAddress)
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="selected-account__name">
|
<div className="selected-account__name">
|
||||||
{ selectedIdentity.name }
|
{ selectedIdentity.name }
|
||||||
</div>
|
</div>
|
||||||
<div className="selected-account__address">
|
<div className="selected-account__address">
|
||||||
{ addressSlicer(selectedAddress) }
|
{ addressSlicer(checksummedAddress) }
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import assert from 'assert'
|
||||||
|
import { render } from 'enzyme'
|
||||||
|
import SelectedAccount from '../selected-account.component'
|
||||||
|
|
||||||
|
describe('SelectedAccount Component', () => {
|
||||||
|
it('should render checksummed address', () => {
|
||||||
|
const wrapper = render(<SelectedAccount
|
||||||
|
selectedAddress="0x1b82543566f41a7db9a9a75fc933c340ffb55c9d"
|
||||||
|
selectedIdentity={{ name: 'testName' }}
|
||||||
|
/>, { context: { t: () => {}}})
|
||||||
|
// Checksummed version of address is displayed
|
||||||
|
assert.equal(wrapper.find('.selected-account__address').text(), '0x1B82...5C9D')
|
||||||
|
assert.equal(wrapper.find('.selected-account__name').text(), 'testName')
|
||||||
|
})
|
||||||
|
})
|
@ -13,8 +13,9 @@ export default class TransactionListItemDetails extends PureComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
transaction: PropTypes.object,
|
onRetry: PropTypes.func,
|
||||||
showRetry: PropTypes.bool,
|
showRetry: PropTypes.bool,
|
||||||
|
transaction: PropTypes.object,
|
||||||
}
|
}
|
||||||
|
|
||||||
handleEtherscanClick = () => {
|
handleEtherscanClick = () => {
|
||||||
@ -26,6 +27,13 @@ export default class TransactionListItemDetails extends PureComponent {
|
|||||||
this.setState({ showTransactionDetails: true })
|
this.setState({ showTransactionDetails: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleRetry = event => {
|
||||||
|
const { onRetry } = this.props
|
||||||
|
|
||||||
|
event.stopPropagation()
|
||||||
|
onRetry()
|
||||||
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { t } = this.context
|
const { t } = this.context
|
||||||
const { transaction, showRetry } = this.props
|
const { transaction, showRetry } = this.props
|
||||||
@ -40,7 +48,7 @@ export default class TransactionListItemDetails extends PureComponent {
|
|||||||
showRetry && (
|
showRetry && (
|
||||||
<Button
|
<Button
|
||||||
type="raised"
|
type="raised"
|
||||||
onClick={this.handleEtherscanClick}
|
onClick={this.handleRetry}
|
||||||
className="transaction-list-item-details__header-button"
|
className="transaction-list-item-details__header-button"
|
||||||
>
|
>
|
||||||
{ t('speedUp') }
|
{ t('speedUp') }
|
||||||
|
@ -42,9 +42,7 @@ export default class TransactionListItem extends PureComponent {
|
|||||||
this.setState({ showTransactionDetails: !showTransactionDetails })
|
this.setState({ showTransactionDetails: !showTransactionDetails })
|
||||||
}
|
}
|
||||||
|
|
||||||
handleRetryClick = event => {
|
handleRetry = () => {
|
||||||
event.stopPropagation()
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
transaction: { txParams: { to } = {} },
|
transaction: { txParams: { to } = {} },
|
||||||
methodData: { name } = {},
|
methodData: { name } = {},
|
||||||
@ -156,6 +154,7 @@ export default class TransactionListItem extends PureComponent {
|
|||||||
<TransactionListItemDetails
|
<TransactionListItemDetails
|
||||||
transaction={transaction}
|
transaction={transaction}
|
||||||
showRetry={showRetry && methodData.done}
|
showRetry={showRetry && methodData.done}
|
||||||
|
onRetry={this.handleRetry}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -622,14 +622,14 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&__down-caret {
|
&__down-caret {
|
||||||
z-index: 1051;
|
z-index: 1026;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 18px;
|
top: 18px;
|
||||||
right: 12px;
|
right: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__qr-code {
|
&__qr-code {
|
||||||
z-index: 1051;
|
z-index: 1026;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 13px;
|
top: 13px;
|
||||||
right: 33px;
|
right: 33px;
|
||||||
@ -649,7 +649,7 @@
|
|||||||
|
|
||||||
&__to-autocomplete, &__memo-text-area, &__hex-data {
|
&__to-autocomplete, &__memo-text-area, &__hex-data {
|
||||||
&__input {
|
&__input {
|
||||||
z-index: 1050;
|
z-index: 1025;
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 54px;
|
height: 54px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@ -888,12 +888,21 @@
|
|||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: $tundora;
|
color: $tundora;
|
||||||
right: 0px;
|
right: 0px;
|
||||||
padding: 1px 4px;
|
padding: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gas-tooltip-input-arrow-wrapper {
|
||||||
|
align-items: center;
|
||||||
|
align-self: stretch;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex-grow: 1;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
input[type="number"]::-webkit-inner-spin-button {
|
input[type="number"]::-webkit-inner-spin-button {
|
||||||
-webkit-appearance: none;
|
-webkit-appearance: none;
|
||||||
display: none;
|
display: none;
|
||||||
|
Loading…
Reference in New Issue
Block a user