diff options
author | Dan Finlay <flyswatter@users.noreply.github.com> | 2017-07-21 05:05:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-21 05:05:12 +0800 |
commit | 6553c9c64b82a9a26a973f05b5fe7f29a6371828 (patch) | |
tree | 8f2433bb8dd30e5eaba1fdec7271744323dea46d | |
parent | 199587383b022a17d56adcb56d6a99ceba71fec7 (diff) | |
parent | 38dccab12e4140bb085f3ea17e642e55f54d68a1 (diff) | |
download | tangerine-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.md | 30 | ||||
-rw-r--r-- | README.md | 14 | ||||
-rw-r--r-- | app/manifest.json | 7 | ||||
-rw-r--r-- | app/scripts/blacklister.js | 13 | ||||
-rw-r--r-- | app/scripts/controllers/infura.js | 1 | ||||
-rw-r--r-- | app/scripts/controllers/transactions.js | 223 | ||||
-rw-r--r-- | app/scripts/lib/auto-faucet.js | 20 | ||||
-rw-r--r-- | app/scripts/lib/nodeify.js | 27 | ||||
-rw-r--r-- | app/scripts/lib/nonce-tracker.js | 84 | ||||
-rw-r--r-- | app/scripts/lib/tx-utils.js | 18 | ||||
-rw-r--r-- | app/scripts/metamask-controller.js | 44 | ||||
-rw-r--r-- | app/scripts/migrations/016.js | 41 | ||||
-rw-r--r-- | app/scripts/migrations/017.js | 40 | ||||
-rw-r--r-- | app/scripts/migrations/index.js | 2 | ||||
-rw-r--r-- | app/scripts/popup-core.js | 2 | ||||
-rw-r--r-- | app/scripts/popup.js | 2 | ||||
-rw-r--r-- | app/scripts/responsive-core.js | 2 | ||||
-rw-r--r-- | app/scripts/responsive.js | 2 | ||||
-rw-r--r-- | circle.yml | 2 | ||||
-rw-r--r-- | gulpfile.js | 1 | ||||
-rw-r--r-- | package.json | 15 | ||||
-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) | bin | 141119 -> 141119 bytes | |||
-rw-r--r-- | responsive-ui/app/img/identicon-walrus.png (renamed from ui/classic/app/img/identicon-walrus.png) | bin | 388973 -> 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) | bin | 57848 -> 57848 bytes | |||
-rw-r--r-- | responsive-ui/design/01-metamask-SelectAcc.jpg (renamed from ui/classic/design/01-metamask-SelectAcc.jpg) | bin | 76063 -> 76063 bytes | |||
-rw-r--r-- | responsive-ui/design/02-metamask-AccDetails.jpg (renamed from ui/classic/design/02-metamask-AccDetails.jpg) | bin | 75780 -> 75780 bytes | |||
-rw-r--r-- | responsive-ui/design/02a-metamask-AccDetails-OverToken.jpg (renamed from ui/classic/design/02a-metamask-AccDetails-OverToken.jpg) | bin | 121847 -> 121847 bytes | |||
-rw-r--r-- | responsive-ui/design/02a-metamask-AccDetails-OverTransaction.jpg (renamed from ui/classic/design/02a-metamask-AccDetails-OverTransaction.jpg) | bin | 122075 -> 122075 bytes | |||
-rw-r--r-- | responsive-ui/design/02a-metamask-AccDetails.jpg (renamed from ui/classic/design/02a-metamask-AccDetails.jpg) | bin | 117570 -> 117570 bytes | |||
-rw-r--r-- | responsive-ui/design/02b-metamask-AccDetails-Send.jpg (renamed from ui/classic/design/02b-metamask-AccDetails-Send.jpg) | bin | 110143 -> 110143 bytes | |||
-rw-r--r-- | responsive-ui/design/03-metamask-Qr.jpg (renamed from ui/classic/design/03-metamask-Qr.jpg) | bin | 66052 -> 66052 bytes | |||
-rw-r--r-- | responsive-ui/design/05-metamask-Menu.jpg (renamed from ui/classic/design/05-metamask-Menu.jpg) | bin | 130264 -> 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) | bin | 249708 -> 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) | bin | 220295 -> 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) | bin | 214405 -> 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) | bin | 253382 -> 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) | bin | 193865 -> 193865 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/icon-128.png (renamed from ui/classic/design/chromeStorePics/icon-128.png) | bin | 5770 -> 5770 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/icon-64.png (renamed from ui/classic/design/chromeStorePics/icon-64.png) | bin | 3573 -> 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) | bin | 261644 -> 261644 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/promo440280.png (renamed from ui/classic/design/chromeStorePics/promo440280.png) | bin | 57471 -> 57471 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/promo920680.png (renamed from ui/classic/design/chromeStorePics/promo920680.png) | bin | 206713 -> 206713 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/screen_dao_accounts.png (renamed from ui/classic/design/chromeStorePics/screen_dao_accounts.png) | bin | 517598 -> 517598 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/screen_dao_locked.png (renamed from ui/classic/design/chromeStorePics/screen_dao_locked.png) | bin | 287108 -> 287108 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/screen_dao_notification.png (renamed from ui/classic/design/chromeStorePics/screen_dao_notification.png) | bin | 296498 -> 296498 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/screen_wei_account.png (renamed from ui/classic/design/chromeStorePics/screen_wei_account.png) | bin | 653633 -> 653633 bytes | |||
-rw-r--r-- | responsive-ui/design/chromeStorePics/screen_wei_notification.png (renamed from ui/classic/design/chromeStorePics/screen_wei_notification.png) | bin | 402486 -> 402486 bytes | |||
-rw-r--r-- | responsive-ui/design/metamask-logo-eyes.png (renamed from ui/classic/design/metamask-logo-eyes.png) | bin | 146076 -> 146076 bytes | |||
-rw-r--r-- | responsive-ui/design/wireframes/1st_time_use.png (renamed from ui/classic/design/wireframes/1st_time_use.png) | bin | 937556 -> 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) | bin | 452413 -> 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) | bin | 419066 -> 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) | bin | 612778 -> 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.js | 70 | ||||
-rw-r--r-- | test/unit/nodeify-test.js | 2 | ||||
-rw-r--r-- | test/unit/nonce-tracker-test.js | 40 | ||||
-rw-r--r-- | test/unit/responsive/components/dropdown-test.js | 6 | ||||
-rw-r--r-- | test/unit/tx-controller-test.js | 75 | ||||
-rw-r--r-- | test/unit/tx-helper-test.js | 17 | ||||
-rw-r--r-- | test/unit/tx-utils-test.js | 38 | ||||
-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) | bin | 141119 -> 141119 bytes | |||
-rw-r--r-- | ui/app/img/identicon-walrus.png (renamed from ui/responsive/app/img/identicon-walrus.png) | bin | 388973 -> 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) | bin | 57848 -> 57848 bytes | |||
-rw-r--r-- | ui/design/01-metamask-SelectAcc.jpg (renamed from ui/responsive/design/01-metamask-SelectAcc.jpg) | bin | 76063 -> 76063 bytes | |||
-rw-r--r-- | ui/design/02-metamask-AccDetails.jpg (renamed from ui/responsive/design/02-metamask-AccDetails.jpg) | bin | 75780 -> 75780 bytes | |||
-rw-r--r-- | ui/design/02a-metamask-AccDetails-OverToken.jpg (renamed from ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg) | bin | 121847 -> 121847 bytes | |||
-rw-r--r-- | ui/design/02a-metamask-AccDetails-OverTransaction.jpg (renamed from ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg) | bin | 122075 -> 122075 bytes | |||
-rw-r--r-- | ui/design/02a-metamask-AccDetails.jpg (renamed from ui/responsive/design/02a-metamask-AccDetails.jpg) | bin | 117570 -> 117570 bytes | |||
-rw-r--r-- | ui/design/02b-metamask-AccDetails-Send.jpg (renamed from ui/responsive/design/02b-metamask-AccDetails-Send.jpg) | bin | 110143 -> 110143 bytes | |||
-rw-r--r-- | ui/design/03-metamask-Qr.jpg (renamed from ui/responsive/design/03-metamask-Qr.jpg) | bin | 66052 -> 66052 bytes | |||
-rw-r--r-- | ui/design/05-metamask-Menu.jpg (renamed from ui/responsive/design/05-metamask-Menu.jpg) | bin | 130264 -> 130264 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/final_screen_dao_accounts.png (renamed from ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png) | bin | 249708 -> 249708 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/final_screen_dao_locked.png (renamed from ui/responsive/design/chromeStorePics/final_screen_dao_locked.png) | bin | 220295 -> 220295 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/final_screen_dao_notification.png (renamed from ui/responsive/design/chromeStorePics/final_screen_dao_notification.png) | bin | 214405 -> 214405 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/final_screen_wei_account.png (renamed from ui/responsive/design/chromeStorePics/final_screen_wei_account.png) | bin | 253382 -> 253382 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/final_screen_wei_notification.png (renamed from ui/responsive/design/chromeStorePics/final_screen_wei_notification.png) | bin | 193865 -> 193865 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/icon-128.png (renamed from ui/responsive/design/chromeStorePics/icon-128.png) | bin | 5770 -> 5770 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/icon-64.png (renamed from ui/responsive/design/chromeStorePics/icon-64.png) | bin | 3573 -> 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) | bin | 261644 -> 261644 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/promo440280.png (renamed from ui/responsive/design/chromeStorePics/promo440280.png) | bin | 57471 -> 57471 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/promo920680.png (renamed from ui/responsive/design/chromeStorePics/promo920680.png) | bin | 206713 -> 206713 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/screen_dao_accounts.png (renamed from ui/responsive/design/chromeStorePics/screen_dao_accounts.png) | bin | 517598 -> 517598 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/screen_dao_locked.png (renamed from ui/responsive/design/chromeStorePics/screen_dao_locked.png) | bin | 287108 -> 287108 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/screen_dao_notification.png (renamed from ui/responsive/design/chromeStorePics/screen_dao_notification.png) | bin | 296498 -> 296498 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/screen_wei_account.png (renamed from ui/responsive/design/chromeStorePics/screen_wei_account.png) | bin | 653633 -> 653633 bytes | |||
-rw-r--r-- | ui/design/chromeStorePics/screen_wei_notification.png (renamed from ui/responsive/design/chromeStorePics/screen_wei_notification.png) | bin | 402486 -> 402486 bytes | |||
-rw-r--r-- | ui/design/metamask-logo-eyes.png (renamed from ui/responsive/design/metamask-logo-eyes.png) | bin | 146076 -> 146076 bytes | |||
-rw-r--r-- | ui/design/wireframes/1st_time_use.png (renamed from ui/responsive/design/wireframes/1st_time_use.png) | bin | 937556 -> 937556 bytes | |||
-rw-r--r-- | ui/design/wireframes/metamask_wfs_jan_13.pdf (renamed from ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf) | bin | 452413 -> 452413 bytes | |||
-rw-r--r-- | ui/design/wireframes/metamask_wfs_jan_13.png (renamed from ui/responsive/design/wireframes/metamask_wfs_jan_13.png) | bin | 419066 -> 419066 bytes | |||
-rw-r--r-- | ui/design/wireframes/metamask_wfs_jan_18.pdf (renamed from ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf) | bin | 612778 -> 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/.gitignore | 66 |
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 @@ -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 Binary files differindex 1742a32b8..1742a32b8 100644 --- a/ui/classic/app/img/identicon-tardigrade.png +++ b/responsive-ui/app/img/identicon-tardigrade.png diff --git a/ui/classic/app/img/identicon-walrus.png b/responsive-ui/app/img/identicon-walrus.png Binary files differindex d58fae912..d58fae912 100644 --- a/ui/classic/app/img/identicon-walrus.png +++ b/responsive-ui/app/img/identicon-walrus.png 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 Binary files differindex 2becdb032..2becdb032 100644 --- a/ui/classic/design/00-metamask-SignIn.jpg +++ b/responsive-ui/design/00-metamask-SignIn.jpg diff --git a/ui/classic/design/01-metamask-SelectAcc.jpg b/responsive-ui/design/01-metamask-SelectAcc.jpg Binary files differindex 239091a98..239091a98 100644 --- a/ui/classic/design/01-metamask-SelectAcc.jpg +++ b/responsive-ui/design/01-metamask-SelectAcc.jpg diff --git a/ui/classic/design/02-metamask-AccDetails.jpg b/responsive-ui/design/02-metamask-AccDetails.jpg Binary files differindex d7d408ffc..d7d408ffc 100644 --- a/ui/classic/design/02-metamask-AccDetails.jpg +++ b/responsive-ui/design/02-metamask-AccDetails.jpg diff --git a/ui/classic/design/02a-metamask-AccDetails-OverToken.jpg b/responsive-ui/design/02a-metamask-AccDetails-OverToken.jpg Binary files differindex f26ff31e8..f26ff31e8 100644 --- a/ui/classic/design/02a-metamask-AccDetails-OverToken.jpg +++ b/responsive-ui/design/02a-metamask-AccDetails-OverToken.jpg diff --git a/ui/classic/design/02a-metamask-AccDetails-OverTransaction.jpg b/responsive-ui/design/02a-metamask-AccDetails-OverTransaction.jpg Binary files differindex 8a06be6b9..8a06be6b9 100644 --- a/ui/classic/design/02a-metamask-AccDetails-OverTransaction.jpg +++ b/responsive-ui/design/02a-metamask-AccDetails-OverTransaction.jpg diff --git a/ui/classic/design/02a-metamask-AccDetails.jpg b/responsive-ui/design/02a-metamask-AccDetails.jpg Binary files differindex c37e0f539..c37e0f539 100644 --- a/ui/classic/design/02a-metamask-AccDetails.jpg +++ b/responsive-ui/design/02a-metamask-AccDetails.jpg diff --git a/ui/classic/design/02b-metamask-AccDetails-Send.jpg b/responsive-ui/design/02b-metamask-AccDetails-Send.jpg Binary files differindex 10f2d27fd..10f2d27fd 100644 --- a/ui/classic/design/02b-metamask-AccDetails-Send.jpg +++ b/responsive-ui/design/02b-metamask-AccDetails-Send.jpg diff --git a/ui/classic/design/03-metamask-Qr.jpg b/responsive-ui/design/03-metamask-Qr.jpg Binary files differindex 9c09de42f..9c09de42f 100644 --- a/ui/classic/design/03-metamask-Qr.jpg +++ b/responsive-ui/design/03-metamask-Qr.jpg diff --git a/ui/classic/design/05-metamask-Menu.jpg b/responsive-ui/design/05-metamask-Menu.jpg Binary files differindex 0a43d7b2a..0a43d7b2a 100644 --- a/ui/classic/design/05-metamask-Menu.jpg +++ b/responsive-ui/design/05-metamask-Menu.jpg diff --git a/ui/classic/design/chromeStorePics/final_screen_dao_accounts.png b/responsive-ui/design/chromeStorePics/final_screen_dao_accounts.png Binary files differindex 805cc96b6..805cc96b6 100644 --- a/ui/classic/design/chromeStorePics/final_screen_dao_accounts.png +++ b/responsive-ui/design/chromeStorePics/final_screen_dao_accounts.png diff --git a/ui/classic/design/chromeStorePics/final_screen_dao_locked.png b/responsive-ui/design/chromeStorePics/final_screen_dao_locked.png Binary files differindex 9d9e33930..9d9e33930 100644 --- a/ui/classic/design/chromeStorePics/final_screen_dao_locked.png +++ b/responsive-ui/design/chromeStorePics/final_screen_dao_locked.png diff --git a/ui/classic/design/chromeStorePics/final_screen_dao_notification.png b/responsive-ui/design/chromeStorePics/final_screen_dao_notification.png Binary files differindex d56a5ce62..d56a5ce62 100644 --- a/ui/classic/design/chromeStorePics/final_screen_dao_notification.png +++ b/responsive-ui/design/chromeStorePics/final_screen_dao_notification.png diff --git a/ui/classic/design/chromeStorePics/final_screen_wei_account.png b/responsive-ui/design/chromeStorePics/final_screen_wei_account.png Binary files differindex d503ff301..d503ff301 100644 --- a/ui/classic/design/chromeStorePics/final_screen_wei_account.png +++ b/responsive-ui/design/chromeStorePics/final_screen_wei_account.png diff --git a/ui/classic/design/chromeStorePics/final_screen_wei_notification.png b/responsive-ui/design/chromeStorePics/final_screen_wei_notification.png Binary files differindex 3560c51ff..3560c51ff 100644 --- a/ui/classic/design/chromeStorePics/final_screen_wei_notification.png +++ b/responsive-ui/design/chromeStorePics/final_screen_wei_notification.png diff --git a/ui/classic/design/chromeStorePics/icon-128.png b/responsive-ui/design/chromeStorePics/icon-128.png Binary files differindex ae687147d..ae687147d 100644 --- a/ui/classic/design/chromeStorePics/icon-128.png +++ b/responsive-ui/design/chromeStorePics/icon-128.png diff --git a/ui/classic/design/chromeStorePics/icon-64.png b/responsive-ui/design/chromeStorePics/icon-64.png Binary files differindex 7062cf4f1..7062cf4f1 100644 --- a/ui/classic/design/chromeStorePics/icon-64.png +++ b/responsive-ui/design/chromeStorePics/icon-64.png 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 Binary files differindex d3637ecc8..d3637ecc8 100644 --- a/ui/classic/design/chromeStorePics/promo1400560.png +++ b/responsive-ui/design/chromeStorePics/promo1400560.png diff --git a/ui/classic/design/chromeStorePics/promo440280.png b/responsive-ui/design/chromeStorePics/promo440280.png Binary files differindex c1f92b1c0..c1f92b1c0 100644 --- a/ui/classic/design/chromeStorePics/promo440280.png +++ b/responsive-ui/design/chromeStorePics/promo440280.png diff --git a/ui/classic/design/chromeStorePics/promo920680.png b/responsive-ui/design/chromeStorePics/promo920680.png Binary files differindex 726bd810a..726bd810a 100644 --- a/ui/classic/design/chromeStorePics/promo920680.png +++ b/responsive-ui/design/chromeStorePics/promo920680.png diff --git a/ui/classic/design/chromeStorePics/screen_dao_accounts.png b/responsive-ui/design/chromeStorePics/screen_dao_accounts.png Binary files differindex 1a2e8052c..1a2e8052c 100644 --- a/ui/classic/design/chromeStorePics/screen_dao_accounts.png +++ b/responsive-ui/design/chromeStorePics/screen_dao_accounts.png diff --git a/ui/classic/design/chromeStorePics/screen_dao_locked.png b/responsive-ui/design/chromeStorePics/screen_dao_locked.png Binary files differindex 6592c17e4..6592c17e4 100644 --- a/ui/classic/design/chromeStorePics/screen_dao_locked.png +++ b/responsive-ui/design/chromeStorePics/screen_dao_locked.png diff --git a/ui/classic/design/chromeStorePics/screen_dao_notification.png b/responsive-ui/design/chromeStorePics/screen_dao_notification.png Binary files differindex baeb2ec39..baeb2ec39 100644 --- a/ui/classic/design/chromeStorePics/screen_dao_notification.png +++ b/responsive-ui/design/chromeStorePics/screen_dao_notification.png diff --git a/ui/classic/design/chromeStorePics/screen_wei_account.png b/responsive-ui/design/chromeStorePics/screen_wei_account.png Binary files differindex 23301e4bf..23301e4bf 100644 --- a/ui/classic/design/chromeStorePics/screen_wei_account.png +++ b/responsive-ui/design/chromeStorePics/screen_wei_account.png diff --git a/ui/classic/design/chromeStorePics/screen_wei_notification.png b/responsive-ui/design/chromeStorePics/screen_wei_notification.png Binary files differindex 7a763e5df..7a763e5df 100644 --- a/ui/classic/design/chromeStorePics/screen_wei_notification.png +++ b/responsive-ui/design/chromeStorePics/screen_wei_notification.png diff --git a/ui/classic/design/metamask-logo-eyes.png b/responsive-ui/design/metamask-logo-eyes.png Binary files differindex c29331b28..c29331b28 100644 --- a/ui/classic/design/metamask-logo-eyes.png +++ b/responsive-ui/design/metamask-logo-eyes.png diff --git a/ui/classic/design/wireframes/1st_time_use.png b/responsive-ui/design/wireframes/1st_time_use.png Binary files differindex c18ced5e2..c18ced5e2 100644 --- a/ui/classic/design/wireframes/1st_time_use.png +++ b/responsive-ui/design/wireframes/1st_time_use.png diff --git a/ui/classic/design/wireframes/metamask_wfs_jan_13.pdf b/responsive-ui/design/wireframes/metamask_wfs_jan_13.pdf Binary files differindex c77c9274a..c77c9274a 100644 --- a/ui/classic/design/wireframes/metamask_wfs_jan_13.pdf +++ b/responsive-ui/design/wireframes/metamask_wfs_jan_13.pdf diff --git a/ui/classic/design/wireframes/metamask_wfs_jan_13.png b/responsive-ui/design/wireframes/metamask_wfs_jan_13.png Binary files differindex d71d7bdb4..d71d7bdb4 100644 --- a/ui/classic/design/wireframes/metamask_wfs_jan_13.png +++ b/responsive-ui/design/wireframes/metamask_wfs_jan_13.png diff --git a/ui/classic/design/wireframes/metamask_wfs_jan_18.pdf b/responsive-ui/design/wireframes/metamask_wfs_jan_18.pdf Binary files differindex 592ba8532..592ba8532 100644 --- a/ui/classic/design/wireframes/metamask_wfs_jan_18.pdf +++ b/responsive-ui/design/wireframes/metamask_wfs_jan_18.pdf 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 Binary files differindex 1742a32b8..1742a32b8 100644 --- a/ui/responsive/app/img/identicon-tardigrade.png +++ b/ui/app/img/identicon-tardigrade.png diff --git a/ui/responsive/app/img/identicon-walrus.png b/ui/app/img/identicon-walrus.png Binary files differindex d58fae912..d58fae912 100644 --- a/ui/responsive/app/img/identicon-walrus.png +++ b/ui/app/img/identicon-walrus.png 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 Binary files differindex 2becdb032..2becdb032 100644 --- a/ui/responsive/design/00-metamask-SignIn.jpg +++ b/ui/design/00-metamask-SignIn.jpg diff --git a/ui/responsive/design/01-metamask-SelectAcc.jpg b/ui/design/01-metamask-SelectAcc.jpg Binary files differindex 239091a98..239091a98 100644 --- a/ui/responsive/design/01-metamask-SelectAcc.jpg +++ b/ui/design/01-metamask-SelectAcc.jpg diff --git a/ui/responsive/design/02-metamask-AccDetails.jpg b/ui/design/02-metamask-AccDetails.jpg Binary files differindex d7d408ffc..d7d408ffc 100644 --- a/ui/responsive/design/02-metamask-AccDetails.jpg +++ b/ui/design/02-metamask-AccDetails.jpg diff --git a/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg b/ui/design/02a-metamask-AccDetails-OverToken.jpg Binary files differindex f26ff31e8..f26ff31e8 100644 --- a/ui/responsive/design/02a-metamask-AccDetails-OverToken.jpg +++ b/ui/design/02a-metamask-AccDetails-OverToken.jpg diff --git a/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg b/ui/design/02a-metamask-AccDetails-OverTransaction.jpg Binary files differindex 8a06be6b9..8a06be6b9 100644 --- a/ui/responsive/design/02a-metamask-AccDetails-OverTransaction.jpg +++ b/ui/design/02a-metamask-AccDetails-OverTransaction.jpg diff --git a/ui/responsive/design/02a-metamask-AccDetails.jpg b/ui/design/02a-metamask-AccDetails.jpg Binary files differindex c37e0f539..c37e0f539 100644 --- a/ui/responsive/design/02a-metamask-AccDetails.jpg +++ b/ui/design/02a-metamask-AccDetails.jpg diff --git a/ui/responsive/design/02b-metamask-AccDetails-Send.jpg b/ui/design/02b-metamask-AccDetails-Send.jpg Binary files differindex 10f2d27fd..10f2d27fd 100644 --- a/ui/responsive/design/02b-metamask-AccDetails-Send.jpg +++ b/ui/design/02b-metamask-AccDetails-Send.jpg diff --git a/ui/responsive/design/03-metamask-Qr.jpg b/ui/design/03-metamask-Qr.jpg Binary files differindex 9c09de42f..9c09de42f 100644 --- a/ui/responsive/design/03-metamask-Qr.jpg +++ b/ui/design/03-metamask-Qr.jpg diff --git a/ui/responsive/design/05-metamask-Menu.jpg b/ui/design/05-metamask-Menu.jpg Binary files differindex 0a43d7b2a..0a43d7b2a 100644 --- a/ui/responsive/design/05-metamask-Menu.jpg +++ b/ui/design/05-metamask-Menu.jpg diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png b/ui/design/chromeStorePics/final_screen_dao_accounts.png Binary files differindex 805cc96b6..805cc96b6 100644 --- a/ui/responsive/design/chromeStorePics/final_screen_dao_accounts.png +++ b/ui/design/chromeStorePics/final_screen_dao_accounts.png diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png b/ui/design/chromeStorePics/final_screen_dao_locked.png Binary files differindex 9d9e33930..9d9e33930 100644 --- a/ui/responsive/design/chromeStorePics/final_screen_dao_locked.png +++ b/ui/design/chromeStorePics/final_screen_dao_locked.png diff --git a/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png b/ui/design/chromeStorePics/final_screen_dao_notification.png Binary files differindex d56a5ce62..d56a5ce62 100644 --- a/ui/responsive/design/chromeStorePics/final_screen_dao_notification.png +++ b/ui/design/chromeStorePics/final_screen_dao_notification.png diff --git a/ui/responsive/design/chromeStorePics/final_screen_wei_account.png b/ui/design/chromeStorePics/final_screen_wei_account.png Binary files differindex d503ff301..d503ff301 100644 --- a/ui/responsive/design/chromeStorePics/final_screen_wei_account.png +++ b/ui/design/chromeStorePics/final_screen_wei_account.png diff --git a/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png b/ui/design/chromeStorePics/final_screen_wei_notification.png Binary files differindex 3560c51ff..3560c51ff 100644 --- a/ui/responsive/design/chromeStorePics/final_screen_wei_notification.png +++ b/ui/design/chromeStorePics/final_screen_wei_notification.png diff --git a/ui/responsive/design/chromeStorePics/icon-128.png b/ui/design/chromeStorePics/icon-128.png Binary files differindex ae687147d..ae687147d 100644 --- a/ui/responsive/design/chromeStorePics/icon-128.png +++ b/ui/design/chromeStorePics/icon-128.png diff --git a/ui/responsive/design/chromeStorePics/icon-64.png b/ui/design/chromeStorePics/icon-64.png Binary files differindex 7062cf4f1..7062cf4f1 100644 --- a/ui/responsive/design/chromeStorePics/icon-64.png +++ b/ui/design/chromeStorePics/icon-64.png 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 Binary files differindex d3637ecc8..d3637ecc8 100644 --- a/ui/responsive/design/chromeStorePics/promo1400560.png +++ b/ui/design/chromeStorePics/promo1400560.png diff --git a/ui/responsive/design/chromeStorePics/promo440280.png b/ui/design/chromeStorePics/promo440280.png Binary files differindex c1f92b1c0..c1f92b1c0 100644 --- a/ui/responsive/design/chromeStorePics/promo440280.png +++ b/ui/design/chromeStorePics/promo440280.png diff --git a/ui/responsive/design/chromeStorePics/promo920680.png b/ui/design/chromeStorePics/promo920680.png Binary files differindex 726bd810a..726bd810a 100644 --- a/ui/responsive/design/chromeStorePics/promo920680.png +++ b/ui/design/chromeStorePics/promo920680.png diff --git a/ui/responsive/design/chromeStorePics/screen_dao_accounts.png b/ui/design/chromeStorePics/screen_dao_accounts.png Binary files differindex 1a2e8052c..1a2e8052c 100644 --- a/ui/responsive/design/chromeStorePics/screen_dao_accounts.png +++ b/ui/design/chromeStorePics/screen_dao_accounts.png diff --git a/ui/responsive/design/chromeStorePics/screen_dao_locked.png b/ui/design/chromeStorePics/screen_dao_locked.png Binary files differindex 6592c17e4..6592c17e4 100644 --- a/ui/responsive/design/chromeStorePics/screen_dao_locked.png +++ b/ui/design/chromeStorePics/screen_dao_locked.png diff --git a/ui/responsive/design/chromeStorePics/screen_dao_notification.png b/ui/design/chromeStorePics/screen_dao_notification.png Binary files differindex baeb2ec39..baeb2ec39 100644 --- a/ui/responsive/design/chromeStorePics/screen_dao_notification.png +++ b/ui/design/chromeStorePics/screen_dao_notification.png diff --git a/ui/responsive/design/chromeStorePics/screen_wei_account.png b/ui/design/chromeStorePics/screen_wei_account.png Binary files differindex 23301e4bf..23301e4bf 100644 --- a/ui/responsive/design/chromeStorePics/screen_wei_account.png +++ b/ui/design/chromeStorePics/screen_wei_account.png diff --git a/ui/responsive/design/chromeStorePics/screen_wei_notification.png b/ui/design/chromeStorePics/screen_wei_notification.png Binary files differindex 7a763e5df..7a763e5df 100644 --- a/ui/responsive/design/chromeStorePics/screen_wei_notification.png +++ b/ui/design/chromeStorePics/screen_wei_notification.png diff --git a/ui/responsive/design/metamask-logo-eyes.png b/ui/design/metamask-logo-eyes.png Binary files differindex c29331b28..c29331b28 100644 --- a/ui/responsive/design/metamask-logo-eyes.png +++ b/ui/design/metamask-logo-eyes.png diff --git a/ui/responsive/design/wireframes/1st_time_use.png b/ui/design/wireframes/1st_time_use.png Binary files differindex c18ced5e2..c18ced5e2 100644 --- a/ui/responsive/design/wireframes/1st_time_use.png +++ b/ui/design/wireframes/1st_time_use.png diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf b/ui/design/wireframes/metamask_wfs_jan_13.pdf Binary files differindex c77c9274a..c77c9274a 100644 --- a/ui/responsive/design/wireframes/metamask_wfs_jan_13.pdf +++ b/ui/design/wireframes/metamask_wfs_jan_13.pdf diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_13.png b/ui/design/wireframes/metamask_wfs_jan_13.png Binary files differindex d71d7bdb4..d71d7bdb4 100644 --- a/ui/responsive/design/wireframes/metamask_wfs_jan_13.png +++ b/ui/design/wireframes/metamask_wfs_jan_13.png diff --git a/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf b/ui/design/wireframes/metamask_wfs_jan_18.pdf Binary files differindex 592ba8532..592ba8532 100644 --- a/ui/responsive/design/wireframes/metamask_wfs_jan_18.pdf +++ b/ui/design/wireframes/metamask_wfs_jan_18.pdf 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 - |