aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Finlay <flyswatter@users.noreply.github.com>2017-07-21 05:05:12 +0800
committerGitHub <noreply@github.com>2017-07-21 05:05:12 +0800
commit6553c9c64b82a9a26a973f05b5fe7f29a6371828 (patch)
tree8f2433bb8dd30e5eaba1fdec7271744323dea46d
parent199587383b022a17d56adcb56d6a99ceba71fec7 (diff)
parent38dccab12e4140bb085f3ea17e642e55f54d68a1 (diff)
downloadtangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.tar
tangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.tar.gz
tangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.tar.bz2
tangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.tar.lz
tangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.tar.xz
tangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.tar.zst
tangerine-wallet-browser-6553c9c64b82a9a26a973f05b5fe7f29a6371828.zip
Merge pull request #1802 from MetaMask/RestructureNewUI
Restructure new ui branch folders
-rw-r--r--CHANGELOG.md30
-rw-r--r--README.md14
-rw-r--r--app/manifest.json7
-rw-r--r--app/scripts/blacklister.js13
-rw-r--r--app/scripts/controllers/infura.js1
-rw-r--r--app/scripts/controllers/transactions.js223
-rw-r--r--app/scripts/lib/auto-faucet.js20
-rw-r--r--app/scripts/lib/nodeify.js27
-rw-r--r--app/scripts/lib/nonce-tracker.js84
-rw-r--r--app/scripts/lib/tx-utils.js18
-rw-r--r--app/scripts/metamask-controller.js44
-rw-r--r--app/scripts/migrations/016.js41
-rw-r--r--app/scripts/migrations/017.js40
-rw-r--r--app/scripts/migrations/index.js2
-rw-r--r--app/scripts/popup-core.js2
-rw-r--r--app/scripts/popup.js2
-rw-r--r--app/scripts/responsive-core.js2
-rw-r--r--app/scripts/responsive.js2
-rw-r--r--circle.yml2
-rw-r--r--gulpfile.js1
-rw-r--r--package.json15
-rw-r--r--responsive-ui/.gitignore (renamed from ui/classic/.gitignore)0
-rw-r--r--responsive-ui/app/account-detail.js (renamed from ui/responsive/app/account-detail.js)0
-rw-r--r--responsive-ui/app/accounts/import/index.js (renamed from ui/classic/app/accounts/import/index.js)0
-rw-r--r--responsive-ui/app/accounts/import/json.js (renamed from ui/classic/app/accounts/import/json.js)0
-rw-r--r--responsive-ui/app/accounts/import/private-key.js (renamed from ui/classic/app/accounts/import/private-key.js)0
-rw-r--r--responsive-ui/app/accounts/import/seed.js (renamed from ui/classic/app/accounts/import/seed.js)0
-rw-r--r--responsive-ui/app/actions.js (renamed from ui/classic/app/actions.js)0
-rw-r--r--responsive-ui/app/add-token.js (renamed from ui/classic/app/add-token.js)0
-rw-r--r--responsive-ui/app/app.js (renamed from ui/responsive/app/app.js)0
-rw-r--r--responsive-ui/app/components/account-dropdowns.js (renamed from ui/responsive/app/components/account-dropdowns.js)0
-rw-r--r--responsive-ui/app/components/account-export.js (renamed from ui/classic/app/components/account-export.js)0
-rw-r--r--responsive-ui/app/components/account-panel.js (renamed from ui/classic/app/components/account-panel.js)0
-rw-r--r--responsive-ui/app/components/balance.js (renamed from ui/classic/app/components/balance.js)0
-rw-r--r--responsive-ui/app/components/binary-renderer.js (renamed from ui/classic/app/components/binary-renderer.js)0
-rw-r--r--responsive-ui/app/components/bn-as-decimal-input.js (renamed from ui/classic/app/components/bn-as-decimal-input.js)0
-rw-r--r--responsive-ui/app/components/buy-button-subview.js (renamed from ui/classic/app/components/buy-button-subview.js)0
-rw-r--r--responsive-ui/app/components/coinbase-form.js (renamed from ui/classic/app/components/coinbase-form.js)0
-rw-r--r--responsive-ui/app/components/copyButton.js (renamed from ui/classic/app/components/copyButton.js)0
-rw-r--r--responsive-ui/app/components/copyable.js (renamed from ui/classic/app/components/copyable.js)0
-rw-r--r--responsive-ui/app/components/custom-radio-list.js (renamed from ui/classic/app/components/custom-radio-list.js)0
-rw-r--r--responsive-ui/app/components/dropdown.js (renamed from ui/responsive/app/components/dropdown.js)0
-rw-r--r--responsive-ui/app/components/editable-label.js (renamed from ui/responsive/app/components/editable-label.js)0
-rw-r--r--responsive-ui/app/components/ens-input.js (renamed from ui/classic/app/components/ens-input.js)0
-rw-r--r--responsive-ui/app/components/eth-balance.js (renamed from ui/classic/app/components/eth-balance.js)0
-rw-r--r--responsive-ui/app/components/fiat-value.js (renamed from ui/classic/app/components/fiat-value.js)0
-rw-r--r--responsive-ui/app/components/hex-as-decimal-input.js (renamed from ui/classic/app/components/hex-as-decimal-input.js)0
-rw-r--r--responsive-ui/app/components/identicon.js (renamed from ui/classic/app/components/identicon.js)0
-rw-r--r--responsive-ui/app/components/loading.js (renamed from ui/classic/app/components/loading.js)0
-rw-r--r--responsive-ui/app/components/mascot.js (renamed from ui/classic/app/components/mascot.js)0
-rw-r--r--responsive-ui/app/components/mini-account-panel.js (renamed from ui/classic/app/components/mini-account-panel.js)0
-rw-r--r--responsive-ui/app/components/network.js (renamed from ui/classic/app/components/network.js)0
-rw-r--r--responsive-ui/app/components/notice.js (renamed from ui/classic/app/components/notice.js)0
-rw-r--r--responsive-ui/app/components/pending-msg-details.js (renamed from ui/classic/app/components/pending-msg-details.js)0
-rw-r--r--responsive-ui/app/components/pending-msg.js (renamed from ui/classic/app/components/pending-msg.js)0
-rw-r--r--responsive-ui/app/components/pending-personal-msg-details.js (renamed from ui/classic/app/components/pending-personal-msg-details.js)0
-rw-r--r--responsive-ui/app/components/pending-personal-msg.js (renamed from ui/classic/app/components/pending-personal-msg.js)0
-rw-r--r--responsive-ui/app/components/pending-tx.js (renamed from ui/classic/app/components/pending-tx.js)0
-rw-r--r--responsive-ui/app/components/qr-code.js (renamed from ui/classic/app/components/qr-code.js)0
-rw-r--r--responsive-ui/app/components/range-slider.js (renamed from ui/classic/app/components/range-slider.js)0
-rw-r--r--responsive-ui/app/components/shapeshift-form.js (renamed from ui/classic/app/components/shapeshift-form.js)0
-rw-r--r--responsive-ui/app/components/shift-list-item.js (renamed from ui/classic/app/components/shift-list-item.js)0
-rw-r--r--responsive-ui/app/components/tab-bar.js (renamed from ui/classic/app/components/tab-bar.js)0
-rw-r--r--responsive-ui/app/components/template.js (renamed from ui/classic/app/components/template.js)0
-rw-r--r--responsive-ui/app/components/token-cell.js (renamed from ui/classic/app/components/token-cell.js)0
-rw-r--r--responsive-ui/app/components/token-list.js (renamed from ui/classic/app/components/token-list.js)0
-rw-r--r--responsive-ui/app/components/tooltip.js (renamed from ui/classic/app/components/tooltip.js)0
-rw-r--r--responsive-ui/app/components/transaction-list-item-icon.js (renamed from ui/classic/app/components/transaction-list-item-icon.js)0
-rw-r--r--responsive-ui/app/components/transaction-list-item.js (renamed from ui/classic/app/components/transaction-list-item.js)0
-rw-r--r--responsive-ui/app/components/transaction-list.js (renamed from ui/classic/app/components/transaction-list.js)0
-rw-r--r--responsive-ui/app/conf-tx.js (renamed from ui/responsive/app/conf-tx.js)2
-rw-r--r--responsive-ui/app/config.js (renamed from ui/classic/app/config.js)0
-rw-r--r--responsive-ui/app/conversion.json (renamed from ui/classic/app/conversion.json)0
-rw-r--r--responsive-ui/app/css/debug.css (renamed from ui/classic/app/css/debug.css)0
-rw-r--r--responsive-ui/app/css/fonts.css (renamed from ui/classic/app/css/fonts.css)0
-rw-r--r--responsive-ui/app/css/index.css (renamed from ui/responsive/app/css/index.css)0
-rw-r--r--responsive-ui/app/css/lib.css (renamed from ui/classic/app/css/lib.css)0
-rw-r--r--responsive-ui/app/css/reset.css (renamed from ui/classic/app/css/reset.css)0
-rw-r--r--responsive-ui/app/css/transitions.css (renamed from ui/classic/app/css/transitions.css)0
-rw-r--r--responsive-ui/app/first-time/init-menu.js (renamed from ui/classic/app/first-time/init-menu.js)0
-rw-r--r--responsive-ui/app/img/identicon-tardigrade.png (renamed from ui/classic/app/img/identicon-tardigrade.png)bin141119 -> 141119 bytes
-rw-r--r--responsive-ui/app/img/identicon-walrus.png (renamed from ui/classic/app/img/identicon-walrus.png)bin388973 -> 388973 bytes
-rw-r--r--responsive-ui/app/info.js (renamed from ui/classic/app/info.js)0
-rw-r--r--responsive-ui/app/keychains/hd/create-vault-complete.js (renamed from ui/responsive/app/keychains/hd/create-vault-complete.js)0
-rw-r--r--responsive-ui/app/keychains/hd/recover-seed/confirmation.js (renamed from ui/classic/app/keychains/hd/recover-seed/confirmation.js)0
-rw-r--r--responsive-ui/app/keychains/hd/restore-vault.js (renamed from ui/classic/app/keychains/hd/restore-vault.js)0
-rw-r--r--responsive-ui/app/new-keychain.js (renamed from ui/classic/app/new-keychain.js)0
-rw-r--r--responsive-ui/app/reducers.js (renamed from ui/classic/app/reducers.js)0
-rw-r--r--responsive-ui/app/reducers/app.js (renamed from ui/classic/app/reducers/app.js)0
-rw-r--r--responsive-ui/app/reducers/identities.js (renamed from ui/classic/app/reducers/identities.js)0
-rw-r--r--responsive-ui/app/reducers/metamask.js (renamed from ui/classic/app/reducers/metamask.js)0
-rw-r--r--responsive-ui/app/root.js (renamed from ui/classic/app/root.js)0
-rw-r--r--responsive-ui/app/send.js (renamed from ui/classic/app/send.js)0
-rw-r--r--responsive-ui/app/settings.js (renamed from ui/classic/app/settings.js)0
-rw-r--r--responsive-ui/app/store.js (renamed from ui/classic/app/store.js)0
-rw-r--r--responsive-ui/app/template.js (renamed from ui/classic/app/template.js)0
-rw-r--r--responsive-ui/app/unlock.js (renamed from ui/classic/app/unlock.js)0
-rw-r--r--responsive-ui/app/util.js (renamed from ui/classic/app/util.js)0
-rw-r--r--responsive-ui/css.js (renamed from ui/classic/css.js)4
-rw-r--r--responsive-ui/design/00-metamask-SignIn.jpg (renamed from ui/classic/design/00-metamask-SignIn.jpg)bin57848 -> 57848 bytes
-rw-r--r--responsive-ui/design/01-metamask-SelectAcc.jpg (renamed from ui/classic/design/01-metamask-SelectAcc.jpg)bin76063 -> 76063 bytes
-rw-r--r--responsive-ui/design/02-metamask-AccDetails.jpg (renamed from ui/classic/design/02-metamask-AccDetails.jpg)bin75780 -> 75780 bytes
-rw-r--r--responsive-ui/design/02a-metamask-AccDetails-OverToken.jpg (renamed from ui/classic/design/02a-metamask-AccDetails-OverToken.jpg)bin121847 -> 121847 bytes
-rw-r--r--responsive-ui/design/02a-metamask-AccDetails-OverTransaction.jpg (renamed from ui/classic/design/02a-metamask-AccDetails-OverTransaction.jpg)bin122075 -> 122075 bytes
-rw-r--r--responsive-ui/design/02a-metamask-AccDetails.jpg (renamed from ui/classic/design/02a-metamask-AccDetails.jpg)bin117570 -> 117570 bytes
-rw-r--r--responsive-ui/design/02b-metamask-AccDetails-Send.jpg (renamed from ui/classic/design/02b-metamask-AccDetails-Send.jpg)bin110143 -> 110143 bytes
-rw-r--r--responsive-ui/design/03-metamask-Qr.jpg (renamed from ui/classic/design/03-metamask-Qr.jpg)bin66052 -> 66052 bytes
-rw-r--r--responsive-ui/design/05-metamask-Menu.jpg (renamed from ui/classic/design/05-metamask-Menu.jpg)bin130264 -> 130264 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/final_screen_dao_accounts.png (renamed from ui/classic/design/chromeStorePics/final_screen_dao_accounts.png)bin249708 -> 249708 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/final_screen_dao_locked.png (renamed from ui/classic/design/chromeStorePics/final_screen_dao_locked.png)bin220295 -> 220295 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/final_screen_dao_notification.png (renamed from ui/classic/design/chromeStorePics/final_screen_dao_notification.png)bin214405 -> 214405 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/final_screen_wei_account.png (renamed from ui/classic/design/chromeStorePics/final_screen_wei_account.png)bin253382 -> 253382 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/final_screen_wei_notification.png (renamed from ui/classic/design/chromeStorePics/final_screen_wei_notification.png)bin193865 -> 193865 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/icon-128.png (renamed from ui/classic/design/chromeStorePics/icon-128.png)bin5770 -> 5770 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/icon-64.png (renamed from ui/classic/design/chromeStorePics/icon-64.png)bin3573 -> 3573 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/metamask_icon.ai (renamed from ui/classic/design/chromeStorePics/metamask_icon.ai)0
-rw-r--r--responsive-ui/design/chromeStorePics/promo1400560.png (renamed from ui/classic/design/chromeStorePics/promo1400560.png)bin261644 -> 261644 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/promo440280.png (renamed from ui/classic/design/chromeStorePics/promo440280.png)bin57471 -> 57471 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/promo920680.png (renamed from ui/classic/design/chromeStorePics/promo920680.png)bin206713 -> 206713 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/screen_dao_accounts.png (renamed from ui/classic/design/chromeStorePics/screen_dao_accounts.png)bin517598 -> 517598 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/screen_dao_locked.png (renamed from ui/classic/design/chromeStorePics/screen_dao_locked.png)bin287108 -> 287108 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/screen_dao_notification.png (renamed from ui/classic/design/chromeStorePics/screen_dao_notification.png)bin296498 -> 296498 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/screen_wei_account.png (renamed from ui/classic/design/chromeStorePics/screen_wei_account.png)bin653633 -> 653633 bytes
-rw-r--r--responsive-ui/design/chromeStorePics/screen_wei_notification.png (renamed from ui/classic/design/chromeStorePics/screen_wei_notification.png)bin402486 -> 402486 bytes
-rw-r--r--responsive-ui/design/metamask-logo-eyes.png (renamed from ui/classic/design/metamask-logo-eyes.png)bin146076 -> 146076 bytes
-rw-r--r--responsive-ui/design/wireframes/1st_time_use.png (renamed from ui/classic/design/wireframes/1st_time_use.png)bin937556 -> 937556 bytes
-rw-r--r--responsive-ui/design/wireframes/metamask_wfs_jan_13.pdf (renamed from ui/classic/design/wireframes/metamask_wfs_jan_13.pdf)bin452413 -> 452413 bytes
-rw-r--r--responsive-ui/design/wireframes/metamask_wfs_jan_13.png (renamed from ui/classic/design/wireframes/metamask_wfs_jan_13.png)bin419066 -> 419066 bytes
-rw-r--r--responsive-ui/design/wireframes/metamask_wfs_jan_18.pdf (renamed from ui/classic/design/wireframes/metamask_wfs_jan_18.pdf)bin612778 -> 612778 bytes
-rw-r--r--responsive-ui/example.js (renamed from ui/classic/example.js)0
-rw-r--r--responsive-ui/index.html (renamed from ui/classic/index.html)0
-rw-r--r--responsive-ui/index.js (renamed from ui/classic/index.js)0
-rw-r--r--responsive-ui/lib/account-link.js (renamed from ui/classic/lib/account-link.js)0
-rw-r--r--responsive-ui/lib/contract-namer.js (renamed from ui/classic/lib/contract-namer.js)0
-rw-r--r--responsive-ui/lib/etherscan-prefix-for-network.js (renamed from ui/classic/lib/etherscan-prefix-for-network.js)0
-rw-r--r--responsive-ui/lib/explorer-link.js (renamed from ui/classic/lib/explorer-link.js)0
-rw-r--r--responsive-ui/lib/icon-factory.js (renamed from ui/classic/lib/icon-factory.js)0
-rw-r--r--responsive-ui/lib/lost-accounts-notice.js (renamed from ui/classic/lib/lost-accounts-notice.js)0
-rw-r--r--responsive-ui/lib/persistent-form.js (renamed from ui/classic/lib/persistent-form.js)0
-rw-r--r--responsive-ui/lib/tx-helper.js (renamed from ui/classic/lib/tx-helper.js)0
-rw-r--r--test/unit/infura-controller-test.js70
-rw-r--r--test/unit/nodeify-test.js2
-rw-r--r--test/unit/nonce-tracker-test.js40
-rw-r--r--test/unit/responsive/components/dropdown-test.js6
-rw-r--r--test/unit/tx-controller-test.js75
-rw-r--r--test/unit/tx-helper-test.js17
-rw-r--r--test/unit/tx-utils-test.js38
-rw-r--r--ui/app/account-detail.js (renamed from ui/classic/app/account-detail.js)0
-rw-r--r--ui/app/accounts/account-list-item.js (renamed from ui/classic/app/accounts/account-list-item.js)0
-rw-r--r--ui/app/accounts/import/index.js (renamed from ui/responsive/app/accounts/import/index.js)0
-rw-r--r--ui/app/accounts/import/json.js (renamed from ui/responsive/app/accounts/import/json.js)0
-rw-r--r--ui/app/accounts/import/private-key.js (renamed from ui/responsive/app/accounts/import/private-key.js)0
-rw-r--r--ui/app/accounts/import/seed.js (renamed from ui/responsive/app/accounts/import/seed.js)0
-rw-r--r--ui/app/accounts/index.js (renamed from ui/classic/app/accounts/index.js)0
-rw-r--r--ui/app/actions.js (renamed from ui/responsive/app/actions.js)2
-rw-r--r--ui/app/add-token.js (renamed from ui/responsive/app/add-token.js)2
-rw-r--r--ui/app/app.js (renamed from ui/classic/app/app.js)0
-rw-r--r--ui/app/components/account-export.js (renamed from ui/responsive/app/components/account-export.js)0
-rw-r--r--ui/app/components/account-info-link.js (renamed from ui/classic/app/components/account-info-link.js)0
-rw-r--r--ui/app/components/account-panel.js (renamed from ui/responsive/app/components/account-panel.js)0
-rw-r--r--ui/app/components/balance.js (renamed from ui/responsive/app/components/balance.js)0
-rw-r--r--ui/app/components/binary-renderer.js (renamed from ui/responsive/app/components/binary-renderer.js)0
-rw-r--r--ui/app/components/bn-as-decimal-input.js (renamed from ui/responsive/app/components/bn-as-decimal-input.js)0
-rw-r--r--ui/app/components/buy-button-subview.js (renamed from ui/responsive/app/components/buy-button-subview.js)0
-rw-r--r--ui/app/components/coinbase-form.js (renamed from ui/responsive/app/components/coinbase-form.js)0
-rw-r--r--ui/app/components/copyButton.js (renamed from ui/responsive/app/components/copyButton.js)0
-rw-r--r--ui/app/components/copyable.js (renamed from ui/responsive/app/components/copyable.js)0
-rw-r--r--ui/app/components/custom-radio-list.js (renamed from ui/responsive/app/components/custom-radio-list.js)0
-rw-r--r--ui/app/components/drop-menu-item.js (renamed from ui/classic/app/components/drop-menu-item.js)0
-rw-r--r--ui/app/components/editable-label.js (renamed from ui/classic/app/components/editable-label.js)0
-rw-r--r--ui/app/components/ens-input.js (renamed from ui/responsive/app/components/ens-input.js)0
-rw-r--r--ui/app/components/eth-balance.js (renamed from ui/responsive/app/components/eth-balance.js)0
-rw-r--r--ui/app/components/fiat-value.js (renamed from ui/responsive/app/components/fiat-value.js)0
-rw-r--r--ui/app/components/hex-as-decimal-input.js (renamed from ui/responsive/app/components/hex-as-decimal-input.js)0
-rw-r--r--ui/app/components/identicon.js (renamed from ui/responsive/app/components/identicon.js)0
-rw-r--r--ui/app/components/loading.js (renamed from ui/responsive/app/components/loading.js)0
-rw-r--r--ui/app/components/mascot.js (renamed from ui/responsive/app/components/mascot.js)0
-rw-r--r--ui/app/components/mini-account-panel.js (renamed from ui/responsive/app/components/mini-account-panel.js)0
-rw-r--r--ui/app/components/network.js (renamed from ui/responsive/app/components/network.js)0
-rw-r--r--ui/app/components/notice.js (renamed from ui/responsive/app/components/notice.js)0
-rw-r--r--ui/app/components/pending-msg-details.js (renamed from ui/responsive/app/components/pending-msg-details.js)0
-rw-r--r--ui/app/components/pending-msg.js (renamed from ui/responsive/app/components/pending-msg.js)0
-rw-r--r--ui/app/components/pending-personal-msg-details.js (renamed from ui/responsive/app/components/pending-personal-msg-details.js)0
-rw-r--r--ui/app/components/pending-personal-msg.js (renamed from ui/responsive/app/components/pending-personal-msg.js)0
-rw-r--r--ui/app/components/pending-tx.js (renamed from ui/responsive/app/components/pending-tx.js)4
-rw-r--r--ui/app/components/qr-code.js (renamed from ui/responsive/app/components/qr-code.js)0
-rw-r--r--ui/app/components/range-slider.js (renamed from ui/responsive/app/components/range-slider.js)0
-rw-r--r--ui/app/components/shapeshift-form.js (renamed from ui/responsive/app/components/shapeshift-form.js)0
-rw-r--r--ui/app/components/shift-list-item.js (renamed from ui/responsive/app/components/shift-list-item.js)0
-rw-r--r--ui/app/components/tab-bar.js (renamed from ui/responsive/app/components/tab-bar.js)0
-rw-r--r--ui/app/components/template.js (renamed from ui/responsive/app/components/template.js)0
-rw-r--r--ui/app/components/token-cell.js (renamed from ui/responsive/app/components/token-cell.js)0
-rw-r--r--ui/app/components/token-list.js (renamed from ui/responsive/app/components/token-list.js)0
-rw-r--r--ui/app/components/tooltip.js (renamed from ui/responsive/app/components/tooltip.js)0
-rw-r--r--ui/app/components/transaction-list-item-icon.js (renamed from ui/responsive/app/components/transaction-list-item-icon.js)0
-rw-r--r--ui/app/components/transaction-list-item.js (renamed from ui/responsive/app/components/transaction-list-item.js)0
-rw-r--r--ui/app/components/transaction-list.js (renamed from ui/responsive/app/components/transaction-list.js)0
-rw-r--r--ui/app/conf-tx.js (renamed from ui/classic/app/conf-tx.js)2
-rw-r--r--ui/app/config.js (renamed from ui/responsive/app/config.js)0
-rw-r--r--ui/app/conversion.json (renamed from ui/responsive/app/conversion.json)0
-rw-r--r--ui/app/css/debug.css (renamed from ui/responsive/app/css/debug.css)0
-rw-r--r--ui/app/css/fonts.css (renamed from ui/responsive/app/css/fonts.css)0
-rw-r--r--ui/app/css/index.css (renamed from ui/classic/app/css/index.css)0
-rw-r--r--ui/app/css/lib.css (renamed from ui/responsive/app/css/lib.css)0
-rw-r--r--ui/app/css/reset.css (renamed from ui/responsive/app/css/reset.css)0
-rw-r--r--ui/app/css/transitions.css (renamed from ui/responsive/app/css/transitions.css)0
-rw-r--r--ui/app/first-time/init-menu.js (renamed from ui/responsive/app/first-time/init-menu.js)0
-rw-r--r--ui/app/img/identicon-tardigrade.png (renamed from ui/responsive/app/img/identicon-tardigrade.png)bin141119 -> 141119 bytes
-rw-r--r--ui/app/img/identicon-walrus.png (renamed from ui/responsive/app/img/identicon-walrus.png)bin388973 -> 388973 bytes
-rw-r--r--ui/app/info.js (renamed from ui/responsive/app/info.js)10
-rw-r--r--ui/app/keychains/hd/create-vault-complete.js (renamed from ui/classic/app/keychains/hd/create-vault-complete.js)0
-rw-r--r--ui/app/keychains/hd/recover-seed/confirmation.js (renamed from ui/responsive/app/keychains/hd/recover-seed/confirmation.js)0
-rw-r--r--ui/app/keychains/hd/restore-vault.js (renamed from ui/responsive/app/keychains/hd/restore-vault.js)0
-rw-r--r--ui/app/new-keychain.js (renamed from ui/responsive/app/new-keychain.js)0
-rw-r--r--ui/app/reducers.js (renamed from ui/responsive/app/reducers.js)0
-rw-r--r--ui/app/reducers/app.js (renamed from ui/responsive/app/reducers/app.js)0
-rw-r--r--ui/app/reducers/identities.js (renamed from ui/responsive/app/reducers/identities.js)0
-rw-r--r--ui/app/reducers/metamask.js (renamed from ui/responsive/app/reducers/metamask.js)0
-rw-r--r--ui/app/root.js (renamed from ui/responsive/app/root.js)0
-rw-r--r--ui/app/send.js (renamed from ui/responsive/app/send.js)0
-rw-r--r--ui/app/settings.js (renamed from ui/responsive/app/settings.js)0
-rw-r--r--ui/app/store.js (renamed from ui/responsive/app/store.js)0
-rw-r--r--ui/app/template.js (renamed from ui/responsive/app/template.js)0
-rw-r--r--ui/app/unlock.js (renamed from ui/responsive/app/unlock.js)0
-rw-r--r--ui/app/util.js (renamed from ui/responsive/app/util.js)0
-rw-r--r--ui/css.js (renamed from ui/responsive/css.js)4
-rw-r--r--ui/design/00-metamask-SignIn.jpg (renamed from ui/responsive/design/00-metamask-SignIn.jpg)bin57848 -> 57848 bytes
-rw-r--r--ui/design/01-metamask-SelectAcc.jpg (renamed from ui/responsive/design/01-metamask-SelectAcc.jpg)bin76063 -> 76063 bytes
-rw-r--r--ui/design/02-metamask-AccDetails.jpg (renamed from ui/responsive/design/02-metamask-AccDetails.jpg)bin75780 -> 75780 bytes
-rw-r--r--ui/design/02a-metamask-AccDetails-OverToken.jpg (renamed from ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg)bin121847 -> 121847 bytes
-rw-r--r--ui/design/02a-metamask-AccDetails-OverTransaction.jpg (renamed from ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg)bin122075 -> 122075 bytes
-rw-r--r--ui/design/02a-metamask-AccDetails.jpg (renamed from ui/responsive/design/02a-metamask-AccDetails.jpg)bin117570 -> 117570 bytes
-rw-r--r--ui/design/02b-metamask-AccDetails-Send.jpg (renamed from ui/responsive/design/02b-metamask-AccDetails-Send.jpg)bin110143 -> 110143 bytes
-rw-r--r--ui/design/03-metamask-Qr.jpg (renamed from ui/responsive/design/03-metamask-Qr.jpg)bin66052 -> 66052 bytes
-rw-r--r--ui/design/05-metamask-Menu.jpg (renamed from ui/responsive/design/05-metamask-Menu.jpg)bin130264 -> 130264 bytes
-rw-r--r--ui/design/chromeStorePics/final_screen_dao_accounts.png (renamed from ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png)bin249708 -> 249708 bytes
-rw-r--r--ui/design/chromeStorePics/final_screen_dao_locked.png (renamed from ui/responsive/design/chromeStorePics/final_screen_dao_locked.png)bin220295 -> 220295 bytes
-rw-r--r--ui/design/chromeStorePics/final_screen_dao_notification.png (renamed from ui/responsive/design/chromeStorePics/final_screen_dao_notification.png)bin214405 -> 214405 bytes
-rw-r--r--ui/design/chromeStorePics/final_screen_wei_account.png (renamed from ui/responsive/design/chromeStorePics/final_screen_wei_account.png)bin253382 -> 253382 bytes
-rw-r--r--ui/design/chromeStorePics/final_screen_wei_notification.png (renamed from ui/responsive/design/chromeStorePics/final_screen_wei_notification.png)bin193865 -> 193865 bytes
-rw-r--r--ui/design/chromeStorePics/icon-128.png (renamed from ui/responsive/design/chromeStorePics/icon-128.png)bin5770 -> 5770 bytes
-rw-r--r--ui/design/chromeStorePics/icon-64.png (renamed from ui/responsive/design/chromeStorePics/icon-64.png)bin3573 -> 3573 bytes
-rw-r--r--ui/design/chromeStorePics/metamask_icon.ai (renamed from ui/responsive/design/chromeStorePics/metamask_icon.ai)0
-rw-r--r--ui/design/chromeStorePics/promo1400560.png (renamed from ui/responsive/design/chromeStorePics/promo1400560.png)bin261644 -> 261644 bytes
-rw-r--r--ui/design/chromeStorePics/promo440280.png (renamed from ui/responsive/design/chromeStorePics/promo440280.png)bin57471 -> 57471 bytes
-rw-r--r--ui/design/chromeStorePics/promo920680.png (renamed from ui/responsive/design/chromeStorePics/promo920680.png)bin206713 -> 206713 bytes
-rw-r--r--ui/design/chromeStorePics/screen_dao_accounts.png (renamed from ui/responsive/design/chromeStorePics/screen_dao_accounts.png)bin517598 -> 517598 bytes
-rw-r--r--ui/design/chromeStorePics/screen_dao_locked.png (renamed from ui/responsive/design/chromeStorePics/screen_dao_locked.png)bin287108 -> 287108 bytes
-rw-r--r--ui/design/chromeStorePics/screen_dao_notification.png (renamed from ui/responsive/design/chromeStorePics/screen_dao_notification.png)bin296498 -> 296498 bytes
-rw-r--r--ui/design/chromeStorePics/screen_wei_account.png (renamed from ui/responsive/design/chromeStorePics/screen_wei_account.png)bin653633 -> 653633 bytes
-rw-r--r--ui/design/chromeStorePics/screen_wei_notification.png (renamed from ui/responsive/design/chromeStorePics/screen_wei_notification.png)bin402486 -> 402486 bytes
-rw-r--r--ui/design/metamask-logo-eyes.png (renamed from ui/responsive/design/metamask-logo-eyes.png)bin146076 -> 146076 bytes
-rw-r--r--ui/design/wireframes/1st_time_use.png (renamed from ui/responsive/design/wireframes/1st_time_use.png)bin937556 -> 937556 bytes
-rw-r--r--ui/design/wireframes/metamask_wfs_jan_13.pdf (renamed from ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf)bin452413 -> 452413 bytes
-rw-r--r--ui/design/wireframes/metamask_wfs_jan_13.png (renamed from ui/responsive/design/wireframes/metamask_wfs_jan_13.png)bin419066 -> 419066 bytes
-rw-r--r--ui/design/wireframes/metamask_wfs_jan_18.pdf (renamed from ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf)bin612778 -> 612778 bytes
-rw-r--r--ui/example.js (renamed from ui/responsive/example.js)0
-rw-r--r--ui/index.html (renamed from ui/responsive/index.html)0
-rw-r--r--ui/index.js (renamed from ui/responsive/index.js)0
-rw-r--r--ui/lib/account-link.js (renamed from ui/responsive/lib/account-link.js)0
-rw-r--r--ui/lib/contract-namer.js (renamed from ui/responsive/lib/contract-namer.js)0
-rw-r--r--ui/lib/etherscan-prefix-for-network.js (renamed from ui/responsive/lib/etherscan-prefix-for-network.js)0
-rw-r--r--ui/lib/explorer-link.js (renamed from ui/responsive/lib/explorer-link.js)0
-rw-r--r--ui/lib/icon-factory.js (renamed from ui/responsive/lib/icon-factory.js)0
-rw-r--r--ui/lib/lost-accounts-notice.js (renamed from ui/responsive/lib/lost-accounts-notice.js)0
-rw-r--r--ui/lib/persistent-form.js (renamed from ui/responsive/lib/persistent-form.js)0
-rw-r--r--ui/lib/tx-helper.js (renamed from ui/responsive/lib/tx-helper.js)6
-rw-r--r--ui/responsive/.gitignore66
268 files changed, 645 insertions, 295 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e7934dc77..bf18bb361 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,38 @@
## Current Master
+## 3.9.1 2017-7-19
+
+- No longer automatically request 1 ropsten ether for the first account in a new vault.
+- Now redirects from known malicious sites faster.
+- Added a link to our new support page to the help screen.
+- Fixed bug where a new transaction would be shown over the current transaction, creating a possible timing attack against user confirmation.
+- Fixed bug in nonce tracker where an incorrect nonce would be calculated.
+- Lowered minimum gas price to 1 Gwei.
+
+## 3.9.0 2017-7-12
+
+- Now detects and blocks known phishing sites.
+
+## 3.8.6 2017-7-11
+
+- Make transaction resubmission more resilient.
+- No longer validate nonce client-side in retry loop.
+- Fix bug where insufficient balance error was sometimes shown on successful transactions.
+
+## 3.8.5 2017-7-7
+
+- Fix transaction resubmit logic to fail slightly less eagerly.
+
+## 3.8.4 2017-7-7
+
+- Improve transaction resubmit logic to fail more eagerly when a user would expect it to.
+
+## 3.8.3 2017-7-6
+
- Re-enable default token list.
- Add origin header to dapp-bound requests to allow providers to throttle sites.
+- Fix bug that could sometimes resubmit a transaction that had been stalled due to low balance after balance was restored.
## 3.8.2 2017-7-3
diff --git a/README.md b/README.md
index e9fe682fd..2323a710e 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,20 @@
-# MetaMask Plugin [![Build Status](https://circleci.com/gh/MetaMask/metamask-plugin.svg?style=shield&circle-token=a1ddcf3cd38e29267f254c9c59d556d513e3a1fd)](https://circleci.com/gh/MetaMask/metamask-plugin)
+# MetaMask Plugin [![Build Status](https://circleci.com/gh/MetaMask/metamask-extension.svg?style=shield&circle-token=a1ddcf3cd38e29267f254c9c59d556d513e3a1fd)](https://circleci.com/gh/MetaMask/metamask-extension)
+
+## Support
+
+If you're a user seeking support, [here is our support site](http://metamask.consensyssupport.happyfox.com).
## Developing Compatible Dapps
If you're a web dapp developer, we've got two types of guides for you:
-- If you've never built a Dapp before, we've got a gentle introduction on [Developing Dapps with Truffle and MetaMask](https://blog.metamask.io/developing-for-metamask-with-truffle/).
+### New Dapp Developers
+
+- We recommend this [Learning Solidity](https://karl.tech/learning-solidity-part-1-deploy-a-contract/) tutorial series by Karl Floersch.
+- We wrote a (slightly outdated now) gentle introduction on [Developing Dapps with Truffle and MetaMask](https://medium.com/metamask/developing-ethereum-dapps-with-truffle-and-metamask-aa8ad7e363ba).
+
+### Current Dapp Developers
+
- If you have a Dapp, and you want to ensure compatibility, [here is our guide on building MetaMask-compatible Dapps](https://github.com/MetaMask/faq/blob/master/DEVELOPERS.md)
## Building locally
diff --git a/app/manifest.json b/app/manifest.json
index 12ff6c2ea..eadd99590 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -1,7 +1,7 @@
{
"name": "MetaMask",
"short_name": "Metamask",
- "version": "3.8.2",
+ "version": "3.9.1",
"manifest_version": 2,
"author": "https://metamask.io",
"description": "Ethereum Browser Extension",
@@ -52,6 +52,11 @@
],
"run_at": "document_start",
"all_frames": true
+ },
+ {
+ "run_at": "document_start",
+ "matches": ["http://*/*", "https://*/*"],
+ "js": ["scripts/blacklister.js"]
}
],
"permissions": [
diff --git a/app/scripts/blacklister.js b/app/scripts/blacklister.js
new file mode 100644
index 000000000..a45265a75
--- /dev/null
+++ b/app/scripts/blacklister.js
@@ -0,0 +1,13 @@
+const blacklistedDomains = require('etheraddresslookup/blacklists/domains.json')
+
+function detectBlacklistedDomain() {
+ var strCurrentTab = window.location.hostname
+ if (blacklistedDomains && blacklistedDomains.includes(strCurrentTab)) {
+ window.location.href = 'https://metamask.io/phishing.html'
+ }
+}
+
+window.addEventListener('load', function() {
+ detectBlacklistedDomain()
+})
+
diff --git a/app/scripts/controllers/infura.js b/app/scripts/controllers/infura.js
index 98375b446..b34b0bc03 100644
--- a/app/scripts/controllers/infura.js
+++ b/app/scripts/controllers/infura.js
@@ -26,6 +26,7 @@ class InfuraController {
this.store.updateState({
infuraNetworkStatus: parsedResponse,
})
+ return parsedResponse
})
}
diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js
index 52251d66e..5f3d84ebe 100644
--- a/app/scripts/controllers/transactions.js
+++ b/app/scripts/controllers/transactions.js
@@ -1,12 +1,12 @@
const EventEmitter = require('events')
const async = require('async')
const extend = require('xtend')
-const Semaphore = require('semaphore')
const ObservableStore = require('obs-store')
const ethUtil = require('ethereumjs-util')
+const pify = require('pify')
const TxProviderUtil = require('../lib/tx-utils')
const createId = require('../lib/random-id')
-const denodeify = require('denodeify')
+const NonceTracker = require('../lib/nonce-tracker')
module.exports = class TransactionController extends EventEmitter {
constructor (opts) {
@@ -20,13 +20,26 @@ module.exports = class TransactionController extends EventEmitter {
this.txHistoryLimit = opts.txHistoryLimit
this.provider = opts.provider
this.blockTracker = opts.blockTracker
+ this.nonceTracker = new NonceTracker({
+ provider: this.provider,
+ blockTracker: this.provider._blockTracker,
+ getPendingTransactions: (address) => {
+ return this.getFilteredTxList({
+ from: address,
+ status: 'submitted',
+ err: undefined,
+ })
+ },
+ })
this.query = opts.ethQuery
this.txProviderUtils = new TxProviderUtil(this.query)
this.blockTracker.on('rawBlock', this.checkForTxInBlock.bind(this))
- this.blockTracker.on('latest', this.resubmitPendingTxs.bind(this))
+ // this is a little messy but until ethstore has been either
+ // removed or redone this is to guard against the race condition
+ // where ethStore hasent been populated by the results yet
+ this.blockTracker.once('latest', () => this.blockTracker.on('latest', this.resubmitPendingTxs.bind(this)))
this.blockTracker.on('sync', this.queryPendingTxs.bind(this))
this.signEthTx = opts.signTransaction
- this.nonceLock = Semaphore(1)
this.ethStore = opts.ethStore
// memstore is computed from a few different stores
this._updateMemstore()
@@ -170,29 +183,32 @@ module.exports = class TransactionController extends EventEmitter {
}, {})
}
- approveTransaction (txId, cb = warn) {
- const self = this
- // approve
- self.setTxStatusApproved(txId)
- // only allow one tx at a time for atomic nonce usage
- self.nonceLock.take(() => {
- // begin signature process
- async.waterfall([
- (cb) => self.fillInTxParams(txId, cb),
- (cb) => self.signTransaction(txId, cb),
- (rawTx, cb) => self.publishTransaction(txId, rawTx, cb),
- ], (err) => {
- self.nonceLock.leave()
- if (err) {
- this.setTxStatusFailed(txId, {
- errCode: err.errCode || err,
- message: err.message || 'Transaction failed during approval',
- })
- return cb(err)
- }
- cb()
+ async approveTransaction (txId) {
+ let nonceLock
+ try {
+ // approve
+ this.setTxStatusApproved(txId)
+ // get next nonce
+ const txMeta = this.getTx(txId)
+ const fromAddress = txMeta.txParams.from
+ nonceLock = await this.nonceTracker.getNonceLock(fromAddress)
+ txMeta.txParams.nonce = nonceLock.nextNonce
+ this.updateTx(txMeta)
+ // sign transaction
+ const rawTx = await this.signTransaction(txId)
+ await this.publishTransaction(txId, rawTx)
+ // must set transaction to submitted/failed before releasing lock
+ nonceLock.releaseLock()
+ } catch (err) {
+ this.setTxStatusFailed(txId, {
+ errCode: err.errCode || err,
+ message: err.message || 'Transaction failed during approval',
})
- })
+ // must set transaction to submitted/failed before releasing lock
+ if (nonceLock) nonceLock.releaseLock()
+ // continue with error chain
+ throw err
+ }
}
cancelTransaction (txId, cb = warn) {
@@ -200,13 +216,9 @@ module.exports = class TransactionController extends EventEmitter {
cb()
}
- fillInTxParams (txId, cb) {
- const txMeta = this.getTx(txId)
- this.txProviderUtils.fillInTxParams(txMeta.txParams, (err) => {
- if (err) return cb(err)
- this.updateTx(txMeta)
- cb()
- })
+ async updateAndApproveTransaction (txMeta) {
+ this.updateTx(txMeta)
+ await this.approveTransaction(txMeta.id)
}
getChainId () {
@@ -219,31 +231,27 @@ module.exports = class TransactionController extends EventEmitter {
}
}
- signTransaction (txId, cb) {
+ async signTransaction (txId) {
const txMeta = this.getTx(txId)
const txParams = txMeta.txParams
const fromAddress = txParams.from
// add network/chain id
txParams.chainId = this.getChainId()
const ethTx = this.txProviderUtils.buildEthTxFromParams(txParams)
- this.signEthTx(ethTx, fromAddress).then(() => {
+ const rawTx = await this.signEthTx(ethTx, fromAddress).then(() => {
this.setTxStatusSigned(txMeta.id)
- cb(null, ethUtil.bufferToHex(ethTx.serialize()))
- }).catch((err) => {
- cb(err)
+ return ethUtil.bufferToHex(ethTx.serialize())
})
+ return rawTx
}
- publishTransaction (txId, rawTx, cb = warn) {
+ async publishTransaction (txId, rawTx) {
const txMeta = this.getTx(txId)
txMeta.rawTx = rawTx
this.updateTx(txMeta)
-
- this.txProviderUtils.publishTransaction(rawTx, (err, txHash) => {
- if (err) return cb(err)
+ await this.txProviderUtils.publishTransaction(rawTx).then((txHash) => {
this.setTxHash(txId, txHash)
this.setTxStatusSubmitted(txId)
- cb()
})
}
@@ -261,10 +269,19 @@ module.exports = class TransactionController extends EventEmitter {
to: '0x0..',
from: '0x0..',
status: 'signed',
+ err: undefined,
}
and returns a list of tx with all
options matching
+ ****************HINT****************
+ | `err: undefined` is like looking |
+ | for a tx with no err |
+ | so you can also search txs that |
+ | dont have something as well by |
+ | setting the value as undefined |
+ ************************************
+
this is for things like filtering a the tx list
for only tx's from 1 account
or for filltering for all txs from one account
@@ -413,65 +430,103 @@ module.exports = class TransactionController extends EventEmitter {
const pending = this.getTxsByMetaData('status', 'submitted')
// only try resubmitting if their are transactions to resubmit
if (!pending.length) return
- const resubmit = denodeify(this._resubmitTx.bind(this))
- Promise.all(pending.map(txMeta => resubmit(txMeta)))
- .catch((reason) => {
- log.info('Problem resubmitting tx', reason)
- })
+ pending.forEach((txMeta) => this._resubmitTx(txMeta).catch((err) => {
+ /*
+ Dont marked as failed if the error is a "known" transaction warning
+ "there is already a transaction with the same sender-nonce
+ but higher/same gas price"
+ */
+ const errorMessage = err.message.toLowerCase()
+ const isKnownTx = (
+ // geth
+ errorMessage.includes('replacement transaction underpriced')
+ || errorMessage.includes('known transaction')
+ // parity
+ || errorMessage.includes('gas price too low to replace')
+ || errorMessage.includes('transaction with the same hash was already imported')
+ // other
+ || errorMessage.includes('gateway timeout')
+ || errorMessage.includes('nonce too low')
+ )
+ // ignore resubmit warnings, return early
+ if (isKnownTx) return
+ // encountered real error - transition to error state
+ this.setTxStatusFailed(txMeta.id, {
+ errCode: err.errCode || err,
+ message: err.message,
+ })
+ }))
}
- _resubmitTx (txMeta, cb) {
+ async _resubmitTx (txMeta, cb) {
const address = txMeta.txParams.from
const balance = this.ethStore.getState().accounts[address].balance
- const nonce = Number.parseInt(this.ethStore.getState().accounts[address].nonce)
- const txNonce = Number.parseInt(txMeta.txParams.nonce)
- const gtBalance = Number.parseInt(txMeta.txParams.value) > Number.parseInt(balance)
if (!('retryCount' in txMeta)) txMeta.retryCount = 0
- // if the value of the transaction is greater then the balance
- // or the nonce of the transaction is lower then the accounts nonce
- // dont resubmit the tx
- if (gtBalance || txNonce < nonce) return cb()
+ // if the value of the transaction is greater then the balance, fail.
+ if (!this.txProviderUtils.sufficientBalance(txMeta.txParams, balance)) {
+ const message = 'Insufficient balance.'
+ this.setTxStatusFailed(txMeta.id, { message })
+ cb()
+ return log.error(message)
+ }
+
// Only auto-submit already-signed txs:
if (!('rawTx' in txMeta)) return cb()
// Increment a try counter.
txMeta.retryCount++
const rawTx = txMeta.rawTx
- this.txProviderUtils.publishTransaction(rawTx, cb)
+ return await this.txProviderUtils.publishTransaction(rawTx, cb)
}
// checks the network for signed txs and
// if confirmed sets the tx status as 'confirmed'
- _checkPendingTxs () {
- var signedTxList = this.getFilteredTxList({status: 'submitted'})
- if (!signedTxList.length) return
- signedTxList.forEach((txMeta) => {
- var txHash = txMeta.hash
- var txId = txMeta.id
- if (!txHash) {
- const errReason = {
- errCode: 'No hash was provided',
- message: 'We had an error while submitting this transaction, please try again.',
- }
- return this.setTxStatusFailed(txId, errReason)
+ async _checkPendingTxs () {
+ const signedTxList = this.getFilteredTxList({status: 'submitted'})
+ // in order to keep the nonceTracker accurate we block it while updating pending transactions
+ const nonceGlobalLock = await this.nonceTracker.getGlobalLock()
+ try {
+ await Promise.all(signedTxList.map((txMeta) => this._checkPendingTx(txMeta)))
+ } catch (err) {
+ console.error('TransactionController - Error updating pending transactions')
+ console.error(err)
+ }
+ nonceGlobalLock.releaseLock()
+ }
+
+ async _checkPendingTx (txMeta) {
+ const txHash = txMeta.hash
+ const txId = txMeta.id
+ // extra check in case there was an uncaught error during the
+ // signature and submission process
+ if (!txHash) {
+ const errReason = {
+ errCode: 'No hash was provided',
+ message: 'We had an error while submitting this transaction, please try again.',
}
- this.query.getTransactionByHash(txHash, (err, txParams) => {
- if (err || !txParams) {
- if (!txParams) return
- txMeta.err = {
- isWarning: true,
- errorCode: err,
- message: 'There was a problem loading this transaction.',
- }
- this.updateTx(txMeta)
- return log.error(err)
- }
- if (txParams.blockNumber) {
- this.setTxStatusConfirmed(txId)
+ this.setTxStatusFailed(txId, errReason)
+ return
+ }
+ // get latest transaction status
+ let txParams
+ try {
+ txParams = await pify((cb) => this.query.getTransactionByHash(txHash, cb))()
+ if (!txParams) return
+ if (txParams.blockNumber) {
+ this.setTxStatusConfirmed(txId)
+ }
+ } catch (err) {
+ if (err || !txParams) {
+ txMeta.err = {
+ isWarning: true,
+ errorCode: err,
+ message: 'There was a problem loading this transaction.',
}
- })
- })
+ this.updateTx(txMeta)
+ log.error(err)
+ }
+ }
}
}
diff --git a/app/scripts/lib/auto-faucet.js b/app/scripts/lib/auto-faucet.js
deleted file mode 100644
index 38d54ba5e..000000000
--- a/app/scripts/lib/auto-faucet.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const uri = 'https://faucet.metamask.io/'
-const METAMASK_DEBUG = 'GULP_METAMASK_DEBUG'
-const env = process.env.METAMASK_ENV
-
-module.exports = function (address) {
- // Don't faucet in development or test
- if (METAMASK_DEBUG === true || env === 'test') return
- global.log.info('auto-fauceting:', address)
- const data = address
- const headers = new Headers()
- headers.append('Content-type', 'application/rawdata')
- fetch(uri, {
- method: 'POST',
- headers,
- body: data,
- })
- .catch((err) => {
- console.error(err)
- })
-}
diff --git a/app/scripts/lib/nodeify.js b/app/scripts/lib/nodeify.js
index 51d89a8fb..299bfe624 100644
--- a/app/scripts/lib/nodeify.js
+++ b/app/scripts/lib/nodeify.js
@@ -1,24 +1,9 @@
-module.exports = function (promiseFn) {
- return function () {
- var args = []
- for (var i = 0; i < arguments.length - 1; i++) {
- args.push(arguments[i])
- }
- var cb = arguments[arguments.length - 1]
+const promiseToCallback = require('promise-to-callback')
- const nodeified = promiseFn.apply(this, args)
-
- if (!nodeified) {
- const methodName = String(promiseFn).split('(')[0]
- throw new Error(`The ${methodName} did not return a Promise, but was nodeified.`)
- }
- nodeified.then(function (result) {
- cb(null, result)
- })
- .catch(function (reason) {
- cb(reason)
- })
-
- return nodeified
+module.exports = function(fn, context) {
+ return function(){
+ const args = [].slice.call(arguments)
+ const callback = args.pop()
+ promiseToCallback(fn.apply(context, args))(callback)
}
}
diff --git a/app/scripts/lib/nonce-tracker.js b/app/scripts/lib/nonce-tracker.js
new file mode 100644
index 000000000..b76dac4e8
--- /dev/null
+++ b/app/scripts/lib/nonce-tracker.js
@@ -0,0 +1,84 @@
+const EthQuery = require('eth-query')
+const assert = require('assert')
+const Mutex = require('await-semaphore').Mutex
+
+class NonceTracker {
+
+ constructor ({ blockTracker, provider, getPendingTransactions }) {
+ this.blockTracker = blockTracker
+ this.ethQuery = new EthQuery(provider)
+ this.getPendingTransactions = getPendingTransactions
+ this.lockMap = {}
+ }
+
+ async getGlobalLock () {
+ const globalMutex = this._lookupMutex('global')
+ // await global mutex free
+ const releaseLock = await globalMutex.acquire()
+ return { releaseLock }
+ }
+
+ // releaseLock must be called
+ // releaseLock must be called after adding signed tx to pending transactions (or discarding)
+ async getNonceLock (address) {
+ // await global mutex free
+ await this._globalMutexFree()
+ // await lock free, then take lock
+ const releaseLock = await this._takeMutex(address)
+ // calculate next nonce
+ // we need to make sure our base count
+ // and pending count are from the same block
+ const currentBlock = await this._getCurrentBlock()
+ const pendingTransactions = this.getPendingTransactions(address)
+ const pendingCount = pendingTransactions.length
+ assert(Number.isInteger(pendingCount), 'nonce-tracker - pendingCount is an integer')
+ const baseCountHex = await this._getTxCount(address, currentBlock)
+ const baseCount = parseInt(baseCountHex, 16)
+ assert(Number.isInteger(baseCount), 'nonce-tracker - baseCount is an integer')
+ const nextNonce = baseCount + pendingCount
+ assert(Number.isInteger(nextNonce), 'nonce-tracker - nextNonce is an integer')
+ // return next nonce and release cb
+ return { nextNonce, releaseLock }
+ }
+
+ async _getCurrentBlock () {
+ const currentBlock = this.blockTracker.getCurrentBlock()
+ if (currentBlock) return currentBlock
+ return await Promise((reject, resolve) => {
+ this.blockTracker.once('latest', resolve)
+ })
+ }
+
+ async _getTxCount (address, currentBlock) {
+ const blockNumber = currentBlock.number
+ return new Promise((resolve, reject) => {
+ this.ethQuery.getTransactionCount(address, blockNumber, (err, result) => {
+ err ? reject(err) : resolve(result)
+ })
+ })
+ }
+
+ async _globalMutexFree () {
+ const globalMutex = this._lookupMutex('global')
+ const release = await globalMutex.acquire()
+ release()
+ }
+
+ async _takeMutex (lockId) {
+ const mutex = this._lookupMutex(lockId)
+ const releaseLock = await mutex.acquire()
+ return releaseLock
+ }
+
+ _lookupMutex (lockId) {
+ let mutex = this.lockMap[lockId]
+ if (!mutex) {
+ mutex = new Mutex()
+ this.lockMap[lockId] = mutex
+ }
+ return mutex
+ }
+
+}
+
+module.exports = NonceTracker
diff --git a/app/scripts/lib/tx-utils.js b/app/scripts/lib/tx-utils.js
index 149d93102..8f6943937 100644
--- a/app/scripts/lib/tx-utils.js
+++ b/app/scripts/lib/tx-utils.js
@@ -106,8 +106,13 @@ module.exports = class txProviderUtils {
return ethTx
}
- publishTransaction (rawTx, cb) {
- this.query.sendRawTransaction(rawTx, cb)
+ publishTransaction (rawTx) {
+ return new Promise((resolve, reject) => {
+ this.query.sendRawTransaction(rawTx, (err, ress) => {
+ if (err) reject(err)
+ else resolve(ress)
+ })
+ })
}
validateTxParams (txParams, cb) {
@@ -118,6 +123,15 @@ module.exports = class txProviderUtils {
}
}
+ sufficientBalance (txParams, hexBalance) {
+ const balance = hexToBn(hexBalance)
+ const value = hexToBn(txParams.value)
+ const gasLimit = hexToBn(txParams.gas)
+ const gasPrice = hexToBn(txParams.gasPrice)
+
+ const maxCost = value.add(gasLimit.mul(gasPrice))
+ return balance.gte(maxCost)
+ }
}
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 73093dfad..11dcde2c1 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -20,7 +20,6 @@ const MessageManager = require('./lib/message-manager')
const PersonalMessageManager = require('./lib/personal-message-manager')
const TransactionController = require('./controllers/transactions')
const ConfigManager = require('./lib/config-manager')
-const autoFaucet = require('./lib/auto-faucet')
const nodeify = require('./lib/nodeify')
const accountImporter = require('./account-import-strategies')
const getBuyEthUrl = require('./lib/buy-eth-url')
@@ -90,9 +89,6 @@ module.exports = class MetamaskController extends EventEmitter {
this.keyringController.on('newAccount', (address) => {
this.preferencesController.setSelectedAddress(address)
})
- this.keyringController.on('newVault', (address) => {
- autoFaucet(address)
- })
// address book controller
this.addressBookController = new AddressBookController({
@@ -294,34 +290,33 @@ module.exports = class MetamaskController extends EventEmitter {
submitPassword: this.submitPassword.bind(this),
// PreferencesController
- setSelectedAddress: nodeify(preferencesController.setSelectedAddress).bind(preferencesController),
- addToken: nodeify(preferencesController.addToken).bind(preferencesController),
- setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab).bind(preferencesController),
- setDefaultRpc: nodeify(this.setDefaultRpc).bind(this),
- setCustomRpc: nodeify(this.setCustomRpc).bind(this),
+ setSelectedAddress: nodeify(preferencesController.setSelectedAddress, preferencesController),
+ addToken: nodeify(preferencesController.addToken, preferencesController),
+ setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab, preferencesController),
+ setDefaultRpc: nodeify(this.setDefaultRpc, this),
+ setCustomRpc: nodeify(this.setCustomRpc, this),
// AddressController
- setAddressBook: nodeify(addressBookController.setAddressBook).bind(addressBookController),
+ setAddressBook: nodeify(addressBookController.setAddressBook, addressBookController),
// KeyringController
- setLocked: nodeify(keyringController.setLocked).bind(keyringController),
- createNewVaultAndKeychain: nodeify(keyringController.createNewVaultAndKeychain).bind(keyringController),
- createNewVaultAndRestore: nodeify(keyringController.createNewVaultAndRestore).bind(keyringController),
- addNewKeyring: nodeify(keyringController.addNewKeyring).bind(keyringController),
- saveAccountLabel: nodeify(keyringController.saveAccountLabel).bind(keyringController),
- exportAccount: nodeify(keyringController.exportAccount).bind(keyringController),
+ setLocked: nodeify(keyringController.setLocked, keyringController),
+ createNewVaultAndKeychain: nodeify(keyringController.createNewVaultAndKeychain, keyringController),
+ createNewVaultAndRestore: nodeify(keyringController.createNewVaultAndRestore, keyringController),
+ addNewKeyring: nodeify(keyringController.addNewKeyring, keyringController),
+ saveAccountLabel: nodeify(keyringController.saveAccountLabel, keyringController),
+ exportAccount: nodeify(keyringController.exportAccount, keyringController),
// txController
- approveTransaction: txController.approveTransaction.bind(txController),
cancelTransaction: txController.cancelTransaction.bind(txController),
- updateAndApproveTransaction: this.updateAndApproveTx.bind(this),
+ updateAndApproveTransaction: nodeify(txController.updateAndApproveTransaction, txController),
// messageManager
- signMessage: nodeify(this.signMessage).bind(this),
+ signMessage: nodeify(this.signMessage, this),
cancelMessage: this.cancelMessage.bind(this),
// personalMessageManager
- signPersonalMessage: nodeify(this.signPersonalMessage).bind(this),
+ signPersonalMessage: nodeify(this.signPersonalMessage, this),
cancelPersonalMessage: this.cancelPersonalMessage.bind(this),
// notices
@@ -367,7 +362,7 @@ module.exports = class MetamaskController extends EventEmitter {
function onResponse (err, request, response) {
if (err) return console.error(err)
if (response.error) {
- console.error('Error in RPC response:\n', response.error)
+ console.error('Error in RPC response:\n', response)
}
if (request.isMetamaskInternal) return
log.info(`RPC (${originDomain}):`, request, '->', response)
@@ -502,13 +497,6 @@ module.exports = class MetamaskController extends EventEmitter {
})
}
- updateAndApproveTx (txMeta, cb) {
- log.debug(`MetaMaskController - updateAndApproveTx: ${JSON.stringify(txMeta)}`)
- const txController = this.txController
- txController.updateTx(txMeta)
- txController.approveTransaction(txMeta.id, cb)
- }
-
signMessage (msgParams, cb) {
log.info('MetaMaskController - signMessage')
const msgId = msgParams.metamaskId
diff --git a/app/scripts/migrations/016.js b/app/scripts/migrations/016.js
new file mode 100644
index 000000000..4fc534f1c
--- /dev/null
+++ b/app/scripts/migrations/016.js
@@ -0,0 +1,41 @@
+const version = 16
+
+/*
+
+This migration sets transactions with the 'Gave up submitting tx.' err message
+to a 'failed' stated
+
+*/
+
+const clone = require('clone')
+
+module.exports = {
+ version,
+
+ migrate: function (originalVersionedData) {
+ const versionedData = clone(originalVersionedData)
+ versionedData.meta.version = version
+ try {
+ const state = versionedData.data
+ const newState = transformState(state)
+ versionedData.data = newState
+ } catch (err) {
+ console.warn(`MetaMask Migration #${version}` + err.stack)
+ }
+ return Promise.resolve(versionedData)
+ },
+}
+
+function transformState (state) {
+ const newState = state
+ const transactions = newState.TransactionController.transactions
+ newState.TransactionController.transactions = transactions.map((txMeta) => {
+ if (!txMeta.err) return txMeta
+ if (txMeta.err === 'transaction with the same hash was already imported.') {
+ txMeta.status = 'submitted'
+ delete txMeta.err
+ }
+ return txMeta
+ })
+ return newState
+}
diff --git a/app/scripts/migrations/017.js b/app/scripts/migrations/017.js
new file mode 100644
index 000000000..24959cd3a
--- /dev/null
+++ b/app/scripts/migrations/017.js
@@ -0,0 +1,40 @@
+const version = 17
+
+/*
+
+This migration sets transactions who were retried and marked as failed to submitted
+
+*/
+
+const clone = require('clone')
+
+module.exports = {
+ version,
+
+ migrate: function (originalVersionedData) {
+ const versionedData = clone(originalVersionedData)
+ versionedData.meta.version = version
+ try {
+ const state = versionedData.data
+ const newState = transformState(state)
+ versionedData.data = newState
+ } catch (err) {
+ console.warn(`MetaMask Migration #${version}` + err.stack)
+ }
+ return Promise.resolve(versionedData)
+ },
+}
+
+function transformState (state) {
+ const newState = state
+ const transactions = newState.TransactionController.transactions
+ newState.TransactionController.transactions = transactions.map((txMeta) => {
+ if (!txMeta.status === 'failed') return txMeta
+ if (txMeta.retryCount > 0 && txMeta.retryCount < 2) {
+ txMeta.status = 'submitted'
+ delete txMeta.err
+ }
+ return txMeta
+ })
+ return newState
+}
diff --git a/app/scripts/migrations/index.js b/app/scripts/migrations/index.js
index 651ee6a9c..f4c87499f 100644
--- a/app/scripts/migrations/index.js
+++ b/app/scripts/migrations/index.js
@@ -26,4 +26,6 @@ module.exports = [
require('./013'),
require('./014'),
require('./015'),
+ require('./016'),
+ require('./017'),
]
diff --git a/app/scripts/popup-core.js b/app/scripts/popup-core.js
index 156be795a..f1eb394d7 100644
--- a/app/scripts/popup-core.js
+++ b/app/scripts/popup-core.js
@@ -2,7 +2,7 @@ const EventEmitter = require('events').EventEmitter
const async = require('async')
const Dnode = require('dnode')
const EthQuery = require('eth-query')
-const launchMetamaskUi = require('../../ui/classic')
+const launchMetamaskUi = require('../../ui')
const StreamProvider = require('web3-stream-provider')
const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
diff --git a/app/scripts/popup.js b/app/scripts/popup.js
index 13b98d1f6..5f17f0651 100644
--- a/app/scripts/popup.js
+++ b/app/scripts/popup.js
@@ -1,5 +1,5 @@
const injectCss = require('inject-css')
-const MetaMaskUiCss = require('../../ui/classic/css')
+const MetaMaskUiCss = require('../../ui/css')
const startPopup = require('./popup-core')
const PortStream = require('./lib/port-stream.js')
const isPopupOrNotification = require('./lib/is-popup-or-notification')
diff --git a/app/scripts/responsive-core.js b/app/scripts/responsive-core.js
index 3760facfa..c3fa6700d 100644
--- a/app/scripts/responsive-core.js
+++ b/app/scripts/responsive-core.js
@@ -2,7 +2,7 @@ const EventEmitter = require('events').EventEmitter
const async = require('async')
const Dnode = require('dnode')
const EthQuery = require('eth-query')
-const launchMetamaskUi = require('../../ui/responsive')
+const launchMetamaskUi = require('../../responsive-ui')
const StreamProvider = require('web3-stream-provider')
const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
diff --git a/app/scripts/responsive.js b/app/scripts/responsive.js
index 0ff42a4cb..6525b833b 100644
--- a/app/scripts/responsive.js
+++ b/app/scripts/responsive.js
@@ -1,6 +1,6 @@
const injectCss = require('inject-css')
const startPopup = require('./responsive-core')
-const MetaMaskUiCss = require('../../ui/responsive/css')
+const MetaMaskUiCss = require('../../responsive-ui/css')
const PortStream = require('./lib/port-stream.js')
const ExtensionPlatform = require('./platforms/extension')
const extension = require('extensionizer')
diff --git a/circle.yml b/circle.yml
index 1f018ac24..66eed17d7 100644
--- a/circle.yml
+++ b/circle.yml
@@ -1,6 +1,6 @@
machine:
node:
- version: 8.0.0
+ version: 8.1.4
dependencies:
pre:
- "npm i -g testem"
diff --git a/gulpfile.js b/gulpfile.js
index 628314b37..f0a28e273 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -172,6 +172,7 @@ gulp.task('default', ['lint'], function () {
const jsFiles = [
'inpage',
'contentscript',
+ 'blacklister',
'background',
'popup',
'responsive'
diff --git a/package.json b/package.json
index 0129583f7..a95f2c75f 100644
--- a/package.json
+++ b/package.json
@@ -7,10 +7,12 @@
"start": "npm run dev",
"dev": "gulp dev --debug",
"disc": "gulp disc --debug",
- "dist": "npm install && gulp dist",
+ "clear": "rm -rf node_modules/eth-contract-metadata && rm -rf node_modules/etheraddresslookup",
+ "dist": "npm run clear && npm install && gulp dist",
"test": "npm run lint && npm run test-unit && npm run test-integration",
"test-unit": "METAMASK_ENV=test mocha --require test/helper.js --recursive \"test/unit/**/*.js\"",
"test-responsive": "METAMASK_ENV=test mocha --require test/helper.js --recursive \"test/unit/responsive/**/*.js\"",
+ "single-test": "METAMASK_ENV=test mocha --require test/helper.js",
"test-integration": "npm run buildMock && npm run buildCiUnits && testem ci -P 2",
"lint": "gulp lint",
"buildCiUnits": "node test/integration/index.js",
@@ -46,6 +48,7 @@
},
"dependencies": {
"async": "^1.5.2",
+ "await-semaphore": "^0.1.1",
"babel-runtime": "^6.23.0",
"bip39": "^2.2.0",
"bluebird": "^3.5.0",
@@ -56,19 +59,19 @@
"copy-to-clipboard": "^2.0.0",
"debounce": "^1.0.0",
"deep-extend": "^0.4.1",
- "denodeify": "^1.2.1",
"detect-node": "^2.0.3",
"disc": "^1.3.2",
"dnode": "^1.2.2",
"end-of-stream": "^1.1.0",
"ensnare": "^1.0.0",
"eth-bin-to-ops": "^1.0.1",
- "eth-contract-metadata": "^1.1.3",
+ "eth-contract-metadata": "^1.1.4",
"eth-hd-keyring": "^1.1.1",
"eth-query": "^2.1.2",
- "eth-sig-util": "^1.1.1",
+ "eth-sig-util": "^1.2.2",
"eth-simple-keyring": "^1.1.1",
"eth-token-tracker": "^1.1.2",
+ "etheraddresslookup": "github:409H/EtherAddressLookup",
"ethereumjs-tx": "^1.3.0",
"ethereumjs-util": "ethereumjs/ethereumjs-util#ac5d0908536b447083ea422b435da27f26615de9",
"ethereumjs-wallet": "^0.6.0",
@@ -125,7 +128,7 @@
"valid-url": "^1.0.9",
"vreme": "^3.0.2",
"web3": "0.19.1",
- "web3-provider-engine": "^13.1.1",
+ "web3-provider-engine": "^13.2.8",
"web3-stream-provider": "^3.0.1",
"xtend": "^4.0.1"
},
@@ -175,7 +178,7 @@
"react-addons-test-utils": "^15.5.1",
"react-test-renderer": "^15.5.4",
"react-testutils-additions": "^15.2.0",
- "sinon": "^1.17.3",
+ "sinon": "^2.3.8",
"tape": "^4.5.1",
"testem": "^1.10.3",
"uglifyify": "^3.0.1",
diff --git a/ui/classic/.gitignore b/responsive-ui/.gitignore
index c6b1254b5..c6b1254b5 100644
--- a/ui/classic/.gitignore
+++ b/responsive-ui/.gitignore
diff --git a/ui/responsive/app/account-detail.js b/responsive-ui/app/account-detail.js
index da1ddf98b..da1ddf98b 100644
--- a/ui/responsive/app/account-detail.js
+++ b/responsive-ui/app/account-detail.js
diff --git a/ui/classic/app/accounts/import/index.js b/responsive-ui/app/accounts/import/index.js
index 97b387229..97b387229 100644
--- a/ui/classic/app/accounts/import/index.js
+++ b/responsive-ui/app/accounts/import/index.js
diff --git a/ui/classic/app/accounts/import/json.js b/responsive-ui/app/accounts/import/json.js
index 158a3c923..158a3c923 100644
--- a/ui/classic/app/accounts/import/json.js
+++ b/responsive-ui/app/accounts/import/json.js
diff --git a/ui/classic/app/accounts/import/private-key.js b/responsive-ui/app/accounts/import/private-key.js
index 68ccee58e..68ccee58e 100644
--- a/ui/classic/app/accounts/import/private-key.js
+++ b/responsive-ui/app/accounts/import/private-key.js
diff --git a/ui/classic/app/accounts/import/seed.js b/responsive-ui/app/accounts/import/seed.js
index b4a7c0afa..b4a7c0afa 100644
--- a/ui/classic/app/accounts/import/seed.js
+++ b/responsive-ui/app/accounts/import/seed.js
diff --git a/ui/classic/app/actions.js b/responsive-ui/app/actions.js
index 2c60448dd..2c60448dd 100644
--- a/ui/classic/app/actions.js
+++ b/responsive-ui/app/actions.js
diff --git a/ui/classic/app/add-token.js b/responsive-ui/app/add-token.js
index b303b5c0d..b303b5c0d 100644
--- a/ui/classic/app/add-token.js
+++ b/responsive-ui/app/add-token.js
diff --git a/ui/responsive/app/app.js b/responsive-ui/app/app.js
index 1cfa2d7a9..1cfa2d7a9 100644
--- a/ui/responsive/app/app.js
+++ b/responsive-ui/app/app.js
diff --git a/ui/responsive/app/components/account-dropdowns.js b/responsive-ui/app/components/account-dropdowns.js
index d1d319477..d1d319477 100644
--- a/ui/responsive/app/components/account-dropdowns.js
+++ b/responsive-ui/app/components/account-dropdowns.js
diff --git a/ui/classic/app/components/account-export.js b/responsive-ui/app/components/account-export.js
index 394d878f7..394d878f7 100644
--- a/ui/classic/app/components/account-export.js
+++ b/responsive-ui/app/components/account-export.js
diff --git a/ui/classic/app/components/account-panel.js b/responsive-ui/app/components/account-panel.js
index abaaf8163..abaaf8163 100644
--- a/ui/classic/app/components/account-panel.js
+++ b/responsive-ui/app/components/account-panel.js
diff --git a/ui/classic/app/components/balance.js b/responsive-ui/app/components/balance.js
index 57ca84564..57ca84564 100644
--- a/ui/classic/app/components/balance.js
+++ b/responsive-ui/app/components/balance.js
diff --git a/ui/classic/app/components/binary-renderer.js b/responsive-ui/app/components/binary-renderer.js
index 0b6a1f5c2..0b6a1f5c2 100644
--- a/ui/classic/app/components/binary-renderer.js
+++ b/responsive-ui/app/components/binary-renderer.js
diff --git a/ui/classic/app/components/bn-as-decimal-input.js b/responsive-ui/app/components/bn-as-decimal-input.js
index f3ace4720..f3ace4720 100644
--- a/ui/classic/app/components/bn-as-decimal-input.js
+++ b/responsive-ui/app/components/bn-as-decimal-input.js
diff --git a/ui/classic/app/components/buy-button-subview.js b/responsive-ui/app/components/buy-button-subview.js
index 87084f92d..87084f92d 100644
--- a/ui/classic/app/components/buy-button-subview.js
+++ b/responsive-ui/app/components/buy-button-subview.js
diff --git a/ui/classic/app/components/coinbase-form.js b/responsive-ui/app/components/coinbase-form.js
index f44d86045..f44d86045 100644
--- a/ui/classic/app/components/coinbase-form.js
+++ b/responsive-ui/app/components/coinbase-form.js
diff --git a/ui/classic/app/components/copyButton.js b/responsive-ui/app/components/copyButton.js
index a25d0719c..a25d0719c 100644
--- a/ui/classic/app/components/copyButton.js
+++ b/responsive-ui/app/components/copyButton.js
diff --git a/ui/classic/app/components/copyable.js b/responsive-ui/app/components/copyable.js
index a4f6f4bc6..a4f6f4bc6 100644
--- a/ui/classic/app/components/copyable.js
+++ b/responsive-ui/app/components/copyable.js
diff --git a/ui/classic/app/components/custom-radio-list.js b/responsive-ui/app/components/custom-radio-list.js
index a4c525396..a4c525396 100644
--- a/ui/classic/app/components/custom-radio-list.js
+++ b/responsive-ui/app/components/custom-radio-list.js
diff --git a/ui/responsive/app/components/dropdown.js b/responsive-ui/app/components/dropdown.js
index e77b4c40c..e77b4c40c 100644
--- a/ui/responsive/app/components/dropdown.js
+++ b/responsive-ui/app/components/dropdown.js
diff --git a/ui/responsive/app/components/editable-label.js b/responsive-ui/app/components/editable-label.js
index 167be7eaf..167be7eaf 100644
--- a/ui/responsive/app/components/editable-label.js
+++ b/responsive-ui/app/components/editable-label.js
diff --git a/ui/classic/app/components/ens-input.js b/responsive-ui/app/components/ens-input.js
index 3a33ebf74..3a33ebf74 100644
--- a/ui/classic/app/components/ens-input.js
+++ b/responsive-ui/app/components/ens-input.js
diff --git a/ui/classic/app/components/eth-balance.js b/responsive-ui/app/components/eth-balance.js
index 4f538fd31..4f538fd31 100644
--- a/ui/classic/app/components/eth-balance.js
+++ b/responsive-ui/app/components/eth-balance.js
diff --git a/ui/classic/app/components/fiat-value.js b/responsive-ui/app/components/fiat-value.js
index 8a64a1cfc..8a64a1cfc 100644
--- a/ui/classic/app/components/fiat-value.js
+++ b/responsive-ui/app/components/fiat-value.js
diff --git a/ui/classic/app/components/hex-as-decimal-input.js b/responsive-ui/app/components/hex-as-decimal-input.js
index 4a71e9585..4a71e9585 100644
--- a/ui/classic/app/components/hex-as-decimal-input.js
+++ b/responsive-ui/app/components/hex-as-decimal-input.js
diff --git a/ui/classic/app/components/identicon.js b/responsive-ui/app/components/identicon.js
index c754bc6ba..c754bc6ba 100644
--- a/ui/classic/app/components/identicon.js
+++ b/responsive-ui/app/components/identicon.js
diff --git a/ui/classic/app/components/loading.js b/responsive-ui/app/components/loading.js
index 87d6f5d20..87d6f5d20 100644
--- a/ui/classic/app/components/loading.js
+++ b/responsive-ui/app/components/loading.js
diff --git a/ui/classic/app/components/mascot.js b/responsive-ui/app/components/mascot.js
index 973ec2cad..973ec2cad 100644
--- a/ui/classic/app/components/mascot.js
+++ b/responsive-ui/app/components/mascot.js
diff --git a/ui/classic/app/components/mini-account-panel.js b/responsive-ui/app/components/mini-account-panel.js
index c09cf5b7a..c09cf5b7a 100644
--- a/ui/classic/app/components/mini-account-panel.js
+++ b/responsive-ui/app/components/mini-account-panel.js
diff --git a/ui/classic/app/components/network.js b/responsive-ui/app/components/network.js
index 698a0bbb9..698a0bbb9 100644
--- a/ui/classic/app/components/network.js
+++ b/responsive-ui/app/components/network.js
diff --git a/ui/classic/app/components/notice.js b/responsive-ui/app/components/notice.js
index d9f0067cd..d9f0067cd 100644
--- a/ui/classic/app/components/notice.js
+++ b/responsive-ui/app/components/notice.js
diff --git a/ui/classic/app/components/pending-msg-details.js b/responsive-ui/app/components/pending-msg-details.js
index 16308d121..16308d121 100644
--- a/ui/classic/app/components/pending-msg-details.js
+++ b/responsive-ui/app/components/pending-msg-details.js
diff --git a/ui/classic/app/components/pending-msg.js b/responsive-ui/app/components/pending-msg.js
index b2cac164a..b2cac164a 100644
--- a/ui/classic/app/components/pending-msg.js
+++ b/responsive-ui/app/components/pending-msg.js
diff --git a/ui/classic/app/components/pending-personal-msg-details.js b/responsive-ui/app/components/pending-personal-msg-details.js
index 1050513f2..1050513f2 100644
--- a/ui/classic/app/components/pending-personal-msg-details.js
+++ b/responsive-ui/app/components/pending-personal-msg-details.js
diff --git a/ui/classic/app/components/pending-personal-msg.js b/responsive-ui/app/components/pending-personal-msg.js
index 4542adb28..4542adb28 100644
--- a/ui/classic/app/components/pending-personal-msg.js
+++ b/responsive-ui/app/components/pending-personal-msg.js
diff --git a/ui/classic/app/components/pending-tx.js b/responsive-ui/app/components/pending-tx.js
index 962680d30..962680d30 100644
--- a/ui/classic/app/components/pending-tx.js
+++ b/responsive-ui/app/components/pending-tx.js
diff --git a/ui/classic/app/components/qr-code.js b/responsive-ui/app/components/qr-code.js
index 06b9aed9b..06b9aed9b 100644
--- a/ui/classic/app/components/qr-code.js
+++ b/responsive-ui/app/components/qr-code.js
diff --git a/ui/classic/app/components/range-slider.js b/responsive-ui/app/components/range-slider.js
index 823f5eb01..823f5eb01 100644
--- a/ui/classic/app/components/range-slider.js
+++ b/responsive-ui/app/components/range-slider.js
diff --git a/ui/classic/app/components/shapeshift-form.js b/responsive-ui/app/components/shapeshift-form.js
index e0a720426..e0a720426 100644
--- a/ui/classic/app/components/shapeshift-form.js
+++ b/responsive-ui/app/components/shapeshift-form.js
diff --git a/ui/classic/app/components/shift-list-item.js b/responsive-ui/app/components/shift-list-item.js
index 32bfbeda4..32bfbeda4 100644
--- a/ui/classic/app/components/shift-list-item.js
+++ b/responsive-ui/app/components/shift-list-item.js
diff --git a/ui/classic/app/components/tab-bar.js b/responsive-ui/app/components/tab-bar.js
index 6295e7dd9..6295e7dd9 100644
--- a/ui/classic/app/components/tab-bar.js
+++ b/responsive-ui/app/components/tab-bar.js
diff --git a/ui/classic/app/components/template.js b/responsive-ui/app/components/template.js
index b6ed8eaa0..b6ed8eaa0 100644
--- a/ui/classic/app/components/template.js
+++ b/responsive-ui/app/components/template.js
diff --git a/ui/classic/app/components/token-cell.js b/responsive-ui/app/components/token-cell.js
index 19d7139bb..19d7139bb 100644
--- a/ui/classic/app/components/token-cell.js
+++ b/responsive-ui/app/components/token-cell.js
diff --git a/ui/classic/app/components/token-list.js b/responsive-ui/app/components/token-list.js
index 20cfa897e..20cfa897e 100644
--- a/ui/classic/app/components/token-list.js
+++ b/responsive-ui/app/components/token-list.js
diff --git a/ui/classic/app/components/tooltip.js b/responsive-ui/app/components/tooltip.js
index edbc074bb..edbc074bb 100644
--- a/ui/classic/app/components/tooltip.js
+++ b/responsive-ui/app/components/tooltip.js
diff --git a/ui/classic/app/components/transaction-list-item-icon.js b/responsive-ui/app/components/transaction-list-item-icon.js
index 431054340..431054340 100644
--- a/ui/classic/app/components/transaction-list-item-icon.js
+++ b/responsive-ui/app/components/transaction-list-item-icon.js
diff --git a/ui/classic/app/components/transaction-list-item.js b/responsive-ui/app/components/transaction-list-item.js
index dbda66a31..dbda66a31 100644
--- a/ui/classic/app/components/transaction-list-item.js
+++ b/responsive-ui/app/components/transaction-list-item.js
diff --git a/ui/classic/app/components/transaction-list.js b/responsive-ui/app/components/transaction-list.js
index 3b4ba741e..3b4ba741e 100644
--- a/ui/classic/app/components/transaction-list.js
+++ b/responsive-ui/app/components/transaction-list.js
diff --git a/ui/responsive/app/conf-tx.js b/responsive-ui/app/conf-tx.js
index 63b77ef7f..747d3ce2b 100644
--- a/ui/responsive/app/conf-tx.js
+++ b/responsive-ui/app/conf-tx.js
@@ -6,7 +6,7 @@ const connect = require('react-redux').connect
const actions = require('./actions')
const NetworkIndicator = require('./components/network')
const txHelper = require('../lib/tx-helper')
-const isPopupOrNotification = require('../../../app/scripts/lib/is-popup-or-notification')
+const isPopupOrNotification = require('../../app/scripts/lib/is-popup-or-notification')
const PendingTx = require('./components/pending-tx')
const PendingMsg = require('./components/pending-msg')
diff --git a/ui/classic/app/config.js b/responsive-ui/app/config.js
index 62785c49b..62785c49b 100644
--- a/ui/classic/app/config.js
+++ b/responsive-ui/app/config.js
diff --git a/ui/classic/app/conversion.json b/responsive-ui/app/conversion.json
index 155ffc4fc..155ffc4fc 100644
--- a/ui/classic/app/conversion.json
+++ b/responsive-ui/app/conversion.json
diff --git a/ui/classic/app/css/debug.css b/responsive-ui/app/css/debug.css
index 3e125bcd4..3e125bcd4 100644
--- a/ui/classic/app/css/debug.css
+++ b/responsive-ui/app/css/debug.css
diff --git a/ui/classic/app/css/fonts.css b/responsive-ui/app/css/fonts.css
index 3b9f581b9..3b9f581b9 100644
--- a/ui/classic/app/css/fonts.css
+++ b/responsive-ui/app/css/fonts.css
diff --git a/ui/responsive/app/css/index.css b/responsive-ui/app/css/index.css
index c82c1b21b..c82c1b21b 100644
--- a/ui/responsive/app/css/index.css
+++ b/responsive-ui/app/css/index.css
diff --git a/ui/classic/app/css/lib.css b/responsive-ui/app/css/lib.css
index 910a24ee2..910a24ee2 100644
--- a/ui/classic/app/css/lib.css
+++ b/responsive-ui/app/css/lib.css
diff --git a/ui/classic/app/css/reset.css b/responsive-ui/app/css/reset.css
index 9ce89e8bc..9ce89e8bc 100644
--- a/ui/classic/app/css/reset.css
+++ b/responsive-ui/app/css/reset.css
diff --git a/ui/classic/app/css/transitions.css b/responsive-ui/app/css/transitions.css
index 393a944f9..393a944f9 100644
--- a/ui/classic/app/css/transitions.css
+++ b/responsive-ui/app/css/transitions.css
diff --git a/ui/classic/app/first-time/init-menu.js b/responsive-ui/app/first-time/init-menu.js
index cc7c51bd3..cc7c51bd3 100644
--- a/ui/classic/app/first-time/init-menu.js
+++ b/responsive-ui/app/first-time/init-menu.js
diff --git a/ui/classic/app/img/identicon-tardigrade.png b/responsive-ui/app/img/identicon-tardigrade.png
index 1742a32b8..1742a32b8 100644
--- a/ui/classic/app/img/identicon-tardigrade.png
+++ b/responsive-ui/app/img/identicon-tardigrade.png
Binary files differ
diff --git a/ui/classic/app/img/identicon-walrus.png b/responsive-ui/app/img/identicon-walrus.png
index d58fae912..d58fae912 100644
--- a/ui/classic/app/img/identicon-walrus.png
+++ b/responsive-ui/app/img/identicon-walrus.png
Binary files differ
diff --git a/ui/classic/app/info.js b/responsive-ui/app/info.js
index e8470de97..e8470de97 100644
--- a/ui/classic/app/info.js
+++ b/responsive-ui/app/info.js
diff --git a/ui/responsive/app/keychains/hd/create-vault-complete.js b/responsive-ui/app/keychains/hd/create-vault-complete.js
index c32751fff..c32751fff 100644
--- a/ui/responsive/app/keychains/hd/create-vault-complete.js
+++ b/responsive-ui/app/keychains/hd/create-vault-complete.js
diff --git a/ui/classic/app/keychains/hd/recover-seed/confirmation.js b/responsive-ui/app/keychains/hd/recover-seed/confirmation.js
index 4ccbec9fc..4ccbec9fc 100644
--- a/ui/classic/app/keychains/hd/recover-seed/confirmation.js
+++ b/responsive-ui/app/keychains/hd/recover-seed/confirmation.js
diff --git a/ui/classic/app/keychains/hd/restore-vault.js b/responsive-ui/app/keychains/hd/restore-vault.js
index 06e51d9b3..06e51d9b3 100644
--- a/ui/classic/app/keychains/hd/restore-vault.js
+++ b/responsive-ui/app/keychains/hd/restore-vault.js
diff --git a/ui/classic/app/new-keychain.js b/responsive-ui/app/new-keychain.js
index cc9633166..cc9633166 100644
--- a/ui/classic/app/new-keychain.js
+++ b/responsive-ui/app/new-keychain.js
diff --git a/ui/classic/app/reducers.js b/responsive-ui/app/reducers.js
index 11efca529..11efca529 100644
--- a/ui/classic/app/reducers.js
+++ b/responsive-ui/app/reducers.js
diff --git a/ui/classic/app/reducers/app.js b/responsive-ui/app/reducers/app.js
index 2fcc9bfe0..2fcc9bfe0 100644
--- a/ui/classic/app/reducers/app.js
+++ b/responsive-ui/app/reducers/app.js
diff --git a/ui/classic/app/reducers/identities.js b/responsive-ui/app/reducers/identities.js
index 341a404e7..341a404e7 100644
--- a/ui/classic/app/reducers/identities.js
+++ b/responsive-ui/app/reducers/identities.js
diff --git a/ui/classic/app/reducers/metamask.js b/responsive-ui/app/reducers/metamask.js
index e0c416c2d..e0c416c2d 100644
--- a/ui/classic/app/reducers/metamask.js
+++ b/responsive-ui/app/reducers/metamask.js
diff --git a/ui/classic/app/root.js b/responsive-ui/app/root.js
index 9e7314b20..9e7314b20 100644
--- a/ui/classic/app/root.js
+++ b/responsive-ui/app/root.js
diff --git a/ui/classic/app/send.js b/responsive-ui/app/send.js
index a21a219eb..a21a219eb 100644
--- a/ui/classic/app/send.js
+++ b/responsive-ui/app/send.js
diff --git a/ui/classic/app/settings.js b/responsive-ui/app/settings.js
index 454cc95e0..454cc95e0 100644
--- a/ui/classic/app/settings.js
+++ b/responsive-ui/app/settings.js
diff --git a/ui/classic/app/store.js b/responsive-ui/app/store.js
index ba9e58b49..ba9e58b49 100644
--- a/ui/classic/app/store.js
+++ b/responsive-ui/app/store.js
diff --git a/ui/classic/app/template.js b/responsive-ui/app/template.js
index d15b30fd2..d15b30fd2 100644
--- a/ui/classic/app/template.js
+++ b/responsive-ui/app/template.js
diff --git a/ui/classic/app/unlock.js b/responsive-ui/app/unlock.js
index 1aee3c5d0..1aee3c5d0 100644
--- a/ui/classic/app/unlock.js
+++ b/responsive-ui/app/unlock.js
diff --git a/ui/classic/app/util.js b/responsive-ui/app/util.js
index ac3f42c6b..ac3f42c6b 100644
--- a/ui/classic/app/util.js
+++ b/responsive-ui/app/util.js
diff --git a/ui/classic/css.js b/responsive-ui/css.js
index 7c394a87b..043363cd7 100644
--- a/ui/classic/css.js
+++ b/responsive-ui/css.js
@@ -9,8 +9,8 @@ var cssFiles = {
'lib.css': fs.readFileSync(path.join(__dirname, '/app/css/lib.css'), 'utf8'),
'index.css': fs.readFileSync(path.join(__dirname, '/app/css/index.css'), 'utf8'),
'transitions.css': fs.readFileSync(path.join(__dirname, '/app/css/transitions.css'), 'utf8'),
- 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
- 'react-css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
+ 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
+ 'react-css': fs.readFileSync(path.join(__dirname, '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
}
function bundleCss () {
diff --git a/ui/classic/design/00-metamask-SignIn.jpg b/responsive-ui/design/00-metamask-SignIn.jpg
index 2becdb032..2becdb032 100644
--- a/ui/classic/design/00-metamask-SignIn.jpg
+++ b/responsive-ui/design/00-metamask-SignIn.jpg
Binary files differ
diff --git a/ui/classic/design/01-metamask-SelectAcc.jpg b/responsive-ui/design/01-metamask-SelectAcc.jpg
index 239091a98..239091a98 100644
--- a/ui/classic/design/01-metamask-SelectAcc.jpg
+++ b/responsive-ui/design/01-metamask-SelectAcc.jpg
Binary files differ
diff --git a/ui/classic/design/02-metamask-AccDetails.jpg b/responsive-ui/design/02-metamask-AccDetails.jpg
index d7d408ffc..d7d408ffc 100644
--- a/ui/classic/design/02-metamask-AccDetails.jpg
+++ b/responsive-ui/design/02-metamask-AccDetails.jpg
Binary files differ
diff --git a/ui/classic/design/02a-metamask-AccDetails-OverToken.jpg b/responsive-ui/design/02a-metamask-AccDetails-OverToken.jpg
index f26ff31e8..f26ff31e8 100644
--- a/ui/classic/design/02a-metamask-AccDetails-OverToken.jpg
+++ b/responsive-ui/design/02a-metamask-AccDetails-OverToken.jpg
Binary files differ
diff --git a/ui/classic/design/02a-metamask-AccDetails-OverTransaction.jpg b/responsive-ui/design/02a-metamask-AccDetails-OverTransaction.jpg
index 8a06be6b9..8a06be6b9 100644
--- a/ui/classic/design/02a-metamask-AccDetails-OverTransaction.jpg
+++ b/responsive-ui/design/02a-metamask-AccDetails-OverTransaction.jpg
Binary files differ
diff --git a/ui/classic/design/02a-metamask-AccDetails.jpg b/responsive-ui/design/02a-metamask-AccDetails.jpg
index c37e0f539..c37e0f539 100644
--- a/ui/classic/design/02a-metamask-AccDetails.jpg
+++ b/responsive-ui/design/02a-metamask-AccDetails.jpg
Binary files differ
diff --git a/ui/classic/design/02b-metamask-AccDetails-Send.jpg b/responsive-ui/design/02b-metamask-AccDetails-Send.jpg
index 10f2d27fd..10f2d27fd 100644
--- a/ui/classic/design/02b-metamask-AccDetails-Send.jpg
+++ b/responsive-ui/design/02b-metamask-AccDetails-Send.jpg
Binary files differ
diff --git a/ui/classic/design/03-metamask-Qr.jpg b/responsive-ui/design/03-metamask-Qr.jpg
index 9c09de42f..9c09de42f 100644
--- a/ui/classic/design/03-metamask-Qr.jpg
+++ b/responsive-ui/design/03-metamask-Qr.jpg
Binary files differ
diff --git a/ui/classic/design/05-metamask-Menu.jpg b/responsive-ui/design/05-metamask-Menu.jpg
index 0a43d7b2a..0a43d7b2a 100644
--- a/ui/classic/design/05-metamask-Menu.jpg
+++ b/responsive-ui/design/05-metamask-Menu.jpg
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/final_screen_dao_accounts.png b/responsive-ui/design/chromeStorePics/final_screen_dao_accounts.png
index 805cc96b6..805cc96b6 100644
--- a/ui/classic/design/chromeStorePics/final_screen_dao_accounts.png
+++ b/responsive-ui/design/chromeStorePics/final_screen_dao_accounts.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/final_screen_dao_locked.png b/responsive-ui/design/chromeStorePics/final_screen_dao_locked.png
index 9d9e33930..9d9e33930 100644
--- a/ui/classic/design/chromeStorePics/final_screen_dao_locked.png
+++ b/responsive-ui/design/chromeStorePics/final_screen_dao_locked.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/final_screen_dao_notification.png b/responsive-ui/design/chromeStorePics/final_screen_dao_notification.png
index d56a5ce62..d56a5ce62 100644
--- a/ui/classic/design/chromeStorePics/final_screen_dao_notification.png
+++ b/responsive-ui/design/chromeStorePics/final_screen_dao_notification.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/final_screen_wei_account.png b/responsive-ui/design/chromeStorePics/final_screen_wei_account.png
index d503ff301..d503ff301 100644
--- a/ui/classic/design/chromeStorePics/final_screen_wei_account.png
+++ b/responsive-ui/design/chromeStorePics/final_screen_wei_account.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/final_screen_wei_notification.png b/responsive-ui/design/chromeStorePics/final_screen_wei_notification.png
index 3560c51ff..3560c51ff 100644
--- a/ui/classic/design/chromeStorePics/final_screen_wei_notification.png
+++ b/responsive-ui/design/chromeStorePics/final_screen_wei_notification.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/icon-128.png b/responsive-ui/design/chromeStorePics/icon-128.png
index ae687147d..ae687147d 100644
--- a/ui/classic/design/chromeStorePics/icon-128.png
+++ b/responsive-ui/design/chromeStorePics/icon-128.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/icon-64.png b/responsive-ui/design/chromeStorePics/icon-64.png
index 7062cf4f1..7062cf4f1 100644
--- a/ui/classic/design/chromeStorePics/icon-64.png
+++ b/responsive-ui/design/chromeStorePics/icon-64.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/metamask_icon.ai b/responsive-ui/design/chromeStorePics/metamask_icon.ai
index 27400c5a4..27400c5a4 100644
--- a/ui/classic/design/chromeStorePics/metamask_icon.ai
+++ b/responsive-ui/design/chromeStorePics/metamask_icon.ai
diff --git a/ui/classic/design/chromeStorePics/promo1400560.png b/responsive-ui/design/chromeStorePics/promo1400560.png
index d3637ecc8..d3637ecc8 100644
--- a/ui/classic/design/chromeStorePics/promo1400560.png
+++ b/responsive-ui/design/chromeStorePics/promo1400560.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/promo440280.png b/responsive-ui/design/chromeStorePics/promo440280.png
index c1f92b1c0..c1f92b1c0 100644
--- a/ui/classic/design/chromeStorePics/promo440280.png
+++ b/responsive-ui/design/chromeStorePics/promo440280.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/promo920680.png b/responsive-ui/design/chromeStorePics/promo920680.png
index 726bd810a..726bd810a 100644
--- a/ui/classic/design/chromeStorePics/promo920680.png
+++ b/responsive-ui/design/chromeStorePics/promo920680.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/screen_dao_accounts.png b/responsive-ui/design/chromeStorePics/screen_dao_accounts.png
index 1a2e8052c..1a2e8052c 100644
--- a/ui/classic/design/chromeStorePics/screen_dao_accounts.png
+++ b/responsive-ui/design/chromeStorePics/screen_dao_accounts.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/screen_dao_locked.png b/responsive-ui/design/chromeStorePics/screen_dao_locked.png
index 6592c17e4..6592c17e4 100644
--- a/ui/classic/design/chromeStorePics/screen_dao_locked.png
+++ b/responsive-ui/design/chromeStorePics/screen_dao_locked.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/screen_dao_notification.png b/responsive-ui/design/chromeStorePics/screen_dao_notification.png
index baeb2ec39..baeb2ec39 100644
--- a/ui/classic/design/chromeStorePics/screen_dao_notification.png
+++ b/responsive-ui/design/chromeStorePics/screen_dao_notification.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/screen_wei_account.png b/responsive-ui/design/chromeStorePics/screen_wei_account.png
index 23301e4bf..23301e4bf 100644
--- a/ui/classic/design/chromeStorePics/screen_wei_account.png
+++ b/responsive-ui/design/chromeStorePics/screen_wei_account.png
Binary files differ
diff --git a/ui/classic/design/chromeStorePics/screen_wei_notification.png b/responsive-ui/design/chromeStorePics/screen_wei_notification.png
index 7a763e5df..7a763e5df 100644
--- a/ui/classic/design/chromeStorePics/screen_wei_notification.png
+++ b/responsive-ui/design/chromeStorePics/screen_wei_notification.png
Binary files differ
diff --git a/ui/classic/design/metamask-logo-eyes.png b/responsive-ui/design/metamask-logo-eyes.png
index c29331b28..c29331b28 100644
--- a/ui/classic/design/metamask-logo-eyes.png
+++ b/responsive-ui/design/metamask-logo-eyes.png
Binary files differ
diff --git a/ui/classic/design/wireframes/1st_time_use.png b/responsive-ui/design/wireframes/1st_time_use.png
index c18ced5e2..c18ced5e2 100644
--- a/ui/classic/design/wireframes/1st_time_use.png
+++ b/responsive-ui/design/wireframes/1st_time_use.png
Binary files differ
diff --git a/ui/classic/design/wireframes/metamask_wfs_jan_13.pdf b/responsive-ui/design/wireframes/metamask_wfs_jan_13.pdf
index c77c9274a..c77c9274a 100644
--- a/ui/classic/design/wireframes/metamask_wfs_jan_13.pdf
+++ b/responsive-ui/design/wireframes/metamask_wfs_jan_13.pdf
Binary files differ
diff --git a/ui/classic/design/wireframes/metamask_wfs_jan_13.png b/responsive-ui/design/wireframes/metamask_wfs_jan_13.png
index d71d7bdb4..d71d7bdb4 100644
--- a/ui/classic/design/wireframes/metamask_wfs_jan_13.png
+++ b/responsive-ui/design/wireframes/metamask_wfs_jan_13.png
Binary files differ
diff --git a/ui/classic/design/wireframes/metamask_wfs_jan_18.pdf b/responsive-ui/design/wireframes/metamask_wfs_jan_18.pdf
index 592ba8532..592ba8532 100644
--- a/ui/classic/design/wireframes/metamask_wfs_jan_18.pdf
+++ b/responsive-ui/design/wireframes/metamask_wfs_jan_18.pdf
Binary files differ
diff --git a/ui/classic/example.js b/responsive-ui/example.js
index 4627c0e9c..4627c0e9c 100644
--- a/ui/classic/example.js
+++ b/responsive-ui/example.js
diff --git a/ui/classic/index.html b/responsive-ui/index.html
index 9dfaefbb3..9dfaefbb3 100644
--- a/ui/classic/index.html
+++ b/responsive-ui/index.html
diff --git a/ui/classic/index.js b/responsive-ui/index.js
index a729138d3..a729138d3 100644
--- a/ui/classic/index.js
+++ b/responsive-ui/index.js
diff --git a/ui/classic/lib/account-link.js b/responsive-ui/lib/account-link.js
index d061d0ad1..d061d0ad1 100644
--- a/ui/classic/lib/account-link.js
+++ b/responsive-ui/lib/account-link.js
diff --git a/ui/classic/lib/contract-namer.js b/responsive-ui/lib/contract-namer.js
index f05e770cc..f05e770cc 100644
--- a/ui/classic/lib/contract-namer.js
+++ b/responsive-ui/lib/contract-namer.js
diff --git a/ui/classic/lib/etherscan-prefix-for-network.js b/responsive-ui/lib/etherscan-prefix-for-network.js
index 2c1904f1c..2c1904f1c 100644
--- a/ui/classic/lib/etherscan-prefix-for-network.js
+++ b/responsive-ui/lib/etherscan-prefix-for-network.js
diff --git a/ui/classic/lib/explorer-link.js b/responsive-ui/lib/explorer-link.js
index 3b82ecd5f..3b82ecd5f 100644
--- a/ui/classic/lib/explorer-link.js
+++ b/responsive-ui/lib/explorer-link.js
diff --git a/ui/classic/lib/icon-factory.js b/responsive-ui/lib/icon-factory.js
index 27a74de66..27a74de66 100644
--- a/ui/classic/lib/icon-factory.js
+++ b/responsive-ui/lib/icon-factory.js
diff --git a/ui/classic/lib/lost-accounts-notice.js b/responsive-ui/lib/lost-accounts-notice.js
index 948b13db6..948b13db6 100644
--- a/ui/classic/lib/lost-accounts-notice.js
+++ b/responsive-ui/lib/lost-accounts-notice.js
diff --git a/ui/classic/lib/persistent-form.js b/responsive-ui/lib/persistent-form.js
index d4dc20b03..d4dc20b03 100644
--- a/ui/classic/lib/persistent-form.js
+++ b/responsive-ui/lib/persistent-form.js
diff --git a/ui/classic/lib/tx-helper.js b/responsive-ui/lib/tx-helper.js
index ec19daf64..ec19daf64 100644
--- a/ui/classic/lib/tx-helper.js
+++ b/responsive-ui/lib/tx-helper.js
diff --git a/test/unit/infura-controller-test.js b/test/unit/infura-controller-test.js
index 7a2a114f9..605305efa 100644
--- a/test/unit/infura-controller-test.js
+++ b/test/unit/infura-controller-test.js
@@ -1,33 +1,61 @@
-// polyfill fetch
-global.fetch = function () {return Promise.resolve({
- json: () => { return Promise.resolve({"mainnet": "ok", "ropsten": "degraded", "kovan": "down", "rinkeby": "ok"}) },
- })
-}
const assert = require('assert')
+const sinon = require('sinon')
const InfuraController = require('../../app/scripts/controllers/infura')
describe('infura-controller', function () {
- var infuraController
+ let infuraController, sandbox, networkStatus
+ const response = {'mainnet': 'degraded', 'ropsten': 'ok', 'kovan': 'ok', 'rinkeby': 'down'}
- beforeEach(function () {
+ before(async function () {
infuraController = new InfuraController()
+ sandbox = sinon.sandbox.create()
+ sinon.stub(infuraController, 'checkInfuraNetworkStatus').resolves(response)
+ networkStatus = await infuraController.checkInfuraNetworkStatus()
+ })
+
+ after(function () {
+ sandbox.restore()
})
- describe('network status queries', function () {
- describe('#checkInfuraNetworkStatus', function () {
- it('should return an object reflecting the network statuses', function (done) {
- this.timeout(15000)
- infuraController.checkInfuraNetworkStatus()
- .then(() => {
- const networkStatus = infuraController.store.getState().infuraNetworkStatus
- assert.equal(Object.keys(networkStatus).length, 4)
- assert.equal(networkStatus.mainnet, 'ok')
- assert.equal(networkStatus.ropsten, 'degraded')
- assert.equal(networkStatus.kovan, 'down')
- })
- .then(() => done())
- .catch(done)
+ describe('Network status queries', function () {
+
+ describe('Mainnet', function () {
+ it('should have Mainnet', function () {
+ assert.equal(Object.keys(networkStatus)[0], 'mainnet')
+ })
+
+ it('should have a value for Mainnet status', function () {
+ assert.equal(networkStatus.mainnet, 'degraded')
+ })
+ })
+
+ describe('Ropsten', function () {
+ it('should have Ropsten', function () {
+ assert.equal(Object.keys(networkStatus)[1], 'ropsten')
+ })
+
+ it('should have a value for Ropsten status', function () {
+ assert.equal(networkStatus.ropsten, 'ok')
+ })
+ })
+
+ describe('Kovan', function () {
+ it('should have Kovan', function () {
+ assert.equal(Object.keys(networkStatus)[2], 'kovan')
+ })
+
+ it('should have a value for Kovan status', function () {
+ assert.equal(networkStatus.kovan, 'ok')
+ })
+ })
+
+ describe('Rinkeby', function () {
+ it('should have Rinkeby', function () {
+ assert.equal(Object.keys(networkStatus)[3], 'rinkeby')
+ })
+ it('should have a value for Rinkeby status', function () {
+ assert.equal(networkStatus.rinkeby, 'down')
})
})
})
diff --git a/test/unit/nodeify-test.js b/test/unit/nodeify-test.js
index 5aed758fa..06241334d 100644
--- a/test/unit/nodeify-test.js
+++ b/test/unit/nodeify-test.js
@@ -11,7 +11,7 @@ describe('nodeify', function () {
}
it('should retain original context', function (done) {
- var nodified = nodeify(obj.promiseFunc).bind(obj)
+ var nodified = nodeify(obj.promiseFunc, obj)
nodified('baz', function (err, res) {
assert.equal(res, 'barbaz')
done()
diff --git a/test/unit/nonce-tracker-test.js b/test/unit/nonce-tracker-test.js
new file mode 100644
index 000000000..16cd6d008
--- /dev/null
+++ b/test/unit/nonce-tracker-test.js
@@ -0,0 +1,40 @@
+const assert = require('assert')
+const NonceTracker = require('../../app/scripts/lib/nonce-tracker')
+
+describe('Nonce Tracker', function () {
+ let nonceTracker, provider, getPendingTransactions, pendingTxs
+
+
+ beforeEach(function () {
+ pendingTxs = [{
+ 'status': 'submitted',
+ 'txParams': {
+ 'from': '0x7d3517b0d011698406d6e0aed8453f0be2697926',
+ 'gas': '0x30d40',
+ 'value': '0x0',
+ 'nonce': '0x0',
+ },
+ }]
+
+
+ getPendingTransactions = () => pendingTxs
+ provider = { sendAsync: (_, cb) => { cb(undefined, {result: '0x0'}) } }
+ nonceTracker = new NonceTracker({
+ blockTracker: {
+ getCurrentBlock: () => '0x11b568',
+ },
+ provider,
+ getPendingTransactions,
+ })
+ })
+
+ describe('#getNonceLock', function () {
+ it('should work', async function (done) {
+ this.timeout(15000)
+ const nonceLock = await nonceTracker.getNonceLock('0x7d3517b0d011698406d6e0aed8453f0be2697926')
+ assert.equal(nonceLock.nextNonce, '1', 'nonce should be 1')
+ await nonceLock.releaseLock()
+ done()
+ })
+ })
+})
diff --git a/test/unit/responsive/components/dropdown-test.js b/test/unit/responsive/components/dropdown-test.js
index 4d417d394..0472c541b 100644
--- a/test/unit/responsive/components/dropdown-test.js
+++ b/test/unit/responsive/components/dropdown-test.js
@@ -5,8 +5,8 @@ const h = require('react-hyperscript');
const ReactTestUtils = require('react-addons-test-utils');
const sinon = require('sinon');
const path = require('path');
-const Dropdown = require(path.join(__dirname, '..', '..', '..', '..', 'ui', 'responsive', 'app', 'components', 'dropdown.js')).Dropdown;
-const DropdownMenuItem = require(path.join(__dirname, '..', '..', '..', '..', 'ui', 'responsive', 'app', 'components', 'dropdown.js')).DropdownMenuItem;
+const Dropdown = require(path.join(__dirname, '..', '..', '..', '..', 'responsive-ui', 'app', 'components', 'dropdown.js')).Dropdown;
+const DropdownMenuItem = require(path.join(__dirname, '..', '..', '..', '..', 'responsive-ui', 'app', 'components', 'dropdown.js')).DropdownMenuItem;
describe('Dropdown components', function () {
let onClickOutside;
@@ -112,4 +112,4 @@ describe('Dropdown components', function () {
ReactTestUtils.Simulate.click(node);
assert.equal(onClick.calledOnce, true);
});
-}); \ No newline at end of file
+});
diff --git a/test/unit/tx-controller-test.js b/test/unit/tx-controller-test.js
index 0d35cd62c..7b86cfe14 100644
--- a/test/unit/tx-controller-test.js
+++ b/test/unit/tx-controller-test.js
@@ -1,5 +1,4 @@
const assert = require('assert')
-const EventEmitter = require('events')
const ethUtil = require('ethereumjs-util')
const EthTx = require('ethereumjs-tx')
const EthQuery = require('eth-query')
@@ -19,14 +18,16 @@ describe('Transaction Controller', function () {
txController = new TransactionController({
networkStore: new ObservableStore(currentNetworkId),
txHistoryLimit: 10,
- provider: { _blockTracker: new EventEmitter()},
- blockTracker: new EventEmitter(),
- ethQuery: new EthQuery(new EventEmitter()),
+ blockTracker: { getCurrentBlock: noop, on: noop, once: noop },
+ provider: { sendAsync: noop },
+ ethQuery: new EthQuery({ sendAsync: noop }),
+ ethStore: { getState: noop },
signTransaction: (ethTx) => new Promise((resolve) => {
ethTx.sign(privKey)
resolve()
}),
})
+ txController.nonceTracker.getNonceLock = () => Promise.resolve({ nextNonce: 0, releaseLock: noop })
})
describe('#validateTxParams', function () {
@@ -270,56 +271,86 @@ describe('Transaction Controller', function () {
it('does not overwrite set values', function (done) {
+ this.timeout(15000)
const wrongValue = '0x05'
txController.addTx(txMeta)
const estimateStub = sinon.stub(txController.txProviderUtils.query, 'estimateGas')
- .callsArgWith(1, null, wrongValue)
+ .callsArgWithAsync(1, null, wrongValue)
const priceStub = sinon.stub(txController.txProviderUtils.query, 'gasPrice')
- .callsArgWith(0, null, wrongValue)
+ .callsArgWithAsync(0, null, wrongValue)
- const nonceStub = sinon.stub(txController.txProviderUtils.query, 'getTransactionCount')
- .callsArgWith(2, null, wrongValue)
- const signStub = sinon.stub(txController, 'signTransaction')
- .callsArgWith(1, null, noop)
+ const signStub = sinon.stub(txController, 'signTransaction', () => Promise.resolve())
- const pubStub = sinon.stub(txController.txProviderUtils, 'publishTransaction')
- .callsArgWith(1, null, originalValue)
-
- txController.approveTransaction(txMeta.id, (err) => {
- assert.ifError(err, 'should not error')
+ const pubStub = sinon.stub(txController.txProviderUtils, 'publishTransaction', () => Promise.resolve(originalValue))
+ txController.approveTransaction(txMeta.id).then(() => {
const result = txController.getTx(txMeta.id)
const params = result.txParams
assert.equal(params.gas, originalValue, 'gas unmodified')
assert.equal(params.gasPrice, originalValue, 'gas price unmodified')
- assert.equal(params.nonce, originalValue, 'nonce unmodified')
- assert.equal(result.hash, originalValue, 'hash was set')
+ assert.equal(result.hash, originalValue, `hash was set \n got: ${result.hash} \n expected: ${originalValue}`)
estimateStub.restore()
priceStub.restore()
signStub.restore()
- nonceStub.restore()
pubStub.restore()
-
done()
- })
+ }).catch(done)
})
})
describe('#sign replay-protected tx', function () {
it('prepares a tx with the chainId set', function (done) {
txController.addTx({ id: '1', status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} }, noop)
- txController.signTransaction('1', (err, rawTx) => {
- if (err) return done('it should not fail')
+ txController.signTransaction('1').then((rawTx) => {
const ethTx = new EthTx(ethUtil.toBuffer(rawTx))
assert.equal(ethTx.getChainId(), currentNetworkId)
done()
+ }).catch(done)
+ })
+ })
+
+ describe('#_resubmitTx with a too-low balance', function () {
+ it('should fail the transaction', function (done) {
+ const from = '0xda0da0'
+ const txMeta = {
+ id: 1,
+ status: 'submitted',
+ metamaskNetworkId: currentNetworkId,
+ txParams: {
+ from,
+ nonce: '0x1',
+ value: '0xfffff',
+ },
+ }
+
+ const lowBalance = '0x0'
+ const fakeStoreState = { accounts: {} }
+ fakeStoreState.accounts[from] = {
+ balance: lowBalance,
+ nonce: '0x0',
+ }
+
+ // Stubbing out current account state:
+ const getStateStub = sinon.stub(txController.ethStore, 'getState')
+ .returns(fakeStoreState)
+
+ // Adding the fake tx:
+ txController.addTx(clone(txMeta))
+
+ txController._resubmitTx(txMeta, function (err) {
+ assert.ifError(err, 'should not throw an error')
+ const updatedMeta = txController.getTx(txMeta.id)
+ assert.notEqual(updatedMeta.status, txMeta.status, 'status changed.')
+ assert.equal(updatedMeta.status, 'failed', 'tx set to failed.')
+ done()
})
})
})
})
+
diff --git a/test/unit/tx-helper-test.js b/test/unit/tx-helper-test.js
new file mode 100644
index 000000000..cc6543c30
--- /dev/null
+++ b/test/unit/tx-helper-test.js
@@ -0,0 +1,17 @@
+const assert = require('assert')
+const txHelper = require('../../ui/lib/tx-helper')
+
+describe('txHelper', function () {
+ it('always shows the oldest tx first', function () {
+ const metamaskNetworkId = 1
+ const txs = {
+ a: { metamaskNetworkId, time: 3 },
+ b: { metamaskNetworkId, time: 1 },
+ c: { metamaskNetworkId, time: 2 },
+ }
+
+ const sorted = txHelper(txs, null, null, metamaskNetworkId)
+ assert.equal(sorted[0].time, 1, 'oldest tx first')
+ assert.equal(sorted[2].time, 3, 'newest tx last')
+ })
+})
diff --git a/test/unit/tx-utils-test.js b/test/unit/tx-utils-test.js
index 7ace1f587..a43bcfb35 100644
--- a/test/unit/tx-utils-test.js
+++ b/test/unit/tx-utils-test.js
@@ -16,6 +16,44 @@ describe('txUtils', function () {
}))
})
+ describe('#sufficientBalance', function () {
+ it('returns true if max tx cost is equal to balance.', function () {
+ const tx = {
+ 'value': '0x1',
+ 'gas': '0x2',
+ 'gasPrice': '0x3',
+ }
+ const balance = '0x8'
+
+ const result = txUtils.sufficientBalance(tx, balance)
+ assert.ok(result, 'sufficient balance found.')
+ })
+
+ it('returns true if max tx cost is less than balance.', function () {
+ const tx = {
+ 'value': '0x1',
+ 'gas': '0x2',
+ 'gasPrice': '0x3',
+ }
+ const balance = '0x9'
+
+ const result = txUtils.sufficientBalance(tx, balance)
+ assert.ok(result, 'sufficient balance found.')
+ })
+
+ it('returns false if max tx cost is more than balance.', function () {
+ const tx = {
+ 'value': '0x1',
+ 'gas': '0x2',
+ 'gasPrice': '0x3',
+ }
+ const balance = '0x6'
+
+ const result = txUtils.sufficientBalance(tx, balance)
+ assert.ok(!result, 'insufficient balance found.')
+ })
+ })
+
describe('chain Id', function () {
it('prepares a transaction with the provided chainId', function () {
const txParams = {
diff --git a/ui/classic/app/account-detail.js b/ui/app/account-detail.js
index bed05a7fb..bed05a7fb 100644
--- a/ui/classic/app/account-detail.js
+++ b/ui/app/account-detail.js
diff --git a/ui/classic/app/accounts/account-list-item.js b/ui/app/accounts/account-list-item.js
index 10a0b6cc7..10a0b6cc7 100644
--- a/ui/classic/app/accounts/account-list-item.js
+++ b/ui/app/accounts/account-list-item.js
diff --git a/ui/responsive/app/accounts/import/index.js b/ui/app/accounts/import/index.js
index 97b387229..97b387229 100644
--- a/ui/responsive/app/accounts/import/index.js
+++ b/ui/app/accounts/import/index.js
diff --git a/ui/responsive/app/accounts/import/json.js b/ui/app/accounts/import/json.js
index 158a3c923..158a3c923 100644
--- a/ui/responsive/app/accounts/import/json.js
+++ b/ui/app/accounts/import/json.js
diff --git a/ui/responsive/app/accounts/import/private-key.js b/ui/app/accounts/import/private-key.js
index 68ccee58e..68ccee58e 100644
--- a/ui/responsive/app/accounts/import/private-key.js
+++ b/ui/app/accounts/import/private-key.js
diff --git a/ui/responsive/app/accounts/import/seed.js b/ui/app/accounts/import/seed.js
index b4a7c0afa..b4a7c0afa 100644
--- a/ui/responsive/app/accounts/import/seed.js
+++ b/ui/app/accounts/import/seed.js
diff --git a/ui/classic/app/accounts/index.js b/ui/app/accounts/index.js
index ac2615cd7..ac2615cd7 100644
--- a/ui/classic/app/accounts/index.js
+++ b/ui/app/accounts/index.js
diff --git a/ui/responsive/app/actions.js b/ui/app/actions.js
index 2c60448dd..d99291e46 100644
--- a/ui/responsive/app/actions.js
+++ b/ui/app/actions.js
@@ -1,4 +1,4 @@
-const getBuyEthUrl = require('../../../app/scripts/lib/buy-eth-url')
+const getBuyEthUrl = require('../../app/scripts/lib/buy-eth-url')
var actions = {
_setBackgroundConnection: _setBackgroundConnection,
diff --git a/ui/responsive/app/add-token.js b/ui/app/add-token.js
index b303b5c0d..15ef7a852 100644
--- a/ui/responsive/app/add-token.js
+++ b/ui/app/add-token.js
@@ -86,7 +86,7 @@ AddTokenScreen.prototype.render = function () {
h('div', [
h('span', {
style: { fontWeight: 'bold', paddingRight: '10px'},
- }, 'Token Sybmol'),
+ }, 'Token Symbol'),
]),
h('div', { style: {display: 'flex'} }, [
diff --git a/ui/classic/app/app.js b/ui/app/app.js
index 1a63002e1..1a63002e1 100644
--- a/ui/classic/app/app.js
+++ b/ui/app/app.js
diff --git a/ui/responsive/app/components/account-export.js b/ui/app/components/account-export.js
index 394d878f7..394d878f7 100644
--- a/ui/responsive/app/components/account-export.js
+++ b/ui/app/components/account-export.js
diff --git a/ui/classic/app/components/account-info-link.js b/ui/app/components/account-info-link.js
index 6526ab502..6526ab502 100644
--- a/ui/classic/app/components/account-info-link.js
+++ b/ui/app/components/account-info-link.js
diff --git a/ui/responsive/app/components/account-panel.js b/ui/app/components/account-panel.js
index abaaf8163..abaaf8163 100644
--- a/ui/responsive/app/components/account-panel.js
+++ b/ui/app/components/account-panel.js
diff --git a/ui/responsive/app/components/balance.js b/ui/app/components/balance.js
index 57ca84564..57ca84564 100644
--- a/ui/responsive/app/components/balance.js
+++ b/ui/app/components/balance.js
diff --git a/ui/responsive/app/components/binary-renderer.js b/ui/app/components/binary-renderer.js
index 0b6a1f5c2..0b6a1f5c2 100644
--- a/ui/responsive/app/components/binary-renderer.js
+++ b/ui/app/components/binary-renderer.js
diff --git a/ui/responsive/app/components/bn-as-decimal-input.js b/ui/app/components/bn-as-decimal-input.js
index f3ace4720..f3ace4720 100644
--- a/ui/responsive/app/components/bn-as-decimal-input.js
+++ b/ui/app/components/bn-as-decimal-input.js
diff --git a/ui/responsive/app/components/buy-button-subview.js b/ui/app/components/buy-button-subview.js
index 87084f92d..87084f92d 100644
--- a/ui/responsive/app/components/buy-button-subview.js
+++ b/ui/app/components/buy-button-subview.js
diff --git a/ui/responsive/app/components/coinbase-form.js b/ui/app/components/coinbase-form.js
index f44d86045..f44d86045 100644
--- a/ui/responsive/app/components/coinbase-form.js
+++ b/ui/app/components/coinbase-form.js
diff --git a/ui/responsive/app/components/copyButton.js b/ui/app/components/copyButton.js
index a25d0719c..a25d0719c 100644
--- a/ui/responsive/app/components/copyButton.js
+++ b/ui/app/components/copyButton.js
diff --git a/ui/responsive/app/components/copyable.js b/ui/app/components/copyable.js
index a4f6f4bc6..a4f6f4bc6 100644
--- a/ui/responsive/app/components/copyable.js
+++ b/ui/app/components/copyable.js
diff --git a/ui/responsive/app/components/custom-radio-list.js b/ui/app/components/custom-radio-list.js
index a4c525396..a4c525396 100644
--- a/ui/responsive/app/components/custom-radio-list.js
+++ b/ui/app/components/custom-radio-list.js
diff --git a/ui/classic/app/components/drop-menu-item.js b/ui/app/components/drop-menu-item.js
index e42948209..e42948209 100644
--- a/ui/classic/app/components/drop-menu-item.js
+++ b/ui/app/components/drop-menu-item.js
diff --git a/ui/classic/app/components/editable-label.js b/ui/app/components/editable-label.js
index 41936f5e0..41936f5e0 100644
--- a/ui/classic/app/components/editable-label.js
+++ b/ui/app/components/editable-label.js
diff --git a/ui/responsive/app/components/ens-input.js b/ui/app/components/ens-input.js
index 3a33ebf74..3a33ebf74 100644
--- a/ui/responsive/app/components/ens-input.js
+++ b/ui/app/components/ens-input.js
diff --git a/ui/responsive/app/components/eth-balance.js b/ui/app/components/eth-balance.js
index 4f538fd31..4f538fd31 100644
--- a/ui/responsive/app/components/eth-balance.js
+++ b/ui/app/components/eth-balance.js
diff --git a/ui/responsive/app/components/fiat-value.js b/ui/app/components/fiat-value.js
index 8a64a1cfc..8a64a1cfc 100644
--- a/ui/responsive/app/components/fiat-value.js
+++ b/ui/app/components/fiat-value.js
diff --git a/ui/responsive/app/components/hex-as-decimal-input.js b/ui/app/components/hex-as-decimal-input.js
index 4a71e9585..4a71e9585 100644
--- a/ui/responsive/app/components/hex-as-decimal-input.js
+++ b/ui/app/components/hex-as-decimal-input.js
diff --git a/ui/responsive/app/components/identicon.js b/ui/app/components/identicon.js
index c754bc6ba..c754bc6ba 100644
--- a/ui/responsive/app/components/identicon.js
+++ b/ui/app/components/identicon.js
diff --git a/ui/responsive/app/components/loading.js b/ui/app/components/loading.js
index 87d6f5d20..87d6f5d20 100644
--- a/ui/responsive/app/components/loading.js
+++ b/ui/app/components/loading.js
diff --git a/ui/responsive/app/components/mascot.js b/ui/app/components/mascot.js
index 973ec2cad..973ec2cad 100644
--- a/ui/responsive/app/components/mascot.js
+++ b/ui/app/components/mascot.js
diff --git a/ui/responsive/app/components/mini-account-panel.js b/ui/app/components/mini-account-panel.js
index c09cf5b7a..c09cf5b7a 100644
--- a/ui/responsive/app/components/mini-account-panel.js
+++ b/ui/app/components/mini-account-panel.js
diff --git a/ui/responsive/app/components/network.js b/ui/app/components/network.js
index 698a0bbb9..698a0bbb9 100644
--- a/ui/responsive/app/components/network.js
+++ b/ui/app/components/network.js
diff --git a/ui/responsive/app/components/notice.js b/ui/app/components/notice.js
index d9f0067cd..d9f0067cd 100644
--- a/ui/responsive/app/components/notice.js
+++ b/ui/app/components/notice.js
diff --git a/ui/responsive/app/components/pending-msg-details.js b/ui/app/components/pending-msg-details.js
index 16308d121..16308d121 100644
--- a/ui/responsive/app/components/pending-msg-details.js
+++ b/ui/app/components/pending-msg-details.js
diff --git a/ui/responsive/app/components/pending-msg.js b/ui/app/components/pending-msg.js
index b2cac164a..b2cac164a 100644
--- a/ui/responsive/app/components/pending-msg.js
+++ b/ui/app/components/pending-msg.js
diff --git a/ui/responsive/app/components/pending-personal-msg-details.js b/ui/app/components/pending-personal-msg-details.js
index 1050513f2..1050513f2 100644
--- a/ui/responsive/app/components/pending-personal-msg-details.js
+++ b/ui/app/components/pending-personal-msg-details.js
diff --git a/ui/responsive/app/components/pending-personal-msg.js b/ui/app/components/pending-personal-msg.js
index 4542adb28..4542adb28 100644
--- a/ui/responsive/app/components/pending-personal-msg.js
+++ b/ui/app/components/pending-personal-msg.js
diff --git a/ui/responsive/app/components/pending-tx.js b/ui/app/components/pending-tx.js
index 962680d30..5324ccd64 100644
--- a/ui/responsive/app/components/pending-tx.js
+++ b/ui/app/components/pending-tx.js
@@ -6,7 +6,7 @@ const clone = require('clone')
const ethUtil = require('ethereumjs-util')
const BN = ethUtil.BN
-const hexToBn = require('../../../../app/scripts/lib/hex-to-bn')
+const hexToBn = require('../../../app/scripts/lib/hex-to-bn')
const util = require('../util')
const MiniAccountPanel = require('./mini-account-panel')
const Copyable = require('./copyable')
@@ -15,7 +15,7 @@ const addressSummary = util.addressSummary
const nameForAddress = require('../../lib/contract-namer')
const BNInput = require('./bn-as-decimal-input')
-const MIN_GAS_PRICE_GWEI_BN = new BN(2)
+const MIN_GAS_PRICE_GWEI_BN = new BN(1)
const GWEI_FACTOR = new BN(1e9)
const MIN_GAS_PRICE_BN = MIN_GAS_PRICE_GWEI_BN.mul(GWEI_FACTOR)
const MIN_GAS_LIMIT_BN = new BN(21000)
diff --git a/ui/responsive/app/components/qr-code.js b/ui/app/components/qr-code.js
index 06b9aed9b..06b9aed9b 100644
--- a/ui/responsive/app/components/qr-code.js
+++ b/ui/app/components/qr-code.js
diff --git a/ui/responsive/app/components/range-slider.js b/ui/app/components/range-slider.js
index 823f5eb01..823f5eb01 100644
--- a/ui/responsive/app/components/range-slider.js
+++ b/ui/app/components/range-slider.js
diff --git a/ui/responsive/app/components/shapeshift-form.js b/ui/app/components/shapeshift-form.js
index e0a720426..e0a720426 100644
--- a/ui/responsive/app/components/shapeshift-form.js
+++ b/ui/app/components/shapeshift-form.js
diff --git a/ui/responsive/app/components/shift-list-item.js b/ui/app/components/shift-list-item.js
index 32bfbeda4..32bfbeda4 100644
--- a/ui/responsive/app/components/shift-list-item.js
+++ b/ui/app/components/shift-list-item.js
diff --git a/ui/responsive/app/components/tab-bar.js b/ui/app/components/tab-bar.js
index 6295e7dd9..6295e7dd9 100644
--- a/ui/responsive/app/components/tab-bar.js
+++ b/ui/app/components/tab-bar.js
diff --git a/ui/responsive/app/components/template.js b/ui/app/components/template.js
index b6ed8eaa0..b6ed8eaa0 100644
--- a/ui/responsive/app/components/template.js
+++ b/ui/app/components/template.js
diff --git a/ui/responsive/app/components/token-cell.js b/ui/app/components/token-cell.js
index 19d7139bb..19d7139bb 100644
--- a/ui/responsive/app/components/token-cell.js
+++ b/ui/app/components/token-cell.js
diff --git a/ui/responsive/app/components/token-list.js b/ui/app/components/token-list.js
index 20cfa897e..20cfa897e 100644
--- a/ui/responsive/app/components/token-list.js
+++ b/ui/app/components/token-list.js
diff --git a/ui/responsive/app/components/tooltip.js b/ui/app/components/tooltip.js
index edbc074bb..edbc074bb 100644
--- a/ui/responsive/app/components/tooltip.js
+++ b/ui/app/components/tooltip.js
diff --git a/ui/responsive/app/components/transaction-list-item-icon.js b/ui/app/components/transaction-list-item-icon.js
index 431054340..431054340 100644
--- a/ui/responsive/app/components/transaction-list-item-icon.js
+++ b/ui/app/components/transaction-list-item-icon.js
diff --git a/ui/responsive/app/components/transaction-list-item.js b/ui/app/components/transaction-list-item.js
index dbda66a31..dbda66a31 100644
--- a/ui/responsive/app/components/transaction-list-item.js
+++ b/ui/app/components/transaction-list-item.js
diff --git a/ui/responsive/app/components/transaction-list.js b/ui/app/components/transaction-list.js
index 3b4ba741e..3b4ba741e 100644
--- a/ui/responsive/app/components/transaction-list.js
+++ b/ui/app/components/transaction-list.js
diff --git a/ui/classic/app/conf-tx.js b/ui/app/conf-tx.js
index 63b77ef7f..747d3ce2b 100644
--- a/ui/classic/app/conf-tx.js
+++ b/ui/app/conf-tx.js
@@ -6,7 +6,7 @@ const connect = require('react-redux').connect
const actions = require('./actions')
const NetworkIndicator = require('./components/network')
const txHelper = require('../lib/tx-helper')
-const isPopupOrNotification = require('../../../app/scripts/lib/is-popup-or-notification')
+const isPopupOrNotification = require('../../app/scripts/lib/is-popup-or-notification')
const PendingTx = require('./components/pending-tx')
const PendingMsg = require('./components/pending-msg')
diff --git a/ui/responsive/app/config.js b/ui/app/config.js
index 62785c49b..62785c49b 100644
--- a/ui/responsive/app/config.js
+++ b/ui/app/config.js
diff --git a/ui/responsive/app/conversion.json b/ui/app/conversion.json
index 155ffc4fc..155ffc4fc 100644
--- a/ui/responsive/app/conversion.json
+++ b/ui/app/conversion.json
diff --git a/ui/responsive/app/css/debug.css b/ui/app/css/debug.css
index 3e125bcd4..3e125bcd4 100644
--- a/ui/responsive/app/css/debug.css
+++ b/ui/app/css/debug.css
diff --git a/ui/responsive/app/css/fonts.css b/ui/app/css/fonts.css
index 3b9f581b9..3b9f581b9 100644
--- a/ui/responsive/app/css/fonts.css
+++ b/ui/app/css/fonts.css
diff --git a/ui/classic/app/css/index.css b/ui/app/css/index.css
index 808aafb4c..808aafb4c 100644
--- a/ui/classic/app/css/index.css
+++ b/ui/app/css/index.css
diff --git a/ui/responsive/app/css/lib.css b/ui/app/css/lib.css
index 910a24ee2..910a24ee2 100644
--- a/ui/responsive/app/css/lib.css
+++ b/ui/app/css/lib.css
diff --git a/ui/responsive/app/css/reset.css b/ui/app/css/reset.css
index 9ce89e8bc..9ce89e8bc 100644
--- a/ui/responsive/app/css/reset.css
+++ b/ui/app/css/reset.css
diff --git a/ui/responsive/app/css/transitions.css b/ui/app/css/transitions.css
index 393a944f9..393a944f9 100644
--- a/ui/responsive/app/css/transitions.css
+++ b/ui/app/css/transitions.css
diff --git a/ui/responsive/app/first-time/init-menu.js b/ui/app/first-time/init-menu.js
index cc7c51bd3..cc7c51bd3 100644
--- a/ui/responsive/app/first-time/init-menu.js
+++ b/ui/app/first-time/init-menu.js
diff --git a/ui/responsive/app/img/identicon-tardigrade.png b/ui/app/img/identicon-tardigrade.png
index 1742a32b8..1742a32b8 100644
--- a/ui/responsive/app/img/identicon-tardigrade.png
+++ b/ui/app/img/identicon-tardigrade.png
Binary files differ
diff --git a/ui/responsive/app/img/identicon-walrus.png b/ui/app/img/identicon-walrus.png
index d58fae912..d58fae912 100644
--- a/ui/responsive/app/img/identicon-walrus.png
+++ b/ui/app/img/identicon-walrus.png
Binary files differ
diff --git a/ui/responsive/app/info.js b/ui/app/info.js
index e8470de97..cb2e41f5b 100644
--- a/ui/responsive/app/info.js
+++ b/ui/app/info.js
@@ -97,11 +97,17 @@ InfoScreen.prototype.render = function () {
paddingLeft: '30px',
}},
[
+ h('div.fa.fa-support', [
+ h('a.info', {
+ href: 'http://metamask.consensyssupport.happyfox.com',
+ target: '_blank',
+ }, 'Visit our Support Center'),
+ ]),
h('div.fa.fa-github', [
h('a.info', {
- href: 'https://github.com/MetaMask/faq',
+ href: 'https://github.com/MetaMask/metamask-extension/issues/new',
target: '_blank',
- }, 'Need Help? Read our FAQ!'),
+ }, 'Found a bug? Report it!'),
]),
h('div', [
h('a', {
diff --git a/ui/classic/app/keychains/hd/create-vault-complete.js b/ui/app/keychains/hd/create-vault-complete.js
index a318a9b50..a318a9b50 100644
--- a/ui/classic/app/keychains/hd/create-vault-complete.js
+++ b/ui/app/keychains/hd/create-vault-complete.js
diff --git a/ui/responsive/app/keychains/hd/recover-seed/confirmation.js b/ui/app/keychains/hd/recover-seed/confirmation.js
index 4ccbec9fc..4ccbec9fc 100644
--- a/ui/responsive/app/keychains/hd/recover-seed/confirmation.js
+++ b/ui/app/keychains/hd/recover-seed/confirmation.js
diff --git a/ui/responsive/app/keychains/hd/restore-vault.js b/ui/app/keychains/hd/restore-vault.js
index 06e51d9b3..06e51d9b3 100644
--- a/ui/responsive/app/keychains/hd/restore-vault.js
+++ b/ui/app/keychains/hd/restore-vault.js
diff --git a/ui/responsive/app/new-keychain.js b/ui/app/new-keychain.js
index cc9633166..cc9633166 100644
--- a/ui/responsive/app/new-keychain.js
+++ b/ui/app/new-keychain.js
diff --git a/ui/responsive/app/reducers.js b/ui/app/reducers.js
index 11efca529..11efca529 100644
--- a/ui/responsive/app/reducers.js
+++ b/ui/app/reducers.js
diff --git a/ui/responsive/app/reducers/app.js b/ui/app/reducers/app.js
index 2fcc9bfe0..2fcc9bfe0 100644
--- a/ui/responsive/app/reducers/app.js
+++ b/ui/app/reducers/app.js
diff --git a/ui/responsive/app/reducers/identities.js b/ui/app/reducers/identities.js
index 341a404e7..341a404e7 100644
--- a/ui/responsive/app/reducers/identities.js
+++ b/ui/app/reducers/identities.js
diff --git a/ui/responsive/app/reducers/metamask.js b/ui/app/reducers/metamask.js
index e0c416c2d..e0c416c2d 100644
--- a/ui/responsive/app/reducers/metamask.js
+++ b/ui/app/reducers/metamask.js
diff --git a/ui/responsive/app/root.js b/ui/app/root.js
index 9e7314b20..9e7314b20 100644
--- a/ui/responsive/app/root.js
+++ b/ui/app/root.js
diff --git a/ui/responsive/app/send.js b/ui/app/send.js
index a21a219eb..a21a219eb 100644
--- a/ui/responsive/app/send.js
+++ b/ui/app/send.js
diff --git a/ui/responsive/app/settings.js b/ui/app/settings.js
index 454cc95e0..454cc95e0 100644
--- a/ui/responsive/app/settings.js
+++ b/ui/app/settings.js
diff --git a/ui/responsive/app/store.js b/ui/app/store.js
index ba9e58b49..ba9e58b49 100644
--- a/ui/responsive/app/store.js
+++ b/ui/app/store.js
diff --git a/ui/responsive/app/template.js b/ui/app/template.js
index d15b30fd2..d15b30fd2 100644
--- a/ui/responsive/app/template.js
+++ b/ui/app/template.js
diff --git a/ui/responsive/app/unlock.js b/ui/app/unlock.js
index 1aee3c5d0..1aee3c5d0 100644
--- a/ui/responsive/app/unlock.js
+++ b/ui/app/unlock.js
diff --git a/ui/responsive/app/util.js b/ui/app/util.js
index ac3f42c6b..ac3f42c6b 100644
--- a/ui/responsive/app/util.js
+++ b/ui/app/util.js
diff --git a/ui/responsive/css.js b/ui/css.js
index 7c394a87b..043363cd7 100644
--- a/ui/responsive/css.js
+++ b/ui/css.js
@@ -9,8 +9,8 @@ var cssFiles = {
'lib.css': fs.readFileSync(path.join(__dirname, '/app/css/lib.css'), 'utf8'),
'index.css': fs.readFileSync(path.join(__dirname, '/app/css/index.css'), 'utf8'),
'transitions.css': fs.readFileSync(path.join(__dirname, '/app/css/transitions.css'), 'utf8'),
- 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
- 'react-css': fs.readFileSync(path.join(__dirname, '..', '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
+ 'react-tooltip-component.css': fs.readFileSync(path.join(__dirname, '..', 'node_modules', 'react-tooltip-component', 'dist', 'react-tooltip-component.css'), 'utf8'),
+ 'react-css': fs.readFileSync(path.join(__dirname, '..', 'node_modules', 'react-select', 'dist', 'react-select.css'), 'utf8'),
}
function bundleCss () {
diff --git a/ui/responsive/design/00-metamask-SignIn.jpg b/ui/design/00-metamask-SignIn.jpg
index 2becdb032..2becdb032 100644
--- a/ui/responsive/design/00-metamask-SignIn.jpg
+++ b/ui/design/00-metamask-SignIn.jpg
Binary files differ
diff --git a/ui/responsive/design/01-metamask-SelectAcc.jpg b/ui/design/01-metamask-SelectAcc.jpg
index 239091a98..239091a98 100644
--- a/ui/responsive/design/01-metamask-SelectAcc.jpg
+++ b/ui/design/01-metamask-SelectAcc.jpg
Binary files differ
diff --git a/ui/responsive/design/02-metamask-AccDetails.jpg b/ui/design/02-metamask-AccDetails.jpg
index d7d408ffc..d7d408ffc 100644
--- a/ui/responsive/design/02-metamask-AccDetails.jpg
+++ b/ui/design/02-metamask-AccDetails.jpg
Binary files differ
diff --git a/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg b/ui/design/02a-metamask-AccDetails-OverToken.jpg
index f26ff31e8..f26ff31e8 100644
--- a/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg
+++ b/ui/design/02a-metamask-AccDetails-OverToken.jpg
Binary files differ
diff --git a/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg b/ui/design/02a-metamask-AccDetails-OverTransaction.jpg
index 8a06be6b9..8a06be6b9 100644
--- a/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg
+++ b/ui/design/02a-metamask-AccDetails-OverTransaction.jpg
Binary files differ
diff --git a/ui/responsive/design/02a-metamask-AccDetails.jpg b/ui/design/02a-metamask-AccDetails.jpg
index c37e0f539..c37e0f539 100644
--- a/ui/responsive/design/02a-metamask-AccDetails.jpg
+++ b/ui/design/02a-metamask-AccDetails.jpg
Binary files differ
diff --git a/ui/responsive/design/02b-metamask-AccDetails-Send.jpg b/ui/design/02b-metamask-AccDetails-Send.jpg
index 10f2d27fd..10f2d27fd 100644
--- a/ui/responsive/design/02b-metamask-AccDetails-Send.jpg
+++ b/ui/design/02b-metamask-AccDetails-Send.jpg
Binary files differ
diff --git a/ui/responsive/design/03-metamask-Qr.jpg b/ui/design/03-metamask-Qr.jpg
index 9c09de42f..9c09de42f 100644
--- a/ui/responsive/design/03-metamask-Qr.jpg
+++ b/ui/design/03-metamask-Qr.jpg
Binary files differ
diff --git a/ui/responsive/design/05-metamask-Menu.jpg b/ui/design/05-metamask-Menu.jpg
index 0a43d7b2a..0a43d7b2a 100644
--- a/ui/responsive/design/05-metamask-Menu.jpg
+++ b/ui/design/05-metamask-Menu.jpg
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png b/ui/design/chromeStorePics/final_screen_dao_accounts.png
index 805cc96b6..805cc96b6 100644
--- a/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png
+++ b/ui/design/chromeStorePics/final_screen_dao_accounts.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png b/ui/design/chromeStorePics/final_screen_dao_locked.png
index 9d9e33930..9d9e33930 100644
--- a/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png
+++ b/ui/design/chromeStorePics/final_screen_dao_locked.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png b/ui/design/chromeStorePics/final_screen_dao_notification.png
index d56a5ce62..d56a5ce62 100644
--- a/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png
+++ b/ui/design/chromeStorePics/final_screen_dao_notification.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_wei_account.png b/ui/design/chromeStorePics/final_screen_wei_account.png
index d503ff301..d503ff301 100644
--- a/ui/responsive/design/chromeStorePics/final_screen_wei_account.png
+++ b/ui/design/chromeStorePics/final_screen_wei_account.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png b/ui/design/chromeStorePics/final_screen_wei_notification.png
index 3560c51ff..3560c51ff 100644
--- a/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png
+++ b/ui/design/chromeStorePics/final_screen_wei_notification.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/icon-128.png b/ui/design/chromeStorePics/icon-128.png
index ae687147d..ae687147d 100644
--- a/ui/responsive/design/chromeStorePics/icon-128.png
+++ b/ui/design/chromeStorePics/icon-128.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/icon-64.png b/ui/design/chromeStorePics/icon-64.png
index 7062cf4f1..7062cf4f1 100644
--- a/ui/responsive/design/chromeStorePics/icon-64.png
+++ b/ui/design/chromeStorePics/icon-64.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/metamask_icon.ai b/ui/design/chromeStorePics/metamask_icon.ai
index 27400c5a4..27400c5a4 100644
--- a/ui/responsive/design/chromeStorePics/metamask_icon.ai
+++ b/ui/design/chromeStorePics/metamask_icon.ai
diff --git a/ui/responsive/design/chromeStorePics/promo1400560.png b/ui/design/chromeStorePics/promo1400560.png
index d3637ecc8..d3637ecc8 100644
--- a/ui/responsive/design/chromeStorePics/promo1400560.png
+++ b/ui/design/chromeStorePics/promo1400560.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/promo440280.png b/ui/design/chromeStorePics/promo440280.png
index c1f92b1c0..c1f92b1c0 100644
--- a/ui/responsive/design/chromeStorePics/promo440280.png
+++ b/ui/design/chromeStorePics/promo440280.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/promo920680.png b/ui/design/chromeStorePics/promo920680.png
index 726bd810a..726bd810a 100644
--- a/ui/responsive/design/chromeStorePics/promo920680.png
+++ b/ui/design/chromeStorePics/promo920680.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_dao_accounts.png b/ui/design/chromeStorePics/screen_dao_accounts.png
index 1a2e8052c..1a2e8052c 100644
--- a/ui/responsive/design/chromeStorePics/screen_dao_accounts.png
+++ b/ui/design/chromeStorePics/screen_dao_accounts.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_dao_locked.png b/ui/design/chromeStorePics/screen_dao_locked.png
index 6592c17e4..6592c17e4 100644
--- a/ui/responsive/design/chromeStorePics/screen_dao_locked.png
+++ b/ui/design/chromeStorePics/screen_dao_locked.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_dao_notification.png b/ui/design/chromeStorePics/screen_dao_notification.png
index baeb2ec39..baeb2ec39 100644
--- a/ui/responsive/design/chromeStorePics/screen_dao_notification.png
+++ b/ui/design/chromeStorePics/screen_dao_notification.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_wei_account.png b/ui/design/chromeStorePics/screen_wei_account.png
index 23301e4bf..23301e4bf 100644
--- a/ui/responsive/design/chromeStorePics/screen_wei_account.png
+++ b/ui/design/chromeStorePics/screen_wei_account.png
Binary files differ
diff --git a/ui/responsive/design/chromeStorePics/screen_wei_notification.png b/ui/design/chromeStorePics/screen_wei_notification.png
index 7a763e5df..7a763e5df 100644
--- a/ui/responsive/design/chromeStorePics/screen_wei_notification.png
+++ b/ui/design/chromeStorePics/screen_wei_notification.png
Binary files differ
diff --git a/ui/responsive/design/metamask-logo-eyes.png b/ui/design/metamask-logo-eyes.png
index c29331b28..c29331b28 100644
--- a/ui/responsive/design/metamask-logo-eyes.png
+++ b/ui/design/metamask-logo-eyes.png
Binary files differ
diff --git a/ui/responsive/design/wireframes/1st_time_use.png b/ui/design/wireframes/1st_time_use.png
index c18ced5e2..c18ced5e2 100644
--- a/ui/responsive/design/wireframes/1st_time_use.png
+++ b/ui/design/wireframes/1st_time_use.png
Binary files differ
diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf b/ui/design/wireframes/metamask_wfs_jan_13.pdf
index c77c9274a..c77c9274a 100644
--- a/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf
+++ b/ui/design/wireframes/metamask_wfs_jan_13.pdf
Binary files differ
diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_13.png b/ui/design/wireframes/metamask_wfs_jan_13.png
index d71d7bdb4..d71d7bdb4 100644
--- a/ui/responsive/design/wireframes/metamask_wfs_jan_13.png
+++ b/ui/design/wireframes/metamask_wfs_jan_13.png
Binary files differ
diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf b/ui/design/wireframes/metamask_wfs_jan_18.pdf
index 592ba8532..592ba8532 100644
--- a/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf
+++ b/ui/design/wireframes/metamask_wfs_jan_18.pdf
Binary files differ
diff --git a/ui/responsive/example.js b/ui/example.js
index 4627c0e9c..4627c0e9c 100644
--- a/ui/responsive/example.js
+++ b/ui/example.js
diff --git a/ui/responsive/index.html b/ui/index.html
index 9dfaefbb3..9dfaefbb3 100644
--- a/ui/responsive/index.html
+++ b/ui/index.html
diff --git a/ui/responsive/index.js b/ui/index.js
index a729138d3..a729138d3 100644
--- a/ui/responsive/index.js
+++ b/ui/index.js
diff --git a/ui/responsive/lib/account-link.js b/ui/lib/account-link.js
index d061d0ad1..d061d0ad1 100644
--- a/ui/responsive/lib/account-link.js
+++ b/ui/lib/account-link.js
diff --git a/ui/responsive/lib/contract-namer.js b/ui/lib/contract-namer.js
index f05e770cc..f05e770cc 100644
--- a/ui/responsive/lib/contract-namer.js
+++ b/ui/lib/contract-namer.js
diff --git a/ui/responsive/lib/etherscan-prefix-for-network.js b/ui/lib/etherscan-prefix-for-network.js
index 2c1904f1c..2c1904f1c 100644
--- a/ui/responsive/lib/etherscan-prefix-for-network.js
+++ b/ui/lib/etherscan-prefix-for-network.js
diff --git a/ui/responsive/lib/explorer-link.js b/ui/lib/explorer-link.js
index 3b82ecd5f..3b82ecd5f 100644
--- a/ui/responsive/lib/explorer-link.js
+++ b/ui/lib/explorer-link.js
diff --git a/ui/responsive/lib/icon-factory.js b/ui/lib/icon-factory.js
index 27a74de66..27a74de66 100644
--- a/ui/responsive/lib/icon-factory.js
+++ b/ui/lib/icon-factory.js
diff --git a/ui/responsive/lib/lost-accounts-notice.js b/ui/lib/lost-accounts-notice.js
index 948b13db6..948b13db6 100644
--- a/ui/responsive/lib/lost-accounts-notice.js
+++ b/ui/lib/lost-accounts-notice.js
diff --git a/ui/responsive/lib/persistent-form.js b/ui/lib/persistent-form.js
index d4dc20b03..d4dc20b03 100644
--- a/ui/responsive/lib/persistent-form.js
+++ b/ui/lib/persistent-form.js
diff --git a/ui/responsive/lib/tx-helper.js b/ui/lib/tx-helper.js
index ec19daf64..afc62e7b6 100644
--- a/ui/responsive/lib/tx-helper.js
+++ b/ui/lib/tx-helper.js
@@ -12,6 +12,10 @@ module.exports = function (unapprovedTxs, unapprovedMsgs, personalMsgs, network)
const personalValues = valuesFor(personalMsgs)
log.debug(`tx helper found ${personalValues.length} unsigned personal messages`)
allValues = allValues.concat(personalValues)
+ allValues = allValues.sort((a, b) => {
+ return a.time > b.time
+ })
- return allValues.sort(txMeta => txMeta.time)
+ return allValues
}
+
diff --git a/ui/responsive/.gitignore b/ui/responsive/.gitignore
deleted file mode 100644
index c6b1254b5..000000000
--- a/ui/responsive/.gitignore
+++ /dev/null
@@ -1,66 +0,0 @@
-
-# Created by https://www.gitignore.io/api/osx,node
-
-### OSX ###
-.DS_Store
-.AppleDouble
-.LSOverride
-
-# Icon must end with two \r
-Icon
-
-# Thumbnails
-._*
-
-# Files that might appear in the root of a volume
-.DocumentRevisions-V100
-.fseventsd
-.Spotlight-V100
-.TemporaryItems
-.Trashes
-.VolumeIcon.icns
-
-# Directories potentially created on remote AFP share
-.AppleDB
-.AppleDesktop
-Network Trash Folder
-Temporary Items
-.apdisk
-
-
-### Node ###
-# Logs
-logs
-*.log
-npm-debug.log*
-
-# Runtime data
-pids
-*.pid
-*.seed
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (http://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directory
-# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
-node_modules
-
-# Optional npm cache directory
-.npm
-
-# Optional REPL history
-.node_repl_history
-