Compare commits

...

326 Commits

Author SHA1 Message Date
James Prado 816ce3180f Translation Updates (#1323)
* Update account view routing

* Temporarily add unicode character to translated strings for testing

* Temporarily select add unicode to all untranslated strings

* Format changes

* Add all english translations for /account & /generate

* Add the rest of the english translations

* Add a few more missing translations

* Update en translations

* Get selectedLanguage from localstorage instead of redux sttate

* Update snapshots

* Add missing translation keys & Update translate functs & change variable prefix

* translate all markdown strings & remove old translation strings

* Update snapshot

* Add a few more translation strs

* Move raw strings being translated into json

* All translation keys are now Uppercase

* Fix up the last few translations

* Update snapshot

* Uppercase de translation strings

* Bring back shapeshift logo on swap

* Fix contracts tab translations

* Fix a few more translations

* Fix translations

* remove debugging stuff

* Update snapshots

* Use react.fragment as markdown root renderer

* Seperate markdown translations into their own function

* Clean up translation functions

* Clean up translation functions

* Update snapshot

* Fix some broken translation strings

* Add prettier ignore file
2018-03-21 22:50:25 -05:00
William O'Beirne 7521337bda Custom DPaths, Improvements, and Fix SingularDTV (#1351)
* Add dpath to select option display

* Re-enable custom path

* Make it a submittable form to behave better with HW wallets

* Adjust styles

* Widen regex to allow for SingularDTV dpath
2018-03-21 15:19:15 -05:00
greenkeeper[bot] f42b81ac8a fix(package): update electron-updater to version 2.21.1 (#1338) 2018-03-21 14:45:05 -05:00
greenkeeper[bot] aa08c1902d chore(package): update ts-jest to version 22.4.2 (#1339) 2018-03-21 14:08:54 -05:00
Michael - Blurpesec 8eeefe7e25 Fix offline broadcast link (#1350)
* Fixed offline broadcast link

* fix for link from root
2018-03-21 13:49:33 -05:00
William O'Beirne 5d41a7f774 Remove all LESS code (#1348)
* Checking in removal process.

* Final removal of all SCSS

* Remove unnecessary test

* tscheck
2018-03-20 15:08:57 -05:00
William O'Beirne 0b44919912 Update node-sass (#1346) 2018-03-20 11:00:49 -05:00
Danny Skubak 937cc3fde5 Add Jenkins Integration (#1295)
* add jenkins changes

* run prettier

* update icons

* update icons to use latest favicon
2018-03-19 10:42:42 -05:00
Danny Skubak 9be46bf8aa Update blockie package in webpack config (#1337) 2018-03-17 23:52:47 -05:00
Daniel Ternyak f5716514b1
chore(package): update node-sass to version 4.8.1 (#1315)
Closes #1310
2018-03-17 19:48:37 -05:00
Daniel Ternyak 8c0dd3f455
Use ethereum-blockies-base64 (#1326)
* use makeBlockie from ethereum-blockies-base64

* adjust type ethereum-blockies-base64 type declaration

* add ethereum-blockies-base64

* update ethereum-blockies-base64; remove redundent declaration file
2018-03-17 16:31:28 -05:00
Daniel Ternyak 825e467db7
fix(package): update query-string to version 6.0.0 (#1325)
Closes #1322
2018-03-17 00:52:04 -05:00
greenkeeper[bot] 9e723e609c chore(package): update css-loader to version 0.28.11 (#1331) 2018-03-17 00:14:58 -05:00
greenkeeper[bot] be9729c302 chore(package): update @types/react-router-dom to version 4.2.5 (#1328) 2018-03-17 00:14:14 -05:00
greenkeeper[bot] 9a5e2a8c2a chore(package): update electron-builder to version 20.5.1 (#1324) 2018-03-17 00:13:57 -05:00
greenkeeper[bot] 0976552a0b chore(package): update @types/lodash to version 4.14.105 (#1327) 2018-03-17 00:13:17 -05:00
greenkeeper[bot] bd4a63e591 chore(package): update @types/react-select to version 1.2.5 (#1329) 2018-03-17 00:12:56 -05:00
greenkeeper[bot] aeb1b74d8d chore(package): update webpack-subresource-integrity to version 1.1.0-rc.4 (#1330) 2018-03-17 00:12:38 -05:00
greenkeeper[bot] 433a3276bb chore(package): update electron to version 1.8.4 (#1335) 2018-03-17 00:12:20 -05:00
greenkeeper[bot] 4b6cba3211 chore(package): update enzyme-to-json to version 3.3.3 (#1332) 2018-03-17 00:12:03 -05:00
William O'Beirne db6b737cad Show Recent Txs on Check Tx Page (#1147)
* Save transactions to local storage.

* Checksum more things + reset hash on network change.

* Fix IHexTransaction type, grab from from tx object directly.

* Refactor storage of recent transactions to use redux storage and loading.

* Refactor types to a transactions types file.

* Initial crack at recent transactions tab on account

* Punctuation.

* Transaction Status responsive behavior.

* Refactor transaction helper function out to remove circular dependency.

* Fix typings

* Collapse subtabs to select list when too small.

* s/wallet/address

* Type select onChange

* Get fields from current state if web3 tx
2018-03-14 15:10:14 -05:00
greenkeeper[bot] 740b191542 chore(package): update tslint-config-prettier to version 1.10.0 (#1316) 2018-03-14 14:53:11 -05:00
greenkeeper[bot] 0bc24f5825 chore(package): update nodemon to version 1.17.2 (#1320) 2018-03-14 14:52:57 -05:00
greenkeeper[bot] 92e757ceb2 chore(package): update image-webpack-loader to version 4.2.0 (#1319) 2018-03-14 14:52:02 -05:00
William O'Beirne 4b8adc81ce Allow 0 ETH Transactions (#1307)
* Allow zero number

* Fail when request payment is zero value, or if you try to send token with zero value.

* Parseint instead of addition casting to catch empty string.
2018-03-14 14:51:37 -05:00
anticlimactic 16469e1a62 Show Disabled Send Button on /pushtx (#1302)
* Fixes #1291. Implemented a new boolean that allows you to toggle whether you are using a disabled send tx button that persists or a send tx button that remains invisible until a valid transaction is present.

* Fixed object shorthand precommit error.

* Cleanup boolean logic, remove redundant code, make comparision elements more obvious
2018-03-12 00:06:09 -05:00
Daniel Ternyak 3d8f678887
chore(package): update electron-builder to version 20.4.0 (#1299)
Closes #1271
2018-03-11 18:09:31 -05:00
Daniel Ternyak 8649655019
Add HackerOne to Announcement (#1218) 2018-03-11 17:25:24 -05:00
greenkeeper[bot] 9284fb56eb chore(package): update @types/react-select to version 1.2.4 (#1301) 2018-03-11 17:24:35 -05:00
greenkeeper[bot] 7905b0cf67 chore(package): update less-loader to version 4.1.0 (#1304) 2018-03-11 17:24:20 -05:00
greenkeeper[bot] 3f6681711f chore(package): update style-loader to version 0.20.3 (#1305) 2018-03-11 17:23:31 -05:00
greenkeeper[bot] 7b7728cf9d chore(package): update copy-webpack-plugin to version 4.5.1 (#1306) 2018-03-11 17:23:15 -05:00
greenkeeper[bot] 033407460b fix(package): update wallet-address-validator to version 0.1.3 (#1303) 2018-03-11 17:22:38 -05:00
James Prado 4788381641 Update Account SubTab Routing / Token Scanner CSS Updates (#1276)
* Redirect user to subtab after logging in

* Update token balances styles

* Adjust routing for readOnly wallets
2018-03-11 17:19:35 -05:00
William O'Beirne 56943232a0 Roll Back enzyme-to-json Revoked Version (#1308) 2018-03-09 18:34:08 -06:00
greenkeeper[bot] aa287f478a chore(package): update electron to version 1.8.3 (#1266) 2018-03-08 13:29:09 -06:00
James Prado 9cac0298a2 Improve accessibility (a11y) (#1267)
* Manage modal focus

* Add isOpen prop to CustomNodeModal

* Remove outline overrides

* Update outline style for inputs

* Fix modal focus management & Cleanup CustomNodeModal

* Add aria-label on modal close button

* Fix modal scroll to top

* Add aria-live property for notifications

* Add aria-busy to Spinner component

* Fix border styles for generatewallet password inputs

* Update token balances inputs

* Remove multiple h1's & Update styles

* Add alt text to all img elements

* Update swap link from bity to shapeshift

* Update aria-labels and alt text

* Only show keystore password input when required

* Revert "Only show keystore password input when required"

This reverts commit 7ec5de52da0982cd3131f365b142f6915638d831.

* address changes requested
2018-03-08 13:28:43 -06:00
greenkeeper[bot] 6e8d807b22 fix(package): update react-markdown to version 3.3.0 (#1272) 2018-03-08 12:06:06 -06:00
greenkeeper[bot] 80383a831e fix(package): update ethereumjs-tx to version 1.3.4 (#1283) 2018-03-08 12:05:29 -06:00
greenkeeper[bot] 5e97a9fe66 chore(package): update url-search-params-polyfill to version 3.0.0 (#1296) 2018-03-08 12:04:58 -06:00
greenkeeper[bot] 3af6607901 chore(package): update enzyme-to-json to version 3.3.2 (#1297) 2018-03-08 12:04:20 -06:00
aitrean cf9887f21f Outstanding tasks to Productionize Tx (#1194)
* Verify and complete all branching saga logic tests for transaction stack.

* Write reducer tests for refactored transaction stack.

* Add selector tests. Some files still need to be debugged.

* Add snapshot test for fields, additional seelector testing.

* Remove fields snapshots.

* Remove ABIs from the TestState json

* Use redux state instead of raw json in selector testing.

* Fix merge issues.

* Remove log

* Fix state values.

* Change test value to wei.

* Last touchup.

* Fix buffer shape, change Wei typo, use reasonable wei values.

* Last touch up.
2018-03-08 12:03:45 -06:00
HenryNguyen5 94b3f3403b Fix recommended gas price breaking on subtab switch (#1268) 2018-03-07 17:55:46 -06:00
HenryNguyen5 16e6677c0f Derive available tx metadata (#1257)
* Derive "from" and "unit" parameters from current transaction when possible

* Fix tsc errors

* Address changes
2018-03-07 17:42:16 -06:00
William O'Beirne 3bce82ba86 Fix favicon transparency. (#1289) 2018-03-07 17:37:59 -06:00
HenryNguyen5 c340246ca0 Enable no-implicit-any (#1263)
* Progress commit

* Update more types

* Fix more types

* Fix abi function types

* Fix lib types

* Fix rest of types

* Address wbobeirne changes

* Change origin and destination check
2018-03-07 17:36:05 -06:00
Daniel Ternyak 0e26f7af4c
Tag Beta 0.5.1 (#1287) 2018-03-07 10:55:29 -06:00
Daniel Ternyak 3278318fa6
Fix Coinbase Widget (#1286)
* Connect Promos; pass current wallet address to Coinbase

* Use ShapeShift as promo if no wallet instance when showing Coinbase

* use appstate for typing
2018-03-07 10:54:14 -06:00
greenkeeper[bot] b901c3e125 chore(package): update @types/jest to version 22.2.0 (#1261) 2018-03-05 23:52:43 -06:00
Daniel Ternyak 8acef8e54f
Revert hard-source-webpack-plugin updates (#1269)
* Revert "fix(package): update hard-source-webpack-plugin to version 0.6.4 (#1254)"

This reverts commit e45324e7f1.

* Revert "fix(package): update hard-source-webpack-plugin to version 0.6.1 (#1232)"

This reverts commit b016d35819.
2018-03-05 23:52:20 -06:00
HenryNguyen5 2d057eb0b2 Fix swap timer (#1265) 2018-03-05 22:51:31 -06:00
William O'Beirne a5be81e96d Change swap link icon to ShapeShift logo. Get rid of new banner. (#1264) 2018-03-05 21:22:45 -06:00
Daniel Ternyak 0d4bc5bbb1
Tag Beta Release 0.5.0 (#1255) 2018-03-05 14:36:20 -06:00
greenkeeper[bot] 446d7043c3 chore(package): update resolve-url-loader to version 2.3.0 (#1243) 2018-03-05 13:52:27 -06:00
greenkeeper[bot] 3bdf41cf59 chore(package): update electron-builder to version 20.2.1 (#1250) 2018-03-05 13:51:45 -06:00
Taylor Monahan 7941403782 Copy / messaging tweaks (#1253)
* replace "don't have a wallet" with "account" for more consistency

* Update Copyright info in disclaimer model

* fix prettier issues
2018-03-05 13:51:06 -06:00
greenkeeper[bot] 533255094b fix(package): update electron-updater to version 2.21.0 (#1251) 2018-03-05 13:49:42 -06:00
William O'Beirne d0379b19a0 Fix Disclaimer Open on ESC (#1245)
* Don’t listen to escape while modal is closed.

* Remove console
2018-03-05 13:00:54 -06:00
Daniel Ternyak e45324e7f1
fix(package): update hard-source-webpack-plugin to version 0.6.4 (#1254)
Closes #1252
2018-03-05 12:59:09 -06:00
William O'Beirne 3a36818412 Add Check TX Button to Transaction Notification (#1217)
* Reinstates v3 behavior on transaction send:

* Alert shows Check TX Status button

* Check TX page uses txHash query param

* LogOutPrompt now carries over search params and hash

* Remove console log

* Update test.
2018-03-05 12:58:53 -06:00
William O'Beirne e3194a649e Fix Blurry Modals (#1246) 2018-03-05 12:52:35 -06:00
greenkeeper[bot] b016d35819 fix(package): update hard-source-webpack-plugin to version 0.6.1 (#1232) 2018-03-03 13:29:42 -06:00
Daniel Ternyak dd83071ec7
chore(package): update url-loader to version 1.0.1 (#1240)
Closes #1237
2018-03-03 13:27:27 -06:00
greenkeeper[bot] 383df967a7 chore(package): update sass-loader to version 6.0.7 (#1236) 2018-03-03 13:27:10 -06:00
greenkeeper[bot] 611e511b33 fix(package): update moment to version 2.21.0 (#1235) 2018-03-03 13:26:36 -06:00
Luit Hollander a9aeacb775 Fix Repo Link (#1239) 2018-03-03 13:12:45 -06:00
William O'Beirne 6927aa0b55 Prevent Scrolling From Altering Amount Field (#1234)
* Prevent scrolling to adjust number input.

* Blur instead, less annoying.
2018-03-03 13:11:05 -06:00
HenryNguyen5 4dd0fc9785 Fix contract interact (#1233)
* reduce unintended side effects from empty units

* Fix contract interaction "to" address being empty

* Fix tsc errors
2018-03-02 15:57:17 -06:00
greenkeeper[bot] 86992e8198 chore(package): update ts-jest to version 22.4.1 (#1231) 2018-03-02 11:19:04 -06:00
Daniel Ternyak 7c451ffd4f
Tag Beta Release 0.4.0 (#1225) 2018-03-02 00:31:26 -06:00
HenryNguyen5 e9d719be52 Remove tx on state change (#1224)
* Clear serialized transaction on any change to transaction state

* Fix tsc errors

* remove console error

* Remove property mutations

* dont reset network unit when unit property isnt being reset
2018-03-02 00:28:50 -06:00
Daniel Ternyak 84319ab9a1
Fix unit value (#1223) 2018-03-01 23:31:27 -06:00
greenkeeper[bot] dbb5d9944d fix(package): update wallet-address-validator to version 0.1.2 (#1222) 2018-03-01 23:05:54 -06:00
greenkeeper[bot] f442cdae61 chore(package): update copy-webpack-plugin to version 4.5.0 (#1221) 2018-03-01 19:30:43 -06:00
James Prado aabcd3f7a3 Use Network Symbol in Confirmation Modal (#1039)
* Set default unit to 'ETH' instead of 'ether'

* Use 'isEtherUnit()' everywhere

* Set default unit to empty string

* Update isEthUnit to isNetworkUnit

* Fix unit conversion for non-ethereum networks

* Set default network unit properly

* Fix tests

* fix typos

* Update isNetworkUnit selector

* Update isNetworkUnit

* Fix validationhelpers tests

* Add mock state to tests & Move isNetworkUnit to selectors

* Fix validation helper spec

* fix unit swap spec
2018-03-01 19:24:14 -06:00
greenkeeper[bot] 08335fbca0 chore(package): update file-loader to version 1.1.11 (#1220) 2018-03-01 17:18:56 -06:00
greenkeeper[bot] 2c37463f7c chore(package): update copy-webpack-plugin to version 4.4.3 (#1219) 2018-03-01 16:35:06 -06:00
Daniel Ternyak 162713ac6d
Logo updates (#1216)
* Update image brand color, remove unused images.

* Update brand color.
2018-03-01 13:49:07 -06:00
greenkeeper[bot] 328bd05859 chore(package): update @types/react to version 16.0.40 (#1214) 2018-03-01 13:37:43 -06:00
William O'Beirne 653c363279 Copy address touchups (#1215)
* Checksum address, adjust styles.

* Pull up address
2018-03-01 13:36:30 -06:00
James Prado 9ef1920fe0 Update dropdowns, inputs, and textareas (#1169)
* Align footer to bottom

* Fix request payment offset padding

* Update request payment padding

* Add new Input and Dropdown components

* Fix offset margins in equiv vals

* Update all send tx inputs & dropdowns

* Update generate wallet dropdowns

* Update inputs & dropdowns for contracts tab

* Add inputs & dropdowns for all but swap tab

* amend

* Fix imports

* inputs are invalid when not disabled or readonly

* Fix offset refresh button

* Add togglable password back to wallet generation

* Update swap inputs, textareas, and dropdowns

* Update any outstanding inputs

* Make UnitDropDown searchable

* unitdropdown searchanble if options > 10

* Fix css issues

* Reset before setting currentTo
2018-03-01 11:53:29 -06:00
Daniel Ternyak 95072d350a
chore(package): update html-webpack-plugin to version 3.0.3 (#1212)
Closes #1211
2018-03-01 11:45:49 -06:00
Kenneth Ashley 3953af5f03 Remove exclusion of font-awesome assets (#1172)
Excluding font awesome assets causes error due to webpack not knowing how to read the files.
2018-02-28 22:58:35 -06:00
Danny Skubak 23546a1cf9 Force Node Change on Web3 Unset (#1207)
* add CONFIG_NODE_CHANGE_FORCE action

* implement forceful node change on web3

* update comment

* add test

* make tsc happy

* update test
2018-02-28 22:31:33 -06:00
greenkeeper[bot] 1a711b5c20 chore(package): update lint-staged to version 7.0.0 (#1156) 2018-02-28 21:31:46 -06:00
Daniel Ternyak c01a4beaaa
chore(package): update thread-loader to version 1.1.5 (#1210)
Closes #1159
2018-02-28 21:13:15 -06:00
Rajiv Shah f12d72a57e Fix typo in disclaimer modal (#1118) 2018-02-28 21:04:58 -06:00
greenkeeper[bot] d147ec1b15 fix(package): update ethereumjs-util to version 5.1.5 (#1179) 2018-02-28 21:03:10 -06:00
greenkeeper[bot] bc2c4b776f chore(package): update css-loader to version 0.28.10 (#1163) 2018-02-28 21:01:21 -06:00
William O'Beirne 1eb57a38bc Address component for checksumming + linking to explorer (#1168)
* Add address component that checksums and optionally links to block explorer.

* tscheck

* Add exclusive props, type guard.
2018-02-28 20:54:43 -06:00
Daniel Ternyak 5fcec1ecd7
chore(package): update prettier to version 1.11.1 (#1209)
Closes #1186
2018-02-28 20:36:09 -06:00
greenkeeper[bot] a9b07cdf18 chore(package): update @types/jest to version 22.1.4 (#1202) 2018-02-28 20:26:44 -06:00
greenkeeper[bot] c6f58bb19c fix(package): update rc-slider to version 8.6.1 (#1188) 2018-02-28 20:26:17 -06:00
greenkeeper[bot] 093b0fecf6 chore(package): update less-loader to version 4.0.6 (#1187) 2018-02-28 20:19:53 -06:00
Daniel Ternyak 070b07ae40
chore(package): update nodemon to version 1.17.1 (#1195)
Closes #1190
2018-02-28 20:16:12 -06:00
greenkeeper[bot] e5b2ccef7a chore(package): update @types/react to version 16.0.39 (#1208) 2018-02-28 19:35:09 -06:00
greenkeeper[bot] 375360e71a chore(package): update cache-loader to version 1.2.2 (#1196) 2018-02-28 10:34:42 -06:00
William O'Beirne a430fe650c Update copy / links for Beta (#1193)
* AlphaAgreement -> BetaAgreement.

* Banner color.

* Remove language disclaimer.

* Discord link in footer.

* Update font for discord icon.

* Adjust copy.

* Link to github repo in error message.

* Remove always error
2018-02-27 15:35:32 -06:00
greenkeeper[bot] 296b78d62e fix(package): update react-markdown to version 3.2.2 (#1180) 2018-02-26 19:23:47 -06:00
greenkeeper[bot] 0a1f36a413 chore(package): update cache-loader to version 1.2.1 (#1184) 2018-02-26 19:23:04 -06:00
James Prado 81d4444dff Add regex for BIP44 Strings (#1035)
* Add regex check for BIP44 paths

* Add tests for BIP44 regex

* Remove '/config' from excluded paths in jest

* update path

* Update Validator tests & remove old dPathRegex tests

* Test hardcoded dpaths
2018-02-26 19:20:41 -06:00
greenkeeper[bot] b3da25c3f7 chore(package): update awesome-typescript-loader to version 3.5.0 (#1171) 2018-02-26 19:03:17 -06:00
greenkeeper[bot] 5436f20db7 chore(package): update file-loader to version 1.1.10 (#1182) 2018-02-26 18:11:11 -06:00
greenkeeper[bot] 696258e7cd chore(package): update worker-loader to version 1.1.1 (#1174) 2018-02-25 19:58:03 -06:00
Amidou Kante 4576b8f325 Copy to clipboard (#1146)
* added code for copy to clipbaord svg

* removed svg link

* can copy clipboard to mouse

* can copy clipboard to mouse

* can copy clipboard to mouse

* change copy svg to copy icon

* updated css styling

* locked in version number

* removed css state color

* scss updates coloring instead of additonal state

* change colors to scss variables

* changed p tag to span tag

* final style updates

* function to revert copied text
2018-02-25 14:02:03 -06:00
greenkeeper[bot] 23deceeb05 chore(package): update tslint-config-prettier to version 1.9.0 (#1176) 2018-02-25 13:20:16 -06:00
greenkeeper[bot] bd302ec730 chore(package): update ts-jest to version 22.4.0 (#1177) 2018-02-25 13:19:23 -06:00
Daniel Ternyak 2ae567005f
chore(package): update file-loader to version 1.1.9 (#1173)
Closes #1143
2018-02-24 19:38:36 -06:00
greenkeeper[bot] 21b946b0c1 chore(package): update webpack-dev-middleware to version 2.0.6 (#1164) 2018-02-24 19:36:04 -06:00
greenkeeper[bot] aa8bf24ab1 chore(package): update nodemon to version 1.15.1 (#1140) 2018-02-24 19:35:38 -06:00
Daniel Ternyak 29205626f2
chore(package): update electron-builder to version 20.2.0 (#1170)
Closes #1139
2018-02-24 19:33:14 -06:00
William O'Beirne 1b6143e457 Don't refresh on network change (#1144)
* Configure sagas and components to react to network switch.

* tscheck

* Update tests with new behavior.

* tscheck

* Log out of wallet on network change.

* Fix up test.
2018-02-24 19:32:34 -06:00
William O'Beirne 33f5ede22a Minor swap rates refactor (#1162)
* Refactor swaps:
* Remove references to bity fallback, it aint happening
* Consolidate sagas to single orchestrator function like other sagas
* Grab rates once, dont continuously poll

* tscheck

* Re-instate the auto-fetching behavior. This time, only notify the first time.

* Make CurrentRates responsible for redux actions. Fix up some typings.

* Remove commented code.

* Update snapshot.
2018-02-24 19:29:34 -06:00
William O'Beirne b48617e95e Simplify custom node URL (#1141)
* Simplify custom nodes to just be a URL, not a url + port.

* Allow modals to specify max width (#1142)
2018-02-24 12:02:07 -06:00
greenkeeper[bot] dc24a52e2c fix(package): update qrcode.react to version 0.8.0 (#1148) 2018-02-24 12:00:49 -06:00
William O'Beirne c76d0b3fa5 Handle Gas / Estimates on a Per Network Basis (#1160)
* Give each network the ability to specify default estimates, and whether or not they should fetch estimates from API. Convert gas slider to always use estimates.

* Fix gas cache invalidation, invalid too high / low logic.

* Fix up tests.

* tscheck
2018-02-24 12:00:00 -06:00
greenkeeper[bot] afaf045edd chore(package): update copy-webpack-plugin to version 4.4.2 (#1167) 2018-02-24 11:58:46 -06:00
James Prado 48536f79be Align footer to bottom (#1150) 2018-02-24 11:57:54 -06:00
Danny Skubak 94061e0c3e Add Blockscale Beta Node (#1134) 2018-02-24 11:56:18 -06:00
Daniel Ternyak a50dc2ebb0
Adjust Wallet Interface (#1154)
* Adjust Base Wallet Interface to not return promises' for getAdderssString; adjust callers to not await

* remove async for saveWalletConfig
2018-02-21 12:23:04 -06:00
greenkeeper[bot] f2bf7529b3 fix(package): update react-markdown to version 3.2.1 (#1155) 2018-02-21 11:23:29 -06:00
William O'Beirne 9727051290 Source version number from package.json (#1145) 2018-02-19 21:46:07 -06:00
greenkeeper[bot] 00cea6f548 chore(package): update electron-builder to version 20.0.5 (#1109) 2018-02-17 20:36:50 -06:00
Daniel Ternyak 891014894e
Tag Beta 0.3.2 (#1132)
* Patch Web3 boolean logic

* Tag Beta 0.3.2
2018-02-17 18:49:19 -06:00
Daniel Ternyak 39fba57831
Patch Web3 boolean logic (#1131) 2018-02-17 18:48:31 -06:00
Daniel Ternyak e630b1f9ba
Tag Beta 0.3.1 (#1129) 2018-02-17 18:27:30 -06:00
Pete Jihoon Kim 2f23aa96de Fix compatibility with unknown Web 3 providers (#1128)
* Fix compatibility with unknown Web3 providers

* Detect Cipher Browser

* Fix incorrect translation label
2018-02-17 18:25:01 -06:00
Daniel Ternyak 23cb069ca8
Tag Beta 0.3.0 (#1126) 2018-02-17 16:08:24 -06:00
William O'Beirne 41c5c32d51 Fix Modals on Mobile (#1110) 2018-02-17 15:57:15 -06:00
greenkeeper[bot] 97d58c4a18 chore(package): update lint-staged to version 6.1.1 (#1105) 2018-02-17 15:47:32 -06:00
greenkeeper[bot] 81d8a4878d fix(package): update react-redux to version 5.0.7 (#1121) 2018-02-17 15:45:53 -06:00
greenkeeper[bot] 3ed72b880e chore(package): update hoist-non-react-statics to version 2.5.0 (#1114) 2018-02-17 13:40:17 -06:00
greenkeeper[bot] 422f5677bd chore(package): update @types/lodash to version 4.14.104 (#1113) 2018-02-17 13:37:31 -06:00
greenkeeper[bot] 13484b4b62 chore(package): update @types/jest to version 22.1.3 (#1125) 2018-02-17 13:14:53 -06:00
William O'Beirne 3c5dd2743e Swap Bity Promo w/ Shapeshift, Adjust Promo Display (#1115) 2018-02-16 14:46:50 -06:00
William O'Beirne c5f32a9ce2 Re-set address state when wallet changes (#1107) 2018-02-16 14:34:58 -06:00
William O'Beirne 31912c0f83 Gas Price Estimates API (#1050)
* Setup api / reducers / actions for gas.

* Implement gas price saga, fetch from component, and loading states. Blocked on CORS.

* Implement caching mechanism.

* Add tests for gas saga and reducer.

* More testing.

* Indicate that gas price is recommended when fetched from API.

* Hide track while loading.

* Fix tscheck.

* Check gas estimate before assuming its ok.

* Check for correct logical order of gas prices.

* Tscheck fixes.
2018-02-16 13:01:39 -06:00
William O'Beirne cec0d690c7 Hide refresh button and its spinner on initial balance fetch (#1108) 2018-02-16 12:47:28 -06:00
William O'Beirne 1ff26baa63 Fix bad browser copy (#1111) 2018-02-16 12:39:50 -06:00
William O'Beirne b574c209a6 Add missing keys on insecure wallet checkboxes. (#1112) 2018-02-16 12:39:05 -06:00
William O'Beirne be61d804e0 Check Transaction page (Pt. 1 - The Basics) (#1099)
* Component layer and routing for transaction status.

* Initial start on redux for transactions.

* Initial crack at reducer / actions / saga for transactions.

* Finish off check transaction saga, reducer, component, and page.
2018-02-16 10:57:23 -06:00
greenkeeper[bot] f46df010db chore(package): update tslint-config-prettier to version 1.8.0 (#1098) 2018-02-15 19:48:35 -06:00
greenkeeper[bot] 5db958128a chore(package): update style-loader to version 0.20.2 (#1100) 2018-02-15 19:48:12 -06:00
greenkeeper[bot] 43853fd198 chore(package): update @types/lodash to version 4.14.103 (#1101) 2018-02-15 19:47:56 -06:00
greenkeeper[bot] 7807cf09aa chore(package): update nodemon to version 1.15.0 (#1102) 2018-02-15 19:47:42 -06:00
greenkeeper[bot] b5b1ff73ad chore(package): update @types/react-select to version 1.2.3 (#1091) 2018-02-14 17:26:47 -06:00
Luit Hollander 9f682f6a46 Update infura endpoints (#1094) 2018-02-14 17:05:43 -06:00
greenkeeper[bot] 20c6007a7b chore(package): update webpack-subresource-integrity to version 1.0.4 (#1092) 2018-02-14 16:41:18 -06:00
Daniel Ternyak ab51bde9e8
Add Coveralls Badge (#1093) 2018-02-14 15:21:02 -06:00
greenkeeper[bot] 5abf5ba632 chore(package): update electron-builder to version 20.0.4 (#1077) 2018-02-13 20:15:28 -06:00
greenkeeper[bot] a4c7e0e3c0 chore(package): update tslint-react to version 3.5.1 (#1085) 2018-02-13 20:15:14 -06:00
greenkeeper[bot] 643ea7c351 chore(package): update tslint-microsoft-contrib to version 5.0.3 (#1086) 2018-02-13 20:14:44 -06:00
greenkeeper[bot] 011b8d5ce8 chore(package): update @types/query-string to version 5.1.0 (#1087) 2018-02-13 20:14:32 -06:00
Michael - Blurpesec 84f5e9f00f Updated addresses for helpArticles list (#1089) 2018-02-13 20:11:47 -06:00
Daniel Ternyak 0d05e8ceb5
Merge pull request #1080 from MyCryptoHQ/greenkeeper/@types/react-16.0.38
Update @types/react to the latest version 🚀
2018-02-13 11:48:52 -06:00
greenkeeper[bot] d622554ab5 chore(package): update @types/react to version 16.0.38 2018-02-13 15:58:28 +00:00
Daniel Ternyak 0dbad53a03
Merge branch 'master' into develop 2018-02-12 18:56:07 -06:00
Daniel Ternyak a8a82c2d71
Tag Beta 0.2.1 (#1074) 2018-02-12 18:55:15 -06:00
greenkeeper[bot] e529c7d394 chore(package): update @types/react-select to version 1.2.2 (#1073) 2018-02-12 18:54:49 -06:00
James Prado 23cdff1777 Add Symbols to Equivalent Values (#1038)
* Update styles

* Add fiat symbols

* chore(package): update webpack-dev-middleware to version 2.0.5 (#1036)

* Fix double alert on swap timeout (#1034)

* chore(package): update @types/jest to version 22.1.2 (#1037)

* Update Banners / Versions to Beta (#1040)

* update agreeement banner with beta nomenclature / styling

* update version

* remove v4 text

* adjust language

* more language

* MyEtherWallet => MyCrypto (#1041)

* MyEtherWallet => MyCrypto

Note: Knowledge base links in translations are not working due to the new knowledge base. Some links link to the MyEtherWallet Chrome Extension.

* Update consoleAdvertisement.ts

* Update consoleAdvertisement.ts

* Update en.json

* Update consoleAdvertisement.ts

* Update InsecureWalletWarning.tsx

* Update Footer to Prod Styles (#1044)

* More MEW -> MyCrypto Changes (#1043)

* Replace all language instances of MYCRYPTO LLC

* Fix disclaimer LLC

* Fix console advert link, adjust logo and make it easier to edit.

* Update coinbase URL.

* Fix trezor and ledger component links and text.

* Misc. cleanup.

* Update unlock guide at the end of generate.

* Fix onboarding translation string

* Change salt hash from mew to mycrpyto.

* chore(package): update webpack to version 3.11.0 (#1045)

* Contributor Guidelines (#1054)

* chore(package): update ts-jest to version 22.0.4 (#1053)

* fix(package): update react-markdown to version 3.2.0 (#1055)

* chore(package): update image-webpack-loader to version 4.1.0 (#1049)

* Add selfHidingImg

* Add coin & token images

* Update styles & fix undefined img path

* Update styles

* Align all symbols to left

* Use icon assets

* remove selfhidingimg
2018-02-12 18:15:27 -06:00
Daniel Ternyak 04901d0486
fix @types/react-router-redux version (#1072) 2018-02-12 18:07:43 -06:00
greenkeeper[bot] 8b5aa9569d chore(package): update @types/qrcode.react to version 0.6.3 (#1062) 2018-02-12 17:07:39 -06:00
greenkeeper[bot] 592f90d889 chore(package): update @types/react to version 16.0.37 (#1063) 2018-02-12 17:07:17 -06:00
greenkeeper[bot] 12de0eae45 chore(package): update @types/react-dom to version 16.0.4 (#1065) 2018-02-12 17:06:40 -06:00
greenkeeper[bot] 14aca1b273 chore(package): update @types/react-redux to version 5.0.15 (#1066) 2018-02-12 17:06:00 -06:00
greenkeeper[bot] c693f1b182 chore(package): update @types/react-router-dom to version 4.2.4 (#1067) 2018-02-12 17:05:20 -06:00
greenkeeper[bot] 8aabb627cc chore(package): update @types/react-router-redux to version 5.0.12 (#1068) 2018-02-12 17:04:43 -06:00
greenkeeper[bot] 0e692f4149 chore(package): update @types/react-select to version 1.2.1 (#1069) 2018-02-12 17:03:34 -06:00
Daniel Ternyak 1cd65ec752
Tag Beta 0.2.0 (#1060) (#1061) 2018-02-12 14:55:10 -06:00
Daniel Ternyak 310536afc9
Tag Beta 0.2.0 (#1060) 2018-02-12 14:54:41 -06:00
Daniel Ternyak 5ba6e7a0e3
Merge pull request #1058 from MyCryptoHQ/develop
Beta 0.1.0
2018-02-12 14:50:30 -06:00
HenryNguyen5 01fc5f1a89 Move Nodes/Networks to Redux (#961)
* Start splitting networks into their own reducers

* Split out nodes and networks into their own reducers

* Cleanup file structure

* Make selectors for new state

* Change custom network typing

* re-type repo

* Fix up components to use selectors, work on fixing sagas

* Provide consistency in naming, fix more sagas

* Get non web3 node switching working

* Split config rehydration off into a different file for store

* Inline auth for custom nodes

* Include typing for app state

* moar selectors

* Get web3 working + cleanup sagas

* Cleanup tsc errors

* Use forof loop instead of foreach for clearing pruning custom networks

* Add reducer tests for new redux state

* Export needed variables

* Add console error

* Remove old comment

* Work on saga tests

* Get passing existing saga tests

* Fix more tests

* Remove irrlevant tests

* add console error

* Get rest of tests passing

* Fix merge errors

* Remove random text

* Fix store saving

* Fix selector lib only grabbing from static nodes

* Fix custom node removal crashing app

* Infer selected network via node

* Prune custom networks properly on node removal

* Infer network name from chainid from selecting state

* Cleanup tsc errors

* Remove MEW nodes for main and testnet
2018-02-12 14:43:07 -06:00
greenkeeper[bot] 128471dc09 chore(package): update tslint-react to version 3.5.0 (#1057) 2018-02-12 13:55:55 -06:00
greenkeeper[bot] 523d45d899 chore(package): update image-webpack-loader to version 4.1.0 (#1049) 2018-02-11 22:42:48 -06:00
greenkeeper[bot] f900123d48 fix(package): update react-markdown to version 3.2.0 (#1055) 2018-02-11 22:41:37 -06:00
greenkeeper[bot] 0be5e1246f chore(package): update ts-jest to version 22.0.4 (#1053) 2018-02-11 21:19:02 -06:00
William O'Beirne f611452705 Contributor Guidelines (#1054) 2018-02-11 20:59:06 -06:00
greenkeeper[bot] 5352b38dca chore(package): update webpack to version 3.11.0 (#1045) 2018-02-10 13:25:21 -06:00
William O'Beirne 6be50f74b5 More MEW -> MyCrypto Changes (#1043)
* Replace all language instances of MYCRYPTO LLC

* Fix disclaimer LLC

* Fix console advert link, adjust logo and make it easier to edit.

* Update coinbase URL.

* Fix trezor and ledger component links and text.

* Misc. cleanup.

* Update unlock guide at the end of generate.

* Fix onboarding translation string

* Change salt hash from mew to mycrpyto.
2018-02-10 13:24:05 -06:00
William O'Beirne 408c0011ca Update Footer to Prod Styles (#1044) 2018-02-10 12:56:05 -06:00
Michael H bcdc0f546d MyEtherWallet => MyCrypto (#1041)
* MyEtherWallet => MyCrypto

Note: Knowledge base links in translations are not working due to the new knowledge base. Some links link to the MyEtherWallet Chrome Extension.

* Update consoleAdvertisement.ts

* Update consoleAdvertisement.ts

* Update en.json

* Update consoleAdvertisement.ts

* Update InsecureWalletWarning.tsx
2018-02-09 15:41:44 -06:00
Daniel Ternyak 273b77b390
Update Banners / Versions to Beta (#1040)
* update agreeement banner with beta nomenclature / styling

* update version

* remove v4 text

* adjust language

* more language
2018-02-09 15:29:28 -06:00
greenkeeper[bot] 730feef3a6 chore(package): update @types/jest to version 22.1.2 (#1037) 2018-02-09 10:19:59 -06:00
James Prado 4e092d5177 Fix double alert on swap timeout (#1034) 2018-02-09 10:07:38 -06:00
greenkeeper[bot] 8a9e5b34d6 chore(package): update webpack-dev-middleware to version 2.0.5 (#1036) 2018-02-09 09:47:40 -06:00
Daniel Ternyak dcfee10027
Update Readme with beta nomenclature (#1033)
* Update Readme with beta nomenclature

* Update README.md
2018-02-08 22:44:16 -06:00
aitrean 626afe554a Forward query arguments during redirect (#990)
* Transfer query arguments over with routing.

* Create a Query Redirect wrapper.

* Add RedirectWithQuery component to SendTransaction index redirect.

* Correct hash-query ordering.
2018-02-08 22:02:56 -06:00
William O'Beirne eaa9ac392c Unify Spinner / Refresh Styles (#1032)
* Unify spinner styles, enforce more SuitCSS style names

* Unify spinner styles, enforce more SuitCSS style names

* Hide refresh offline, adjust colors correctly.
2018-02-08 17:44:30 -06:00
Daniel Ternyak 42afff3ef2
chore(package): update copy-webpack-plugin to version 4.4.1 (#1031)
Closes #1029
2018-02-08 14:54:15 -06:00
James Prado 0ab226ca16 Add nonce loading indicator & refresh button (#1021)
* Add InlineSpinner component

* Add 'what-input' module

* Add input style overrides

* Add new refresh icon

* Update footer styles

* Add nonce refresh button & loading indicator

* Center InlineSpinner

* Add types

* Lock version

* prettify package.json

* prettify package.json
2018-02-08 11:51:15 -06:00
William O'Beirne 7ac546acaf ENS Search Styling (#1018)
* Restyled, recopied, and did some component refactoring for ENS.

* Awkward copy fix.

* Update snapshot.

* Overflow table handling.

* Re-enable on error.
2018-02-08 11:30:29 -06:00
aitrean df4b73721a Refresh balance button (#1027)
* Refresh balance button.

* Refresh balance button.

* Move refresh.svg

* Remove previous svg.

* Map action with saga.

* Fix travis build (on prettify).

* Move refresh button in-line with account balance

* Update styles
2018-02-08 01:22:32 -06:00
greenkeeper[bot] abbbb46ea8 fix(package): update hdkey to version 0.8.0 (#1006) 2018-02-07 18:04:17 -06:00
greenkeeper[bot] 24edcd5821 chore(package): update electron to version 1.8.2 (#1007) 2018-02-07 18:03:46 -06:00
greenkeeper[bot] 7cc919a481 fix(package): update ethereumjs-util to version 5.1.4 (#1015) 2018-02-07 18:02:57 -06:00
greenkeeper[bot] d45a8d4f86 chore(package): update electron-builder to version 19.56.0 (#991) 2018-02-07 18:02:21 -06:00
greenkeeper[bot] 2c00e74ef5 chore(package): update @types/lodash to version 4.14.102 (#1025) 2018-02-07 18:00:42 -06:00
Daniel Ternyak e7f88a6a0a
Remove redux-promise-middleware (#1022)
* Use shapeshift for all swaps.

* Replace existing redux-promise-middleware based CCRequest action with saga based action.

* Remove module from package.json, store middleware, webpack_config.

* fix snapshot

* Add return typing

* Add test for saga
2018-02-07 17:59:55 -06:00
greenkeeper[bot] 6d041ba581 chore(package): update babel-minify-webpack-plugin to version 0.3.0 (#1014) 2018-02-07 17:45:32 -06:00
Daniel Ternyak 8cb5e8bb79
Use ShapeShift for all swaps (#1019)
* Use shapeshift for all swaps.

* fix snapshot
2018-02-07 17:42:07 -06:00
William O'Beirne 82cd123632 Update Header & Footer (#1020)
* Adjust header styles.

* Update footer.

* tscheck

* Convert header to jpg for mad file size savings.
2018-02-07 17:22:31 -06:00
HenryNguyen5 785901d671 Update ethereumjs-util types (#1002) 2018-02-07 17:11:29 -06:00
Daniel Ternyak d65f0505d0
Update GreenKeeper badge (#1023) 2018-02-07 17:07:14 -06:00
James Prado 0da409cd12 Confirm TX Modal Upgrades (#928)
* Wipe tx modal clean & Update the subcomponents

* Add Amounts & Address styles

* Forgot to pass onlyIncludeLoader to GasLimitLoading component

* Add currency conversion

* Update styles

* Change SENDModal_Yes & _No messages

* Add visual summary

* Update fonts & add Roboto Mono

* Add details to tx-modal

* Display contract addr when sending tokens

* Add inline styles back to identicon (for paper wallet)

* Remove inline styles

* Update USD conversion conditions

* Display token to usd conversion

* Update styles

* Update modal styles

* Animate modals

* Add a fade effect when modal overflows

* Improve styles for mobile

* Remove dead code

* Update unlockHeader close button

* Update text overflow fade styles

* Fix invalid inline css prop

* Fix issue with 'isToken' condition

* Add table layout & update styles

* Remove unsupported styles

* Remove formatting diff

* update styles

* Update tx modal fixes (#999)

* chore(package): update @types/lodash to version 4.14.101 (#992)

* ENS Resolving (#942)

* Refactor BaseNode to be an interface INode

* Initial contract commit

* Remove redundant fallback ABI function

* First working iteration of Contract generator to be used in ENS branch

* Hide abi to clean up logging output

* Strip 0x prefix from output decode

* Handle unnamed output params

* Implement ability to supply output mappings to ABI functions

* Fix null case in outputMapping

* Add flow typing

* Add .call method to functions

* Partial commit for type refactor

* Temp contract type fix -- waiting for NPM modularization

* Remove empty files

* Cleanup contract

* Add call request to node interface

* Fix output mapping types

* Revert destructuring overboard

* Add sendCallRequest to rpcNode class and add typing

* Use enum for selecting ABI methods

* Add transaction capability to contracts

* Cleanup privaite/public members

* Remove broadcasting step from a contract transaction

* Cleanup uneeded types

* Refactor ens-base to typescript and add typings for ENS smart contracts

* Migrate ens-name-search to TS

* Add IResolveDomainRequest

* Fix rest of TSC errors

* Add definition file for bn.js

* Remove types-bn

* Fix some typings

* make isBN a static property

* progress commit -- swap out bignumber.js for bn.js

* Swap out bignumber for bn in vendor

* Change modn to number return

* Start to strip out units lib for a string manipulation based lib

* Convert codebase to only base units

* Get rid of useless component

* Handle only wei in values

* Use unit conversion in sidebar

* Automatically strip hex prefix, and  handle decimal edge case

* Handle base 16 wei in transactions

* Make a render callback component for dealing with unit conversion

* Switch contracts to use bn.js, and get transaction values from signedTx instead of state

* Get send transaction  working with bn.js

* Remove redundant hex stripping,  return base value of tokens

* Cleanup unit file

* Re-implement toFixed for strings

* Use formatNumber in codebase

* Cleanup code

* Undo package test changes

* Update snapshot and remove console logs

* Use TokenValue / Wei more consistently where applicable

* Add typing to deterministicWallets, fix confirmation modal, make UnitDisplay more flexible

* Split different ENS modes into their own components

* Fix Abi typedef

* Remove redundant moment type package

* Add Aux helper component

* Split out resolve components

* Make 'to' parameter optional

* Change import type

* Change typing to be base domain request

* Split handling of resolving into object handler

* Fix countdown component

* Adjust element spacing

* Implement reveal search functionality

* Add unit display for highest bidder

* Fill out forbidden/NYA modes

* ENS wallet component skeleton

* Clean up prop handling in UnitDisplay

* Change instanceof to typeof check, change boolean of displayBalance

* Add ENS wallet component

* Cleanup spacing

* Convert ConfModal for bidding in ENS

* Make ui component for placing bids

* Fix destructure in placeBid

* Pass through entire wallet

* Remove text center

* Display inline notification ENS isValid & add some ENS tests

* Add export of Aux

* Reformat with prettier

* progress...

* Add ENSUnlockLayout

* Add RevealBid component

* organize NameResolve components

* Merge ENS with transaction-refactor changes

* Fix address resolution

* Update styles

* convert ens name to lowercase before checking

* Add overflow-y:scroll to table

* update ens snapshots & tests

* cast 'undefined' state argument as any for testing

* clean up components

* Connect unitconverter to redux state

* remove unnecessary type assertion

* fix spinner size

* remove old bidmodal

* validate bidmask before opening modal

* progress...

* Update styles

* Add saga / actions for placing a bid

* Update types & clean up dead code

* Delete old test

* Dispatch PlaceBidRequested acitons

* Progress commit -- get ENS bidding ready for tx generation via sagas

* Seperate ENS action creators and types

* Add reducer & actions for ENS fields

* Add preliminary sagas for bid mask and bid value

* Fix ts errors

* Get bidding fields connected with some validation

* Clean up generate bid

* Hook up generate bid to redux state

* Get bid data generation working

* Add support for bidding on already open auctions

* Move bid generation states to redux, improve default field values

* Remove generate bid component

* Throttle bid generation

* Progress commit -- Bid Modal

* Hook bidmodal component up to bidding component

* Update template modal to handle custom confirm behavior

* Remove old redux bidding actions, add new one for downloaded bids

* Save downloaded bids to local storage

* Finish bidding modal

* Fix gas estimation bug

* Fix typing

* Remove bidding related functionality

* Get passing unit tests

* Make previous test more comprehensive

* Fix ts errors

* Remove commented code

* Fix invalid return

* Remove implementation of revealing bid

* Update snapshot

* Fix tests

* Delegate bidding to V3

* Update react-markdown to the latest version 🚀 (#986)

* fix(package): update react-markdown to version 3.1.5

* Fix tsc errors, match original behaviour of V2 as closely as possible

* Add tooltip to gas slider (#997)

* Prevent invalid gas price states (#996)

* Slider using value instead of raw to prevent errors. Dont show empty gas price as invalid. Clamp slider values to min / max on mount.

* Remove gas price from local storage.

* Update @types/react to the latest version 🚀 (#912)

* chore(package): update @types/react to version 16.0.35

* Add stricter typing via function overloads

* Fix rest of aria translations

* Make implementation of confirmation modal template

* Address github comments for #928

* Make modal state setting more explicit

* Fix infinite loop of state setting on modal

* Fix transaction rebroadcasting for modal display
2018-02-06 22:39:24 -06:00
William O'Beirne e7633c6d2f MyEtherWallet -> MyCrypto (#977)
* Replace all mentions of MyEtherWallet in translations with MyCrypto

* Replace all translation mentions of kvhnuke/etherwallet repo with MyCryptoHQ/MyCrypto repo.

* Replace all instances of MEW with MyCrypto in translations.

* Replace all instances of myetherwallet.com with mycrypto.com

* First pass of myetherwallet -> mycrypto in codebase.

* Replace most MEWs and mews with MyCrypto or MyC or myc

* Update all assets, clean out unused old assets.

* Adjust v3 url

* Convert all links to help articles to a help link component to make future changes easier.

* Rework onboarding images

* Adjust logo colors due to CMY issue.

* Update donation address, remove mentions of mewtopia.eth

* Update license

* Update sosh meed and referral links.

* Fix more translations strings.

* Tscheck fix.

* Update shapeshift api key.
2018-02-06 22:28:28 -06:00
HenryNguyen5 82d7156295 Change debugging option for vscode users (#1005) 2018-02-06 15:33:58 -06:00
James Prado 5272bdacd5 Update <Markdown/> allowedTypes (#1004) 2018-02-06 13:54:02 -06:00
greenkeeper[bot] 822836a536 chore(package): update url-search-params-polyfill to version 2.0.3 (#1001) 2018-02-06 11:30:54 -06:00
greenkeeper[bot] 37e34381a3 Update @types/react to the latest version 🚀 (#912)
* chore(package): update @types/react to version 16.0.35

* Add stricter typing via function overloads

* Fix rest of aria translations
2018-02-05 17:25:01 -06:00
William O'Beirne 39da226cd1 Prevent invalid gas price states (#996)
* Slider using value instead of raw to prevent errors. Dont show empty gas price as invalid. Clamp slider values to min / max on mount.

* Remove gas price from local storage.
2018-02-05 17:14:23 -06:00
William O'Beirne 942eb6b341 Add tooltip to gas slider (#997) 2018-02-05 17:03:00 -06:00
greenkeeper[bot] 057a1095d3 Update react-markdown to the latest version 🚀 (#986)
* fix(package): update react-markdown to version 3.1.5

* Fix tsc errors, match original behaviour of V2 as closely as possible
2018-02-05 16:41:33 -06:00
HenryNguyen5 2a4ad180d3 ENS Resolving (#942)
* Refactor BaseNode to be an interface INode

* Initial contract commit

* Remove redundant fallback ABI function

* First working iteration of Contract generator to be used in ENS branch

* Hide abi to clean up logging output

* Strip 0x prefix from output decode

* Handle unnamed output params

* Implement ability to supply output mappings to ABI functions

* Fix null case in outputMapping

* Add flow typing

* Add .call method to functions

* Partial commit for type refactor

* Temp contract type fix -- waiting for NPM modularization

* Remove empty files

* Cleanup contract

* Add call request to node interface

* Fix output mapping types

* Revert destructuring overboard

* Add sendCallRequest to rpcNode class and add typing

* Use enum for selecting ABI methods

* Add transaction capability to contracts

* Cleanup privaite/public members

* Remove broadcasting step from a contract transaction

* Cleanup uneeded types

* Refactor ens-base to typescript and add typings for ENS smart contracts

* Migrate ens-name-search to TS

* Add IResolveDomainRequest

* Fix rest of TSC errors

* Add definition file for bn.js

* Remove types-bn

* Fix some typings

* make isBN a static property

* progress commit -- swap out bignumber.js for bn.js

* Swap out bignumber for bn in vendor

* Change modn to number return

* Start to strip out units lib for a string manipulation based lib

* Convert codebase to only base units

* Get rid of useless component

* Handle only wei in values

* Use unit conversion in sidebar

* Automatically strip hex prefix, and  handle decimal edge case

* Handle base 16 wei in transactions

* Make a render callback component for dealing with unit conversion

* Switch contracts to use bn.js, and get transaction values from signedTx instead of state

* Get send transaction  working with bn.js

* Remove redundant hex stripping,  return base value of tokens

* Cleanup unit file

* Re-implement toFixed for strings

* Use formatNumber in codebase

* Cleanup code

* Undo package test changes

* Update snapshot and remove console logs

* Use TokenValue / Wei more consistently where applicable

* Add typing to deterministicWallets, fix confirmation modal, make UnitDisplay more flexible

* Split different ENS modes into their own components

* Fix Abi typedef

* Remove redundant moment type package

* Add Aux helper component

* Split out resolve components

* Make 'to' parameter optional

* Change import type

* Change typing to be base domain request

* Split handling of resolving into object handler

* Fix countdown component

* Adjust element spacing

* Implement reveal search functionality

* Add unit display for highest bidder

* Fill out forbidden/NYA modes

* ENS wallet component skeleton

* Clean up prop handling in UnitDisplay

* Change instanceof to typeof check, change boolean of displayBalance

* Add ENS wallet component

* Cleanup spacing

* Convert ConfModal for bidding in ENS

* Make ui component for placing bids

* Fix destructure in placeBid

* Pass through entire wallet

* Remove text center

* Display inline notification ENS isValid & add some ENS tests

* Add export of Aux

* Reformat with prettier

* progress...

* Add ENSUnlockLayout

* Add RevealBid component

* organize NameResolve components

* Merge ENS with transaction-refactor changes

* Fix address resolution

* Update styles

* convert ens name to lowercase before checking

* Add overflow-y:scroll to table

* update ens snapshots & tests

* cast 'undefined' state argument as any for testing

* clean up components

* Connect unitconverter to redux state

* remove unnecessary type assertion

* fix spinner size

* remove old bidmodal

* validate bidmask before opening modal

* progress...

* Update styles

* Add saga / actions for placing a bid

* Update types & clean up dead code

* Delete old test

* Dispatch PlaceBidRequested acitons

* Progress commit -- get ENS bidding ready for tx generation via sagas

* Seperate ENS action creators and types

* Add reducer & actions for ENS fields

* Add preliminary sagas for bid mask and bid value

* Fix ts errors

* Get bidding fields connected with some validation

* Clean up generate bid

* Hook up generate bid to redux state

* Get bid data generation working

* Add support for bidding on already open auctions

* Move bid generation states to redux, improve default field values

* Remove generate bid component

* Throttle bid generation

* Progress commit -- Bid Modal

* Hook bidmodal component up to bidding component

* Update template modal to handle custom confirm behavior

* Remove old redux bidding actions, add new one for downloaded bids

* Save downloaded bids to local storage

* Finish bidding modal

* Fix gas estimation bug

* Fix typing

* Remove bidding related functionality

* Get passing unit tests

* Make previous test more comprehensive

* Fix ts errors

* Remove commented code

* Fix invalid return

* Remove implementation of revealing bid

* Update snapshot

* Fix tests

* Delegate bidding to V3
2018-02-05 13:40:33 -06:00
greenkeeper[bot] 8f3669cbc6 chore(package): update @types/lodash to version 4.14.101 (#992) 2018-02-05 10:53:36 -06:00
greenkeeper[bot] 13d522f3f5 chore(package): update ts-jest to version 22.0.3 (#987) 2018-02-04 13:17:43 -06:00
greenkeeper[bot] 7256a98d95 fix(package): update query-string to version 5.1.0 (#988) 2018-02-04 13:17:27 -06:00
greenkeeper[bot] f0a1e0287d fix(package): update lodash to version 4.17.5 (#989) 2018-02-04 13:17:05 -06:00
William O'Beirne 174dea8a29 MEW-01-004 - Stronger Keystores (#981)
* Add better password checking, confirm password, feedback, and up the minimum to 12.

* Move wallet generation off to a web worker, and bump up the n value to 8192. Refactor workers a wee bit.

* tscheck cleanup

* Make keystore password a form. Replace text with spinner on load.

* Center align again.

* Hard code n factor of test wallet, fix some misspelled type definitions for IV3Wallet.
2018-02-02 00:01:30 -06:00
greenkeeper[bot] ca2284b20e chore(package): update nodemon to version 1.14.12 (#980) 2018-02-01 17:12:59 -06:00
William O'Beirne ecccdcfc33 MEW-01-005 Web - Remove all HTTP links (#978)
* Replace custom linter rule with no-http-string rule. Fix exceptions.

* Replaced all http links in translations with https links.
2018-02-01 16:51:14 -06:00
William O'Beirne e34137270e MEW-01-003 - Parse JSON pasted into signed message verifier (#979) 2018-02-01 16:35:26 -06:00
greenkeeper[bot] 0d768d7517 chore(package): update @types/lodash to version 4.14.100 (#976) 2018-02-01 13:10:55 -06:00
greenkeeper[bot] 495ad54762 chore(package): update tslint-config-prettier to version 1.7.0 (#975) 2018-02-01 11:45:12 -06:00
greenkeeper[bot] 387ef09ae5 Update dependencies to enable Greenkeeper 🌴 (#972)
* chore(package): update dependencies

* simplify greenkeeper package changes

* update greenkeeper badge
2018-02-01 02:17:35 -06:00
Daniel Ternyak cfa2290823
Improve CI Performance (#971) 2018-02-01 01:03:36 -06:00
greenkeeper[bot] 00a84ec0c5 chore(package): update electron-builder to version 19.55.3 (#965) 2018-01-30 11:11:42 -06:00
Daniel Ternyak 84bae60c02
Refactor Generate Transaction (#960)
* Make generic modal

* Allow generic modals to be injected into send button component

* Refactor generate transaction, cleanup transaction sagas, simplify signing process

* Get passing unit tests

* Make previous test more comprehensive

* Fix ts errors
2018-01-29 16:58:07 -06:00
greenkeeper[bot] f748f22e2e chore(package): update @types/webpack-env to version 1.13.4 (#959) 2018-01-29 16:40:27 -06:00
greenkeeper[bot] 10c59ba100 chore(package): update css-loader to version 0.28.9 (#853) 2018-01-29 16:24:06 -06:00
greenkeeper[bot] 0a1b657c71 chore(package): update @types/jest to version 22.1.1 (#956) 2018-01-29 16:18:59 -06:00
greenkeeper[bot] 9dc47f5f58 chore(package): update @types/lodash to version 4.14.98 (#958) 2018-01-29 16:18:17 -06:00
William O'Beirne 3f4837c7c5 Fix metamask reject error (#957) 2018-01-29 16:17:58 -06:00
Daniel Ternyak 0017d5f075
fix(package): update uuid to version 3.2.1 (#848)
Closes #847
2018-01-29 16:08:47 -06:00
HenryNguyen5 c84740c4d4 Generic Confirmation Modal (#940)
* Make generic modal

* Allow generic modals to be injected into send button component
2018-01-29 15:38:28 -06:00
William O'Beirne 9fd00a4f70 MEW-01-011: remove dangerouslySetInnerHTML / Add Lint Rule (#955) 2018-01-29 14:51:02 -06:00
William O'Beirne 9ee30b957d Address messages, warnings and gas limits (#930)
* Move address messages to config folder, add some other messages for common pitfalls.

* Fix checksum vs lowercase issues.

* Use gas limit if an address message specified one. Allow messages to have a custom severity. Add a function for getting message to reduce complexity.

* Handle address message gas limit on all actions, make separate saga fn.

* Apparently I used the wrong takeEvery?
2018-01-29 14:00:43 -06:00
William O'Beirne d1a2c885a2 Performance Improvements (Pure components, debounced gas slider) (#899)
* PureComponent a ton of non-connected components.

* Debounce gas price slider. Keep gas price in state to reflect changes immediately.

* PureComponent balance sidebar and swap unconnected components.

* Import correct component.

* Move debouncing of gas slider to sagas via gasPriceInputIntent action.

* Remove console log.

* Remove leftover file from merge.
2018-01-29 13:13:46 -06:00
greenkeeper[bot] ae8b123cfd chore(package): update ts-jest to version 22.0.2 (#952) 2018-01-29 12:24:37 -06:00
William O'Beirne 83cc70f9c7 Update Readme, bump nvmrc (#954)
* Moved some of readme to wiki. Updated with new commands and feedback.

* Clarify addl dependencies.
2018-01-29 12:24:20 -06:00
Daniel Ternyak d661f0ff5f
Handle unsupported units in EquivalentValues (#939) 2018-01-29 12:23:39 -06:00
Daniel Ternyak 13ad2ada84
Update Electron to latest version (#937) 2018-01-27 17:26:53 -06:00
Daniel Ternyak c1d352bcd0
Remove store2 dependency (#936) 2018-01-27 16:47:00 -06:00
greenkeeper[bot] ab168964be chore(package): update @types/lodash to version 4.14.97 (#935) 2018-01-26 22:08:00 -06:00
greenkeeper[bot] cbb5e5ca30 chore(package): update lint-staged to version 6.1.0 (#927) 2018-01-26 16:12:25 -06:00
William O'Beirne 7fe2888633 Passwordify Private Key & Mnemonic Inputs (#925)
* Create reusable password toggle component, convert private key and mnemonic to it.

* Convert keystore modal to togglable password.

* Remove the restore keystore tab code (defunct).

* Replace wallet info with togglable password. Allow for controlled togglable password.

* Convert last password component (generate) and cleanup unneeded files and styles.
2018-01-26 16:11:52 -06:00
greenkeeper[bot] 77ddf602cc chore(package): update style-loader to version 0.20.0 (#932) 2018-01-26 15:31:49 -06:00
greenkeeper[bot] 2ad766ce99 chore(package): update @types/react-select to version 1.2.0 (#929) 2018-01-26 14:13:02 -06:00
William O'Beirne 2309d05c06 Disable more wallets conditionally + explain why (#924)
* Add more wallet disables, move all into selector.

* Add reasons for disabled wallets.

* Disable read only in lite send.

* Fix view address showing insecure icon.
2018-01-26 14:08:39 -06:00
William O'Beirne df52521c17 MEW-01-009 & MEW-01-010: Electron security fixes (#910)
* Handle opening of external links in electron. Minor refactor of window code.

* Convert updates from in-app modal to electron dialogs. Remove in-app code and preload bridge.

* Refine new window blocking. Re-enable tsconfig to look at electron-app.

* Clean up shared

* Whoops, wrong protocol format
2018-01-26 13:53:51 -06:00
greenkeeper[bot] 2e49d4718b chore(package): update @types/lodash to version 4.14.96 (#911) 2018-01-25 02:00:57 -06:00
James Prado c631f45ab7 Improve Gas Price UX (Part 2) (#850)
* Remove gas dropdown & Add gas sliders

* Update styles

* Revert changes made to requestpayment.tsx

* Update style & add custom labels to GasLimitField

* Update styles

* Update confirm transaction modal

* Revert "Update confirm transaction modal"

This reverts commit 743c9a505fe070feb55f7af550ad918a3d8899d1.

* Add transaction fee to tx confirmation modal

* Update styles

* Remove old gasPriceDropdown files & use network units in tx fee

* Add option to lock gaslimit data

* fix tslint errors

* Rename lockData to readOnly

* Add option to check if validAmount before generating transaction

* Add nonce field if gas slider is readonly

* Automatically set nonce in  <Send/>

* Update snapshot

* Move getNonceRequested to GasSlider component

* Add optional to check value for isValidAmount selector

* Add selector for transaction fee

* Update GasSlider component & Rename to Gas

* update snapshots

* Fix subtabs className

* Update styles

* Remove dataField on contract interact

* rename <Gas/> to <TXMetaDataPanel/>
2018-01-24 21:43:27 -06:00
HenryNguyen5 22c107fe4c Fix misc send issues (#916) 2018-01-24 20:41:39 -06:00
Danny Skubak 2fd4730ebe Add MyCrypto ETH Endpoint (#898) 2018-01-24 20:26:16 -06:00
Daniel Ternyak 02ffa3593a
chore(package): update image-webpack-loader to version 4.0.0 (#909)
Closes #908
2018-01-24 16:23:59 -06:00
William O'Beirne 4fb342a757 Discourage private keys (pt. 1) (#780)
* Insecure wallet blocker warning before unlocking insecure wallet.

* Wrap in quotes to avoid prettier error.

* Make account the homepage. Add a link to generate on the wallet unlock component.

* Fix send routing weirdness.
2018-01-24 16:23:20 -06:00
greenkeeper[bot] 2ac3015ad8 chore(package): update @types/lodash to version 4.14.95 (#906) 2018-01-23 22:54:32 -06:00
Daniel Ternyak 7c0cf7cb9e
Convert Contract dropdowns to react-select (#890)
* use Select in InteractForm instead of handrolled select

* convert InteractExplorer to react-select and tighten types

* remove log

* cleanup json abi placeholder

* Add react-select style overrides (#897)

* Add react-select style overrides

* Add comment

* Add variables & mixins

* Fix border off by 1px

* use simpler .map instead of forEach
2018-01-23 18:33:11 -06:00
greenkeeper[bot] 05b9066f9e chore(package): update @types/jest to version 22.1.0 (#902) 2018-01-23 17:54:23 -06:00
greenkeeper[bot] dbe911f722 chore(package): update @types/lodash to version 4.14.94 (#903) 2018-01-23 17:53:46 -06:00
greenkeeper[bot] f33afac0af chore(package): update @types/react-select to version 1.1.1 (#904) 2018-01-23 17:45:39 -06:00
greenkeeper[bot] 84e9a59ab7 chore(package): update ts-loader to version 3.3.1 (#891) 2018-01-23 11:07:22 -06:00
greenkeeper[bot] 01459b05bd fix(package): update electron-updater to version 2.20.1 (#892) 2018-01-23 11:06:56 -06:00
greenkeeper[bot] e988aa052a chore(package): update electron-builder to version 19.55.2 (#893) 2018-01-23 11:06:42 -06:00
greenkeeper[bot] ae525cbf1f chore(package): update enzyme-to-json to version 3.3.1 (#895) 2018-01-23 11:06:22 -06:00
Oli Oskarsson adc2bec161 Fix nonce field alignment (#894) 2018-01-23 11:05:39 -06:00
HenryNguyen5 75d1be6961 Minimize re-renders due to gas price changes (#886) 2018-01-22 18:12:03 -06:00
William O'Beirne 182eaa4329 Electron App (#854)
* Basic webpack build started.

* Get build working with electron-packager. Not fully satisfied, might investigate electron-builder.

* Custom title bar

* Rewrite all webpack configs to use common function. Organize webpack utils. Split into multiple dist folders.

* Replace electron build with electron-builder. Leave around packager for a bit.

* Check in progress on updater.

* Update modal flow.

* Fix tscheck.

* Adjust publish info.

* Arbitrary version bump.

* Bump version again.

* 5.0.2 bump fix autodownload.

* 5.0.2 bump again, readd dmg

* 5.0.3 bump

* Turn auto update back off. Log errors. Revert versions.

* Add os-specific builds. Improve update failure.

* Open external links in browser in electron.

* Remove custom title bar temporarily.

* Add info about the update download to the modal.

* Turn off development changes.

* Take the postBuild sorting script and move it into a webpack config.

* Initial conversion to typescript and electron-webpack.

* Switch from electron-webpack back to custom config, clean up unused code, typify electron bridge.

* Better typing for bridge.

* Remove unnecessary file.

* Reminify.

* Add shared folder resolving to jest config.

* Add enum to electron events
2018-01-22 17:38:06 -06:00
William O'Beirne 81beab8bc0 Handle Ledger Error with Non-U2F Browsers (#882) 2018-01-22 14:59:02 -06:00
William O'Beirne a58097eeaa Various Browser Quirk Fixes (#881)
* Fix large images in onboarding in safari.

* Fix shapeshift banner centering, adjusted spacing and logo.

* Fix jagged rates.

* Fix small password input on Firefox.

* Remove top and bottom padding on form inputs that would cause cut off text.

* Dont remove top and bottom padding on textareas.

* Prevent flickering from rerender of promos.
2018-01-22 14:44:13 -06:00
William O'Beirne 592caaaf47 Sign Message v3 compatibility (#880)
* Change signed message shape to match v3

* Unit tests for signing

* Change subtab text.
2018-01-22 14:27:37 -06:00
greenkeeper[bot] 2d13c04835 chore(package): update lint-staged to version 6.0.1 (#867) 2018-01-22 06:24:59 -06:00
James Prado b7ba8ac22d Routing Improvements (#859)
* Nest Routes

* Update routing for subtabs

* Revert 'remove subtabs component'

* Update contract routes

* Update subtabs component

* Remove typo

* Update routing to handle disabled subroutes

* add disable prop to request payment tab

* Update request payment disabled condition

* Add CaptureRouteNotFound & RouteNotFound components

* Update ENS routing

* Remove any type

* Display 404 before unlocking wallet
2018-01-22 06:24:05 -06:00
James Prado f9c1134a16 Equivalent Values Bugfixes (#870)
Update <EquivalentValues /> component
Now works on non-ethereum networks
Update dropdown with new <Select /> from react-select
Calculates total value for all coins & tokens
2018-01-21 22:21:48 -06:00
Danny Skubak e0c4599b64 Advanced Settings Input Validation (#872)
* add gas limit/price constants

* add gas limit/price validators & selectors

* apply new gas limit/price validation to components and sagas

* create/apply function to sanitize advanced fields input

* add types, update tests

* fix unrelated failing test
2018-01-21 12:41:20 -06:00
greenkeeper[bot] 8262930200 chore(package): update ts-loader to version 3.3.0 (#874) 2018-01-21 12:23:19 -06:00
Danny Skubak 2d6dbbcb18 Cancel Requests on Wallet Switch (#873)
* add cancellation to nonce

* add cancellation to account/token balance updates

* update tests
2018-01-21 12:23:09 -06:00
Daniel Ternyak ab5fa1a799
Support Non-Ethereum Networks (#849)
* Make UnlockHeader a PureComponent

* MVP

* actually disable wallet format if not determined to be valid format for wallet

* default to correct derivation in mnemonic modal

* cleanup

* fix tslint

* use enums for HD wallet getPath

* Add stricter typing

* Fix labels not updating on selector

* Ban hardware wallet support for custom network unsupported chainIds

* Fix type error

* Fix custom node dPath not being saved

* Fix mnemonic modal

* default path bugfixes

* add react-select

* misc fixes; rabbit holing hard.

* fix tslint

* revert identicon changes

* reload on network change :/

* actually reload on network change

* really really reload on network change

* tslint fixes

* Update styles

* set table width

* fix package versioning

* push broken sagas

* Fix saga test

* fix tslint

* address round of review

* move non-selectors out to utilty; adjust reload timer

* cleanup network util comments

* manage wallet disable at WalletDecrypt instead of in both WalletDecrypt and WalletButton

* Separate WalletDecrypt props into ownProps / StateProps

* disable payment requests on non-eth networks

* specialize connect; separate props

* remove unused state prop

* remove bad import

* create tests for networks

* Clarify Lite-Send error on non-ethereum networkS

* remove string option for network config name

* Create concept of always-on 'EXTRA_PATHS'; include SINGULAR_DTV legacy dPath in 'EXTRA_PATHS'

* fix multiple imports

* address PR comments
2018-01-20 14:06:28 -06:00
greenkeeper[bot] 2420f5488b chore(package): update jest to version 22.1.4 (#868) 2018-01-20 11:58:54 -06:00
James Prado f06d814e24 Rotate promos (#858)
* Rotate promos

* Animate promo rotation

* Update promo rotate funct
2018-01-18 23:40:31 -06:00
Danny Skubak f13d490f1c Fix Offline Send (#857)
* add offline check to isValidAmount selector

* add z-index fix to AdvancedGas components

* remove z-index mod, use bootstrap class instead
2018-01-18 20:55:02 -06:00
greenkeeper[bot] a82cbfbc72 fix(package): update hard-source-webpack-plugin to version 0.5.16 (#863) 2018-01-18 19:58:33 -06:00
greenkeeper[bot] c7372388df chore(package): update @types/lodash to version 4.14.93 (#864) 2018-01-18 19:58:00 -06:00
greenkeeper[bot] 2699b9b13f chore(package): update jest to version 22.1.3 (#861) 2018-01-18 13:21:44 -06:00
William O'Beirne 1713e3fa29 Update trezor-connect.js to v4 (#856)
* Update trezor connect.

* Re-ignore trezor connect, fix typings.
2018-01-17 23:16:47 -06:00
greenkeeper[bot] 9c9d6c2f61 chore(package): update jest to version 22.1.2 (#852) 2018-01-17 11:22:37 -06:00
Danny Skubak 446cc96de1 Ensure Deterministic Builds (#845)
* add klaw-sync dep, add postbuild script

* specify exact klaw-sync version
2018-01-16 12:50:39 -06:00
greenkeeper[bot] d9c7e33bc1 chore(package): update check-node-version to version 3.2.0 (#844) 2018-01-15 23:16:49 -06:00
Eddie Wang 9fb9fcd134 Add webpack-subresource-integrity plugin (#789)
* Add subresource integrity

* add anonymous crossOriginLoading

* add missing ,
2018-01-15 16:51:35 -06:00
Daniel Ternyak 5f07814741
Merge pull request #836 from MyEtherWallet/greenkeeper/jest-22.1.1
chore(package): update jest to version 22.1.1
2018-01-15 12:56:19 -06:00
greenkeeper[bot] 06eebc2186 chore(package): update jest to version 22.1.1
Closes #833
2018-01-15 15:23:48 +00:00
Daniel Ternyak 93852bb97f
Merge pull request #832 from MyEtherWallet/develop
Tag release 0.1.0
2018-01-15 04:03:16 -06:00
Daniel Ternyak c2241dd9df
Tag release 0.1.0 (#831) 2018-01-15 04:02:45 -06:00
James Prado 6108d08693 Improved Gas Estimate UX (#830) 2018-01-15 03:59:59 -06:00
HenryNguyen5 67b2e6491c ENS Resolution for AddressField Component (#807)
* Refactor BaseNode to be an interface INode

* Initial contract commit

* Remove redundant fallback ABI function

* First working iteration of Contract generator to be used in ENS branch

* Hide abi to clean up logging output

* Strip 0x prefix from output decode

* Handle unnamed output params

* Implement ability to supply output mappings to ABI functions

* Fix null case in outputMapping

* Add flow typing

* Add .call method to functions

* Partial commit for type refactor

* Temp contract type fix -- waiting for NPM modularization

* Remove empty files

* Cleanup contract

* Add call request to node interface

* Fix output mapping types

* Revert destructuring overboard

* Add sendCallRequest to rpcNode class and add typing

* Use enum for selecting ABI methods

* Add transaction capability to contracts

* Cleanup privaite/public members

* Remove broadcasting step from a contract transaction

* Cleanup uneeded types

* Refactor ens-base to typescript and add typings for ENS smart contracts

* Migrate ens-name-search to TS

* Add IResolveDomainRequest

* Fix rest of TSC errors

* Add definition file for bn.js

* Remove types-bn

* Fix some typings

* make isBN a static property

* progress commit -- swap out bignumber.js for bn.js

* Swap out bignumber for bn in vendor

* Change modn to number return

* Start to strip out units lib for a string manipulation based lib

* Convert codebase to only base units

* Get rid of useless component

* Handle only wei in values

* Use unit conversion in sidebar

* Automatically strip hex prefix, and  handle decimal edge case

* Handle base 16 wei in transactions

* Make a render callback component for dealing with unit conversion

* Switch contracts to use bn.js, and get transaction values from signedTx instead of state

* Get send transaction  working with bn.js

* Remove redundant hex stripping,  return base value of tokens

* Cleanup unit file

* Re-implement toFixed for strings

* Use formatNumber in codebase

* Cleanup code

* Undo package test changes

* Update snapshot and remove console logs

* Use TokenValue / Wei more consistently where applicable

* Add typing to deterministicWallets, fix confirmation modal, make UnitDisplay more flexible

* Split different ENS modes into their own components

* Fix Abi typedef

* Remove redundant moment type package

* Add Aux helper component

* Split out resolve components

* Make 'to' parameter optional

* Change import type

* Change typing to be base domain request

* Split handling of resolving into object handler

* Fix countdown component

* Adjust element spacing

* Implement reveal search functionality

* Add unit display for highest bidder

* Fill out forbidden/NYA modes

* ENS wallet component skeleton

* Clean up prop handling in UnitDisplay

* Change instanceof to typeof check, change boolean of displayBalance

* Add ENS wallet component

* Cleanup spacing

* Convert ConfModal for bidding in ENS

* Make ui component for placing bids

* Fix destructure in placeBid

* Pass through entire wallet

* Remove text center

* Display inline notification ENS isValid & add some ENS tests

* Add export of Aux

* Reformat with prettier

* progress...

* Add ENSUnlockLayout

* Add RevealBid component

* organize NameResolve components

* Merge ENS with transaction-refactor changes

* Fix address resolution

* Update styles

* convert ens name to lowercase before checking

* Add overflow-y:scroll to table

* update ens snapshots & tests

* cast 'undefined' state argument as any for testing

* clean up components

* Connect unitconverter to redux state

* remove unnecessary type assertion

* fix spinner size

* remove old bidmodal

* validate bidmask before opening modal

* progress...

* Update styles

* Add saga / actions for placing a bid

* Update types & clean up dead code

* Delete old test

* Dispatch PlaceBidRequested acitons

* Progress commit -- get ENS bidding ready for tx generation via sagas

* Seperate ENS action creators and types

* Add reducer & actions for ENS fields

* Add preliminary sagas for bid mask and bid value

* Initial commit

* Add loading indicator

* Remove some bidding components

* Revert bidding files

* Remove more bidding code

* Remove rest of bidding code

* Fix ENS error message

* Revert value saga changes

* Remove error param from setting 'To' field

* Fix existing ENS test

* Cleanup address resolution, remove dead code

* Remove error messages from unimplemented ENS

* Fix last character being not set bug

* Remove error state from Meta

* Rename isGenesisAddress to isCreationAddress
2018-01-15 03:57:09 -06:00
Eddie Wang eb4fd1cce8 Stricter balance checks during swap (#793)
* check currentBalance before showing Amount Field and GenerateTx button

* add token balance check

* check wallet balance

* comments

* simplify wallet balance check
2018-01-15 00:51:35 -06:00
Daniel Ternyak b8b0cdece3
Change network without window refresh (#825)
* remove RSK as support network

* completely remove RSK

* change network without window refresh

* fix saga tests

* fix import
2018-01-15 00:27:26 -06:00
Daniel Ternyak a2eb2021cd
Remove non-Ethereum networks (#813)
* remove RSK as support network

* completely remove RSK

* remove UBIQ; EXP

* remove ETC
2018-01-15 00:21:42 -06:00
Eddie Wang 9ee764be2e Handle Shapeshift Error Messages (#811)
* Add error message if exists in shapeshift

* console error if shapeshiftOrderCreateFailed and bityOrderCreateFailed

* check e before checking e.message

* Handle preflight rejections. Put failure on any error.
2018-01-15 00:09:38 -06:00
Daniel Ternyak fa8fbe531f
Replace <Aux> with React Fragements (#816)
* replace <Aux> with React Fragements

* Remove Aux imports
2018-01-14 20:07:02 -06:00
Daniel Ternyak 7097a44f32
Ensure package versions are exact (#824) 2018-01-14 20:06:36 -06:00
greenkeeper[bot] c13610eeba chore(package): update tslint-microsoft-contrib to version 5.0.2 (#823) 2018-01-14 14:59:01 -06:00
William O'Beirne dfb93c16ab Onboarding Style Improvements (#805)
* Increases Modal's width to better fit in the content.
* Restore the image side behavior so that images are sometimes on the left, not always on the right
* Allows modal to dynamically size its height.
    * This reduces some awkward whitespace, and makes it so you can't just jam on the "Next" button since it moves a bit, should slow some people down to at least catch the headlines.
* Restore the alert style on the opening modal
* Provide a mobile-friendly progress stepper.
    * This module's markup kind of sucks, so the restyling code is heinous. Sorry.
* Scrolls the user to the top after hitting "Next" or "Previous"
    * On mobile, you would stay scrolled at the bottom. Much nicer feeling now.
* Tons of text and content spacing / color / size adjustments.
2018-01-13 02:26:08 -06:00
Daniel Ternyak 75871abf5c
Remove Digital Bitbox from account view (#804)
* remove unsupported digital bitbox from account view

* Fix sizing.
2018-01-13 01:50:37 -06:00
James Prado 31e22af904 Remove extra fonts (#790)
* Remove extra font-files

* Add woff font files

* Add woff format for social-media icon font
2018-01-12 11:50:51 -06:00
James Prado 0fa0004e3b Display Address on Hardware Wallets (#772)
* Add 'Display Address' button

* Remove unnecessary css

* Pass full dPath when getting addr

* Add typings for ledger vendor files

* Replace ledger vendor files w/ ledgerco module

* Remove u2f-api file

* Update TrezorConnect api & types

* Add displayAddress method to hardware wallets

* install libusb-1.0 on ci

* Change address, dpath, and index to protected attributes

* Use CommonJS export syntax

* Pin package version

* Prompt user to confirm address on hardware wallet

* Pass full path when getting trezor addr
2018-01-11 20:57:19 -06:00
greenkeeper[bot] 349830a699 chore(package): update tslint-react to version 3.4.0 (#801) 2018-01-11 15:10:24 -06:00
Daniel Ternyak c079032366
Pin react-stepper-horizontal version (#800) 2018-01-11 12:32:30 -06:00
Olajide Ogundipe Jr 303e44abb3 Onboarding Modal (#611)
* [WIP] Start port of V3 Modal

* allow lambda functions in React Components

* lint code

* add null case for modalRef

* fix action test

* reduce onboard slide boilerplate

* delete images and componentize OnboardSlide

* comment out info onboarding message

* fix merge conflict

* fix prettier error

* revert tslint file

* fix type in modal

* add translations to onboard modal

* add in images, fix stlyes
2018-01-11 12:13:14 -06:00
William O'Beirne 4f6e83acf4 Better Offline UX (#785)
* Check offline status immediately.

* If they start the page offline, show a less severe error message.

* Get rid of offline aware header. Disable wallet options when offline.

* Add online indicator to the header.

* Prevent some components from render, some requests from firing when offline.

* Allow for array of elements with typing.

* Dont show dollars in fee summary when offline.

* Fix up saga tests.

* Fix sidebar component offline styles.

* Remove force offline.

* Dont request rates if offline.

* Nonce in advanced, show even of online.

* Show invalid advanced props.

* Fix up offline poll tests.
2018-01-11 12:04:11 -06:00
greenkeeper[bot] 659f218b1c chore(package): update jest to version 22.0.6 (#798) 2018-01-11 11:27:14 -06:00
Eddie Wang 3a7a0822e2 Hide Equivalent Values on Testnet (#763)
* Hide eqv values when not on testnet

* use isTestnet and variabalize rateExistsOrAll
2018-01-11 11:27:00 -06:00
greenkeeper[bot] 6df4013d4d chore(package): update nodemon to version 1.14.11 (#799) 2018-01-11 10:32:57 -06:00
Daniel Ternyak 2236bb173f
chore(package): update prettier to version 1.10.2 (#797)
Closes #787
2018-01-11 01:57:36 -06:00
Daniel Ternyak fe86f2f79f
chore(package): update tslint to version 5.9.1 (#795)
Closes #792
2018-01-11 01:35:22 -06:00
Eddie Wang f4b8364abc Stop Timer when Swap Order is Received (#791) 2018-01-11 01:08:36 -06:00
Eddie Wang db4dc516e2 Clear transaction data on transaction resign (#788) 2018-01-11 01:07:38 -06:00
William O'Beirne 418b186642 Resolve custom token conflicts (#767)
* Remove custom token if it conflicts with symbol or address.

* Refactor deduping to utils function. Add unit tests for said function.

* Fix tscheck
2018-01-11 00:50:31 -06:00
William O'Beirne 7d2c3e1990 Unit tests for token & contract JSON (#768) 2018-01-11 00:47:48 -06:00
aitrean af2e0b69e1 Web Worker Decrypt (#680)
1. Attempt an empty password every time a keystore is uploaded.
2. Delegate scrypt decryption (ie ethereumjs-wallet.fromV3) to its own web worker and interface with it through an async typescript function that gets handled in the wallet saga. This keeps the UI unblocked when scrypt takes a long time to decrypt.
3. Add logic to show a spinner x number of milliseconds after file upload so the user will understand when a wallet is being decrypted.
2018-01-11 00:44:13 -06:00
greenkeeper[bot] a84a6e98fc chore(package): update jest to version 22.0.5 (#783) 2018-01-10 15:52:17 -06:00
greenkeeper[bot] 1f2d5b853d chore(package): update nodemon to version 1.14.10 (#779) 2018-01-10 14:59:38 -06:00
William O'Beirne fb0cce1d68 Rename Aux to AuxComponent for Windows (#771)
* Rename reseved filename 'Aux' to 'AuxComponent'

* fix prettier
2018-01-09 23:29:24 -06:00
Jack Clancy 26619e28cc Enforce HTTPS / Prevent Reverse Tabnabbing (#773)
* working version of test custom rule config

* setting no imports to false so tests will pass

* adding anchor blank noopener rule, rule currently off to allow tests to pass

* removing copied code from tslint-microsoft-contrib

* adding tslint-microsoft-contrib to dev deps

* extending tslint for external http rule

* locking tslint-microsoft-contrib version and turning on target blank noopener rule

* final fixes for pull #663

* add noopener noreferrer as needed

* fixing false positives for a tags without href

* really fix linting errors

* fix imports

* remove accidently(?) added LedgerNano duplicate file
2018-01-09 23:17:52 -06:00
William O'Beirne 6e2b74c79a Use network unit everywhere, fix network redux state (#765)
* Use network unit in confirmation modal. Make sure network is set at init.

* Fix token display

* Ensure that when the node changes, the network also changes. Show network unit in unit dropdown.

* Type saga, fix tests.
2018-01-09 14:13:14 -06:00
greenkeeper[bot] c54ba441fa fix(package): update rc-slider to version 8.6.0 (#761) 2018-01-09 08:27:47 -06:00
Daniel Ternyak d5ece361aa
Revert "Implement `offline-plugin` for Service Workers / App Cache (#701)" (#760)
This reverts commit ef506c54d6.
2018-01-08 23:04:20 -06:00
851 changed files with 38268 additions and 26914 deletions

1
.github/CONTRIBUTING.md vendored Normal file
View File

@ -0,0 +1 @@
Please see the [Contributor Guidelines on the wiki](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributor-Guidelines).

37
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,37 @@
If you're having an issue with unlocking your wallet, a transaction, a swap,
or an ENS auction, please email support@mycrypto.com. Github issues are for
development only, and support questions that aren't bugs or feature requests
will not be answered.
---
If you've experienced a bug, please provide the following information:
### Description of the Issue
(Your description goes here)
### Steps to Reproduce
(Explain how you got this issue)
### Description of Your Machine
(Your browser, browser version, operating system, device)
### Console Logs / Screenshots
(Console logs or screenshots go here, if applicable)
---
If you're suggesting a feature, make sure someone hasn't already posted it. If
no one has, please provide the following information:
### Description of the Feature
(Your description goes here)
### Example(s) of Feature
(If another product or app is doing this, please link it)

29
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,29 @@
If you're contributing translations, please follow the contributor guidelines
at https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributor-Guidelines#providing-translations
---
If you're contributing code, please link to the issue it resolves and follow the
contributor guidelines at https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributor-Guidelines#contributing-code and fill out the following template:
Closes #(issue number goes here)
### Description
(Description goes here)
### Changes
* High level
* Changes that
* You Made
### Steps to Test
1. Steps
2. To
3. Test
### Screenshots
(Only if applicable)

2
.gitignore vendored
View File

@ -56,3 +56,5 @@ webpack_config/server.csr
v8-compile-cache-0/
package-lock.json
yarn.lock

2
.nvmrc
View File

@ -1 +1 @@
8
8.9.4

1
.prettierignore Normal file
View File

@ -0,0 +1 @@
common/translations

View File

@ -13,8 +13,10 @@ before_install:
- export CHROME_BIN=chromium-browser
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- docker pull dternyak/eth-priv-to-addr:latest
# uncomment once integration tests are included in CI
# - docker pull dternyak/eth-priv-to-addr:latest
- sudo apt-get install libusb-1.0
install:
- npm install --silent
@ -25,13 +27,7 @@ jobs:
- stage: test
script: npm run test
- stage: test
script: npm run tslint
- stage: test
script: npm run tscheck
- stage: test
script: npm run freezer
- stage: test
script: npm run freezer:validate
script: npm run tslint && npm run tscheck && npm run freezer && npm run freezer:validate
notifications:
email:

View File

@ -1,6 +1,7 @@
MIT License
Copyright (c) 2016 MyEtherWallet
Copyright (c) 2015-2017 MyEtherWallet LLC
Copyright (c) 2018 MyCrypto, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

363
README.md
View File

@ -1,35 +1,64 @@
# MyEtherWallet V4+ (ALPHA - VISIT [V3](https://github.com/kvhnuke/etherwallet) for the production site)
# MyCrypto Beta (VISIT [MyCryptoHQ/mycrypto.com](https://github.com/MyCryptoHQ/mycrypto.com) for the current site)<br/>Just looking to download? Grab our [latest release](https://github.com/MyCryptoHQ/MyCrypto/releases)
[![Greenkeeper badge](https://badges.greenkeeper.io/MyEtherWallet/MyEtherWallet.svg)](https://greenkeeper.io/)
[![Greenkeeper badge](https://badges.greenkeeper.io/MyCryptoHq/MyCrypto.svg)](https://greenkeeper.io/)
[![Coverage Status](https://coveralls.io/repos/github/MyCryptoHQ/MyCrypto/badge.svg?branch=develop)](https://coveralls.io/github/MyCryptoHQ/MyCrypto?branch=develop)
#### Run:
## Running the App
This codebase targets Node 8.9.4 (LTS). After `npm install`ing all dependencies (You may be required to install additional system dependencies, due to some node modules relying on them) you can run various commands depending on what you want to do:
#### Development
```bash
npm run dev # run app in dev mode
# run app in dev mode in browser, rebuild on file changes
npm run dev
```
#### Build:
```bash
npm run build # build app
# run app in dev mode in electron, rebuild on file changes
npm run dev:electron
```
It generates app in `dist` folder.
#### Build Releases
```bash
# builds the production server app
npm run build
```
```bash
# builds the downloadable version of the site
npm run build:downloadable
```
```bash
# builds the electron apps
npm run build:electron
# builds only one OS's electron app
npm run build:electron:(osx|linux|windows)
```
All of these builds are output to a folder in `dist/`.
#### Unit Tests:
```bash
npm run test # run tests with Jest
# run unit tests with Jest
npm run test
```
#### Integration Tests:
```bash
npm run test:int # run tests with Jest
# run integration tests with Jest
npm run test:int
```
#### Dev (HTTPS):
Some parts of the site, such as the Ledger wallet, require an HTTPS environment to work. To develop on HTTPS, do the following:
1. Create your own SSL Certificate (Heroku has a [nice guide here](https://devcenter.heroku.com/articles/ssl-certificate-self))
2. Move the `.key` and `.crt` files into `webpack_config/server.*`
3. Run the following command:
@ -69,300 +98,32 @@ npm run test:int
```
├── common
│ ├── actions - application actions
│ ├── actions - Application actions
│ ├── api - Services and XHR utils
│ ├── components - components according to "Redux philosophy"
│ ├── config - frontend config depending on REACT_WEBPACK_ENV
│ ├── containers - containers according to "Redux philosophy"
│ ├── reducers - application reducers
│ ├── routing - application routing
│ ├── index.tsx - entry
│ ├── index.html
├── static
├── webpack_config - Webpack configuration
├── jest_config - Jest configuration
│ ├── assets - Images, fonts, etc.
│ ├── components - Components according to "Redux philosophy"
│ ├── config - Various config data and hard-coded json
│ ├── containers - Containers according to "Redux philosophy"
│ ├── libs - Framework-agnostic libraries and business logic
│ ├── reducers - Redux reducers
│ ├── sagas - Redux sagas
│ ├── sass - SCSS styles, variables, mixins
│ ├── selectors - Redux selectors
│ ├── translations - Language JSON dictionaries
│ ├── typescript - Typescript definition files
│ ├── utils - Common use utility functions
│ ├── index.tsx - Entry point for app
│ ├── index.html - Html template file for html-webpack-plugin
│ ├── Root.tsx - Root component for React
│ └── store.ts - Redux reducer combiner and middleware injector
├── electron-app - Code for the native electron app
├── jest_config - Jest testing configuration
├── spec - Jest unit tests, mirror's common's structure
├── static - Files that don't get compiled, just moved to build
└── webpack_config - Webpack configuration
```
## Style Guides and Philosophies
The following are guides for developers to follow for writing compliant code.
### Redux and Actions
Each reducer has one file in `reducers/[namespace].ts` that contains the reducer
and initial state, one file in `actions/[namespace].ts` that contains the action
creators and their return types, and optionally one file in
`sagas/[namespace].ts` that handles action side effects using
[`redux-saga`](https://github.com/redux-saga/redux-saga).
The files should be laid out as follows:
#### Reducer
* State should be explicitly defined and exported
* Initial state should match state typing, define every key
```ts
import { NamespaceAction } from "actions/[namespace]";
import { TypeKeys } from 'actions/[namespace]/constants';
export interface State { /* definition for state object */ };
export const INITIAL_STATE: State = { /* Initial state shape */ };
export function [namespace](
state: State = INITIAL_STATE,
action: NamespaceAction
): State {
switch (action.type) {
case TypeKeys.NAMESPACE_NAME_OF_ACTION:
return {
...state,
// Alterations to state
};
default:
return state;
}
}
```
#### Actions
* Define each action creator in `actionCreator.ts`
* Define each action object type in `actionTypes.ts`
* Export a union of all of the action types for use by the reducer
* Define each action type as a string enum in `constants.ts`
* Export `actionCreators` and `actionTypes` from module file `index.ts`
```
├── common
├── actions - application actions
├── [namespace] - action namespace
├── actionCreators.ts - action creators
├── actionTypes.ts - action interfaces / types
├── constants.ts - string enum
├── index.ts - exports all action creators and action object types
```
##### constants.ts
```ts
export enum TypeKeys {
NAMESPACE_NAME_OF_ACTION = 'NAMESPACE_NAME_OF_ACTION'
}
```
##### actionTypes.ts
```ts
/*** Name of action ***/
export interface NameOfActionAction {
type: TypeKeys.NAMESPACE_NAME_OF_ACTION;
/* Rest of the action object shape */
}
/*** Action Union ***/
export type NamespaceAction = ActionOneAction | ActionTwoAction | ActionThreeAction;
```
##### actionCreators.ts
```ts
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
export interface TNameOfAction = typeof nameOfAction;
export function nameOfAction(): interfaces.NameOfActionAction {
return {
type: TypeKeys.NAMESPACE_NAME_OF_ACTION,
payload: {}
};
};
```
##### index.ts
```ts
export * from './actionCreators';
export * from './actionTypes';
```
### Typing Redux-Connected Components
Components that receive props directly from redux as a result of the `connect`
function should use AppState for typing, rather than manually defining types.
This makes refactoring reducers easier by catching mismatches or changes of
types in components, and reduces the chance for inconsistency. It's also less
code overall.
```
// Do this
import { AppState } from 'reducers';
interface Props {
wallet: AppState['wallet']['inst'];
rates: AppState['rates']['rates'];
// ...
}
// Not this
import { IWallet } from 'libs/wallet';
import { Rates } from 'libs/rates';
interface Props {
wallet: IWallet;
rates: Rates;
// ...
}
```
However, if you have a sub-component that takes in props from a connected
component, it's OK to manually specify the type. Especially if you go from
being type-or-null to guaranteeing the prop will be passed (because of a
conditional render.)
### Higher Order Components
#### Typing Injected Props
Props made available through higher order components can be tricky to type. You can inherit the injected props, and in the case of react router, specialize the generic in `withRouter` so it can omit all of its injected props from the component.
```ts
import { RouteComponentProps } from 'react-router-dom';
interface MyComponentProps extends RouteComponentProps<{}> {
name: string;
countryCode?: string;
}
```
```ts
class MyComponent extends React.Component<MyComponentProps, {}> {
render() {
const { name, countryCode, location } = this.props; // location being the one of the injected props from the withRouter HOC
...
}
}
export default withRouter<Props>(MyComponent);
```
## Event Handlers
Event handlers such as `onChange` and `onClick`, should be properly typed. For example, if you have an event listener on an input element inside a form:
```ts
public onValueChange = (e: React.FormEvent<HTMLInputElement>) => {
if (this.props.onChange) {
this.props.onChange(
e.currentTarget.value,
this.props.unit
);
}
};
```
Where you type the event as a `React.FormEvent` of type `HTML<TYPE>Element`.
## Class names
Dynamic class names should use the `classnames` module to simplify how they are created instead of using string template literals with expressions inside.
### Styling
Legacy styles are housed under `common/assets/styles` and written with LESS.
However, going forward, each styled component should create a a `.scss` file of
the same name in the same folder, and import it like so:
```ts
import React from 'react';
import './MyComponent.scss';
export default class MyComponent extends React.component<{}, {}> {
render() {
return (
<div className="MyComponent">
<div className="MyComponent-child">Hello!</div>
</div>
);
}
}
```
These style modules adhere to [SuitCSS naming convention](https://github.com/suitcss/suit/blob/master/doc/naming-conventions.md):
```scss
.MyComponent {
/* Styles */
&-child {
/* Styles */
&.is-hidden {
display: none;
}
}
}
```
All elements inside of a component should extend its parent class namespace, or
create a new namespace (Potentially breaking that out into its own component.)
Variables and mixins can be imported from the files in `common/styles`:
```scss
@import 'sass/colors';
code {
color: $code-color;
}
```
#### Converting Styles
When working on a module that has styling in Less, try to do the following:
* Screenshot the component in question
* Create a new SCSS file in the same directory
* Remove styling from LESS file, convert it to the SCSS file (Mostly s/@/$)
* Convert class names to SuitCSS naming convention
* Convert any utility classes from `etherewallet-utilities.less` into mixins
* Convert as many element selectors to class name selectors as possible
* Convert as many `<br/>` tags or `&nbsp;`s to margins
* Ensure that there has been little to no deviation from screenshot
#### Adding Icon-fonts
1. Download chosen icon-font
1. Declare css font-family:
```
@font-face {
font-family: 'social-media';
src: url('../assets/fonts/social-media.eot');
src: url('../assets/fonts/social-media.eot') format('embedded-opentype'),
url('../assets/fonts/social-media.woff2') format('woff2'),
url('../assets/fonts/social-media.woff') format('woff'),
url('../assets/fonts/social-media.ttf') format('truetype'),
url('../assets/fonts/social-media.svg') format('svg');
font-weight: normal;
font-style: normal;
}
```
1. Create classes for each icon using their unicode character
```
.sm-logo-facebook:before {
content: '\ea02';
}
```
* [How to get unicode icon values?](https://stackoverflow.com/questions/27247145/get-the-unicode-icon-value-from-a-custom-font)
1. Write some markup:
```
<a href="/">
<i className={`sm-icon sm-logo-${text} sm-24px`} />
Hello World
</a>
```
### More information is available on the [Wiki Pages](https://github.com/MyCryptoHQ/MyCrypto/wiki)
## Thanks & Support

View File

@ -1,35 +1,57 @@
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import { Provider, connect } from 'react-redux';
import { withRouter, Switch, Redirect, HashRouter, Route, BrowserRouter } from 'react-router-dom';
// Components
import Contracts from 'containers/Tabs/Contracts';
import ENS from 'containers/Tabs/ENS';
import GenerateWallet from 'containers/Tabs/GenerateWallet';
import Help from 'containers/Tabs/Help';
import SendTransaction from 'containers/Tabs/SendTransaction';
import Swap from 'containers/Tabs/Swap';
import SignAndVerifyMessage from 'containers/Tabs/SignAndVerifyMessage';
import BroadcastTx from 'containers/Tabs/BroadcastTx';
import CheckTransaction from 'containers/Tabs/CheckTransaction';
import ErrorScreen from 'components/ErrorScreen';
import PageNotFound from 'components/PageNotFound';
import LogOutPrompt from 'components/LogOutPrompt';
import { Aux } from 'components/ui';
import { TitleBar } from 'components/ui';
import { Store } from 'redux';
import { pollOfflineStatus, TPollOfflineStatus } from 'actions/config';
import { AppState } from 'reducers';
import { RouteNotFound } from 'components/RouteNotFound';
import { RedirectWithQuery } from 'components/RedirectWithQuery';
import 'what-input';
import { setUnitMeta, TSetUnitMeta } from 'actions/transaction';
import { getNetworkUnit } from 'selectors/config';
interface Props {
interface OwnProps {
store: Store<AppState>;
}
interface StateProps {
networkUnit: string;
}
interface DispatchProps {
pollOfflineStatus: TPollOfflineStatus;
setUnitMeta: TSetUnitMeta;
}
type Props = OwnProps & StateProps & DispatchProps;
interface State {
error: Error | null;
}
export default class Root extends Component<Props, State> {
class RootClass extends Component<Props, State> {
public state = {
error: null
};
public componentDidMount() {
this.props.pollOfflineStatus();
this.props.setUnitMeta(this.props.networkUnit);
}
public componentDidCatch(error: Error) {
this.setState({ error });
}
@ -42,39 +64,45 @@ export default class Root extends Component<Props, State> {
return <ErrorScreen error={error} />;
}
// key={Math.random()} = hack for HMR from https://github.com/webpack/webpack-dev-server/issues/395
const CaptureRouteNotFound = withRouter(({ children, location }) => {
return location && location.state && location.state.error ? (
<PageNotFound />
) : (
(children as JSX.Element)
);
});
const routes = (
<Switch>
<Route exact={true} path="/" component={GenerateWallet} />
<Route path="/generate" component={GenerateWallet}>
<Route path="keystore" component={GenerateWallet} />
<Route path="mnemonic" component={GenerateWallet} />
</Route>
<Route path="/help" component={Help} />
<Route path="/swap" component={Swap} />
<Route path="/account" component={SendTransaction}>
<Route path="send" component={SendTransaction} />
<Route path="info" component={SendTransaction} />
</Route>
<Route path="/send-transaction" component={SendTransaction} />
<Route path="/contracts" component={Contracts} />
<Route path="/ens" component={ENS} />
<Route path="/sign-and-verify-message" component={SignAndVerifyMessage} />
<Route path="/pushTx" component={BroadcastTx} />
<Route component={PageNotFound} />
</Switch>
<CaptureRouteNotFound>
<Switch>
<Redirect exact={true} from="/" to="/account" />
<Route path="/account" component={SendTransaction} />
<Route path="/generate" component={GenerateWallet} />
<Route path="/swap" component={Swap} />
<Route path="/contracts" component={Contracts} />
<Route path="/ens" component={ENS} exact={true} />
<Route path="/sign-and-verify-message" component={SignAndVerifyMessage} />
<Route path="/tx-status" component={CheckTransaction} exact={true} />
<Route path="/pushTx" component={BroadcastTx} />
<RouteNotFound />
</Switch>
</CaptureRouteNotFound>
);
const Router = process.env.BUILD_DOWNLOADABLE ? HashRouter : BrowserRouter;
const Router =
process.env.BUILD_DOWNLOADABLE && process.env.NODE_ENV === 'production'
? HashRouter
: BrowserRouter;
return (
<Provider store={store} key={Math.random()}>
<Router key={Math.random()}>
<Aux>
<React.Fragment>
{process.env.BUILD_ELECTRON && <TitleBar />}
{routes}
<LegacyRoutes />
<LogOutPrompt />
</Aux>
</React.Fragment>
</Router>
</Provider>
);
@ -83,14 +111,15 @@ export default class Root extends Component<Props, State> {
const LegacyRoutes = withRouter(props => {
const { history } = props;
const { pathname, hash } = props.location;
const { pathname } = props.location;
let { hash } = props.location;
if (pathname === '/') {
hash = hash.split('?')[0];
switch (hash) {
case '#send-transaction':
case '#offline-transaction':
history.push('/send-transaction');
break;
return <RedirectWithQuery from={pathname} to={'account/send'} />;
case '#generate-wallet':
history.push('/');
break;
@ -107,16 +136,26 @@ const LegacyRoutes = withRouter(props => {
history.push('/account/info');
break;
case '#check-tx-status':
history.push('/check-tx-status');
break;
return <RedirectWithQuery from={pathname} to={'/tx-status'} />;
}
}
return (
<Switch>
<Redirect from="/signmsg.html" to="/sign-and-verify-message" />
<Redirect from="/helpers.html" to="/helpers" />
<Redirect from="/send-transaction" to="/account/send" />
<RedirectWithQuery from="/signmsg.html" to="/sign-and-verify-message" />
<RedirectWithQuery from="/helpers.html" to="/helpers" />
<RedirectWithQuery from="/send-transaction" to={'/account/send'} />
</Switch>
);
});
const mapStateToProps = (state: AppState) => {
return {
networkUnit: getNetworkUnit(state)
};
};
export default connect(mapStateToProps, {
pollOfflineStatus,
setUnitMeta
})(RootClass);

View File

@ -1,18 +1,17 @@
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
import { NodeConfig, CustomNodeConfig, CustomNetworkConfig } from 'config/data';
export type TForceOfflineConfig = typeof forceOfflineConfig;
export function forceOfflineConfig(): interfaces.ForceOfflineAction {
export type TToggleOffline = typeof toggleOffline;
export function toggleOffline(): interfaces.ToggleOfflineAction {
return {
type: TypeKeys.CONFIG_FORCE_OFFLINE
type: TypeKeys.CONFIG_TOGGLE_OFFLINE
};
}
export type TToggleOfflineConfig = typeof toggleOfflineConfig;
export function toggleOfflineConfig(): interfaces.ToggleOfflineAction {
export type TToggleAutoGasLimit = typeof toggleAutoGasLimit;
export function toggleAutoGasLimit(): interfaces.ToggleAutoGasLimitAction {
return {
type: TypeKeys.CONFIG_TOGGLE_OFFLINE
type: TypeKeys.CONFIG_TOGGLE_AUTO_GAS_LIMIT
};
}
@ -25,10 +24,12 @@ export function changeLanguage(sign: string): interfaces.ChangeLanguageAction {
}
export type TChangeNode = typeof changeNode;
export function changeNode(nodeSelection: string, node: NodeConfig): interfaces.ChangeNodeAction {
export function changeNode(
payload: interfaces.ChangeNodeAction['payload']
): interfaces.ChangeNodeAction {
return {
type: TypeKeys.CONFIG_NODE_CHANGE,
payload: { nodeSelection, node }
payload
};
}
@ -47,8 +48,18 @@ export function changeNodeIntent(payload: string): interfaces.ChangeNodeIntentAc
};
}
export type TChangeNodeForce = typeof changeNodeForce;
export function changeNodeForce(payload: string): interfaces.ChangeNodeForceAction {
return {
type: TypeKeys.CONFIG_NODE_CHANGE_FORCE,
payload
};
}
export type TAddCustomNode = typeof addCustomNode;
export function addCustomNode(payload: CustomNodeConfig): interfaces.AddCustomNodeAction {
export function addCustomNode(
payload: interfaces.AddCustomNodeAction['payload']
): interfaces.AddCustomNodeAction {
return {
type: TypeKeys.CONFIG_ADD_CUSTOM_NODE,
payload
@ -56,7 +67,9 @@ export function addCustomNode(payload: CustomNodeConfig): interfaces.AddCustomNo
}
export type TRemoveCustomNode = typeof removeCustomNode;
export function removeCustomNode(payload: CustomNodeConfig): interfaces.RemoveCustomNodeAction {
export function removeCustomNode(
payload: interfaces.RemoveCustomNodeAction['payload']
): interfaces.RemoveCustomNodeAction {
return {
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NODE,
payload
@ -64,7 +77,9 @@ export function removeCustomNode(payload: CustomNodeConfig): interfaces.RemoveCu
}
export type TAddCustomNetwork = typeof addCustomNetwork;
export function addCustomNetwork(payload: CustomNetworkConfig): interfaces.AddCustomNetworkAction {
export function addCustomNetwork(
payload: interfaces.AddCustomNetworkAction['payload']
): interfaces.AddCustomNetworkAction {
return {
type: TypeKeys.CONFIG_ADD_CUSTOM_NETWORK,
payload
@ -73,7 +88,7 @@ export function addCustomNetwork(payload: CustomNetworkConfig): interfaces.AddCu
export type TRemoveCustomNetwork = typeof removeCustomNetwork;
export function removeCustomNetwork(
payload: CustomNetworkConfig
payload: interfaces.RemoveCustomNetworkAction['payload']
): interfaces.RemoveCustomNetworkAction {
return {
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NETWORK,
@ -89,6 +104,15 @@ export function setLatestBlock(payload: string): interfaces.SetLatestBlockAction
};
}
export function web3SetNode(
payload: interfaces.Web3setNodeAction['payload']
): interfaces.Web3setNodeAction {
return {
type: TypeKeys.CONFIG_NODE_WEB3_SET,
payload
};
}
export type TWeb3UnsetNode = typeof web3UnsetNode;
export function web3UnsetNode(): interfaces.Web3UnsetNodeAction {
return {

View File

@ -1,14 +1,14 @@
import { TypeKeys } from './constants';
import { NodeConfig, CustomNodeConfig, CustomNetworkConfig } from 'config/data';
import { CustomNodeConfig, Web3NodeConfig } from 'types/node';
import { CustomNetworkConfig } from 'types/network';
/*** Toggle Offline ***/
export interface ToggleOfflineAction {
type: TypeKeys.CONFIG_TOGGLE_OFFLINE;
}
/*** Force Offline ***/
export interface ForceOfflineAction {
type: TypeKeys.CONFIG_FORCE_OFFLINE;
export interface ToggleAutoGasLimitAction {
type: TypeKeys.CONFIG_TOGGLE_AUTO_GAS_LIMIT;
}
/*** Change Language ***/
@ -20,10 +20,9 @@ export interface ChangeLanguageAction {
/*** Change Node ***/
export interface ChangeNodeAction {
type: TypeKeys.CONFIG_NODE_CHANGE;
// FIXME $keyof?
payload: {
nodeSelection: string;
node: NodeConfig;
nodeId: string;
networkId: string;
};
}
@ -37,29 +36,34 @@ export interface ChangeNodeIntentAction {
type: TypeKeys.CONFIG_NODE_CHANGE_INTENT;
payload: string;
}
/*** Force Change Node ***/
export interface ChangeNodeForceAction {
type: TypeKeys.CONFIG_NODE_CHANGE_FORCE;
payload: string;
}
/*** Add Custom Node ***/
export interface AddCustomNodeAction {
type: TypeKeys.CONFIG_ADD_CUSTOM_NODE;
payload: CustomNodeConfig;
payload: { id: string; config: CustomNodeConfig };
}
/*** Remove Custom Node ***/
export interface RemoveCustomNodeAction {
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NODE;
payload: CustomNodeConfig;
payload: { id: string };
}
/*** Add Custom Network ***/
export interface AddCustomNetworkAction {
type: TypeKeys.CONFIG_ADD_CUSTOM_NETWORK;
payload: CustomNetworkConfig;
payload: { id: string; config: CustomNetworkConfig };
}
/*** Remove Custom Network ***/
export interface RemoveCustomNetworkAction {
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NETWORK;
payload: CustomNetworkConfig;
payload: { id: string };
}
/*** Set Latest Block ***/
@ -73,17 +77,28 @@ export interface Web3UnsetNodeAction {
type: TypeKeys.CONFIG_NODE_WEB3_UNSET;
}
/*** Union Type ***/
export type ConfigAction =
/*** Set Web3 as a Node ***/
export interface Web3setNodeAction {
type: TypeKeys.CONFIG_NODE_WEB3_SET;
payload: { id: 'web3'; config: Web3NodeConfig };
}
export type CustomNetworkAction = AddCustomNetworkAction | RemoveCustomNetworkAction;
export type CustomNodeAction = AddCustomNodeAction | RemoveCustomNodeAction;
export type NodeAction =
| ChangeNodeAction
| ChangeNodeIntentAction
| Web3UnsetNodeAction
| Web3setNodeAction;
export type MetaAction =
| ChangeLanguageAction
| ToggleOfflineAction
| ToggleAutoGasLimitAction
| PollOfflineStatus
| ForceOfflineAction
| ChangeNodeIntentAction
| AddCustomNodeAction
| RemoveCustomNodeAction
| AddCustomNetworkAction
| RemoveCustomNetworkAction
| SetLatestBlockAction
| Web3UnsetNodeAction;
| SetLatestBlockAction;
/*** Union Type ***/
export type ConfigAction = CustomNetworkAction | CustomNodeAction | NodeAction | MetaAction;

View File

@ -1,14 +1,20 @@
export enum TypeKeys {
CONFIG_LANGUAGE_CHANGE = 'CONFIG_LANGUAGE_CHANGE',
CONFIG_TOGGLE_OFFLINE = 'CONFIG_TOGGLE_OFFLINE',
CONFIG_TOGGLE_AUTO_GAS_LIMIT = 'CONFIG_TOGGLE_AUTO_GAS_LIMIT',
CONFIG_POLL_OFFLINE_STATUS = 'CONFIG_POLL_OFFLINE_STATUS',
CONFIG_SET_LATEST_BLOCK = 'CONFIG_SET_LATEST_BLOCK',
CONFIG_NODE_WEB3_SET = 'CONFIG_NODE_WEB3_SET',
CONFIG_NODE_WEB3_UNSET = 'CONFIG_NODE_WEB3_UNSET',
CONFIG_NODE_CHANGE = 'CONFIG_NODE_CHANGE',
CONFIG_NODE_CHANGE_INTENT = 'CONFIG_NODE_CHANGE_INTENT',
CONFIG_TOGGLE_OFFLINE = 'CONFIG_TOGGLE_OFFLINE',
CONFIG_FORCE_OFFLINE = 'CONFIG_FORCE_OFFLINE',
CONFIG_POLL_OFFLINE_STATUS = 'CONFIG_POLL_OFFLINE_STATUS',
CONFIG_NODE_CHANGE_FORCE = 'CONFIG_NODE_CHANGE_FORCE',
CONFIG_ADD_CUSTOM_NODE = 'CONFIG_ADD_CUSTOM_NODE',
CONFIG_REMOVE_CUSTOM_NODE = 'CONFIG_REMOVE_CUSTOM_NODE',
CONFIG_ADD_CUSTOM_NETWORK = 'CONFIG_ADD_CUSTOM_NETWORK',
CONFIG_REMOVE_CUSTOM_NETWORK = 'CONFIG_REMOVE_CUSTOM_NETWORK',
CONFIG_SET_LATEST_BLOCK = 'CONFIG_SET_LATEST_BLOCK',
CONFIG_NODE_WEB3_UNSET = 'CONFIG_NODE_WEB3_UNSET'
CONFIG_REMOVE_CUSTOM_NETWORK = 'CONFIG_REMOVE_CUSTOM_NETWORK'
}

View File

@ -1,6 +1,6 @@
import { Token } from 'config/data';
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
import { Token } from 'types/network';
export type TAddCustomToken = typeof addCustomToken;
export function addCustomToken(payload: Token): interfaces.AddCustomTokenAction {

View File

@ -1,5 +1,6 @@
import { Token } from 'config/data';
import { TypeKeys } from './constants';
import { Token } from 'types/network';
/*** Add custom token ***/
export interface AddCustomTokenAction {
type: TypeKeys.CUSTOM_TOKEN_ADD;

View File

@ -1,22 +0,0 @@
import * as interfaces from './actionTypes';
import * as constants from './constants';
export function resolveEnsName(name: string): interfaces.ResolveEnsNameAction {
return {
type: constants.ENS_RESOLVE,
payload: name
};
}
export function cacheEnsAddress(
ensName: string,
address: string
): interfaces.CacheEnsAddressAction {
return {
type: constants.ENS_CACHE,
payload: {
ensName,
address
}
};
}

View File

@ -0,0 +1 @@
export * from './resolveDomain';

View File

@ -0,0 +1,35 @@
import * as ActionTypes from '../actionTypes';
import { TypeKeys } from '../constants';
import { DomainRequest } from 'libs/ens';
import { ResolveDomainCached } from 'actions/ens';
export type TResolveDomainRequested = typeof resolveDomainRequested;
export const resolveDomainRequested = (domain: string): ActionTypes.ResolveDomainRequested => ({
type: TypeKeys.ENS_RESOLVE_DOMAIN_REQUESTED,
payload: { domain }
});
export const resolveDomainCached = (
payload: ResolveDomainCached['payload']
): ResolveDomainCached => ({
type: TypeKeys.ENS_RESOLVE_DOMAIN_CACHED,
payload
});
export type TResolveDomainSucceeded = typeof resolveDomainSucceeded;
export const resolveDomainSucceeded = (
domain: string,
domainData: DomainRequest
): ActionTypes.ResolveDomainSucceeded => ({
type: TypeKeys.ENS_RESOLVE_DOMAIN_SUCCEEDED,
payload: { domain, domainData }
});
export type TResolveDomainFailed = typeof resolveDomainFailed;
export const resolveDomainFailed = (
domain: string,
error: Error
): ActionTypes.ResolveDomainFailed => ({
type: TypeKeys.ENS_RESOLVE_DOMAIN_FAILED,
payload: { domain, error }
});

View File

@ -1,17 +0,0 @@
/*** Resolve ENS name ***/
export interface ResolveEnsNameAction {
type: 'ENS_RESOLVE';
payload: string;
}
/*** Cache ENS address ***/
export interface CacheEnsAddressAction {
type: 'ENS_CACHE';
payload: {
ensName: string;
address: string;
};
}
/*** Union Type ***/
export type EnsAction = ResolveEnsNameAction | CacheEnsAddressAction;

View File

@ -0,0 +1,4 @@
import { ResolveDomainAction } from './resolveDomain';
export * from './resolveDomain';
export type EnsAction = ResolveDomainAction;

View File

@ -0,0 +1 @@
export * from './actionTypes';

View File

@ -0,0 +1,28 @@
import { TypeKeys } from '../constants';
import { DomainRequest } from 'libs/ens';
export interface ResolveDomainRequested {
type: TypeKeys.ENS_RESOLVE_DOMAIN_REQUESTED;
payload: { domain: string };
}
export interface ResolveDomainSucceeded {
type: TypeKeys.ENS_RESOLVE_DOMAIN_SUCCEEDED;
payload: { domain: string; domainData: DomainRequest };
}
export interface ResolveDomainCached {
type: TypeKeys.ENS_RESOLVE_DOMAIN_CACHED;
payload: { domain: string };
}
export interface ResolveDomainFailed {
type: TypeKeys.ENS_RESOLVE_DOMAIN_FAILED;
payload: { domain: string; error: Error };
}
export type ResolveDomainAction =
| ResolveDomainRequested
| ResolveDomainSucceeded
| ResolveDomainFailed
| ResolveDomainCached;

View File

@ -1,2 +1,6 @@
export const ENS_RESOLVE = 'ENS_RESOLVE';
export const ENS_CACHE = 'ENS_CACHE';
export enum TypeKeys {
ENS_RESOLVE_DOMAIN_REQUESTED = 'ENS_RESOLVE_DOMAIN_REQUESTED',
ENS_RESOLVE_DOMAIN_SUCCEEDED = 'ENS_RESOLVE_DOMAIN_SUCCEEDED',
ENS_RESOLVE_DOMAIN_FAILED = 'ENS_RESOLVE_DOMAIN_FAILED',
ENS_RESOLVE_DOMAIN_CACHED = 'ENS_RESOLVE_DOMAIN_CACHED'
}

View File

@ -0,0 +1,19 @@
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
export type TFetchGasEstimates = typeof fetchGasEstimates;
export function fetchGasEstimates(): interfaces.FetchGasEstimatesAction {
return {
type: TypeKeys.GAS_FETCH_ESTIMATES
};
}
export type TSetGasEstimates = typeof setGasEstimates;
export function setGasEstimates(
payload: interfaces.SetGasEstimatesAction['payload']
): interfaces.SetGasEstimatesAction {
return {
type: TypeKeys.GAS_SET_ESTIMATES,
payload
};
}

View File

@ -0,0 +1,14 @@
import { TypeKeys } from './constants';
import { GasEstimates } from 'api/gas';
export interface FetchGasEstimatesAction {
type: TypeKeys.GAS_FETCH_ESTIMATES;
}
export interface SetGasEstimatesAction {
type: TypeKeys.GAS_SET_ESTIMATES;
payload: GasEstimates;
}
/*** Union Type ***/
export type GasAction = FetchGasEstimatesAction | SetGasEstimatesAction;

View File

@ -0,0 +1,4 @@
export enum TypeKeys {
GAS_FETCH_ESTIMATES = 'GAS_FETCH_ESTIMATES',
GAS_SET_ESTIMATES = 'GAS_SET_ESTIMATES'
}

View File

@ -0,0 +1,3 @@
export * from './actionCreators';
export * from './actionTypes';
export * from './constants';

View File

@ -0,0 +1,31 @@
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
export type TStartOnboardSession = typeof startOnboardSession;
export function startOnboardSession(): interfaces.StartOnboardSessionAction {
return {
type: TypeKeys.START_ONBOARD_SESSION
};
}
export type TResumeSlide = typeof resumeSlide;
export function resumeSlide(slideNumber: number): interfaces.ResumeSlideAction {
return {
type: TypeKeys.RESUME_SLIDE,
slideNumber
};
}
export type TDecrementSlide = typeof decrementSlide;
export function decrementSlide(): interfaces.DecrementSlideAction {
return {
type: TypeKeys.DECREMENT_SLIDE
};
}
export type TIncrementSlide = typeof incrementSlide;
export function incrementSlide(): interfaces.IncrementSlideAction {
return {
type: TypeKeys.INCREMENT_SLIDE
};
}

View File

@ -0,0 +1,24 @@
import { TypeKeys } from './constants';
export interface StartOnboardSessionAction {
type: TypeKeys.START_ONBOARD_SESSION;
}
export interface ResumeSlideAction {
type: TypeKeys.RESUME_SLIDE;
slideNumber: number;
}
export interface DecrementSlideAction {
type: TypeKeys.DECREMENT_SLIDE;
}
export interface IncrementSlideAction {
type: TypeKeys.INCREMENT_SLIDE;
}
export type OnboardStatusAction =
| StartOnboardSessionAction
| ResumeSlideAction
| DecrementSlideAction
| IncrementSlideAction;

View File

@ -0,0 +1,6 @@
export enum TypeKeys {
START_ONBOARD_SESSION = 'START_ONBOARD_SESSION',
RESUME_SLIDE = 'RESUME_SLIDE',
DECREMENT_SLIDE = 'DECREMENT_SLIDE',
INCREMENT_SLIDE = 'INCREMENT_SLIDE'
}

View File

@ -0,0 +1,2 @@
export * from './actionTypes';
export * from './actionCreators';

View File

@ -1,12 +1,12 @@
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
import { fetchRates, CCResponse } from './actionPayloads';
import { CCResponse } from 'api/rates';
export type TFetchCCRates = typeof fetchCCRates;
export function fetchCCRates(symbols: string[] = []): interfaces.FetchCCRates {
export type TFetchCCRatesRequested = typeof fetchCCRatesRequested;
export function fetchCCRatesRequested(symbols: string[] = []): interfaces.FetchCCRatesRequested {
return {
type: TypeKeys.RATES_FETCH_CC,
payload: fetchRates(symbols)
type: TypeKeys.RATES_FETCH_CC_REQUESTED,
payload: symbols
};
}

View File

@ -1,9 +1,9 @@
import { TypeKeys } from './constants';
import { CCResponse } from './actionPayloads';
import { CCResponse } from 'api/rates';
export interface FetchCCRates {
type: TypeKeys.RATES_FETCH_CC;
payload: Promise<CCResponse>;
export interface FetchCCRatesRequested {
type: TypeKeys.RATES_FETCH_CC_REQUESTED;
payload: string[];
}
/*** Set rates ***/
@ -17,4 +17,4 @@ export interface FetchCCRatesFailed {
}
/*** Union Type ***/
export type RatesAction = FetchCCRates | FetchCCRatesSucceeded | FetchCCRatesFailed;
export type RatesAction = FetchCCRatesRequested | FetchCCRatesSucceeded | FetchCCRatesFailed;

View File

@ -1,5 +1,5 @@
export enum TypeKeys {
RATES_FETCH_CC = 'RATES_FETCH_CC',
RATES_FETCH_CC_REQUESTED = 'RATES_FETCH_CC_REQUESTED',
RATES_FETCH_CC_FAILED = 'RATES_FETCH_CC_FAILED',
RATES_FETCH_CC_SUCCEEDED = 'RATES_FETCH_CC_SUCCEEDED'
}

View File

@ -1,3 +1,2 @@
export * from './actionCreators';
export * from './actionTypes';
export * from './actionPayloads';

View File

@ -27,10 +27,10 @@ export function loadBityRatesSucceededSwap(
};
}
export type TLoadShapeshiftSucceededSwap = typeof loadShapeshiftRatesSucceededSwap;
export type TLoadShapeshiftRatesSucceededSwap = typeof loadShapeshiftRatesSucceededSwap;
export function loadShapeshiftRatesSucceededSwap(
payload
): interfaces.LoadShapshiftRatesSucceededSwapAction {
payload: interfaces.LoadShapeshiftRatesSucceededSwapAction['payload']
): interfaces.LoadShapeshiftRatesSucceededSwapAction {
return {
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_SUCCEEDED,
payload
@ -59,13 +59,27 @@ export function loadBityRatesRequestedSwap(): interfaces.LoadBityRatesRequestedS
};
}
export type TLoadShapeshiftRequestedSwap = typeof loadShapeshiftRatesRequestedSwap;
export function loadShapeshiftRatesRequestedSwap(): interfaces.LoadShapeshiftRequestedSwapAction {
export type TLoadShapeshiftRatesRequestedSwap = typeof loadShapeshiftRatesRequestedSwap;
export function loadShapeshiftRatesRequestedSwap(): interfaces.LoadShapeshiftRatesRequestedSwapAction {
return {
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED
};
}
export type TLoadBityRatesFailedSwap = typeof loadBityRatesFailedSwap;
export function loadBityRatesFailedSwap(): interfaces.LoadBityRatesFailedSwapAction {
return {
type: TypeKeys.SWAP_LOAD_BITY_RATES_FAILED
};
}
export type TLoadShapeshiftFailedSwap = typeof loadShapeshiftRatesFailedSwap;
export function loadShapeshiftRatesFailedSwap(): interfaces.LoadShapeshiftRatesFailedSwapAction {
return {
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_FAILED
};
}
export type TStopLoadBityRatesSwap = typeof stopLoadBityRatesSwap;
export function stopLoadBityRatesSwap(): interfaces.StopLoadBityRatesSwapAction {
return {

View File

@ -8,7 +8,7 @@ export interface Pairs {
}
export interface SwapInput {
id: string;
label: string;
amount: number | string;
}
@ -43,7 +43,7 @@ export interface LoadBityRatesSucceededSwapAction {
payload: ApiResponse;
}
export interface LoadShapshiftRatesSucceededSwapAction {
export interface LoadShapeshiftRatesSucceededSwapAction {
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_SUCCEEDED;
payload: ApiResponse;
}
@ -59,12 +59,18 @@ export interface RestartSwapAction {
export interface LoadBityRatesRequestedSwapAction {
type: TypeKeys.SWAP_LOAD_BITY_RATES_REQUESTED;
payload?: null;
}
export interface LoadShapeshiftRequestedSwapAction {
export interface LoadShapeshiftRatesRequestedSwapAction {
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED;
payload?: null;
}
export interface LoadBityRatesFailedSwapAction {
type: TypeKeys.SWAP_LOAD_BITY_RATES_FAILED;
}
export interface LoadShapeshiftRatesFailedSwapAction {
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_FAILED;
}
export interface ChangeStepSwapAction {
@ -240,12 +246,14 @@ export interface ShowLiteSendAction {
export type SwapAction =
| ChangeStepSwapAction
| InitSwap
| LoadBityRatesSucceededSwapAction
| LoadShapshiftRatesSucceededSwapAction
| DestinationAddressSwapAction
| RestartSwapAction
| LoadBityRatesRequestedSwapAction
| LoadShapeshiftRequestedSwapAction
| LoadBityRatesSucceededSwapAction
| LoadBityRatesFailedSwapAction
| LoadShapeshiftRatesRequestedSwapAction
| LoadShapeshiftRatesSucceededSwapAction
| LoadShapeshiftRatesFailedSwapAction
| StopLoadBityRatesSwapAction
| StopLoadShapeshiftRatesSwapAction
| BityOrderCreateRequestedSwapAction

View File

@ -7,6 +7,8 @@ export enum TypeKeys {
SWAP_RESTART = 'SWAP_RESTART',
SWAP_LOAD_BITY_RATES_REQUESTED = 'SWAP_LOAD_BITY_RATES_REQUESTED',
SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED = 'SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED',
SWAP_LOAD_BITY_RATES_FAILED = 'SWAP_LOAD_BITY_RATES_FAILED',
SWAP_LOAD_SHAPESHIFT_RATES_FAILED = 'SWAP_LOAD_SHAPESHIFT_RATES_FAILED',
SWAP_STOP_LOAD_BITY_RATES = 'SWAP_STOP_LOAD_BITY_RATES',
SWAP_STOP_LOAD_SHAPESHIFT_RATES = 'SWAP_STOP_LOAD_SHAPESHIFT_RATES',
SWAP_ORDER_TIME = 'SWAP_ORDER_TIME',

View File

@ -6,6 +6,7 @@ import {
SetValueFieldAction,
InputGasLimitAction,
InputGasPriceAction,
InputGasPriceIntentAction,
InputDataAction,
InputNonceAction,
ResetAction,
@ -25,6 +26,12 @@ const inputGasPrice = (payload: InputGasPriceAction['payload']) => ({
payload
});
type TInputGasPriceIntent = typeof inputGasPrice;
const inputGasPriceIntent = (payload: InputGasPriceIntentAction['payload']) => ({
type: TypeKeys.GAS_PRICE_INPUT_INTENT,
payload
});
type TInputNonce = typeof inputNonce;
const inputNonce = (payload: InputNonceAction['payload']) => ({
type: TypeKeys.NONCE_INPUT,
@ -74,11 +81,15 @@ const setGasPriceField = (payload: SetGasPriceFieldAction['payload']): SetGasPri
});
type TReset = typeof reset;
const reset = (): ResetAction => ({ type: TypeKeys.RESET });
const reset = (payload: ResetAction['payload'] = { include: {}, exclude: {} }): ResetAction => ({
type: TypeKeys.RESET,
payload
});
export {
TInputGasLimit,
TInputGasPrice,
TInputGasPriceIntent,
TInputNonce,
TInputData,
TSetGasLimitField,
@ -90,6 +101,7 @@ export {
TReset,
inputGasLimit,
inputGasPrice,
inputGasPriceIntent,
inputNonce,
inputData,
setGasLimitField,

View File

@ -5,23 +5,22 @@ import {
SetTokenToMetaAction
} from 'actions/transaction';
type TSetTokenBalance = typeof setTokenValue;
type TSetUnitMeta = typeof setUnitMeta;
type TSetTokenTo = typeof setTokenTo;
const setTokenTo = (payload: SetTokenToMetaAction['payload']): SetTokenToMetaAction => ({
export type TSetTokenTo = typeof setTokenTo;
export const setTokenTo = (payload: SetTokenToMetaAction['payload']): SetTokenToMetaAction => ({
type: TypeKeys.TOKEN_TO_META_SET,
payload
});
const setTokenValue = (payload: SetTokenValueMetaAction['payload']): SetTokenValueMetaAction => ({
export type TSetTokenValue = typeof setTokenValue;
export const setTokenValue = (
payload: SetTokenValueMetaAction['payload']
): SetTokenValueMetaAction => ({
type: TypeKeys.TOKEN_VALUE_META_SET,
payload
});
const setUnitMeta = (payload: SetUnitMetaAction['payload']): SetUnitMetaAction => ({
export type TSetUnitMeta = typeof setUnitMeta;
export const setUnitMeta = (payload: SetUnitMetaAction['payload']): SetUnitMetaAction => ({
type: TypeKeys.UNIT_META_SET,
payload
});
export { TSetUnitMeta, TSetTokenBalance, TSetTokenTo, setUnitMeta, setTokenValue, setTokenTo };

View File

@ -1,7 +1,8 @@
import {
TypeKeys,
EstimateGasFailedAction,
EstimateGasRequestedAction,
TypeKeys,
EstimateGasTimeoutAction,
EstimateGasSucceededAction,
GetFromRequestedAction,
GetFromSucceededAction,
@ -29,6 +30,11 @@ const estimateGasFailed = (): EstimateGasFailedAction => ({
type: TypeKeys.ESTIMATE_GAS_FAILED
});
type TEstimateGasTimedout = typeof estimateGasTimedout;
const estimateGasTimedout = (): EstimateGasTimeoutAction => ({
type: TypeKeys.ESTIMATE_GAS_TIMEDOUT
});
type TGetFromRequested = typeof getFromRequested;
const getFromRequested = (): GetFromRequestedAction => ({
type: TypeKeys.GET_FROM_REQUESTED
@ -63,6 +69,7 @@ const getNonceFailed = (): GetNonceFailedAction => ({
export {
estimateGasRequested,
estimateGasFailed,
estimateGasTimedout,
estimateGasSucceeded,
getFromRequested,
getFromSucceeded,
@ -73,6 +80,7 @@ export {
TEstimateGasRequested,
TEstimateGasFailed,
TEstimateGasSucceeded,
TEstimateGasTimedout,
TGetFromRequested,
TGetFromSucceeded,
TGetNonceRequested,

View File

@ -1,9 +1,8 @@
import {
SignTransactionFailedAction,
SignLocalTransactionRequestedAction,
SignWeb3TransactionRequestedAction,
SignLocalTransactionSucceededAction,
SignWeb3TransactionSucceededAction
SignWeb3TransactionSucceededAction,
SignTransactionRequestedAction
} from '../actionTypes';
import { TypeKeys } from '../constants';
@ -12,6 +11,12 @@ const signTransactionFailed = (): SignTransactionFailedAction => ({
type: TypeKeys.SIGN_TRANSACTION_FAILED
});
type TSignTransactionRequested = typeof signTransactionRequested;
const signTransactionRequested = (payload: SignTransactionRequestedAction['payload']) => ({
type: TypeKeys.SIGN_TRANSACTION_REQUESTED,
payload
});
type TSignLocalTransactionSucceeded = typeof signLocalTransactionSucceeded;
const signLocalTransactionSucceeded = (
payload: SignLocalTransactionSucceededAction['payload']
@ -20,14 +25,6 @@ const signLocalTransactionSucceeded = (
payload
});
type TSignLocalTransactionRequested = typeof signLocalTransactionRequested;
const signLocalTransactionRequested = (
payload: SignLocalTransactionRequestedAction['payload']
): SignLocalTransactionRequestedAction => ({
type: TypeKeys.SIGN_LOCAL_TRANSACTION_REQUESTED,
payload
});
type TSignWeb3TransactionSucceeded = typeof signWeb3TransactionSucceeded;
const signWeb3TransactionSucceeded = (
payload: SignWeb3TransactionSucceededAction['payload']
@ -36,23 +33,13 @@ const signWeb3TransactionSucceeded = (
payload
});
type TSignWeb3TransactionRequested = typeof signWeb3TransactionRequested;
const signWeb3TransactionRequested = (
payload: SignWeb3TransactionRequestedAction['payload']
): SignWeb3TransactionRequestedAction => ({
type: TypeKeys.SIGN_WEB3_TRANSACTION_REQUESTED,
payload
});
export {
signTransactionRequested,
signTransactionFailed,
signLocalTransactionSucceeded,
signLocalTransactionRequested,
signWeb3TransactionSucceeded,
signWeb3TransactionRequested,
TSignLocalTransactionSucceeded,
TSignLocalTransactionRequested,
TSignWeb3TransactionSucceeded,
TSignWeb3TransactionRequested,
TSignTransactionFailed
TSignTransactionFailed,
TSignTransactionRequested
};

View File

@ -7,6 +7,9 @@ import { SignAction } from './sign';
import { SwapAction } from './swap';
import { CurrentAction } from './current';
import { SendEverythingAction } from './sendEverything';
import { State as FieldState } from 'reducers/transaction/fields';
import { State as MetaState } from 'reducers/transaction/meta';
import { State as SignState } from 'reducers/transaction/sign';
export * from './broadcast';
export * from './fields';
@ -19,6 +22,18 @@ export * from './sendEverything';
export interface ResetAction {
type: TypeKeys.RESET;
payload: {
include: {
fields?: (keyof FieldState)[];
meta?: (keyof MetaState)[];
sign?: (keyof SignState)[];
};
exclude: {
fields?: (keyof FieldState)[];
meta?: (keyof MetaState)[];
sign?: (keyof SignState)[];
};
};
}
export type TransactionAction =

View File

@ -10,6 +10,10 @@ interface InputGasPriceAction {
type: TypeKeys.GAS_PRICE_INPUT;
payload: string;
}
interface InputGasPriceIntentAction {
type: TypeKeys.GAS_PRICE_INPUT_INTENT;
payload: string;
}
interface InputDataAction {
type: TypeKeys.DATA_FIELD_INPUT;
payload: string;
@ -52,7 +56,6 @@ interface SetToFieldAction {
payload: {
raw: string;
value: Address | null;
error?: string | null;
};
}
@ -85,6 +88,7 @@ type FieldAction =
export {
InputGasLimitAction,
InputGasPriceAction,
InputGasPriceIntentAction,
InputDataAction,
InputNonceAction,
SetGasLimitFieldAction,

View File

@ -7,7 +7,6 @@ interface SetTokenToMetaAction {
payload: {
raw: string;
value: Address | null;
error?: string | null;
};
}

View File

@ -11,6 +11,9 @@ interface EstimateGasSucceededAction {
interface EstimateGasFailedAction {
type: TypeKeys.ESTIMATE_GAS_FAILED;
}
interface EstimateGasTimeoutAction {
type: TypeKeys.ESTIMATE_GAS_TIMEDOUT;
}
interface GetFromRequestedAction {
type: TypeKeys.GET_FROM_REQUESTED;
}
@ -36,6 +39,7 @@ type NetworkAction =
| EstimateGasFailedAction
| EstimateGasRequestedAction
| EstimateGasSucceededAction
| EstimateGasTimeoutAction
| GetFromRequestedAction
| GetFromSucceededAction
| GetFromFailedAction
@ -47,6 +51,7 @@ export {
EstimateGasRequestedAction,
EstimateGasSucceededAction,
EstimateGasFailedAction,
EstimateGasTimeoutAction,
GetFromRequestedAction,
GetFromSucceededAction,
GetFromFailedAction,

View File

@ -8,8 +8,8 @@ import { TypeKeys } from 'actions/transaction/constants';
*/
/* Signing / Async actions */
interface SignLocalTransactionRequestedAction {
type: TypeKeys.SIGN_LOCAL_TRANSACTION_REQUESTED;
interface SignTransactionRequestedAction {
type: TypeKeys.SIGN_TRANSACTION_REQUESTED;
payload: EthTx;
}
interface SignLocalTransactionSucceededAction {
@ -17,10 +17,6 @@ interface SignLocalTransactionSucceededAction {
payload: { signedTransaction: Buffer; indexingHash: string; noVerify?: boolean }; // dont verify against fields, for pushTx
}
interface SignWeb3TransactionRequestedAction {
type: TypeKeys.SIGN_WEB3_TRANSACTION_REQUESTED;
payload: EthTx;
}
interface SignWeb3TransactionSucceededAction {
type: TypeKeys.SIGN_WEB3_TRANSACTION_SUCCEEDED;
payload: { transaction: Buffer; indexingHash: string; noVerify?: boolean };
@ -30,16 +26,14 @@ interface SignTransactionFailedAction {
}
type SignAction =
| SignLocalTransactionRequestedAction
| SignTransactionRequestedAction
| SignLocalTransactionSucceededAction
| SignWeb3TransactionRequestedAction
| SignWeb3TransactionSucceededAction
| SignTransactionFailedAction;
export {
SignLocalTransactionRequestedAction,
SignTransactionRequestedAction,
SignLocalTransactionSucceededAction,
SignWeb3TransactionRequestedAction,
SignWeb3TransactionSucceededAction,
SignTransactionFailedAction,
SignAction

View File

@ -2,6 +2,7 @@ export enum TypeKeys {
ESTIMATE_GAS_REQUESTED = 'ESTIMATE_GAS_REQUESTED',
ESTIMATE_GAS_SUCCEEDED = 'ESTIMATE_GAS_SUCCEEDED',
ESTIMATE_GAS_FAILED = 'ESTIMATE_GAS_FAILED',
ESTIMATE_GAS_TIMEDOUT = 'ESTIMATE_GAS_TIMEDOUT',
GET_FROM_REQUESTED = 'GET_FROM_REQUESTED',
GET_FROM_SUCCEEDED = 'GET_FROM_SUCCEEDED',
@ -11,9 +12,8 @@ export enum TypeKeys {
GET_NONCE_SUCCEEDED = 'GET_NONCE_SUCCEEDED',
GET_NONCE_FAILED = 'GET_NONCE_FAILED',
SIGN_WEB3_TRANSACTION_REQUESTED = 'SIGN_WEB3_TRANSACTION_REQUESTED',
SIGN_TRANSACTION_REQUESTED = 'SIGN_TRANSACTION_REQUESTED',
SIGN_WEB3_TRANSACTION_SUCCEEDED = 'SIGN_WEB3_TRANSACTION_SUCCEEDED',
SIGN_LOCAL_TRANSACTION_REQUESTED = 'SIGN_LOCAL_TRANSACTION_REQUESTED',
SIGN_LOCAL_TRANSACTION_SUCCEEDED = 'SIGN_LOCAL_TRANSACTION_SUCCEEDED',
SIGN_TRANSACTION_FAILED = 'SIGN_TRANSACTION_FAILED',
@ -29,6 +29,7 @@ export enum TypeKeys {
DATA_FIELD_INPUT = 'DATA_FIELD_INPUT',
GAS_LIMIT_INPUT = 'GAS_LIMIT_INPUT',
GAS_PRICE_INPUT = 'GAS_PRICE_INPUT',
GAS_PRICE_INPUT_INTENT = 'GAS_PRICE_INPUT_INTENT',
NONCE_INPUT = 'NONCE_INPUT',
DATA_FIELD_SET = 'DATA_FIELD_SET',

View File

@ -0,0 +1,35 @@
import * as interfaces from './actionTypes';
import { TypeKeys } from './constants';
export type TFetchTransactionData = typeof fetchTransactionData;
export function fetchTransactionData(txhash: string): interfaces.FetchTransactionDataAction {
return {
type: TypeKeys.TRANSACTIONS_FETCH_TRANSACTION_DATA,
payload: txhash
};
}
export type TSetTransactionData = typeof setTransactionData;
export function setTransactionData(
payload: interfaces.SetTransactionDataAction['payload']
): interfaces.SetTransactionDataAction {
return {
type: TypeKeys.TRANSACTIONS_SET_TRANSACTION_DATA,
payload
};
}
export type TResetTransactionData = typeof resetTransactionData;
export function resetTransactionData(): interfaces.ResetTransactionDataAction {
return { type: TypeKeys.TRANSACTIONS_RESET_TRANSACTION_DATA };
}
export type TAddRecentTransaction = typeof addRecentTransaction;
export function addRecentTransaction(
payload: interfaces.AddRecentTransactionAction['payload']
): interfaces.AddRecentTransactionAction {
return {
type: TypeKeys.TRANSACTIONS_ADD_RECENT_TRANSACTION,
payload
};
}

View File

@ -0,0 +1,33 @@
import { TypeKeys } from './constants';
import { SavedTransaction, TransactionData, TransactionReceipt } from 'types/transactions';
export interface FetchTransactionDataAction {
type: TypeKeys.TRANSACTIONS_FETCH_TRANSACTION_DATA;
payload: string;
}
export interface SetTransactionDataAction {
type: TypeKeys.TRANSACTIONS_SET_TRANSACTION_DATA;
payload: {
txhash: string;
data: TransactionData | null;
receipt: TransactionReceipt | null;
error: string | null;
};
}
export interface ResetTransactionDataAction {
type: TypeKeys.TRANSACTIONS_RESET_TRANSACTION_DATA;
}
export interface AddRecentTransactionAction {
type: TypeKeys.TRANSACTIONS_ADD_RECENT_TRANSACTION;
payload: SavedTransaction;
}
/*** Union Type ***/
export type TransactionsAction =
| FetchTransactionDataAction
| SetTransactionDataAction
| ResetTransactionDataAction
| AddRecentTransactionAction;

View File

@ -0,0 +1,7 @@
export enum TypeKeys {
TRANSACTIONS_FETCH_TRANSACTION_DATA = 'TRANSACTIONS_FETCH_TRANSACTION_DATA',
TRANSACTIONS_SET_TRANSACTION_DATA = 'TRANSACTIONS_SET_TRANSACTION_DATA',
TRANSACTIONS_SET_TRANSACTION_ERROR = 'TRANSACTIONS_SET_TRANSACTION_ERROR',
TRANSACTIONS_RESET_TRANSACTION_DATA = 'TRANSACTIONS_RESET_TRANSACTION_DATA',
TRANSACTIONS_ADD_RECENT_TRANSACTION = 'TRANSACTIONS_ADD_RECENT_TRANSACTION'
}

View File

@ -0,0 +1,3 @@
export * from './actionCreators';
export * from './actionTypes';
export * from './constants';

View File

@ -43,12 +43,25 @@ export function setWallet(value: IWallet): types.SetWalletAction {
};
}
export function setWalletPending(loadingStatus: boolean): types.SetWalletPendingAction {
return {
type: TypeKeys.WALLET_SET_PENDING,
payload: loadingStatus
};
}
export function setBalancePending(): types.SetBalancePendingAction {
return {
type: TypeKeys.WALLET_SET_BALANCE_PENDING
};
}
export function setPasswordPrompt(): types.SetPasswordPendingAction {
return {
type: TypeKeys.WALLET_SET_PASSWORD_PENDING
};
}
export type TSetBalance = typeof setBalanceFullfilled;
export function setBalanceFullfilled(value: Wei): types.SetBalanceFullfilledAction {
return {
@ -146,3 +159,10 @@ export function setWalletConfig(config: WalletConfig): types.SetWalletConfigActi
payload: config
};
}
export type TSetAccountBalance = typeof setAccountBalance;
export function setAccountBalance(): types.SetAccountBalanceAction {
return {
type: TypeKeys.WALLET_SET_ACCOUNT_BALANCE
};
}

View File

@ -32,6 +32,11 @@ export interface ResetWalletAction {
type: TypeKeys.WALLET_RESET;
}
export interface SetWalletPendingAction {
type: TypeKeys.WALLET_SET_PENDING;
payload: boolean;
}
/*** Set Balance ***/
export interface SetBalancePendingAction {
type: TypeKeys.WALLET_SET_BALANCE_PENDING;
@ -116,10 +121,19 @@ export interface SetWalletConfigAction {
payload: WalletConfig;
}
export interface SetPasswordPendingAction {
type: TypeKeys.WALLET_SET_PASSWORD_PENDING;
}
export interface SetAccountBalanceAction {
type: TypeKeys.WALLET_SET_ACCOUNT_BALANCE;
}
/*** Union Type ***/
export type WalletAction =
| UnlockPrivateKeyAction
| SetWalletAction
| SetWalletPendingAction
| ResetWalletAction
| SetBalancePendingAction
| SetBalanceFullfilledAction
@ -132,4 +146,6 @@ export type WalletAction =
| SetTokenBalanceRejectedAction
| ScanWalletForTokensAction
| SetWalletTokensAction
| SetWalletConfigAction;
| SetWalletConfigAction
| SetPasswordPendingAction
| SetAccountBalanceAction;

View File

@ -10,11 +10,15 @@ export enum TypeKeys {
WALLET_SET_TOKEN_BALANCES_PENDING = 'WALLET_SET_TOKEN_BALANCES_PENDING',
WALLET_SET_TOKEN_BALANCES_FULFILLED = 'WALLET_SET_TOKEN_BALANCES_FULFILLED',
WALLET_SET_TOKEN_BALANCES_REJECTED = 'WALLET_SET_TOKEN_BALANCES_REJECTED',
WALLET_SET_PENDING = 'WALLET_SET_PENDING',
WALLET_SET_NOT_PENDING = 'WALLET_SET_NOT_PENDING',
WALLET_SET_TOKEN_BALANCE_PENDING = 'WALLET_SET_TOKEN_BALANCE_PENDING',
WALLET_SET_TOKEN_BALANCE_FULFILLED = 'WALLET_SET_TOKEN_BALANCE_FULFILLED',
WALLET_SET_TOKEN_BALANCE_REJECTED = 'WALLET_SET_TOKEN_BALANCE_REJECTED',
WALLET_SCAN_WALLET_FOR_TOKENS = 'WALLET_SCAN_WALLET_FOR_TOKENS',
WALLET_SET_WALLET_TOKENS = 'WALLET_SET_WALLET_TOKENS',
WALLET_SET_CONFIG = 'WALLET_SET_CONFIG',
WALLET_RESET = 'WALLET_RESET'
WALLET_RESET = 'WALLET_RESET',
WALLET_SET_PASSWORD_PENDING = 'WALLET_SET_PASSWORD_PENDING',
WALLET_SET_ACCOUNT_BALANCE = 'WALLET_SET_ACCOUNT_BALANCE'
}

View File

@ -1,4 +1,4 @@
import bityConfig, { WhitelistedCoins } from 'config/bity';
import { WhitelistedCoins, bityConfig } from 'config';
import { checkHttpStatus, parseJSON, filter } from './utils';
import bitcoinIcon from 'assets/images/bitcoin.png';
import repIcon from 'assets/images/augur.png';
@ -29,10 +29,14 @@ const repOptions = {
name: 'Augur'
};
export interface MappedRates {
[key: string]: any;
}
export function getAllRates() {
const mappedRates = {};
const mappedRates: MappedRates = {};
return _getAllRates().then(bityRates => {
bityRates.objects.forEach(each => {
bityRates.objects.forEach((each: any) => {
const pairName = each.pair;
const from = { id: pairName.substring(0, 3) };
const to = { id: pairName.substring(3, 6) };

88
common/api/gas.ts Normal file
View File

@ -0,0 +1,88 @@
import { checkHttpStatus, parseJSON } from './utils';
import { Omit } from 'react-redux';
const MAX_GAS_FAST = 250;
interface RawGasEstimates {
safeLow: number;
standard: number;
fast: number;
fastest: number;
block_time: number;
blockNum: number;
}
export interface GasEstimates {
safeLow: number;
standard: number;
fast: number;
fastest: number;
time: number;
chainId: number;
isDefault: boolean;
}
interface GasExpressResponse {
block_time: number;
blockNum: number;
fast: number;
fastest: number;
safeLow: number;
standard: number;
}
export function fetchGasEstimates(): Promise<GasEstimates> {
return fetch('https://dev.blockscale.net/api/gasexpress.json', {
mode: 'cors'
})
.then(checkHttpStatus)
.then(parseJSON)
.then((res: GasExpressResponse) => {
// Make sure it looks like a raw gas estimate, and it has valid values
const keys: (keyof Omit<GasExpressResponse, 'block_time' | 'blockNum'>)[] = [
'safeLow',
'standard',
'fast',
'fastest'
];
keys.forEach(key => {
if (typeof res[key] !== 'number') {
throw new Error(
`Gas estimate API has invalid shape: Expected numeric key '${key}' in response, got '${
res[key]
}' instead`
);
}
});
// Make sure the estimate isn't totally crazy
const estimateRes = res as RawGasEstimates;
if (estimateRes.fast > MAX_GAS_FAST) {
throw new Error(
`Gas estimate response estimate too high: Max fast is ${MAX_GAS_FAST}, was given ${
estimateRes.fast
}`
);
}
if (
estimateRes.safeLow > estimateRes.standard ||
estimateRes.standard > estimateRes.fast ||
estimateRes.fast > estimateRes.fastest
) {
throw new Error(
`Gas esimates are in illogical order: should be safeLow < standard < fast < fastest, received ${
estimateRes.safeLow
} < ${estimateRes.standard} < ${estimateRes.fast} < ${estimateRes.fastest}`
);
}
return estimateRes;
})
.then((res: RawGasEstimates) => ({
...res,
time: Date.now(),
chainId: 1,
isDefault: false
}));
}

View File

@ -1,14 +1,56 @@
import { handleJSONResponse } from 'api/utils';
interface IRateSymbols {
symbols: {
all: TAllSymbols;
fiat: TFiatSymbols;
coinAndToken: TCoinAndTokenSymbols;
};
isFiat: isFiat;
}
export const rateSymbols: Symbols = ['USD', 'EUR', 'GBP', 'BTC', 'CHF', 'REP', 'ETH'];
type isFiat = (rate: string) => boolean;
export type TAllSymbols = (keyof ISymbol)[];
export type TFiatSymbols = (keyof IFiatSymbols)[];
export type TCoinAndTokenSymbols = (keyof ICoinAndTokenSymbols)[];
interface ISymbol {
USD: number;
EUR: number;
GBP: number;
CHF: number;
BTC: number;
ETH: number;
REP: number;
}
interface IFiatSymbols {
USD: number;
EUR: number;
GBP: number;
CHF: number;
}
interface ICoinAndTokenSymbols {
BTC: number;
ETH: number;
REP: number;
}
const fiat: TFiatSymbols = ['USD', 'EUR', 'GBP', 'CHF'];
const coinAndToken: TCoinAndTokenSymbols = ['BTC', 'ETH', 'REP'];
export const rateSymbols: IRateSymbols = {
symbols: {
all: [...fiat, ...coinAndToken],
fiat,
coinAndToken
},
isFiat: (rate: string) => (fiat as string[]).includes(rate)
};
export type Symbols = (keyof ISymbol)[];
// TODO - internationalize
const ERROR_MESSAGE = 'Could not fetch rate data.';
const CCApi = 'https://min-api.cryptocompare.com';
const CCRates = (symbols: string[]) => {
const tsyms = rateSymbols.concat(symbols as any).join(',');
const tsyms = rateSymbols.symbols.all.concat(symbols as any).join(',');
return `${CCApi}/data/price?fsym=ETH&tsyms=${tsyms}`;
};
@ -16,16 +58,6 @@ export interface CCResponse {
[symbol: string]: ISymbol;
}
interface ISymbol {
USD: number;
EUR: number;
GBP: number;
BTC: number;
CHF: number;
REP: number;
ETH: number;
}
interface IRates extends ISymbol {
Response?: 'Error';
}
@ -45,7 +77,7 @@ export const fetchRates = (symbols: string[] = []): Promise<CCResponse> =>
return symbols.reduce(
(eqRates, sym: keyof ISymbol) => {
if (rates[sym]) {
eqRates[sym] = rateSymbols.reduce(
eqRates[sym] = rateSymbols.symbols.all.reduce(
(symRates, rateSym) => {
symRates[rateSym] = 1 / rates[sym] * rates[rateSym];
return symRates;
@ -60,10 +92,10 @@ export const fetchRates = (symbols: string[] = []): Promise<CCResponse> =>
USD: rates.USD,
EUR: rates.EUR,
GBP: rates.GBP,
BTC: rates.BTC,
CHF: rates.CHF,
REP: rates.REP,
ETH: 1
BTC: rates.BTC,
ETH: 1,
REP: rates.REP
}
} as CCResponse
);

View File

@ -1,5 +1,8 @@
import { checkHttpStatus, parseJSON } from 'api/utils';
const SHAPESHIFT_API_KEY =
'8abde0f70ca69d5851702d57b10305705d7333e93263124cc2a2649dab7ff9cf86401fc8de7677e8edcd0e7f1eed5270b1b49be8806937ef95d64839e319e6d9';
const SHAPESHIFT_BASE_URL = 'https://shapeshift.io';
export const SHAPESHIFT_TOKEN_WHITELIST = [
@ -25,21 +28,64 @@ export const SHAPESHIFT_TOKEN_WHITELIST = [
];
export const SHAPESHIFT_WHITELIST = [...SHAPESHIFT_TOKEN_WHITELIST, 'ETH', 'ETC', 'BTC'];
interface IPairData {
limit: number;
maxLimit: number;
min: number;
minerFee: number;
pair: string;
rate: string;
}
interface IExtraPairData {
status: string;
image: string;
name: string;
}
interface IAvailablePairData {
[pairName: string]: IExtraPairData;
}
interface ShapeshiftMarketInfo {
rate: string;
limit: number;
pair: string;
maxLimit: number;
min: number;
minerFee: number;
}
interface TokenMap {
[pairName: string]: {
id: string;
rate: string;
limit: number;
min: number;
options: (IExtraPairData & { id: string })[];
};
}
class ShapeshiftService {
public whitelist = SHAPESHIFT_WHITELIST;
private url = SHAPESHIFT_BASE_URL;
private apiKey = '0ca1ccd50b708a3f8c02327f0caeeece06d3ddc1b0ac749a987b453ee0f4a29bdb5da2e53bc35e57fb4bb7ae1f43c93bb098c3c4716375fc1001c55d8c94c160';
private apiKey = SHAPESHIFT_API_KEY;
private postHeaders = {
'Content-Type': 'application/json'
};
public checkStatus(address) {
public checkStatus(address: string) {
return fetch(`${this.url}/txStat/${address}`)
.then(checkHttpStatus)
.then(parseJSON);
}
public sendAmount(withdrawal, originKind, destinationKind, destinationAmount) {
public sendAmount(
withdrawal: string,
originKind: string,
destinationKind: string,
destinationAmount: number
) {
const pair = `${originKind.toLowerCase()}_${destinationKind.toLowerCase()}`;
return fetch(`${this.url}/sendamount`, {
@ -53,7 +99,15 @@ class ShapeshiftService {
headers: new Headers(this.postHeaders)
})
.then(checkHttpStatus)
.then(parseJSON);
.then(parseJSON)
.catch(err => {
// CORS rejection, meaning metamask don't want us
if (err.name === 'TypeError') {
throw new Error(
'Shapeshift has blocked this request, visit shapeshift.io for more information or contact support'
);
}
});
}
public getCoins() {
@ -70,7 +124,7 @@ class ShapeshiftService {
return mappedRates;
};
private getPairRates(marketInfo) {
private getPairRates(marketInfo: ShapeshiftMarketInfo[]) {
const filteredMarketInfo = marketInfo.filter(obj => {
const { pair } = obj;
const pairArr = pair.split('_');
@ -86,7 +140,7 @@ class ShapeshiftService {
return pairRates;
}
private async checkAvl(pairRates) {
private async checkAvl(pairRates: IPairData[]) {
const avlCoins = await this.getAvlCoins();
const mapAvl = pairRates.map(p => {
const { pair } = p;
@ -110,7 +164,8 @@ class ShapeshiftService {
};
}
});
return mapAvl;
const filered = mapAvl.filter(v => v);
return filered as (IPairData & IAvailablePairData)[];
}
private getAvlCoins() {
@ -119,7 +174,7 @@ class ShapeshiftService {
.then(parseJSON);
}
private getSinglePairRate(pair) {
private getSinglePairRate(pair: string) {
return fetch(`${this.url}/rate/${pair}`)
.then(checkHttpStatus)
.then(parseJSON);
@ -131,12 +186,12 @@ class ShapeshiftService {
.then(parseJSON);
}
private isWhitelisted(coin) {
private isWhitelisted(coin: string) {
return this.whitelist.includes(coin);
}
private mapMarketInfo(marketInfo) {
const tokenMap = {};
private mapMarketInfo(marketInfo: (IPairData & IAvailablePairData)[]) {
const tokenMap: TokenMap = {};
marketInfo.forEach(m => {
const originKind = m.pair.substring(0, 3);
const destinationKind = m.pair.substring(4, 7);

Binary file not shown.

0
common/assets/fonts/Lato-Bold.woff Executable file → Normal file
View File

Binary file not shown.

Binary file not shown.

0
common/assets/fonts/Lato-Light.woff Executable file → Normal file
View File

Binary file not shown.

Binary file not shown.

0
common/assets/fonts/Lato-Regular.woff Executable file → Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,36 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<font id="social-media" horiz-adv-x="256">
<font-face font-family="social-media"
units-per-em="256" ascent="256"
descent="0" />
<missing-glyph horiz-adv-x="0" />
<glyph glyph-name="logo-facebook"
unicode="&#xEA02;"
horiz-adv-x="256" d="M234.6666666666667 256H21.3333333333333C9.5466666666667 256 0 246.4533333333333 0 234.6666666666667V21.3333333333333C0 9.5466666666667 9.5466666666667 0 21.3333333333333 0H138.6666666666667V96H106.6666666666667V138.6666666666667H138.6666666666667V166.2613333333334C138.6666666666667 199.328 158.8586666666667 217.3333333333334 188.3626666666667 217.3333333333334C202.496 217.3333333333334 214.6346666666667 216.2773333333333 218.176 215.808V181.248L197.7173333333333 181.2373333333334C181.6746666666667 181.2373333333334 178.5706666666667 173.6106666666667 178.5706666666667 162.432V138.6666666666667H225.9306666666667L215.264 96H178.5706666666667V0H234.6666666666667C246.4533333333333 0 256 9.5466666666667 256 21.3333333333333V234.6666666666667C256 246.4533333333333 246.4533333333333 256 234.6666666666667 256z" />
<glyph glyph-name="logo-reddit"
unicode="&#xEA03;"
horiz-adv-x="256" d="M256 130.1333333333333C256 147.2 242.1333333333334 161.0666666666667 225.0666666666667 161.0666666666667C217.6 161.0666666666667 211.2 158.9333333333333 205.8666666666667 154.6666666666667C186.6666666666667 166.4 163.2 173.8666666666667 137.6 174.9333333333333L150.4 216.5333333333333L186.6666666666667 208C187.7333333333334 195.2 198.4 184.5333333333333 212.2666666666667 184.5333333333333C226.1333333333334 184.5333333333333 237.8666666666667 196.2666666666667 237.8666666666667 210.1333333333333C237.8666666666667 224 226.1333333333334 235.7333333333333 212.2666666666667 235.7333333333333C202.6666666666667 235.7333333333333 194.1333333333334 230.4 189.8666666666667 221.8666666666667L147.2 231.4666666666667C144 232.5333333333333 139.7333333333334 230.4 138.6666666666667 227.2L122.6666666666667 174.9333333333333C96 173.8666666666667 69.3333333333333 167.4666666666667 50.1333333333333 154.6666666666667C44.8 158.9333333333333 38.4 161.0666666666667 30.9333333333333 161.0666666666667C13.8666666666667 161.0666666666667 0 147.2 0 130.1333333333333C0 119.4666666666667 5.3333333333333 109.8666666666667 12.8 104.5333333333333C12.8 102.4 12.8 99.2 12.8 97.0666666666667C12.8 75.7333333333333 25.6 56.5333333333333 48 41.6C69.3333333333333 27.7333333333333 98.1333333333333 20.2666666666667 128 20.2666666666667C157.8666666666667 20.2666666666667 186.6666666666667 27.7333333333333 208 41.6C230.4 56.5333333333333 243.2 75.7333333333333 243.2 97.0666666666667C243.2 99.2 243.2 101.3333333333333 243.2 103.4666666666667C250.6666666666667 109.8666666666667 256 119.4666666666667 256 130.1333333333333zM213.3333333333333 221.8666666666667C219.7333333333333 221.8666666666667 225.0666666666667 216.5333333333333 225.0666666666667 210.1333333333333C225.0666666666667 203.7333333333334 219.7333333333333 198.4 213.3333333333333 198.4S201.6 203.7333333333334 201.6 210.1333333333333C201.6 216.5333333333333 206.9333333333333 221.8666666666667 213.3333333333333 221.8666666666667zM72.5333333333333 110.9333333333333C72.5333333333333 120.5333333333333 81.0666666666667 128 89.6 128C99.2 128 106.6666666666667 119.4666666666667 106.6666666666667 110.9333333333333S99.2 93.8666666666667 89.6 93.8666666666667C81.0666666666667 93.8666666666667 72.5333333333333 101.3333333333333 72.5333333333333 110.9333333333333zM170.6666666666667 60.8C162.1333333333333 52.2666666666667 148.2666666666667 48 129.0666666666667 48C129.0666666666667 48 129.0666666666667 48 129.0666666666667 48C129.0666666666667 48 129.0666666666667 48 129.0666666666667 48C109.8666666666667 48 96 52.2666666666667 87.4666666666667 60.8C84.2666666666667 64 84.2666666666667 68.2666666666667 87.4666666666667 70.4C90.6666666666667 73.6 94.9333333333333 73.6 97.0666666666667 70.4C103.4666666666667 64 114.1333333333333 60.8 129.0666666666667 60.8C129.0666666666667 60.8 129.0666666666667 60.8 129.0666666666667 60.8C129.0666666666667 60.8 129.0666666666667 60.8 129.0666666666667 60.8C144 60.8 154.6666666666667 64 161.0666666666667 70.4C164.2666666666667 73.6 168.5333333333333 73.6 170.6666666666667 70.4C172.8 67.2 172.8 62.9333333333333 170.6666666666667 60.8zM166.4 93.8666666666667C156.8 93.8666666666667 148.2666666666667 101.3333333333333 148.2666666666667 110.9333333333333S156.8 128 166.4 128C176 128 183.4666666666667 119.4666666666667 183.4666666666667 110.9333333333333S176 93.8666666666667 166.4 93.8666666666667z" />
<glyph glyph-name="logo-github"
unicode="&#xEA04;"
horiz-adv-x="256" d="M128 252.8C57.6 252.8 0 195.2 0 124.8C0 68.2666666666667 36.2666666666667 20.2666666666667 87.4666666666667 3.2C93.8666666666667 2.1333333333333 96 6.4 96 9.6C96 12.8 96 20.2666666666667 96 30.9333333333333C60.8 23.4666666666667 53.3333333333333 48 53.3333333333333 48C48 62.9333333333333 39.4666666666667 67.2 39.4666666666667 67.2C26.6666666666667 74.6666666666667 39.4666666666667 74.6666666666667 39.4666666666667 74.6666666666667C52.2666666666667 73.6 58.6666666666667 61.8666666666667 58.6666666666667 61.8666666666667C70.4 42.6666666666667 88.5333333333333 48 96 51.2C97.0666666666667 59.7333333333334 100.2666666666667 65.0666666666667 104.5333333333333 68.2666666666667C75.7333333333333 71.4666666666667 45.8666666666667 82.1333333333334 45.8666666666667 131.2C45.8666666666667 145.0666666666667 51.2 156.8 58.6666666666667 165.3333333333334C58.6666666666667 169.6 53.3333333333333 182.4 60.8 199.4666666666667C60.8 199.4666666666667 71.4666666666667 202.6666666666667 96 186.6666666666667C106.6666666666667 189.8666666666667 117.3333333333333 190.9333333333333 128 190.9333333333333C138.6666666666667 190.9333333333333 149.3333333333334 189.8666666666667 160 186.6666666666667C184.5333333333333 203.7333333333334 195.2 199.4666666666667 195.2 199.4666666666667C202.6666666666667 181.3333333333334 197.3333333333333 168.5333333333333 196.2666666666667 165.3333333333334C204.8 156.8 209.0666666666667 145.0666666666667 209.0666666666667 131.2C209.0666666666667 82.1333333333334 179.2 71.4666666666667 150.4 68.2666666666667C154.6666666666667 64 158.9333333333333 56.5333333333334 158.9333333333333 44.8C158.9333333333333 27.7333333333334 158.9333333333333 13.8666666666667 158.9333333333333 9.6C158.9333333333333 6.4 161.0666666666667 2.1333333333334 167.4666666666667 3.2C218.6666666666667 20.2666666666667 254.9333333333334 68.2666666666667 254.9333333333334 124.8C256 195.2 198.4 252.8 128 252.8z" />
<glyph glyph-name="logo-twitter"
unicode="&#xEA05;"
horiz-adv-x="256" d="M256 206.9333333333333C246.4 202.6666666666667 236.8 199.4666666666667 226.1333333333334 198.4C236.8 204.8 245.3333333333333 215.4666666666667 249.6 227.2C238.9333333333334 220.8 228.2666666666667 216.5333333333333 216.5333333333333 214.4C206.9333333333333 225.0666666666667 193.0666666666667 231.4666666666667 178.1333333333333 231.4666666666667C149.3333333333333 231.4666666666667 125.8666666666667 208 125.8666666666667 179.2C125.8666666666667 174.9333333333333 125.8666666666667 170.6666666666667 126.9333333333333 167.4666666666667C82.1333333333333 169.6 43.7333333333333 190.9333333333333 18.1333333333333 222.9333333333333C12.8 214.4 10.6666666666667 205.8666666666667 10.6666666666667 196.2666666666667C10.6666666666667 178.1333333333333 20.2666666666667 162.1333333333333 34.1333333333333 152.5333333333334C25.6 152.5333333333334 17.0666666666667 154.6666666666667 10.6666666666667 158.9333333333333C10.6666666666667 158.9333333333333 10.6666666666667 158.9333333333333 10.6666666666667 157.8666666666667C10.6666666666667 132.2666666666667 28.8 110.9333333333333 52.2666666666667 106.6666666666667C48 105.6 43.7333333333333 104.5333333333334 38.4 104.5333333333334C35.2 104.5333333333334 32 104.5333333333334 28.8 105.6C35.2 84.2666666666667 54.4 69.3333333333334 77.8666666666667 69.3333333333334C59.7333333333333 55.4666666666667 37.3333333333333 46.9333333333334 12.8 46.9333333333334C8.5333333333333 46.9333333333334 4.2666666666667 46.9333333333334 0 48C23.4666666666667 33.0666666666667 51.2 24.5333333333334 80 24.5333333333334C177.0666666666667 24.5333333333334 229.3333333333333 104.5333333333334 229.3333333333333 173.8666666666667C229.3333333333333 176 229.3333333333333 178.1333333333333 229.3333333333333 180.2666666666667C240 187.7333333333334 248.5333333333334 197.3333333333334 256 206.9333333333333z" />
<glyph glyph-name="logo-linkedin"
unicode="&#xEA06;"
horiz-adv-x="256" d="M245.3333333333333 256H10.6666666666667C4.2666666666667 256 0 251.7333333333333 0 245.3333333333334V10.6666666666667C0 4.2666666666667 4.2666666666667 0 10.6666666666667 0H245.3333333333333C251.7333333333333 0 256 4.2666666666667 256 10.6666666666667V245.3333333333334C256 251.7333333333333 251.7333333333334 256 245.3333333333333 256zM75.7333333333333 37.3333333333333H38.4V160H76.8V37.3333333333333zM56.5333333333333 177.0666666666667C44.8 177.0666666666667 34.1333333333333 186.6666666666667 34.1333333333333 199.4666666666667C34.1333333333333 211.2 43.7333333333333 221.8666666666667 56.5333333333333 221.8666666666667C68.2666666666667 221.8666666666667 78.9333333333333 212.2666666666667 78.9333333333333 199.4666666666667C78.9333333333333 186.6666666666667 69.3333333333333 177.0666666666667 56.5333333333333 177.0666666666667zM218.6666666666667 37.3333333333333H180.2666666666667V97.0666666666667C180.2666666666667 110.9333333333333 180.2666666666667 129.0666666666667 161.0666666666667 129.0666666666667C140.8 129.0666666666667 138.6666666666667 114.1333333333333 138.6666666666667 98.1333333333333V37.3333333333333H100.2666666666667V160H136.5333333333333V142.9333333333333H136.5333333333333C141.8666666666667 152.5333333333333 153.6 162.1333333333333 172.8 162.1333333333333C211.2 162.1333333333333 218.6666666666667 136.5333333333334 218.6666666666667 103.4666666666667V37.3333333333333z" />
<glyph glyph-name="logo-slack"
unicode="&#xEA07;"
horiz-adv-x="256" d="M116.2231466666667 106.05504L105.0436266666667 139.43168L139.43168 150.9499733333333L150.6112 117.5733333333334L116.2231466666667 106.05504zM116.2231466666667 106.05504L105.0436266666667 139.43168L139.43168 150.9499733333333L150.6112 117.5733333333334L116.2231466666667 106.05504zM245.3333333333333 163.2C218.6666666666667 250.6666666666667 180.2666666666667 272 92.8 245.3333333333334C5.3333333333333 218.6666666666667 -16 180.2666666666667 10.6666666666667 92.8C37.3333333333333 5.3333333333334 74.6666666666667 -16 163.2 10.6666666666667C250.6666666666667 37.3333333333333 272 75.7333333333334 245.3333333333333 163.2zM200.5333333333333 105.6L183.4666666666667 100.2666666666667L188.8 83.2C190.9333333333333 75.7333333333334 187.7333333333334 68.2666666666667 180.2666666666667 66.1333333333334C179.2 66.1333333333334 177.0666666666667 65.0666666666667 176 65.0666666666667C170.6666666666667 65.0666666666667 165.3333333333334 68.2666666666667 164.2666666666667 73.6L158.9333333333333 90.6666666666667L124.8 78.9333333333333L130.1333333333333 61.8666666666667C132.2666666666667 54.4 129.0666666666667 46.9333333333333 121.6 44.8C120.5333333333333 44.8 118.4 43.7333333333334 117.3333333333333 43.7333333333334C112 43.7333333333334 106.6666666666667 46.9333333333333 105.6 52.2666666666667L100.2666666666667 69.3333333333333L83.2 64C82.1333333333333 64 80 62.9333333333333 78.9333333333333 62.9333333333333C73.6 62.9333333333333 68.2666666666667 66.1333333333333 67.2 71.4666666666667C64 82.1333333333333 67.2 89.6 74.6666666666667 91.7333333333334L91.7333333333333 97.0666666666667L81.0666666666667 130.1333333333334L64 124.8C62.9333333333333 124.8 60.8 123.7333333333334 59.7333333333333 123.7333333333334C54.4 123.7333333333334 49.0666666666667 126.9333333333333 48 132.2666666666667C45.8666666666667 139.7333333333334 49.0666666666667 147.2 56.5333333333333 149.3333333333334L73.6 154.6666666666667L66.1333333333333 172.8C64 179.2 67.2 186.6666666666667 74.6666666666667 189.8666666666667C81.0666666666667 192 88.5333333333333 187.7333333333334 91.7333333333333 181.3333333333334L97.0666666666667 164.2666666666667L131.2 176L125.8666666666667 192C123.7333333333333 199.4666666666667 126.9333333333333 206.9333333333333 134.4 209.0666666666667C141.8666666666667 211.2 149.3333333333334 208 151.4666666666667 200.5333333333333L156.8 183.4666666666667L173.8666666666667 188.8C180.2666666666667 192 187.7333333333334 187.7333333333334 189.8666666666667 181.3333333333334C192 173.8666666666667 188.8 166.4 181.3333333333333 164.2666666666667L164.2666666666667 158.9333333333333L174.9333333333333 125.8666666666667L192 131.2C199.4666666666667 133.3333333333334 206.9333333333333 130.1333333333333 209.0666666666666 122.6666666666667C211.2 116.2666666666667 208 108.8 200.5333333333333 105.6z" />
<glyph glyph-name="logo-medium"
unicode="&#xEA08;"
horiz-adv-x="256" d="M245.3333333333333 256H10.6666666666667A10.666666666666666 10.666666666666666 0 0 1 0 245.3333333333334V10.6666666666667A10.666666666666666 10.666666666666666 0 0 1 10.6666666666667 0H245.3333333333333A10.666666666666666 10.666666666666666 0 0 1 256 10.6666666666667V245.3333333333334A10.666666666666666 10.666666666666666 0 0 1 245.3333333333333 256zM212.672 195.3493333333333L198.944 182.1866666666667A4.010666666666666 4.010666666666666 0 0 1 197.4186666666667 178.336V81.6106666666667A4.010666666666666 4.010666666666666 0 0 1 198.944 77.76L212.352 64.5973333333334V61.7066666666667H144.9173333333333V64.5973333333334L158.784 78.08C160.1493333333333 79.4453333333333 160.1493333333333 79.8506666666667 160.1493333333333 81.9306666666667V160.1066666666667L121.5253333333333 61.9733333333334H116.3093333333333L71.3706666666667 160.1066666666667V94.368A9.066666666666666 9.066666666666666 0 0 1 73.856 86.8266666666667L91.9253333333333 64.9173333333333V62.0266666666666H40.7253333333333V64.9173333333333L58.7626666666667 86.8266666666667A8.746666666666666 8.746666666666666 0 0 1 61.088 94.368V170.3786666666667A6.666666666666666 6.666666666666666 0 0 1 58.9546666666667 176L42.8693333333333 195.3493333333333V198.24H92.7253333333333L131.264 113.7173333333333L165.1413333333333 198.24H212.672z" />
<glyph glyph-name="logo-github-2"
unicode="&#xEA09;"
horiz-adv-x="256" d="M128 252.8C57.6 252.8 0 195.2 0 124.8C0 68.2666666666667 36.2666666666667 20.2666666666667 87.4666666666667 3.2C93.8666666666667 2.1333333333333 96 6.4 96 9.6C96 12.8 96 20.2666666666667 96 30.9333333333333C60.8 23.4666666666667 53.3333333333333 48 53.3333333333333 48C48 62.9333333333333 39.4666666666667 67.2 39.4666666666667 67.2C26.6666666666667 74.6666666666667 39.4666666666667 74.6666666666667 39.4666666666667 74.6666666666667C52.2666666666667 73.6 58.6666666666667 61.8666666666667 58.6666666666667 61.8666666666667C70.4 42.6666666666667 88.5333333333333 48 96 51.2C97.0666666666667 59.7333333333334 100.2666666666667 65.0666666666667 104.5333333333333 68.2666666666667C75.7333333333333 71.4666666666667 45.8666666666667 82.1333333333334 45.8666666666667 131.2C45.8666666666667 145.0666666666667 51.2 156.8 58.6666666666667 165.3333333333334C58.6666666666667 169.6 53.3333333333333 182.4 60.8 199.4666666666667C60.8 199.4666666666667 71.4666666666667 202.6666666666667 96 186.6666666666667C106.6666666666667 189.8666666666667 117.3333333333333 190.9333333333333 128 190.9333333333333C138.6666666666667 190.9333333333333 149.3333333333334 189.8666666666667 160 186.6666666666667C184.5333333333333 203.7333333333334 195.2 199.4666666666667 195.2 199.4666666666667C202.6666666666667 181.3333333333334 197.3333333333333 168.5333333333333 196.2666666666667 165.3333333333334C204.8 156.8 209.0666666666667 145.0666666666667 209.0666666666667 131.2C209.0666666666667 82.1333333333334 179.2 71.4666666666667 150.4 68.2666666666667C154.6666666666667 64 158.9333333333333 56.5333333333334 158.9333333333333 44.8C158.9333333333333 27.7333333333334 158.9333333333333 13.8666666666667 158.9333333333333 9.6C158.9333333333333 6.4 161.0666666666667 2.1333333333334 167.4666666666667 3.2C218.6666666666667 20.2666666666667 254.9333333333334 68.2666666666667 254.9333333333334 124.8C256 195.2 198.4 252.8 128 252.8z" />
</font>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
<g class="nc-icon-wrapper" fill="#000000">
<path d="M38 12.83L35.17 10 24 21.17 12.83 10 10 12.83 21.17 24 10 35.17 12.83 38 24 26.83 35.17 38 38 35.17 26.83 24z"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 79.536 79.536' style='enable-background:new 0 0 79.536 79.536;' xml:space='preserve'><path fill='#999' d='M39.769,0C17.8,0,0,17.8,0,39.768c0,21.965,17.8,39.768,39.769,39.768 c21.965,0,39.768-17.803,39.768-39.768C79.536,17.8,61.733,0,39.769,0z M34.142,58.513L15.397,39.768l7.498-7.498l11.247,11.247 l22.497-22.493l7.498,7.498L34.142,58.513z'/></svg>

Before

Width:  |  Height:  |  Size: 602 B

View File

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="20px" height="20px" viewBox="0 0 528.899 528.899" style="enable-background:new 0 0 528.899 528.899;" xml:space="preserve"><path fill="#21a4ce" d="M328.883,89.125l107.59,107.589l-272.34,272.34L56.604,361.465L328.883,89.125z M518.113,63.177l-47.981-47.981 c-18.543-18.543-48.653-18.543-67.259,0l-45.961,45.961l107.59,107.59l53.611-53.611 C532.495,100.753,532.495,77.559,518.113,63.177z M0.3,512.69c-1.958,8.812,5.998,16.708,14.811,14.565l119.891-29.069 L27.473,390.597L0.3,512.69z"/></svg>

Before

Width:  |  Height:  |  Size: 761 B

View File

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 511.626 511.626' style='enable-background:new 0 0 511.626 511.626;' xml:space='preserve'><path fill='#999' d='M505.918,236.117c-26.651-43.587-62.485-78.609-107.497-105.065c-45.015-26.457-92.549-39.687-142.608-39.687 c-50.059,0-97.595,13.225-142.61,39.687C68.187,157.508,32.355,192.53,5.708,236.117C1.903,242.778,0,249.345,0,255.818 c0,6.473,1.903,13.04,5.708,19.699c26.647,43.589,62.479,78.614,107.495,105.064c45.015,26.46,92.551,39.68,142.61,39.68 c50.06,0,97.594-13.176,142.608-39.536c45.012-26.361,80.852-61.432,107.497-105.208c3.806-6.659,5.708-13.223,5.708-19.699 C511.626,249.345,509.724,242.778,505.918,236.117z M194.568,158.03c17.034-17.034,37.447-25.554,61.242-25.554 c3.805,0,7.043,1.336,9.709,3.999c2.662,2.664,4,5.901,4,9.707c0,3.809-1.338,7.044-3.994,9.704 c-2.662,2.667-5.902,3.999-9.708,3.999c-16.368,0-30.362,5.808-41.971,17.416c-11.613,11.615-17.416,25.603-17.416,41.971 c0,3.811-1.336,7.044-3.999,9.71c-2.667,2.668-5.901,3.999-9.707,3.999c-3.809,0-7.044-1.334-9.71-3.999 c-2.667-2.666-3.999-5.903-3.999-9.71C169.015,195.482,177.535,175.065,194.568,158.03z M379.867,349.04 c-38.164,23.12-79.514,34.687-124.054,34.687c-44.539,0-85.889-11.56-124.051-34.687s-69.901-54.2-95.215-93.222 c28.931-44.921,65.19-78.518,108.777-100.783c-11.61,19.792-17.417,41.207-17.417,64.236c0,35.216,12.517,65.329,37.544,90.362 s55.151,37.544,90.362,37.544c35.214,0,65.329-12.518,90.362-37.544s37.545-55.146,37.545-90.362 c0-23.029-5.808-44.447-17.419-64.236c43.585,22.265,79.846,55.865,108.776,100.783C449.767,294.84,418.031,325.913,379.867,349.04 z'/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px'
viewBox='0 0 511.626 511.627' style='enable-background:new 0 0 511.626 511.627;'>
<path fill='#999'
d='M361.161,291.652c15.037-21.796,22.56-45.922,22.56-72.375c0-7.422-0.76-15.417-2.286-23.984l-79.938,143.321 C326.235,329.101,346.125,313.438,361.161,291.652z'/>
<path fill='#999'
d='M372.872,94.221c0.191-0.378,0.28-1.235,0.28-2.568c0-3.237-1.522-5.802-4.571-7.715c-0.568-0.38-2.423-1.475-5.568-3.287 c-3.138-1.805-6.14-3.567-8.989-5.282c-2.854-1.713-5.989-3.472-9.422-5.28c-3.426-1.809-6.375-3.284-8.846-4.427 c-2.479-1.141-4.189-1.713-5.141-1.713c-3.426,0-6.092,1.525-7.994,4.569l-15.413,27.696c-17.316-3.234-34.451-4.854-51.391-4.854 c-51.201,0-98.404,12.946-141.613,38.831C70.998,156.08,34.836,191.385,5.711,236.114C1.903,242.019,0,248.586,0,255.819 c0,7.231,1.903,13.801,5.711,19.698c16.748,26.073,36.592,49.396,59.528,69.949c22.936,20.561,48.011,37.018,75.229,49.396 c-8.375,14.273-12.562,22.556-12.562,24.842c0,3.425,1.524,6.088,4.57,7.99c23.219,13.329,35.97,19.985,38.256,19.985 c3.422,0,6.089-1.529,7.992-4.575l13.99-25.406c20.177-35.967,50.248-89.931,90.222-161.878 C322.908,183.871,352.886,130.005,372.872,94.221z M158.456,362.885C108.97,340.616,68.33,304.93,36.547,255.822 c28.931-44.921,65.19-78.518,108.777-100.783c-11.61,19.792-17.417,41.206-17.417,64.237c0,20.365,4.661,39.68,13.99,57.955 c9.327,18.274,22.27,33.4,38.83,45.392L158.456,362.885z M265.525,155.887c-2.662,2.667-5.906,3.999-9.712,3.999 c-16.368,0-30.361,5.808-41.971,17.416c-11.613,11.615-17.416,25.603-17.416,41.971c0,3.811-1.336,7.044-3.999,9.71 c-2.668,2.667-5.902,3.999-9.707,3.999c-3.809,0-7.045-1.334-9.71-3.999c-2.667-2.666-3.999-5.903-3.999-9.71 c0-23.79,8.52-44.206,25.553-61.242c17.034-17.034,37.447-25.553,61.241-25.553c3.806,0,7.043,1.336,9.713,3.999 c2.662,2.664,3.996,5.901,3.996,9.707C269.515,149.992,268.181,153.228,265.525,155.887z'/>
<path fill='#999'
d='M505.916,236.114c-10.853-18.08-24.603-35.594-41.255-52.534c-16.646-16.939-34.022-31.496-52.105-43.68l-17.987,31.977 c31.785,21.888,58.625,49.87,80.51,83.939c-23.024,35.782-51.723,65-86.07,87.648c-34.358,22.661-71.712,35.693-112.065,39.115 l-21.129,37.688c42.257,0,82.18-9.038,119.769-27.121c37.59-18.076,70.668-43.488,99.216-76.225 c13.322-15.421,23.695-29.219,31.121-41.401c3.806-6.476,5.708-13.046,5.708-19.702 C511.626,249.157,509.724,242.59,505.916,236.114z'/>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -1 +0,0 @@
<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 92 92"><path fill="#ECECEC" d="M45.386.004C19.983.344-.333 21.215.005 46.619c.34 25.393 21.209 45.715 46.611 45.377 25.398-.342 45.718-21.213 45.38-46.615-.34-25.395-21.21-45.716-46.61-45.377zM45.25 74l-.254-.004c-3.912-.116-6.67-2.998-6.559-6.852.109-3.788 2.934-6.538 6.717-6.538l.227.004c4.021.119 6.748 2.972 6.635 6.937C51.904 71.346 49.123 74 45.25 74zm16.455-32.659c-.92 1.307-2.943 2.93-5.492 4.916l-2.807 1.938c-1.541 1.198-2.471 2.325-2.82 3.434-.275.873-.41 1.104-.434 2.88l-.004.451H39.43l.031-.907c.131-3.728.223-5.921 1.768-7.733 2.424-2.846 7.771-6.289 7.998-6.435.766-.577 1.412-1.234 1.893-1.936 1.125-1.551 1.623-2.772 1.623-3.972a7.74 7.74 0 0 0-1.471-4.576c-.939-1.323-2.723-1.993-5.303-1.993-2.559 0-4.311.812-5.359 2.478-1.078 1.713-1.623 3.512-1.623 5.35v.457H27.936l.02-.477c.285-6.769 2.701-11.643 7.178-14.487C37.947 18.918 41.447 18 45.531 18c5.346 0 9.859 1.299 13.412 3.861 3.6 2.596 5.426 6.484 5.426 11.556 0 2.837-.896 5.502-2.664 7.924z"/></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1 +1 @@
<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 92 92"><path fill="#0e97c0" d="M45.386.004C19.983.344-.333 21.215.005 46.619c.34 25.393 21.209 45.715 46.611 45.377 25.398-.342 45.718-21.213 45.38-46.615-.34-25.395-21.21-45.716-46.61-45.377zM45.25 74l-.254-.004c-3.912-.116-6.67-2.998-6.559-6.852.109-3.788 2.934-6.538 6.717-6.538l.227.004c4.021.119 6.748 2.972 6.635 6.937C51.904 71.346 49.123 74 45.25 74zm16.455-32.659c-.92 1.307-2.943 2.93-5.492 4.916l-2.807 1.938c-1.541 1.198-2.471 2.325-2.82 3.434-.275.873-.41 1.104-.434 2.88l-.004.451H39.43l.031-.907c.131-3.728.223-5.921 1.768-7.733 2.424-2.846 7.771-6.289 7.998-6.435.766-.577 1.412-1.234 1.893-1.936 1.125-1.551 1.623-2.772 1.623-3.972a7.74 7.74 0 0 0-1.471-4.576c-.939-1.323-2.723-1.993-5.303-1.993-2.559 0-4.311.812-5.359 2.478-1.078 1.713-1.623 3.512-1.623 5.35v.457H27.936l.02-.477c.285-6.769 2.701-11.643 7.178-14.487C37.947 18.918 41.447 18 45.531 18c5.346 0 9.859 1.299 13.412 3.861 3.6 2.596 5.426 6.484 5.426 11.556 0 2.837-.896 5.502-2.664 7.924z"/></svg>
<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 92 92"><path fill="#007896" d="M45.386.004C19.983.344-.333 21.215.005 46.619c.34 25.393 21.209 45.715 46.611 45.377 25.398-.342 45.718-21.213 45.38-46.615-.34-25.395-21.21-45.716-46.61-45.377zM45.25 74l-.254-.004c-3.912-.116-6.67-2.998-6.559-6.852.109-3.788 2.934-6.538 6.717-6.538l.227.004c4.021.119 6.748 2.972 6.635 6.937C51.904 71.346 49.123 74 45.25 74zm16.455-32.659c-.92 1.307-2.943 2.93-5.492 4.916l-2.807 1.938c-1.541 1.198-2.471 2.325-2.82 3.434-.275.873-.41 1.104-.434 2.88l-.004.451H39.43l.031-.907c.131-3.728.223-5.921 1.768-7.733 2.424-2.846 7.771-6.289 7.998-6.435.766-.577 1.412-1.234 1.893-1.936 1.125-1.551 1.623-2.772 1.623-3.972a7.74 7.74 0 0 0-1.471-4.576c-.939-1.323-2.723-1.993-5.303-1.993-2.559 0-4.311.812-5.359 2.478-1.078 1.713-1.623 3.512-1.623 5.35v.457H27.936l.02-.477c.285-6.769 2.701-11.643 7.178-14.487C37.947 18.918 41.447 18 45.531 18c5.346 0 9.859 1.299 13.412 3.861 3.6 2.596 5.426 6.484 5.426 11.556 0 2.837-.896 5.502-2.664 7.924z"/></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1 +0,0 @@
<svg version="1.1" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 92 92" style="enable-background:new 0 0 92 92;" xml:space="preserve"><path fill="#2bb2dd" d="M45.386,0.004C19.983,0.344-0.333,21.215,0.005,46.619c0.34,25.393,21.209,45.715,46.611,45.377 c25.398-0.342,45.718-21.213,45.38-46.615C91.656,19.986,70.786-0.335,45.386,0.004z M45.25,74l-0.254-0.004 c-3.912-0.116-6.67-2.998-6.559-6.852c0.109-3.788,2.934-6.538,6.717-6.538l0.227,0.004c4.021,0.119,6.748,2.972,6.635,6.937 C51.904,71.346,49.123,74,45.25,74z M61.705,41.341c-0.92,1.307-2.943,2.93-5.492,4.916l-2.807,1.938 c-1.541,1.198-2.471,2.325-2.82,3.434c-0.275,0.873-0.41,1.104-0.434,2.88l-0.004,0.451H39.43l0.031-0.907 c0.131-3.728,0.223-5.921,1.768-7.733c2.424-2.846,7.771-6.289,7.998-6.435c0.766-0.577,1.412-1.234,1.893-1.936 c1.125-1.551,1.623-2.772,1.623-3.972c0-1.665-0.494-3.205-1.471-4.576c-0.939-1.323-2.723-1.993-5.303-1.993 c-2.559,0-4.311,0.812-5.359,2.478c-1.078,1.713-1.623,3.512-1.623,5.35v0.457H27.936l0.02-0.477 c0.285-6.769,2.701-11.643,7.178-14.487C37.947,18.918,41.447,18,45.531,18c5.346,0,9.859,1.299,13.412,3.861 c3.6,2.596,5.426,6.484,5.426,11.556C64.369,36.254,63.473,38.919,61.705,41.341z"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' width='20px' height='20px' viewBox='0 0 511.626 511.626' style='enable-background:new 0 0 511.626 511.626;' xml:space='preserve'><path fill='#f0ad4e' d='M505.918,236.117c-26.651-43.587-62.485-78.609-107.497-105.065c-45.015-26.457-92.549-39.687-142.608-39.687 c-50.059,0-97.595,13.225-142.61,39.687C68.187,157.508,32.355,192.53,5.708,236.117C1.903,242.778,0,249.345,0,255.818 c0,6.473,1.903,13.04,5.708,19.699c26.647,43.589,62.479,78.614,107.495,105.064c45.015,26.46,92.551,39.68,142.61,39.68 c50.06,0,97.594-13.176,142.608-39.536c45.012-26.361,80.852-61.432,107.497-105.208c3.806-6.659,5.708-13.223,5.708-19.699 C511.626,249.345,509.724,242.778,505.918,236.117z M194.568,158.03c17.034-17.034,37.447-25.554,61.242-25.554 c3.805,0,7.043,1.336,9.709,3.999c2.662,2.664,4,5.901,4,9.707c0,3.809-1.338,7.044-3.994,9.704 c-2.662,2.667-5.902,3.999-9.708,3.999c-16.368,0-30.362,5.808-41.971,17.416c-11.613,11.615-17.416,25.603-17.416,41.971 c0,3.811-1.336,7.044-3.999,9.71c-2.667,2.668-5.901,3.999-9.707,3.999c-3.809,0-7.044-1.334-9.71-3.999 c-2.667-2.666-3.999-5.903-3.999-9.71C169.015,195.482,177.535,175.065,194.568,158.03z M379.867,349.04 c-38.164,23.12-79.514,34.687-124.054,34.687c-44.539,0-85.889-11.56-124.051-34.687s-69.901-54.2-95.215-93.222 c28.931-44.921,65.19-78.518,108.777-100.783c-11.61,19.792-17.417,41.207-17.417,64.236c0,35.216,12.517,65.329,37.544,90.362 s55.151,37.544,90.362,37.544c35.214,0,65.329-12.518,90.362-37.544s37.545-55.146,37.545-90.362 c0-23.029-5.808-44.447-17.419-64.236c43.585,22.265,79.846,55.865,108.776,100.783C449.767,294.84,418.031,325.913,379.867,349.04 z'/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='20px' height='20px'
xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 27.965 27.965'
style='enable-background:new 0 0 27.965 27.965;'>
<path fill='#999'
d='M13.98,0C6.259,0,0,6.261,0,13.983c0,7.721,6.259,13.982,13.98,13.982c7.725,0,13.985-6.262,13.985-13.982 C27.965,6.261,21.705,0,13.98,0z M19.992,17.769l-2.227,2.224c0,0-3.523-3.78-3.786-3.78c-0.259,0-3.783,3.78-3.783,3.78 l-2.228-2.224c0,0,3.784-3.472,3.784-3.781c0-0.314-3.784-3.787-3.784-3.787l2.228-2.229c0,0,3.553,3.782,3.783,3.782 c0.232,0,3.786-3.782,3.786-3.782l2.227,2.229c0,0-3.785,3.523-3.785,3.787C16.207,14.239,19.992,17.769,19.992,17.769z'/>
</svg>

Before

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="1000px" height="242px" viewBox="0 0 1000 242" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
<title>Artboard</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Artboard" fill-rule="nonzero">
<g id="logo-mycrypto">
<g id="Group">
<circle id="Oval" fill="#007896" cx="120.18" cy="121" r="120.18"></circle>
<g transform="translate(39.000000, 51.000000)" fill="#FFFFFF" id="Shape">
<path d="M93.7,100.26 C90.4608521,103.553832 86.034676,105.408954 81.415,105.408954 C76.795324,105.408954 72.3691479,103.553832 69.13,100.26 L53.47,84.43 C51.4545763,82.3796602 48.700035,81.2248104 45.825,81.2248104 C42.949965,81.2248104 40.1954237,82.3796602 38.18,84.43 C31.3962777,91.3322169 31.3962777,102.397783 38.18,109.3 L69.18,140.59 C72.4191479,143.883832 76.845324,145.738954 81.465,145.738954 C86.084676,145.738954 90.5108521,143.883832 93.75,140.59 L124.67,109.26 C131.453722,102.357783 131.453722,91.2922169 124.67,84.39 C122.654576,82.3396602 119.900035,81.1848104 117.025,81.1848104 C114.149965,81.1848104 111.395424,82.3396602 109.38,84.39 L93.7,100.26 Z"></path>
<g>
<path d="M34.94,45.16 C38.0290939,41.9502279 42.278052,40.1158435 46.7325922,40.0688348 C51.1871324,40.0218262 55.4738563,41.7661337 58.63,44.91 L73.57,60 C75.5319997,61.9549457 78.1968754,63.0401122 80.9664349,63.0119089 C83.7359945,62.9837057 86.3782187,61.8444954 88.3,59.85 C94.9182507,53.2537743 95.0162179,42.5664417 88.52,35.85 L59,6 C55.8438563,2.85613372 51.5571324,1.11182617 47.1025922,1.15883483 C42.648052,1.20584348 38.3990939,3.04022788 35.31,6.25 L5.22,36.74 C-1.39825067,43.3362257 -1.49621789,54.0235583 5,60.74 C6.96199966,62.6949457 9.62687538,63.7801122 12.3964349,63.7519089 C15.1659945,63.7237057 17.8082187,62.5844954 19.73,60.59 L34.94,45.16 Z"></path>
<path d="M103.8,44.48 C106.889094,41.2702279 111.138052,39.4358435 115.592592,39.3888348 C120.047132,39.3418262 124.333856,41.0861337 127.49,44.23 L142.43,59.34 C144.392,61.2949457 147.056875,62.3801122 149.826435,62.3519089 C152.595994,62.3237057 155.238219,61.1844954 157.16,59.19 C163.778251,52.5937743 163.876218,41.9064417 157.38,35.19 L127.84,5.32 C124.683856,2.17613372 120.397132,0.431826171 115.942592,0.478834826 C111.488052,0.525843482 107.239094,2.36022788 104.15,5.57 L74.06,36.06 C67.4417493,42.6562257 67.3437821,53.3435583 73.84,60.06 C75.8019997,62.0149457 78.4668754,63.1001122 81.2364349,63.0719089 C84.0059945,63.0437057 86.6482187,61.9044954 88.57,59.91 L103.8,44.48 Z"></path>
</g>
</g>
</g>
<g id="Group" transform="translate(313.000000, 48.000000)" fill="#FFFFFF">
<path d="M90.57,34.35 L57.26,77.22 C57.0607847,77.4766413 56.7548791,77.6277513 56.43,77.63 L52.36,77.63 C52.0368225,77.6301653 51.7312237,77.4828888 51.53,77.23 L18.22,34.7 C17.9406501,34.3482885 17.469962,34.210817 17.0452267,34.35689 C16.6204914,34.502963 16.3339266,34.9008653 16.33,35.35 L16.33,115.11 C16.33,115.695422 15.8554218,116.17 15.27,116.17 L1.71,116.17 C1.12457817,116.17 0.65,115.695422 0.65,115.11 L0.84,3.88 C0.845486214,3.29848715 1.31846128,2.82997412 1.9,2.83 L11.66,2.83 C11.9848791,2.83224872 12.2907847,2.98335873 12.49,3.24 L53.65,56.16 C53.8508989,56.4169024 54.1588724,56.567026 54.485,56.567026 C54.8111276,56.567026 55.1191011,56.4169024 55.32,56.16 L96.32,3.24 C96.5213729,2.98059322 96.8316066,2.82916965 97.16,2.83 L106.92,2.83 C107.505422,2.83 107.98,3.30457817 107.98,3.89 L107.98,115.11 C107.98,115.695422 107.505422,116.17 106.92,116.17 L93.52,116.17 C92.9345782,116.17 92.46,115.695422 92.46,115.11 L92.46,35 C92.4560734,34.5508653 92.1695086,34.152963 91.7447733,34.00689 C91.320038,33.860817 90.8493499,33.9982885 90.57,34.35 Z" id="Shape"></path>
<path d="M153.09,145.63 L139.33,145.63 C138.96872,145.651077 138.624244,145.475314 138.429281,145.170426 C138.234318,144.865537 138.219295,144.479104 138.39,144.16 L153.19,112.05 C153.319561,111.777972 153.319561,111.462028 153.19,111.19 L120.05,38.28 C119.884434,37.9616411 119.902138,37.5789774 120.096391,37.2772652 C120.290644,36.975553 120.631663,36.8010515 120.99,36.82 L135.69,36.82 C136.127612,36.7909646 136.533076,37.0504613 136.69,37.46 L159.28,92.54 C160.141442,94.2485788 160.654718,96.1113296 160.79,98.02 L161.55,98.02 C161.643757,96.160165 162.021459,94.3256148 162.67,92.58 L162.67,92.5 L185.25,37.5 C185.406924,37.0904613 185.812388,36.8309646 186.25,36.86 L199.84,36.86 C200.197183,36.8393144 200.538204,37.0110305 200.734277,37.310301 C200.930351,37.6095715 200.9516,37.990793 200.79,38.31 L154,145 C153.851125,145.374023 153.49249,145.622309 153.09,145.63 Z" id="Shape"></path>
<path d="M308.69,103.73 C309.018865,104.13929 308.975194,104.733215 308.59,105.09 L307.72,105.96 C306.311062,107.211002 304.828403,108.376426 303.28,109.45 C300.936748,111.158663 298.43927,112.645098 295.82,113.89 C292.423901,115.395363 288.877272,116.535112 285.24,117.29 C280.714671,118.309874 276.088801,118.816405 271.45,118.8 C254.703333,118.8 241.036667,113.133333 230.45,101.8 C219.863333,90.4666667 214.573333,76.4233333 214.58,59.67 C214.58,42.7966667 219.836667,28.6933333 230.35,17.36 C240.863333,6.02666667 254.56,0.36 271.44,0.36 C278.534188,0.292950459 285.580594,1.52666466 292.23,4 C298.53,6.39333333 302.936667,8.78666667 305.45,11.18 L308.55,14.13 C308.953703,14.4833365 309.006655,15.0922846 308.67,15.51 L300.94,25.82 C300.768178,26.0780963 300.486353,26.2418906 300.177042,26.2634249 C299.867732,26.2849591 299.565929,26.1617971 299.36,25.93 L298.93,25.54 C298.363333,25.0333333 297.136667,24.12 295.25,22.8 C293.371825,21.4847668 291.414825,20.2858536 289.39,19.21 C286.895807,17.964538 284.264635,17.0147654 281.55,16.38 C278.307772,15.556821 274.97509,15.1435953 271.63,15.15 C259.663333,15.15 249.84,19.4333333 242.16,28 C234.48,36.5666667 230.64,47.1466667 230.64,59.74 C230.64,72.2066667 234.48,82.7233333 242.16,91.29 C249.84,99.8566667 259.663333,104.14 271.63,104.14 C276.809748,104.160185 281.943214,103.164748 286.74,101.21 C291.5,99.27 294.95,97.36 297.09,95.48 L297.16,95.42 L299.3,93.28 C299.505994,93.0520926 299.805311,92.9315146 300.111765,92.9529859 C300.41822,92.9744572 300.697799,93.1355948 300.87,93.39 L308.69,103.73 Z" id="Shape"></path>
<path d="M365.76,48.25 C365.76,48.8022847 365.312285,49.25 364.76,49.25 L357.42,49.25 C351.952599,49.1653407 346.704109,51.3954948 342.97,55.39 C338.971926,59.5021362 336.807715,65.0569448 336.97,70.79 L336.97,115.08 C336.97,115.632285 336.522285,116.08 335.97,116.08 L322.53,116.08 C321.977715,116.08 321.53,115.632285 321.53,115.08 L321.53,37.87 C321.53,37.3177153 321.977715,36.87 322.53,36.87 L332.12,36.87 C332.672285,36.87 333.12,37.3177153 333.12,37.87 L333.53,50.27 L334.47,50.27 C336.28808,46.0751329 339.399502,42.5712792 343.35,40.27 C347.601016,37.8166962 352.442982,36.5750777 357.35,36.68 L364.69,36.68 C365.242285,36.68 365.69,37.1277153 365.69,37.68 L365.76,48.25 Z" id="Shape"></path>
<path d="M406.77,145.63 L393,145.63 C392.63399,145.65725 392.282464,145.48181 392.084205,145.172943 C391.885946,144.864076 391.872816,144.471421 392.05,144.15 L406.85,112.06 C406.982759,111.785194 406.982759,111.464806 406.85,111.19 L373.72,38.29 C373.548117,37.9692691 373.564023,37.5804856 373.761532,37.2748674 C373.95904,36.9692492 374.306972,36.7950405 374.67,36.82 L389.35,36.82 C389.790204,36.7924238 390.19649,37.0565095 390.35,37.47 L412.94,92.55 C413.94,94.82 415.35,96.64 415.35,98.03 L414.35,98.03 C414.35,96.64 415.62,94.82 416.35,92.55 L438.94,37.47 C439.09351,37.0565095 439.499796,36.7924238 439.94,36.82 L453.51,36.82 C453.878713,36.7770945 454.240854,36.9419568 454.450616,37.2482085 C454.660377,37.5544603 454.68324,37.9517047 454.51,38.28 L407.73,145 C407.574469,145.391103 407.190694,145.642955 406.77,145.63 Z" id="Shape"></path>
<path d="M477.66,106.15 L477.66,144.59 C477.66,145.142285 477.212285,145.59 476.66,145.59 L463.2,145.59 C462.647715,145.59 462.2,145.142285 462.2,144.59 L462.2,37.86 C462.2,37.3077153 462.647715,36.86 463.2,36.86 L473.5,36.86 C474.052285,36.86 474.5,37.3077153 474.5,37.86 L474.59,48.35 L475.36,48.35 C475.707077,48.3563277 476.032605,48.1822077 476.22,47.89 L476.86,46.89 C477.769596,45.7389528 478.773031,44.6652774 479.86,43.68 C481.520279,42.0868189 483.359149,40.6908884 485.34,39.52 C487.927997,38.0954841 490.69153,37.0162943 493.56,36.31 C497.163565,35.3462041 500.879835,34.8686382 504.61,34.89 C514.67076,34.6649575 524.329386,38.8387985 531.06,46.32 C538.113333,53.94 541.64,63.9833333 541.64,76.45 C541.64,88.6633333 538.146667,98.6433333 531.16,106.39 C524.646226,113.928522 515.121315,118.185425 505.16,118.01 C501.503744,118.037552 497.857479,117.624578 494.3,116.78 C491.545307,116.198027 488.899526,115.185611 486.46,113.78 C484.772182,112.729386 483.16143,111.559753 481.64,110.28 C480.625483,109.464859 479.715289,108.527796 478.93,107.49 L478.87,107.4 L478.14,106.13 L477.66,106.15 Z M483.89,97.37 C488.693432,102.811117 495.760596,105.699372 503,105.18 C508.354512,104.947793 513.442814,102.78029 517.32,99.08 C523.106667,93.4933333 526,85.9633333 526,76.49 C526,68.1766667 523.703333,61.3133333 519.11,55.9 C514.850924,50.6434869 508.404094,47.647021 501.64,47.78 C494.856152,47.6595253 488.362084,50.5262761 483.88,55.62 C479.093333,60.8466667 476.7,67.8033333 476.7,76.49 C476.7,85.1766667 479.096667,92.1366667 483.89,97.37 Z" id="Shape"></path>
<path d="M560.18,35.77 L560.18,13.7 C560.18,13.120101 560.650101,12.65 561.23,12.65 L574.61,12.65 C575.189899,12.65 575.66,13.120101 575.66,13.7 L575.66,35.77 C575.66,36.349899 576.130101,36.82 576.71,36.82 L597.27,36.82 C597.849899,36.82 598.32,37.290101 598.32,37.87 L598.32,48.04 C598.32,48.619899 597.849899,49.09 597.27,49.09 L576.71,49.09 C576.130101,49.09 575.66,49.560101 575.66,50.14 L575.66,92.91 C575.66,100.843333 579.326667,104.81 586.66,104.81 C588.426232,104.789962 590.179318,104.5034 591.86,103.96 C593.345128,103.541065 594.772658,102.939823 596.11,102.17 L596.62,101.91 C596.879745,101.779149 597.182128,101.761897 597.455071,101.862355 C597.728013,101.962813 597.947061,102.171981 598.06,102.44 L602.06,111.66 C602.268775,112.094052 602.138473,112.61526 601.75,112.9 C601.072836,113.397755 600.364744,113.852003 599.63,114.26 C598.003703,115.111766 596.299171,115.804964 594.54,116.33 C590.818705,117.549199 586.91426,118.114227 583,118 C575.493333,117.766667 569.866667,115.57 566.12,111.41 C562.12,107.003333 560.12,100.896667 560.12,93.09 L560.12,50.09 C560.12,49.510101 559.649899,49.04 559.07,49.04 L546.69,49.04 C546.411523,49.04 546.144451,48.9293753 545.947538,48.7324621 C545.750625,48.5355489 545.64,48.2684773 545.64,47.99 L545.64,37.88 C545.64,37.300101 546.110101,36.83 546.69,36.83 L559.13,36.83 C559.410219,36.8300127 559.678817,36.7180164 559.87602,36.518935 C560.073223,36.3198537 560.182669,36.0502059 560.18,35.77 Z" id="Shape"></path>
<path d="M675.29,106.72 C667.483333,114.273333 657.913333,118.05 646.58,118.05 C635.12,118.05 625.55,114.273333 617.87,106.72 C610.19,99.1666667 606.35,89.2166667 606.35,76.87 C606.35,64.4033333 610.223333,54.2966667 617.97,46.55 C625.716667,38.8033333 635.256667,34.93 646.59,34.93 C657.367065,34.6978865 667.759568,38.9366958 675.3,46.64 C683.1,54.4533333 687,64.53 687,76.87 C687,89.21 683.096667,99.16 675.29,106.72 Z M664.29,97.72 C669.076667,92.4933333 671.47,85.4733333 671.47,76.66 C671.47,67.9933333 669.076667,60.94 664.29,55.5 C659.890927,50.2621158 653.369397,47.2804252 646.53,47.38 C639.690565,47.2798792 633.156682,50.2082301 628.68,55.38 C623.833333,60.7133333 621.41,67.7966667 621.41,76.63 C621.41,85.4633333 623.803333,92.4833333 628.59,97.69 C633.180499,102.686412 639.654956,105.530149 646.44,105.530149 C653.225044,105.530149 659.699501,102.686412 664.29,97.69 L664.29,97.72 Z" id="Shape"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,59 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 315 70">
<defs>
<style>
.cls-1{fill:none;}.cls-2{fill:url(#linear-gradient);}.cls-3,.cls-5{fill:#fff;}.cls-4{clip-path:url(#clip-path);}.cls-5{opacity:0.2;}.cls-6{fill:url(#linear-gradient-2);}.cls-7{fill:url(#linear-gradient-3);}
</style>
<linearGradient id="linear-gradient" x1="57.55" y1="4.4" x2="-0.67" y2="90.08" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#1abc9c"/>
<stop offset="1" stop-color="#1a5daf"/>
</linearGradient>
<clipPath id="clip-path">
<circle id="SVGID" class="cls-1" cx="36.76" cy="35" r="32"/>
</clipPath>
<linearGradient id="linear-gradient-2" x1="36.72" y1="3.36" x2="27.74" y2="63.33"
xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="46.32" y1="4.8" x2="37.33" y2="64.77" xlink:href="#linear-gradient"/>
</defs>
<title>etherwallet-logo</title>
<circle class="cls-2" cx="36.76" cy="35" r="32"/>
<path class="cls-3" d="M23.84,27.45h0v0h0Z"/>
<g class="cls-4">
<polygon class="cls-5"
points="65.73 35.27 55.71 59.8 50.41 47.28 55.24 35.47 52.63 35.47 48.69 45.29 44.79 35.47 42.22 35.47 47.05 47.28 41.79 59.8 31.73 35.27 26.68 23.37 31.88 10.85 41.9 35.38 44.86 35.38 33.13 7.7 30.71 7.7 24.9 21.28 19.05 7.7 16.67 7.7 4.97 35.38 7.9 35.38 17.96 10.85 23.22 23.37 18.39 35.19 20.96 35.19 24.86 25.36 28.8 35.27 40.5 62.96 42.88 62.96 48.73 49.27 54.54 62.96 56.96 62.96 68.69 35.27 65.73 35.27"/>
<path class="cls-6"
d="M39.1,47.5a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57L18,30a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59A19.53,19.53,0,0,0,44,55.86Z"/>
<path class="cls-7"
d="M36.76,17a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L55.3,45.1a20,20,0,0,0,1.52-8.32C56.82,26,47.58,17,36.76,17Z"/>
<path class="cls-3" d="M23.84,27.45h0v0h0Z"/>
<path class="cls-3"
d="M39.1,45.36a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57L18,27.82a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59A19.53,19.53,0,0,0,44,53.72Z"/>
<path class="cls-3"
d="M36.76,14.89a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L55.3,43a20,20,0,0,0,1.52-8.32C56.82,23.82,47.58,14.89,36.76,14.89Z"/>
</g>
<path class="cls-3"
d="M108,44.56V30.21l-5.59,10.69H100.1L94.51,30.21V44.56H90.3V22.88h4.52l6.41,12.34,6.47-12.34h4.49V44.56H108Z"/>
<path class="cls-3"
d="M117,47.67a8,8,0,0,0,1,.23,5.53,5.53,0,0,0,.82.08,1.75,1.75,0,0,0,.73-0.15,1.57,1.57,0,0,0,.61-0.53,5.23,5.23,0,0,0,.55-1.05q0.27-.67.58-1.68l-6.32-16h4.21L123.49,41l3.85-12.46h3.85l-6.72,19.18a5.73,5.73,0,0,1-2,2.75A5.58,5.58,0,0,1,119,51.55a6.65,6.65,0,0,1-1-.08,6.36,6.36,0,0,1-1.05-.26V47.67Z"/>
<path class="cls-3" d="M149.17,40.86v3.69H134.12V22.88h14.78v3.69H138.33v5.22h9.13v3.42h-9.13v5.65h10.84Z"/>
<path class="cls-3"
d="M161.54,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56h2.11V23.37H157v5.19h3.36V31.7H157v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
<path class="cls-3"
d="M178.85,44.56h-4.09v-9a4.53,4.53,0,0,0-.7-2.79,2.37,2.37,0,0,0-2-.9,3.13,3.13,0,0,0-1.16.24,4.54,4.54,0,0,0-1.16.69,5.86,5.86,0,0,0-1,1.05,4.16,4.16,0,0,0-.67,1.34v9.34H164V22.27h4.09v9.25a6.17,6.17,0,0,1,2.4-2.4,6.77,6.77,0,0,1,3.34-.84,5.27,5.27,0,0,1,2.53.53,4,4,0,0,1,1.53,1.42,5.85,5.85,0,0,1,.76,2,12.48,12.48,0,0,1,.21,2.32v10Z"/>
<path class="cls-3"
d="M190.15,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22A7.86,7.86,0,0,1,184,30.77,8,8,0,0,1,186.65,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63,8.75,8.75,0,0,1,.56,3.11q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H186.06a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,190.15,44.86Zm4.15-9.65A4.26,4.26,0,0,0,193,32.33a4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M210.85,32.1a8.07,8.07,0,0,0-3.33.72,4.2,4.2,0,0,0-2.11,2.06v9.68h-4.09v-16h3.76V32a7.29,7.29,0,0,1,1-1.48,7.76,7.76,0,0,1,1.25-1.15,5.82,5.82,0,0,1,1.36-.75,3.76,3.76,0,0,1,1.33-.26h0.5a1.66,1.66,0,0,1,.32,0V32.1Z"/>
<path class="cls-3"
d="M221.32,22.94h3.88l2.44,7.18,2.44-7.18H234L230.3,32.8,233,39.73l6.14-16.86h4.58l-8.82,21.68H231.4l-3.76-9.1-3.76,9.1h-3.54l-8.76-21.68h4.52l6.17,16.86L225,32.8Z"/>
<path class="cls-3"
d="M248.74,44.86a6.07,6.07,0,0,1-2.17-.38,5.21,5.21,0,0,1-1.74-1.07,5,5,0,0,1-1.15-1.6,4.85,4.85,0,0,1-.41-2,4.44,4.44,0,0,1,.5-2.09,4.8,4.8,0,0,1,1.4-1.63A7,7,0,0,1,247.34,35a9.4,9.4,0,0,1,2.75-.38,11.85,11.85,0,0,1,2.09.18,8.54,8.54,0,0,1,1.82.52V34.42a3.21,3.21,0,0,0-.9-2.44,3.75,3.75,0,0,0-2.67-.85,7.08,7.08,0,0,0-2.5.46,11.63,11.63,0,0,0-2.5,1.34l-1.25-2.6a11.82,11.82,0,0,1,6.66-2A7.8,7.8,0,0,1,256.18,30a6.21,6.21,0,0,1,1.91,4.9v5a1.44,1.44,0,0,0,.23.92,1,1,0,0,0,.75.31v3.48a9.14,9.14,0,0,1-1.8.21,2.73,2.73,0,0,1-1.79-.52,2.23,2.23,0,0,1-.78-1.37L254.61,42a7.08,7.08,0,0,1-2.6,2.14A7.45,7.45,0,0,1,248.74,44.86Zm1.16-3a5.33,5.33,0,0,0,2-.37,3.58,3.58,0,0,0,1.45-1,1.47,1.47,0,0,0,.67-1.16V37.53a10,10,0,0,0-1.59-.44,8.58,8.58,0,0,0-1.65-.17,4.37,4.37,0,0,0-2.6.72,2.15,2.15,0,0,0-1,1.82,2.18,2.18,0,0,0,.79,1.73A2.88,2.88,0,0,0,249.9,41.87Z"/>
<path class="cls-3"
d="M262.18,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L270.12,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M272.16,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L280.1,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M289.6,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22,7.86,7.86,0,0,1,1.68-2.66A8,8,0,0,1,286.1,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63A8.75,8.75,0,0,1,298,36.5q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H285.51a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,289.6,44.86Zm4.15-9.65a4.26,4.26,0,0,0-1.33-2.89,4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M310.24,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56h2.11V23.37h4.09v5.19H309V31.7h-3.36v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -1,63 +0,0 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 366.33 70">
<defs>
<style>
.cls-1{fill:none;}.cls-2{fill:url(#linear-gradient);}.cls-3,.cls-5{fill:#fff;}.cls-4{clip-path:url(#clip-path);}.cls-5{opacity:0.2;}.cls-6{fill:url(#linear-gradient-2);}.cls-7{fill:url(#linear-gradient-3);}
</style>
<linearGradient id="linear-gradient" x1="58.65" y1="4.4" x2="0.43" y2="90.08" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#1abc9c"/>
<stop offset="1" stop-color="#1a5daf"/>
</linearGradient>
<clipPath id="clip-path">
<circle id="SVGID" class="cls-1" cx="37.86" cy="35" r="32"/>
</clipPath>
<linearGradient id="linear-gradient-2" x1="37.83" y1="3.36" x2="28.84" y2="63.33"
xlink:href="#linear-gradient"/>
<linearGradient id="linear-gradient-3" x1="47.42" y1="4.8" x2="38.43" y2="64.77" xlink:href="#linear-gradient"/>
</defs>
<title>etherwalletcx-logo</title>
<circle class="cls-2" cx="37.86" cy="35" r="32"/>
<path class="cls-3" d="M24.95,27.45h0v0h0Z"/>
<g class="cls-4">
<polygon class="cls-5"
points="66.83 35.27 56.81 59.8 51.51 47.28 56.34 35.47 53.73 35.47 49.79 45.29 45.89 35.47 43.32 35.47 48.15 47.28 42.89 59.8 32.83 35.27 27.78 23.37 32.98 10.85 43 35.38 45.97 35.38 34.23 7.7 31.81 7.7 26 21.28 20.15 7.7 17.77 7.7 6.07 35.38 9 35.38 19.06 10.85 24.32 23.37 19.49 35.19 22.06 35.19 25.96 25.36 29.91 35.27 41.6 62.96 43.98 62.96 49.83 49.27 55.64 62.96 58.06 62.96 69.8 35.27 66.83 35.27"/>
<path class="cls-6"
d="M40.2,47.5a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57L19.13,30a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59a19.53,19.53,0,0,0,7.26-1.39Z"/>
<path class="cls-7"
d="M37.86,17a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L56.4,45.1a20,20,0,0,0,1.52-8.32C57.92,26,48.68,17,37.86,17Z"/>
<path class="cls-3" d="M24.95,27.45h0v0h0Z"/>
<path class="cls-3"
d="M40.2,45.36a10.13,10.13,0,0,1-2.34.27c-5.58,0-10.33-4.25-10.67-10.56a19.86,19.86,0,0,1,.57-3.57l-8.63-3.68a22.3,22.3,0,0,0-1.36,7.7c0,10.82,9.27,19.59,20.09,19.59a19.53,19.53,0,0,0,7.26-1.39Z"/>
<path class="cls-3"
d="M37.86,14.89a19.52,19.52,0,0,0-8.15,1.77l4.86,8.26a10.09,10.09,0,0,1,3.29-.55c4.94,0,10.18,4.14,10.68,9.24l-14.05.06L56.4,43a20,20,0,0,0,1.52-8.32C57.92,23.82,48.68,14.89,37.86,14.89Z"/>
</g>
<path class="cls-3"
d="M109.08,44.56V30.21l-5.59,10.69H101.2L95.61,30.21V44.56H91.4V22.88h4.52l6.41,12.34,6.47-12.34h4.49V44.56h-4.21Z"/>
<path class="cls-3"
d="M118.06,47.67a8,8,0,0,0,1,.23,5.53,5.53,0,0,0,.82.08,1.75,1.75,0,0,0,.73-0.15,1.57,1.57,0,0,0,.61-0.53,5.23,5.23,0,0,0,.55-1.05q0.27-.67.58-1.68l-6.32-16h4.21L124.59,41l3.85-12.46h3.85l-6.72,19.18a5.73,5.73,0,0,1-2,2.75,5.58,5.58,0,0,1-3.48,1.07,6.65,6.65,0,0,1-1-.08,6.36,6.36,0,0,1-1.05-.26V47.67Z"/>
<path class="cls-3" d="M150.27,40.86v3.69H135.22V22.88H150v3.69H139.43v5.22h9.13v3.42h-9.13v5.65h10.84Z"/>
<path class="cls-3"
d="M162.64,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56H154V23.37h4.09v5.19h3.36V31.7h-3.36v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
<path class="cls-3"
d="M180,44.56h-4.09v-9a4.53,4.53,0,0,0-.7-2.79,2.37,2.37,0,0,0-2-.9,3.13,3.13,0,0,0-1.16.24,4.54,4.54,0,0,0-1.16.69,5.86,5.86,0,0,0-1,1.05,4.16,4.16,0,0,0-.67,1.34v9.34h-4.09V22.27h4.09v9.25a6.17,6.17,0,0,1,2.4-2.4,6.77,6.77,0,0,1,3.34-.84,5.27,5.27,0,0,1,2.53.53A4,4,0,0,1,179,30.24a5.85,5.85,0,0,1,.76,2,12.48,12.48,0,0,1,.21,2.32v10Z"/>
<path class="cls-3"
d="M191.25,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22,7.86,7.86,0,0,1,1.68-2.66A8,8,0,0,1,187.75,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63,8.75,8.75,0,0,1,.56,3.11q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H187.16a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,191.25,44.86Zm4.15-9.65a4.26,4.26,0,0,0-1.33-2.89,4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M212,32.1a8.07,8.07,0,0,0-3.33.72,4.2,4.2,0,0,0-2.11,2.06v9.68h-4.09v-16h3.76V32a7.29,7.29,0,0,1,1-1.48,7.76,7.76,0,0,1,1.25-1.15,5.82,5.82,0,0,1,1.36-.75,3.76,3.76,0,0,1,1.33-.26h0.5a1.66,1.66,0,0,1,.32,0V32.1Z"/>
<path class="cls-3"
d="M222.42,22.94h3.88l2.44,7.18,2.44-7.18h3.91L231.4,32.8l2.75,6.93,6.14-16.86h4.58L236,44.56H232.5l-3.76-9.1L225,44.56h-3.54l-8.76-21.68h4.52l6.17,16.86,2.69-6.93Z"/>
<path class="cls-3"
d="M249.85,44.86a6.07,6.07,0,0,1-2.17-.38,5.21,5.21,0,0,1-1.74-1.07,5,5,0,0,1-1.15-1.6,4.85,4.85,0,0,1-.41-2,4.44,4.44,0,0,1,.5-2.09,4.8,4.8,0,0,1,1.4-1.63A7,7,0,0,1,248.44,35a9.4,9.4,0,0,1,2.75-.38,11.85,11.85,0,0,1,2.09.18,8.54,8.54,0,0,1,1.82.52V34.42a3.21,3.21,0,0,0-.9-2.44,3.75,3.75,0,0,0-2.67-.85,7.08,7.08,0,0,0-2.5.46,11.63,11.63,0,0,0-2.5,1.34l-1.25-2.6a11.82,11.82,0,0,1,6.66-2A7.8,7.8,0,0,1,257.28,30a6.21,6.21,0,0,1,1.91,4.9v5a1.44,1.44,0,0,0,.23.92,1,1,0,0,0,.75.31v3.48a9.14,9.14,0,0,1-1.8.21,2.73,2.73,0,0,1-1.79-.52,2.23,2.23,0,0,1-.78-1.37L255.71,42a7.08,7.08,0,0,1-2.6,2.14A7.45,7.45,0,0,1,249.85,44.86Zm1.16-3a5.33,5.33,0,0,0,2-.37,3.58,3.58,0,0,0,1.45-1,1.47,1.47,0,0,0,.67-1.16V37.53a10,10,0,0,0-1.59-.44,8.58,8.58,0,0,0-1.65-.17,4.37,4.37,0,0,0-2.6.72,2.15,2.15,0,0,0-1,1.82,2.18,2.18,0,0,0,.79,1.73A2.88,2.88,0,0,0,251,41.87Z"/>
<path class="cls-3"
d="M263.28,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L271.22,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M273.27,22.27h4.09V39.43a2,2,0,0,0,.43,1.37,1.54,1.54,0,0,0,1.22.49,3.06,3.06,0,0,0,.81-0.12,5.46,5.46,0,0,0,.84-0.31L281.2,44a7.9,7.9,0,0,1-1.92.61,10.52,10.52,0,0,1-2,.21,4.1,4.1,0,0,1-3-1,3.88,3.88,0,0,1-1.05-2.92V22.27Z"/>
<path class="cls-3"
d="M290.7,44.86a8.88,8.88,0,0,1-3.48-.66,7.85,7.85,0,0,1-4.35-4.41,8.43,8.43,0,0,1-.6-3.15,8.91,8.91,0,0,1,.58-3.22,7.86,7.86,0,0,1,1.68-2.66A8,8,0,0,1,287.2,29a8.9,8.9,0,0,1,3.53-.67,8.68,8.68,0,0,1,3.5.67,8.05,8.05,0,0,1,2.63,1.8,7.67,7.67,0,0,1,1.65,2.63,8.75,8.75,0,0,1,.56,3.11q0,0.4,0,.76a3.14,3.14,0,0,1-.08.61H286.61a4.75,4.75,0,0,0,.46,1.68,4.11,4.11,0,0,0,2.26,2,4.31,4.31,0,0,0,1.53.27,4.72,4.72,0,0,0,2.31-.6,3.15,3.15,0,0,0,1.48-1.57l3.51,1a7.14,7.14,0,0,1-2.82,3A8.75,8.75,0,0,1,290.7,44.86Zm4.15-9.65a4.26,4.26,0,0,0-1.33-2.89,4.17,4.17,0,0,0-5.66,0,4.19,4.19,0,0,0-.9,1.25,4.41,4.41,0,0,0-.41,1.62h8.31Z"/>
<path class="cls-3"
d="M311.34,43.73a18.25,18.25,0,0,1-2,.73,8.47,8.47,0,0,1-2.5.37,5.82,5.82,0,0,1-1.6-.21,3.51,3.51,0,0,1-1.31-.69,3.35,3.35,0,0,1-.9-1.22,4.41,4.41,0,0,1-.34-1.82V31.7h-2.11V28.56h2.11V23.37h4.09v5.19h3.36V31.7h-3.36v7.82a1.45,1.45,0,0,0,.44,1.21,1.69,1.69,0,0,0,1.08.35,3.76,3.76,0,0,0,1.25-.21q0.61-.21,1-0.37Z"/>
<path class="cls-3"
d="M320.5,33.56a11.23,11.23,0,0,1,.72-3.92,10.52,10.52,0,0,1,5.45-5.94,10.38,10.38,0,0,1,4.52-.95,9.86,9.86,0,0,1,5.18,1.31,8.39,8.39,0,0,1,3.25,3.42l-3.24,2.23a5.54,5.54,0,0,0-1-1.54,5.21,5.21,0,0,0-1.31-1,5.91,5.91,0,0,0-1.47-.53,7,7,0,0,0-1.5-.17,5.68,5.68,0,0,0-2.76.64,6.08,6.08,0,0,0-2,1.66,7.34,7.34,0,0,0-1.18,2.32,8.78,8.78,0,0,0-.4,2.58,8.41,8.41,0,0,0,.46,2.76,7.35,7.35,0,0,0,1.3,2.34,6.49,6.49,0,0,0,2,1.62,5.51,5.51,0,0,0,2.58.61,6.79,6.79,0,0,0,1.53-.18,5.8,5.8,0,0,0,1.51-.58,5.73,5.73,0,0,0,1.33-1,4.72,4.72,0,0,0,1-1.51l3.45,2a6.52,6.52,0,0,1-1.48,2.15,9.52,9.52,0,0,1-2.17,1.57,11.07,11.07,0,0,1-2.58,1,11.31,11.31,0,0,1-2.69.34,9.23,9.23,0,0,1-4.24-1,11,11,0,0,1-3.31-2.55,11.82,11.82,0,0,1-2.17-3.57A11.15,11.15,0,0,1,320.5,33.56Z"/>
<path class="cls-3"
d="M345.14,22.88l5.4,8.06,5.37-8.06h4.55l-7.73,11,7.48,10.69h-4.55l-5.13-7.76-5.16,7.76h-4.58l7.48-10.69-7.73-11h4.58Z"/>
</svg>

Before

Width:  |  Height:  |  Size: 8.3 KiB

Some files were not shown because too many files have changed in this diff Show More