Compare commits
326 Commits
Author | SHA1 | Date |
---|---|---|
James Prado | 816ce3180f | |
William O'Beirne | 7521337bda | |
greenkeeper[bot] | f42b81ac8a | |
greenkeeper[bot] | aa08c1902d | |
Michael - Blurpesec | 8eeefe7e25 | |
William O'Beirne | 5d41a7f774 | |
William O'Beirne | 0b44919912 | |
Danny Skubak | 937cc3fde5 | |
Danny Skubak | 9be46bf8aa | |
Daniel Ternyak | f5716514b1 | |
Daniel Ternyak | 8c0dd3f455 | |
Daniel Ternyak | 825e467db7 | |
greenkeeper[bot] | 9e723e609c | |
greenkeeper[bot] | be9729c302 | |
greenkeeper[bot] | 9a5e2a8c2a | |
greenkeeper[bot] | 0976552a0b | |
greenkeeper[bot] | bd4a63e591 | |
greenkeeper[bot] | aeb1b74d8d | |
greenkeeper[bot] | 433a3276bb | |
greenkeeper[bot] | 4b6cba3211 | |
William O'Beirne | db6b737cad | |
greenkeeper[bot] | 740b191542 | |
greenkeeper[bot] | 0bc24f5825 | |
greenkeeper[bot] | 92e757ceb2 | |
William O'Beirne | 4b8adc81ce | |
anticlimactic | 16469e1a62 | |
Daniel Ternyak | 3d8f678887 | |
Daniel Ternyak | 8649655019 | |
greenkeeper[bot] | 9284fb56eb | |
greenkeeper[bot] | 7905b0cf67 | |
greenkeeper[bot] | 3f6681711f | |
greenkeeper[bot] | 7b7728cf9d | |
greenkeeper[bot] | 033407460b | |
James Prado | 4788381641 | |
William O'Beirne | 56943232a0 | |
greenkeeper[bot] | aa287f478a | |
James Prado | 9cac0298a2 | |
greenkeeper[bot] | 6e8d807b22 | |
greenkeeper[bot] | 80383a831e | |
greenkeeper[bot] | 5e97a9fe66 | |
greenkeeper[bot] | 3af6607901 | |
aitrean | cf9887f21f | |
HenryNguyen5 | 94b3f3403b | |
HenryNguyen5 | 16e6677c0f | |
William O'Beirne | 3bce82ba86 | |
HenryNguyen5 | c340246ca0 | |
Daniel Ternyak | 0e26f7af4c | |
Daniel Ternyak | 3278318fa6 | |
greenkeeper[bot] | b901c3e125 | |
Daniel Ternyak | 8acef8e54f | |
HenryNguyen5 | 2d057eb0b2 | |
William O'Beirne | a5be81e96d | |
Daniel Ternyak | 0d4bc5bbb1 | |
greenkeeper[bot] | 446d7043c3 | |
greenkeeper[bot] | 3bdf41cf59 | |
Taylor Monahan | 7941403782 | |
greenkeeper[bot] | 533255094b | |
William O'Beirne | d0379b19a0 | |
Daniel Ternyak | e45324e7f1 | |
William O'Beirne | 3a36818412 | |
William O'Beirne | e3194a649e | |
greenkeeper[bot] | b016d35819 | |
Daniel Ternyak | dd83071ec7 | |
greenkeeper[bot] | 383df967a7 | |
greenkeeper[bot] | 611e511b33 | |
Luit Hollander | a9aeacb775 | |
William O'Beirne | 6927aa0b55 | |
HenryNguyen5 | 4dd0fc9785 | |
greenkeeper[bot] | 86992e8198 | |
Daniel Ternyak | 7c451ffd4f | |
HenryNguyen5 | e9d719be52 | |
Daniel Ternyak | 84319ab9a1 | |
greenkeeper[bot] | dbb5d9944d | |
greenkeeper[bot] | f442cdae61 | |
James Prado | aabcd3f7a3 | |
greenkeeper[bot] | 08335fbca0 | |
greenkeeper[bot] | 2c37463f7c | |
Daniel Ternyak | 162713ac6d | |
greenkeeper[bot] | 328bd05859 | |
William O'Beirne | 653c363279 | |
James Prado | 9ef1920fe0 | |
Daniel Ternyak | 95072d350a | |
Kenneth Ashley | 3953af5f03 | |
Danny Skubak | 23546a1cf9 | |
greenkeeper[bot] | 1a711b5c20 | |
Daniel Ternyak | c01a4beaaa | |
Rajiv Shah | f12d72a57e | |
greenkeeper[bot] | d147ec1b15 | |
greenkeeper[bot] | bc2c4b776f | |
William O'Beirne | 1eb57a38bc | |
Daniel Ternyak | 5fcec1ecd7 | |
greenkeeper[bot] | a9b07cdf18 | |
greenkeeper[bot] | c6f58bb19c | |
greenkeeper[bot] | 093b0fecf6 | |
Daniel Ternyak | 070b07ae40 | |
greenkeeper[bot] | e5b2ccef7a | |
greenkeeper[bot] | 375360e71a | |
William O'Beirne | a430fe650c | |
greenkeeper[bot] | 296b78d62e | |
greenkeeper[bot] | 0a1f36a413 | |
James Prado | 81d4444dff | |
greenkeeper[bot] | b3da25c3f7 | |
greenkeeper[bot] | 5436f20db7 | |
greenkeeper[bot] | 696258e7cd | |
Amidou Kante | 4576b8f325 | |
greenkeeper[bot] | 23deceeb05 | |
greenkeeper[bot] | bd302ec730 | |
Daniel Ternyak | 2ae567005f | |
greenkeeper[bot] | 21b946b0c1 | |
greenkeeper[bot] | aa8bf24ab1 | |
Daniel Ternyak | 29205626f2 | |
William O'Beirne | 1b6143e457 | |
William O'Beirne | 33f5ede22a | |
William O'Beirne | b48617e95e | |
greenkeeper[bot] | dc24a52e2c | |
William O'Beirne | c76d0b3fa5 | |
greenkeeper[bot] | afaf045edd | |
James Prado | 48536f79be | |
Danny Skubak | 94061e0c3e | |
Daniel Ternyak | a50dc2ebb0 | |
greenkeeper[bot] | f2bf7529b3 | |
William O'Beirne | 9727051290 | |
greenkeeper[bot] | 00cea6f548 | |
Daniel Ternyak | 891014894e | |
Daniel Ternyak | 39fba57831 | |
Daniel Ternyak | e630b1f9ba | |
Pete Jihoon Kim | 2f23aa96de | |
Daniel Ternyak | 23cb069ca8 | |
William O'Beirne | 41c5c32d51 | |
greenkeeper[bot] | 97d58c4a18 | |
greenkeeper[bot] | 81d8a4878d | |
greenkeeper[bot] | 3ed72b880e | |
greenkeeper[bot] | 422f5677bd | |
greenkeeper[bot] | 13484b4b62 | |
William O'Beirne | 3c5dd2743e | |
William O'Beirne | c5f32a9ce2 | |
William O'Beirne | 31912c0f83 | |
William O'Beirne | cec0d690c7 | |
William O'Beirne | 1ff26baa63 | |
William O'Beirne | b574c209a6 | |
William O'Beirne | be61d804e0 | |
greenkeeper[bot] | f46df010db | |
greenkeeper[bot] | 5db958128a | |
greenkeeper[bot] | 43853fd198 | |
greenkeeper[bot] | 7807cf09aa | |
greenkeeper[bot] | b5b1ff73ad | |
Luit Hollander | 9f682f6a46 | |
greenkeeper[bot] | 20c6007a7b | |
Daniel Ternyak | ab51bde9e8 | |
greenkeeper[bot] | 5abf5ba632 | |
greenkeeper[bot] | a4c7e0e3c0 | |
greenkeeper[bot] | 643ea7c351 | |
greenkeeper[bot] | 011b8d5ce8 | |
Michael - Blurpesec | 84f5e9f00f | |
Daniel Ternyak | 0d05e8ceb5 | |
greenkeeper[bot] | d622554ab5 | |
Daniel Ternyak | 0dbad53a03 | |
Daniel Ternyak | a8a82c2d71 | |
greenkeeper[bot] | e529c7d394 | |
James Prado | 23cdff1777 | |
Daniel Ternyak | 04901d0486 | |
greenkeeper[bot] | 8b5aa9569d | |
greenkeeper[bot] | 592f90d889 | |
greenkeeper[bot] | 12de0eae45 | |
greenkeeper[bot] | 14aca1b273 | |
greenkeeper[bot] | c693f1b182 | |
greenkeeper[bot] | 8aabb627cc | |
greenkeeper[bot] | 0e692f4149 | |
Daniel Ternyak | 1cd65ec752 | |
Daniel Ternyak | 310536afc9 | |
Daniel Ternyak | 5ba6e7a0e3 | |
HenryNguyen5 | 01fc5f1a89 | |
greenkeeper[bot] | 128471dc09 | |
greenkeeper[bot] | 523d45d899 | |
greenkeeper[bot] | f900123d48 | |
greenkeeper[bot] | 0be5e1246f | |
William O'Beirne | f611452705 | |
greenkeeper[bot] | 5352b38dca | |
William O'Beirne | 6be50f74b5 | |
William O'Beirne | 408c0011ca | |
Michael H | bcdc0f546d | |
Daniel Ternyak | 273b77b390 | |
greenkeeper[bot] | 730feef3a6 | |
James Prado | 4e092d5177 | |
greenkeeper[bot] | 8a9e5b34d6 | |
Daniel Ternyak | dcfee10027 | |
aitrean | 626afe554a | |
William O'Beirne | eaa9ac392c | |
Daniel Ternyak | 42afff3ef2 | |
James Prado | 0ab226ca16 | |
William O'Beirne | 7ac546acaf | |
aitrean | df4b73721a | |
greenkeeper[bot] | abbbb46ea8 | |
greenkeeper[bot] | 24edcd5821 | |
greenkeeper[bot] | 7cc919a481 | |
greenkeeper[bot] | d45a8d4f86 | |
greenkeeper[bot] | 2c00e74ef5 | |
Daniel Ternyak | e7f88a6a0a | |
greenkeeper[bot] | 6d041ba581 | |
Daniel Ternyak | 8cb5e8bb79 | |
William O'Beirne | 82cd123632 | |
HenryNguyen5 | 785901d671 | |
Daniel Ternyak | d65f0505d0 | |
James Prado | 0da409cd12 | |
William O'Beirne | e7633c6d2f | |
HenryNguyen5 | 82d7156295 | |
James Prado | 5272bdacd5 | |
greenkeeper[bot] | 822836a536 | |
greenkeeper[bot] | 37e34381a3 | |
William O'Beirne | 39da226cd1 | |
William O'Beirne | 942eb6b341 | |
greenkeeper[bot] | 057a1095d3 | |
HenryNguyen5 | 2a4ad180d3 | |
greenkeeper[bot] | 8f3669cbc6 | |
greenkeeper[bot] | 13d522f3f5 | |
greenkeeper[bot] | 7256a98d95 | |
greenkeeper[bot] | f0a1e0287d | |
William O'Beirne | 174dea8a29 | |
greenkeeper[bot] | ca2284b20e | |
William O'Beirne | ecccdcfc33 | |
William O'Beirne | e34137270e | |
greenkeeper[bot] | 0d768d7517 | |
greenkeeper[bot] | 495ad54762 | |
greenkeeper[bot] | 387ef09ae5 | |
Daniel Ternyak | cfa2290823 | |
greenkeeper[bot] | 00a84ec0c5 | |
Daniel Ternyak | 84bae60c02 | |
greenkeeper[bot] | f748f22e2e | |
greenkeeper[bot] | 10c59ba100 | |
greenkeeper[bot] | 0a1b657c71 | |
greenkeeper[bot] | 9dc47f5f58 | |
William O'Beirne | 3f4837c7c5 | |
Daniel Ternyak | 0017d5f075 | |
HenryNguyen5 | c84740c4d4 | |
William O'Beirne | 9fd00a4f70 | |
William O'Beirne | 9ee30b957d | |
William O'Beirne | d1a2c885a2 | |
greenkeeper[bot] | ae8b123cfd | |
William O'Beirne | 83cc70f9c7 | |
Daniel Ternyak | d661f0ff5f | |
Daniel Ternyak | 13ad2ada84 | |
Daniel Ternyak | c1d352bcd0 | |
greenkeeper[bot] | ab168964be | |
greenkeeper[bot] | cbb5e5ca30 | |
William O'Beirne | 7fe2888633 | |
greenkeeper[bot] | 77ddf602cc | |
greenkeeper[bot] | 2ad766ce99 | |
William O'Beirne | 2309d05c06 | |
William O'Beirne | df52521c17 | |
greenkeeper[bot] | 2e49d4718b | |
James Prado | c631f45ab7 | |
HenryNguyen5 | 22c107fe4c | |
Danny Skubak | 2fd4730ebe | |
Daniel Ternyak | 02ffa3593a | |
William O'Beirne | 4fb342a757 | |
greenkeeper[bot] | 2ac3015ad8 | |
Daniel Ternyak | 7c0cf7cb9e | |
greenkeeper[bot] | 05b9066f9e | |
greenkeeper[bot] | dbe911f722 | |
greenkeeper[bot] | f33afac0af | |
greenkeeper[bot] | 84e9a59ab7 | |
greenkeeper[bot] | 01459b05bd | |
greenkeeper[bot] | e988aa052a | |
greenkeeper[bot] | ae525cbf1f | |
Oli Oskarsson | adc2bec161 | |
HenryNguyen5 | 75d1be6961 | |
William O'Beirne | 182eaa4329 | |
William O'Beirne | 81beab8bc0 | |
William O'Beirne | a58097eeaa | |
William O'Beirne | 592caaaf47 | |
greenkeeper[bot] | 2d13c04835 | |
James Prado | b7ba8ac22d | |
James Prado | f9c1134a16 | |
Danny Skubak | e0c4599b64 | |
greenkeeper[bot] | 8262930200 | |
Danny Skubak | 2d6dbbcb18 | |
Daniel Ternyak | ab5fa1a799 | |
greenkeeper[bot] | 2420f5488b | |
James Prado | f06d814e24 | |
Danny Skubak | f13d490f1c | |
greenkeeper[bot] | a82cbfbc72 | |
greenkeeper[bot] | c7372388df | |
greenkeeper[bot] | 2699b9b13f | |
William O'Beirne | 1713e3fa29 | |
greenkeeper[bot] | 9c9d6c2f61 | |
Danny Skubak | 446cc96de1 | |
greenkeeper[bot] | d9c7e33bc1 | |
Eddie Wang | 9fb9fcd134 | |
Daniel Ternyak | 5f07814741 | |
greenkeeper[bot] | 06eebc2186 | |
Daniel Ternyak | 93852bb97f | |
Daniel Ternyak | c2241dd9df | |
James Prado | 6108d08693 | |
HenryNguyen5 | 67b2e6491c | |
Eddie Wang | eb4fd1cce8 | |
Daniel Ternyak | b8b0cdece3 | |
Daniel Ternyak | a2eb2021cd | |
Eddie Wang | 9ee764be2e | |
Daniel Ternyak | fa8fbe531f | |
Daniel Ternyak | 7097a44f32 | |
greenkeeper[bot] | c13610eeba | |
William O'Beirne | dfb93c16ab | |
Daniel Ternyak | 75871abf5c | |
James Prado | 31e22af904 | |
James Prado | 0fa0004e3b | |
greenkeeper[bot] | 349830a699 | |
Daniel Ternyak | c079032366 | |
Olajide Ogundipe Jr | 303e44abb3 | |
William O'Beirne | 4f6e83acf4 | |
greenkeeper[bot] | 659f218b1c | |
Eddie Wang | 3a7a0822e2 | |
greenkeeper[bot] | 6df4013d4d | |
Daniel Ternyak | 2236bb173f | |
Daniel Ternyak | fe86f2f79f | |
Eddie Wang | f4b8364abc | |
Eddie Wang | db4dc516e2 | |
William O'Beirne | 418b186642 | |
William O'Beirne | 7d2c3e1990 | |
aitrean | af2e0b69e1 | |
greenkeeper[bot] | a84a6e98fc | |
greenkeeper[bot] | 1f2d5b853d | |
William O'Beirne | fb0cce1d68 | |
Jack Clancy | 26619e28cc | |
William O'Beirne | 6e2b74c79a | |
greenkeeper[bot] | c54ba441fa | |
Daniel Ternyak | d5ece361aa |
|
@ -0,0 +1 @@
|
||||||
|
Please see the [Contributor Guidelines on the wiki](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributor-Guidelines).
|
|
@ -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)
|
|
@ -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)
|
|
@ -56,3 +56,5 @@ webpack_config/server.csr
|
||||||
|
|
||||||
v8-compile-cache-0/
|
v8-compile-cache-0/
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
|
||||||
|
yarn.lock
|
|
@ -0,0 +1 @@
|
||||||
|
common/translations
|
14
.travis.yml
|
@ -13,8 +13,10 @@ before_install:
|
||||||
- export CHROME_BIN=chromium-browser
|
- export CHROME_BIN=chromium-browser
|
||||||
- export DISPLAY=:99.0
|
- export DISPLAY=:99.0
|
||||||
- sh -e /etc/init.d/xvfb start
|
- 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:
|
install:
|
||||||
- npm install --silent
|
- npm install --silent
|
||||||
|
|
||||||
|
@ -25,13 +27,7 @@ jobs:
|
||||||
- stage: test
|
- stage: test
|
||||||
script: npm run test
|
script: npm run test
|
||||||
- stage: test
|
- stage: test
|
||||||
script: npm run tslint
|
script: npm run tslint && npm run tscheck && npm run freezer && npm run freezer:validate
|
||||||
- stage: test
|
|
||||||
script: npm run tscheck
|
|
||||||
- stage: test
|
|
||||||
script: npm run freezer
|
|
||||||
- stage: test
|
|
||||||
script: npm run freezer:validate
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email:
|
email:
|
||||||
|
|
3
LICENSE
|
@ -1,6 +1,7 @@
|
||||||
MIT License
|
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
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
363
README.md
|
@ -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
|
```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
|
```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:
|
#### Unit Tests:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run test # run tests with Jest
|
# run unit tests with Jest
|
||||||
|
npm run test
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Integration Tests:
|
#### Integration Tests:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm run test:int # run tests with Jest
|
# run integration tests with Jest
|
||||||
|
npm run test:int
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Dev (HTTPS):
|
#### 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))
|
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.*`
|
2. Move the `.key` and `.crt` files into `webpack_config/server.*`
|
||||||
3. Run the following command:
|
3. Run the following command:
|
||||||
|
@ -69,300 +98,32 @@ npm run test:int
|
||||||
```
|
```
|
||||||
│
|
│
|
||||||
├── common
|
├── common
|
||||||
│ ├── actions - application actions
|
│ ├── actions - Application actions
|
||||||
│ ├── api - Services and XHR utils
|
│ ├── api - Services and XHR utils
|
||||||
│ ├── components - components according to "Redux philosophy"
|
│ ├── assets - Images, fonts, etc.
|
||||||
│ ├── config - frontend config depending on REACT_WEBPACK_ENV
|
│ ├── components - Components according to "Redux philosophy"
|
||||||
│ ├── containers - containers according to "Redux philosophy"
|
│ ├── config - Various config data and hard-coded json
|
||||||
│ ├── reducers - application reducers
|
│ ├── containers - Containers according to "Redux philosophy"
|
||||||
│ ├── routing - application routing
|
│ ├── libs - Framework-agnostic libraries and business logic
|
||||||
│ ├── index.tsx - entry
|
│ ├── reducers - Redux reducers
|
||||||
│ ├── index.html
|
│ ├── sagas - Redux sagas
|
||||||
├── static
|
│ ├── sass - SCSS styles, variables, mixins
|
||||||
├── webpack_config - Webpack configuration
|
│ ├── selectors - Redux selectors
|
||||||
├── jest_config - Jest configuration
|
│ ├── 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
|
### More information is available on the [Wiki Pages](https://github.com/MyCryptoHQ/MyCrypto/wiki)
|
||||||
|
|
||||||
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 ` `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>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Thanks & Support
|
## Thanks & Support
|
||||||
|
|
||||||
|
|
111
common/Root.tsx
|
@ -1,35 +1,57 @@
|
||||||
import React, { Component } from 'react';
|
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';
|
import { withRouter, Switch, Redirect, HashRouter, Route, BrowserRouter } from 'react-router-dom';
|
||||||
// Components
|
// Components
|
||||||
import Contracts from 'containers/Tabs/Contracts';
|
import Contracts from 'containers/Tabs/Contracts';
|
||||||
import ENS from 'containers/Tabs/ENS';
|
import ENS from 'containers/Tabs/ENS';
|
||||||
import GenerateWallet from 'containers/Tabs/GenerateWallet';
|
import GenerateWallet from 'containers/Tabs/GenerateWallet';
|
||||||
import Help from 'containers/Tabs/Help';
|
|
||||||
import SendTransaction from 'containers/Tabs/SendTransaction';
|
import SendTransaction from 'containers/Tabs/SendTransaction';
|
||||||
import Swap from 'containers/Tabs/Swap';
|
import Swap from 'containers/Tabs/Swap';
|
||||||
import SignAndVerifyMessage from 'containers/Tabs/SignAndVerifyMessage';
|
import SignAndVerifyMessage from 'containers/Tabs/SignAndVerifyMessage';
|
||||||
import BroadcastTx from 'containers/Tabs/BroadcastTx';
|
import BroadcastTx from 'containers/Tabs/BroadcastTx';
|
||||||
|
import CheckTransaction from 'containers/Tabs/CheckTransaction';
|
||||||
import ErrorScreen from 'components/ErrorScreen';
|
import ErrorScreen from 'components/ErrorScreen';
|
||||||
import PageNotFound from 'components/PageNotFound';
|
import PageNotFound from 'components/PageNotFound';
|
||||||
import LogOutPrompt from 'components/LogOutPrompt';
|
import LogOutPrompt from 'components/LogOutPrompt';
|
||||||
import { Aux } from 'components/ui';
|
import { TitleBar } from 'components/ui';
|
||||||
import { Store } from 'redux';
|
import { Store } from 'redux';
|
||||||
|
import { pollOfflineStatus, TPollOfflineStatus } from 'actions/config';
|
||||||
import { AppState } from 'reducers';
|
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>;
|
store: Store<AppState>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface StateProps {
|
||||||
|
networkUnit: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface DispatchProps {
|
||||||
|
pollOfflineStatus: TPollOfflineStatus;
|
||||||
|
setUnitMeta: TSetUnitMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
type Props = OwnProps & StateProps & DispatchProps;
|
||||||
|
|
||||||
interface State {
|
interface State {
|
||||||
error: Error | null;
|
error: Error | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class Root extends Component<Props, State> {
|
class RootClass extends Component<Props, State> {
|
||||||
public state = {
|
public state = {
|
||||||
error: null
|
error: null
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public componentDidMount() {
|
||||||
|
this.props.pollOfflineStatus();
|
||||||
|
this.props.setUnitMeta(this.props.networkUnit);
|
||||||
|
}
|
||||||
|
|
||||||
public componentDidCatch(error: Error) {
|
public componentDidCatch(error: Error) {
|
||||||
this.setState({ error });
|
this.setState({ error });
|
||||||
}
|
}
|
||||||
|
@ -42,39 +64,45 @@ export default class Root extends Component<Props, State> {
|
||||||
return <ErrorScreen error={error} />;
|
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 = (
|
const routes = (
|
||||||
<Switch>
|
<CaptureRouteNotFound>
|
||||||
<Route exact={true} path="/" component={GenerateWallet} />
|
<Switch>
|
||||||
<Route path="/generate" component={GenerateWallet}>
|
<Redirect exact={true} from="/" to="/account" />
|
||||||
<Route path="keystore" component={GenerateWallet} />
|
<Route path="/account" component={SendTransaction} />
|
||||||
<Route path="mnemonic" component={GenerateWallet} />
|
<Route path="/generate" component={GenerateWallet} />
|
||||||
</Route>
|
<Route path="/swap" component={Swap} />
|
||||||
<Route path="/help" component={Help} />
|
<Route path="/contracts" component={Contracts} />
|
||||||
<Route path="/swap" component={Swap} />
|
<Route path="/ens" component={ENS} exact={true} />
|
||||||
<Route path="/account" component={SendTransaction}>
|
<Route path="/sign-and-verify-message" component={SignAndVerifyMessage} />
|
||||||
<Route path="send" component={SendTransaction} />
|
<Route path="/tx-status" component={CheckTransaction} exact={true} />
|
||||||
<Route path="info" component={SendTransaction} />
|
<Route path="/pushTx" component={BroadcastTx} />
|
||||||
</Route>
|
<RouteNotFound />
|
||||||
<Route path="/send-transaction" component={SendTransaction} />
|
</Switch>
|
||||||
<Route path="/contracts" component={Contracts} />
|
</CaptureRouteNotFound>
|
||||||
<Route path="/ens" component={ENS} />
|
|
||||||
<Route path="/sign-and-verify-message" component={SignAndVerifyMessage} />
|
|
||||||
<Route path="/pushTx" component={BroadcastTx} />
|
|
||||||
<Route component={PageNotFound} />
|
|
||||||
</Switch>
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const Router = process.env.BUILD_DOWNLOADABLE ? HashRouter : BrowserRouter;
|
const Router =
|
||||||
|
process.env.BUILD_DOWNLOADABLE && process.env.NODE_ENV === 'production'
|
||||||
|
? HashRouter
|
||||||
|
: BrowserRouter;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Provider store={store} key={Math.random()}>
|
<Provider store={store} key={Math.random()}>
|
||||||
<Router key={Math.random()}>
|
<Router key={Math.random()}>
|
||||||
<Aux>
|
<React.Fragment>
|
||||||
|
{process.env.BUILD_ELECTRON && <TitleBar />}
|
||||||
{routes}
|
{routes}
|
||||||
<LegacyRoutes />
|
<LegacyRoutes />
|
||||||
<LogOutPrompt />
|
<LogOutPrompt />
|
||||||
</Aux>
|
</React.Fragment>
|
||||||
</Router>
|
</Router>
|
||||||
</Provider>
|
</Provider>
|
||||||
);
|
);
|
||||||
|
@ -83,14 +111,15 @@ export default class Root extends Component<Props, State> {
|
||||||
|
|
||||||
const LegacyRoutes = withRouter(props => {
|
const LegacyRoutes = withRouter(props => {
|
||||||
const { history } = props;
|
const { history } = props;
|
||||||
const { pathname, hash } = props.location;
|
const { pathname } = props.location;
|
||||||
|
let { hash } = props.location;
|
||||||
|
|
||||||
if (pathname === '/') {
|
if (pathname === '/') {
|
||||||
|
hash = hash.split('?')[0];
|
||||||
switch (hash) {
|
switch (hash) {
|
||||||
case '#send-transaction':
|
case '#send-transaction':
|
||||||
case '#offline-transaction':
|
case '#offline-transaction':
|
||||||
history.push('/send-transaction');
|
return <RedirectWithQuery from={pathname} to={'account/send'} />;
|
||||||
break;
|
|
||||||
case '#generate-wallet':
|
case '#generate-wallet':
|
||||||
history.push('/');
|
history.push('/');
|
||||||
break;
|
break;
|
||||||
|
@ -107,16 +136,26 @@ const LegacyRoutes = withRouter(props => {
|
||||||
history.push('/account/info');
|
history.push('/account/info');
|
||||||
break;
|
break;
|
||||||
case '#check-tx-status':
|
case '#check-tx-status':
|
||||||
history.push('/check-tx-status');
|
return <RedirectWithQuery from={pathname} to={'/tx-status'} />;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Switch>
|
<Switch>
|
||||||
<Redirect from="/signmsg.html" to="/sign-and-verify-message" />
|
<RedirectWithQuery from="/signmsg.html" to="/sign-and-verify-message" />
|
||||||
<Redirect from="/helpers.html" to="/helpers" />
|
<RedirectWithQuery from="/helpers.html" to="/helpers" />
|
||||||
<Redirect from="/send-transaction" to="/account/send" />
|
<RedirectWithQuery from="/send-transaction" to={'/account/send'} />
|
||||||
</Switch>
|
</Switch>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const mapStateToProps = (state: AppState) => {
|
||||||
|
return {
|
||||||
|
networkUnit: getNetworkUnit(state)
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export default connect(mapStateToProps, {
|
||||||
|
pollOfflineStatus,
|
||||||
|
setUnitMeta
|
||||||
|
})(RootClass);
|
||||||
|
|
|
@ -1,18 +1,17 @@
|
||||||
import * as interfaces from './actionTypes';
|
import * as interfaces from './actionTypes';
|
||||||
import { TypeKeys } from './constants';
|
import { TypeKeys } from './constants';
|
||||||
import { NodeConfig, CustomNodeConfig, CustomNetworkConfig } from 'config/data';
|
|
||||||
|
|
||||||
export type TForceOfflineConfig = typeof forceOfflineConfig;
|
export type TToggleOffline = typeof toggleOffline;
|
||||||
export function forceOfflineConfig(): interfaces.ForceOfflineAction {
|
export function toggleOffline(): interfaces.ToggleOfflineAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.CONFIG_FORCE_OFFLINE
|
type: TypeKeys.CONFIG_TOGGLE_OFFLINE
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TToggleOfflineConfig = typeof toggleOfflineConfig;
|
export type TToggleAutoGasLimit = typeof toggleAutoGasLimit;
|
||||||
export function toggleOfflineConfig(): interfaces.ToggleOfflineAction {
|
export function toggleAutoGasLimit(): interfaces.ToggleAutoGasLimitAction {
|
||||||
return {
|
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 type TChangeNode = typeof changeNode;
|
||||||
export function changeNode(nodeSelection: string, node: NodeConfig): interfaces.ChangeNodeAction {
|
export function changeNode(
|
||||||
|
payload: interfaces.ChangeNodeAction['payload']
|
||||||
|
): interfaces.ChangeNodeAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.CONFIG_NODE_CHANGE,
|
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 type TAddCustomNode = typeof addCustomNode;
|
||||||
export function addCustomNode(payload: CustomNodeConfig): interfaces.AddCustomNodeAction {
|
export function addCustomNode(
|
||||||
|
payload: interfaces.AddCustomNodeAction['payload']
|
||||||
|
): interfaces.AddCustomNodeAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.CONFIG_ADD_CUSTOM_NODE,
|
type: TypeKeys.CONFIG_ADD_CUSTOM_NODE,
|
||||||
payload
|
payload
|
||||||
|
@ -56,7 +67,9 @@ export function addCustomNode(payload: CustomNodeConfig): interfaces.AddCustomNo
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TRemoveCustomNode = typeof removeCustomNode;
|
export type TRemoveCustomNode = typeof removeCustomNode;
|
||||||
export function removeCustomNode(payload: CustomNodeConfig): interfaces.RemoveCustomNodeAction {
|
export function removeCustomNode(
|
||||||
|
payload: interfaces.RemoveCustomNodeAction['payload']
|
||||||
|
): interfaces.RemoveCustomNodeAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NODE,
|
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NODE,
|
||||||
payload
|
payload
|
||||||
|
@ -64,7 +77,9 @@ export function removeCustomNode(payload: CustomNodeConfig): interfaces.RemoveCu
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TAddCustomNetwork = typeof addCustomNetwork;
|
export type TAddCustomNetwork = typeof addCustomNetwork;
|
||||||
export function addCustomNetwork(payload: CustomNetworkConfig): interfaces.AddCustomNetworkAction {
|
export function addCustomNetwork(
|
||||||
|
payload: interfaces.AddCustomNetworkAction['payload']
|
||||||
|
): interfaces.AddCustomNetworkAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.CONFIG_ADD_CUSTOM_NETWORK,
|
type: TypeKeys.CONFIG_ADD_CUSTOM_NETWORK,
|
||||||
payload
|
payload
|
||||||
|
@ -73,7 +88,7 @@ export function addCustomNetwork(payload: CustomNetworkConfig): interfaces.AddCu
|
||||||
|
|
||||||
export type TRemoveCustomNetwork = typeof removeCustomNetwork;
|
export type TRemoveCustomNetwork = typeof removeCustomNetwork;
|
||||||
export function removeCustomNetwork(
|
export function removeCustomNetwork(
|
||||||
payload: CustomNetworkConfig
|
payload: interfaces.RemoveCustomNetworkAction['payload']
|
||||||
): interfaces.RemoveCustomNetworkAction {
|
): interfaces.RemoveCustomNetworkAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NETWORK,
|
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 type TWeb3UnsetNode = typeof web3UnsetNode;
|
||||||
export function web3UnsetNode(): interfaces.Web3UnsetNodeAction {
|
export function web3UnsetNode(): interfaces.Web3UnsetNodeAction {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
import { TypeKeys } from './constants';
|
import { TypeKeys } from './constants';
|
||||||
import { NodeConfig, CustomNodeConfig, CustomNetworkConfig } from 'config/data';
|
import { CustomNodeConfig, Web3NodeConfig } from 'types/node';
|
||||||
|
import { CustomNetworkConfig } from 'types/network';
|
||||||
|
|
||||||
/*** Toggle Offline ***/
|
/*** Toggle Offline ***/
|
||||||
export interface ToggleOfflineAction {
|
export interface ToggleOfflineAction {
|
||||||
type: TypeKeys.CONFIG_TOGGLE_OFFLINE;
|
type: TypeKeys.CONFIG_TOGGLE_OFFLINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Force Offline ***/
|
export interface ToggleAutoGasLimitAction {
|
||||||
export interface ForceOfflineAction {
|
type: TypeKeys.CONFIG_TOGGLE_AUTO_GAS_LIMIT;
|
||||||
type: TypeKeys.CONFIG_FORCE_OFFLINE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Change Language ***/
|
/*** Change Language ***/
|
||||||
|
@ -20,10 +20,9 @@ export interface ChangeLanguageAction {
|
||||||
/*** Change Node ***/
|
/*** Change Node ***/
|
||||||
export interface ChangeNodeAction {
|
export interface ChangeNodeAction {
|
||||||
type: TypeKeys.CONFIG_NODE_CHANGE;
|
type: TypeKeys.CONFIG_NODE_CHANGE;
|
||||||
// FIXME $keyof?
|
|
||||||
payload: {
|
payload: {
|
||||||
nodeSelection: string;
|
nodeId: string;
|
||||||
node: NodeConfig;
|
networkId: string;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,29 +36,34 @@ export interface ChangeNodeIntentAction {
|
||||||
type: TypeKeys.CONFIG_NODE_CHANGE_INTENT;
|
type: TypeKeys.CONFIG_NODE_CHANGE_INTENT;
|
||||||
payload: string;
|
payload: string;
|
||||||
}
|
}
|
||||||
|
/*** Force Change Node ***/
|
||||||
|
export interface ChangeNodeForceAction {
|
||||||
|
type: TypeKeys.CONFIG_NODE_CHANGE_FORCE;
|
||||||
|
payload: string;
|
||||||
|
}
|
||||||
|
|
||||||
/*** Add Custom Node ***/
|
/*** Add Custom Node ***/
|
||||||
export interface AddCustomNodeAction {
|
export interface AddCustomNodeAction {
|
||||||
type: TypeKeys.CONFIG_ADD_CUSTOM_NODE;
|
type: TypeKeys.CONFIG_ADD_CUSTOM_NODE;
|
||||||
payload: CustomNodeConfig;
|
payload: { id: string; config: CustomNodeConfig };
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Remove Custom Node ***/
|
/*** Remove Custom Node ***/
|
||||||
export interface RemoveCustomNodeAction {
|
export interface RemoveCustomNodeAction {
|
||||||
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NODE;
|
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NODE;
|
||||||
payload: CustomNodeConfig;
|
payload: { id: string };
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Add Custom Network ***/
|
/*** Add Custom Network ***/
|
||||||
export interface AddCustomNetworkAction {
|
export interface AddCustomNetworkAction {
|
||||||
type: TypeKeys.CONFIG_ADD_CUSTOM_NETWORK;
|
type: TypeKeys.CONFIG_ADD_CUSTOM_NETWORK;
|
||||||
payload: CustomNetworkConfig;
|
payload: { id: string; config: CustomNetworkConfig };
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Remove Custom Network ***/
|
/*** Remove Custom Network ***/
|
||||||
export interface RemoveCustomNetworkAction {
|
export interface RemoveCustomNetworkAction {
|
||||||
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NETWORK;
|
type: TypeKeys.CONFIG_REMOVE_CUSTOM_NETWORK;
|
||||||
payload: CustomNetworkConfig;
|
payload: { id: string };
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Set Latest Block ***/
|
/*** Set Latest Block ***/
|
||||||
|
@ -73,17 +77,28 @@ export interface Web3UnsetNodeAction {
|
||||||
type: TypeKeys.CONFIG_NODE_WEB3_UNSET;
|
type: TypeKeys.CONFIG_NODE_WEB3_UNSET;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Union Type ***/
|
/*** Set Web3 as a Node ***/
|
||||||
export type ConfigAction =
|
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
|
| ChangeNodeAction
|
||||||
|
| ChangeNodeIntentAction
|
||||||
|
| Web3UnsetNodeAction
|
||||||
|
| Web3setNodeAction;
|
||||||
|
|
||||||
|
export type MetaAction =
|
||||||
| ChangeLanguageAction
|
| ChangeLanguageAction
|
||||||
| ToggleOfflineAction
|
| ToggleOfflineAction
|
||||||
|
| ToggleAutoGasLimitAction
|
||||||
| PollOfflineStatus
|
| PollOfflineStatus
|
||||||
| ForceOfflineAction
|
| SetLatestBlockAction;
|
||||||
| ChangeNodeIntentAction
|
|
||||||
| AddCustomNodeAction
|
/*** Union Type ***/
|
||||||
| RemoveCustomNodeAction
|
export type ConfigAction = CustomNetworkAction | CustomNodeAction | NodeAction | MetaAction;
|
||||||
| AddCustomNetworkAction
|
|
||||||
| RemoveCustomNetworkAction
|
|
||||||
| SetLatestBlockAction
|
|
||||||
| Web3UnsetNodeAction;
|
|
||||||
|
|
|
@ -1,14 +1,20 @@
|
||||||
export enum TypeKeys {
|
export enum TypeKeys {
|
||||||
CONFIG_LANGUAGE_CHANGE = 'CONFIG_LANGUAGE_CHANGE',
|
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 = 'CONFIG_NODE_CHANGE',
|
||||||
CONFIG_NODE_CHANGE_INTENT = 'CONFIG_NODE_CHANGE_INTENT',
|
CONFIG_NODE_CHANGE_INTENT = 'CONFIG_NODE_CHANGE_INTENT',
|
||||||
CONFIG_TOGGLE_OFFLINE = 'CONFIG_TOGGLE_OFFLINE',
|
CONFIG_NODE_CHANGE_FORCE = 'CONFIG_NODE_CHANGE_FORCE',
|
||||||
CONFIG_FORCE_OFFLINE = 'CONFIG_FORCE_OFFLINE',
|
|
||||||
CONFIG_POLL_OFFLINE_STATUS = 'CONFIG_POLL_OFFLINE_STATUS',
|
|
||||||
CONFIG_ADD_CUSTOM_NODE = 'CONFIG_ADD_CUSTOM_NODE',
|
CONFIG_ADD_CUSTOM_NODE = 'CONFIG_ADD_CUSTOM_NODE',
|
||||||
CONFIG_REMOVE_CUSTOM_NODE = 'CONFIG_REMOVE_CUSTOM_NODE',
|
CONFIG_REMOVE_CUSTOM_NODE = 'CONFIG_REMOVE_CUSTOM_NODE',
|
||||||
|
|
||||||
CONFIG_ADD_CUSTOM_NETWORK = 'CONFIG_ADD_CUSTOM_NETWORK',
|
CONFIG_ADD_CUSTOM_NETWORK = 'CONFIG_ADD_CUSTOM_NETWORK',
|
||||||
CONFIG_REMOVE_CUSTOM_NETWORK = 'CONFIG_REMOVE_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'
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { Token } from 'config/data';
|
|
||||||
import * as interfaces from './actionTypes';
|
import * as interfaces from './actionTypes';
|
||||||
import { TypeKeys } from './constants';
|
import { TypeKeys } from './constants';
|
||||||
|
import { Token } from 'types/network';
|
||||||
|
|
||||||
export type TAddCustomToken = typeof addCustomToken;
|
export type TAddCustomToken = typeof addCustomToken;
|
||||||
export function addCustomToken(payload: Token): interfaces.AddCustomTokenAction {
|
export function addCustomToken(payload: Token): interfaces.AddCustomTokenAction {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import { Token } from 'config/data';
|
|
||||||
import { TypeKeys } from './constants';
|
import { TypeKeys } from './constants';
|
||||||
|
import { Token } from 'types/network';
|
||||||
|
|
||||||
/*** Add custom token ***/
|
/*** Add custom token ***/
|
||||||
export interface AddCustomTokenAction {
|
export interface AddCustomTokenAction {
|
||||||
type: TypeKeys.CUSTOM_TOKEN_ADD;
|
type: TypeKeys.CUSTOM_TOKEN_ADD;
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -0,0 +1 @@
|
||||||
|
export * from './resolveDomain';
|
|
@ -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 }
|
||||||
|
});
|
|
@ -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;
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
import { ResolveDomainAction } from './resolveDomain';
|
||||||
|
export * from './resolveDomain';
|
||||||
|
|
||||||
|
export type EnsAction = ResolveDomainAction;
|
|
@ -0,0 +1 @@
|
||||||
|
export * from './actionTypes';
|
|
@ -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;
|
|
@ -1,2 +1,6 @@
|
||||||
export const ENS_RESOLVE = 'ENS_RESOLVE';
|
export enum TypeKeys {
|
||||||
export const ENS_CACHE = 'ENS_CACHE';
|
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'
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
};
|
||||||
|
}
|
|
@ -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;
|
|
@ -0,0 +1,4 @@
|
||||||
|
export enum TypeKeys {
|
||||||
|
GAS_FETCH_ESTIMATES = 'GAS_FETCH_ESTIMATES',
|
||||||
|
GAS_SET_ESTIMATES = 'GAS_SET_ESTIMATES'
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
export * from './actionCreators';
|
||||||
|
export * from './actionTypes';
|
||||||
|
export * from './constants';
|
|
@ -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
|
||||||
|
};
|
||||||
|
}
|
|
@ -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;
|
|
@ -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'
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from './actionTypes';
|
||||||
|
export * from './actionCreators';
|
|
@ -1,12 +1,12 @@
|
||||||
import * as interfaces from './actionTypes';
|
import * as interfaces from './actionTypes';
|
||||||
import { TypeKeys } from './constants';
|
import { TypeKeys } from './constants';
|
||||||
import { fetchRates, CCResponse } from './actionPayloads';
|
import { CCResponse } from 'api/rates';
|
||||||
|
|
||||||
export type TFetchCCRates = typeof fetchCCRates;
|
export type TFetchCCRatesRequested = typeof fetchCCRatesRequested;
|
||||||
export function fetchCCRates(symbols: string[] = []): interfaces.FetchCCRates {
|
export function fetchCCRatesRequested(symbols: string[] = []): interfaces.FetchCCRatesRequested {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.RATES_FETCH_CC,
|
type: TypeKeys.RATES_FETCH_CC_REQUESTED,
|
||||||
payload: fetchRates(symbols)
|
payload: symbols
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
import { TypeKeys } from './constants';
|
import { TypeKeys } from './constants';
|
||||||
import { CCResponse } from './actionPayloads';
|
import { CCResponse } from 'api/rates';
|
||||||
|
|
||||||
export interface FetchCCRates {
|
export interface FetchCCRatesRequested {
|
||||||
type: TypeKeys.RATES_FETCH_CC;
|
type: TypeKeys.RATES_FETCH_CC_REQUESTED;
|
||||||
payload: Promise<CCResponse>;
|
payload: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Set rates ***/
|
/*** Set rates ***/
|
||||||
|
@ -17,4 +17,4 @@ export interface FetchCCRatesFailed {
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** Union Type ***/
|
/*** Union Type ***/
|
||||||
export type RatesAction = FetchCCRates | FetchCCRatesSucceeded | FetchCCRatesFailed;
|
export type RatesAction = FetchCCRatesRequested | FetchCCRatesSucceeded | FetchCCRatesFailed;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
export enum TypeKeys {
|
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_FAILED = 'RATES_FETCH_CC_FAILED',
|
||||||
RATES_FETCH_CC_SUCCEEDED = 'RATES_FETCH_CC_SUCCEEDED'
|
RATES_FETCH_CC_SUCCEEDED = 'RATES_FETCH_CC_SUCCEEDED'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,2 @@
|
||||||
export * from './actionCreators';
|
export * from './actionCreators';
|
||||||
export * from './actionTypes';
|
export * from './actionTypes';
|
||||||
export * from './actionPayloads';
|
|
||||||
|
|
|
@ -27,10 +27,10 @@ export function loadBityRatesSucceededSwap(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TLoadShapeshiftSucceededSwap = typeof loadShapeshiftRatesSucceededSwap;
|
export type TLoadShapeshiftRatesSucceededSwap = typeof loadShapeshiftRatesSucceededSwap;
|
||||||
export function loadShapeshiftRatesSucceededSwap(
|
export function loadShapeshiftRatesSucceededSwap(
|
||||||
payload
|
payload: interfaces.LoadShapeshiftRatesSucceededSwapAction['payload']
|
||||||
): interfaces.LoadShapshiftRatesSucceededSwapAction {
|
): interfaces.LoadShapeshiftRatesSucceededSwapAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_SUCCEEDED,
|
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_SUCCEEDED,
|
||||||
payload
|
payload
|
||||||
|
@ -59,13 +59,27 @@ export function loadBityRatesRequestedSwap(): interfaces.LoadBityRatesRequestedS
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TLoadShapeshiftRequestedSwap = typeof loadShapeshiftRatesRequestedSwap;
|
export type TLoadShapeshiftRatesRequestedSwap = typeof loadShapeshiftRatesRequestedSwap;
|
||||||
export function loadShapeshiftRatesRequestedSwap(): interfaces.LoadShapeshiftRequestedSwapAction {
|
export function loadShapeshiftRatesRequestedSwap(): interfaces.LoadShapeshiftRatesRequestedSwapAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED
|
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 type TStopLoadBityRatesSwap = typeof stopLoadBityRatesSwap;
|
||||||
export function stopLoadBityRatesSwap(): interfaces.StopLoadBityRatesSwapAction {
|
export function stopLoadBityRatesSwap(): interfaces.StopLoadBityRatesSwapAction {
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -8,7 +8,7 @@ export interface Pairs {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SwapInput {
|
export interface SwapInput {
|
||||||
id: string;
|
label: string;
|
||||||
amount: number | string;
|
amount: number | string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ export interface LoadBityRatesSucceededSwapAction {
|
||||||
payload: ApiResponse;
|
payload: ApiResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LoadShapshiftRatesSucceededSwapAction {
|
export interface LoadShapeshiftRatesSucceededSwapAction {
|
||||||
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_SUCCEEDED;
|
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_SUCCEEDED;
|
||||||
payload: ApiResponse;
|
payload: ApiResponse;
|
||||||
}
|
}
|
||||||
|
@ -59,12 +59,18 @@ export interface RestartSwapAction {
|
||||||
|
|
||||||
export interface LoadBityRatesRequestedSwapAction {
|
export interface LoadBityRatesRequestedSwapAction {
|
||||||
type: TypeKeys.SWAP_LOAD_BITY_RATES_REQUESTED;
|
type: TypeKeys.SWAP_LOAD_BITY_RATES_REQUESTED;
|
||||||
payload?: null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LoadShapeshiftRequestedSwapAction {
|
export interface LoadShapeshiftRatesRequestedSwapAction {
|
||||||
type: TypeKeys.SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED;
|
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 {
|
export interface ChangeStepSwapAction {
|
||||||
|
@ -240,12 +246,14 @@ export interface ShowLiteSendAction {
|
||||||
export type SwapAction =
|
export type SwapAction =
|
||||||
| ChangeStepSwapAction
|
| ChangeStepSwapAction
|
||||||
| InitSwap
|
| InitSwap
|
||||||
| LoadBityRatesSucceededSwapAction
|
|
||||||
| LoadShapshiftRatesSucceededSwapAction
|
|
||||||
| DestinationAddressSwapAction
|
| DestinationAddressSwapAction
|
||||||
| RestartSwapAction
|
| RestartSwapAction
|
||||||
| LoadBityRatesRequestedSwapAction
|
| LoadBityRatesRequestedSwapAction
|
||||||
| LoadShapeshiftRequestedSwapAction
|
| LoadBityRatesSucceededSwapAction
|
||||||
|
| LoadBityRatesFailedSwapAction
|
||||||
|
| LoadShapeshiftRatesRequestedSwapAction
|
||||||
|
| LoadShapeshiftRatesSucceededSwapAction
|
||||||
|
| LoadShapeshiftRatesFailedSwapAction
|
||||||
| StopLoadBityRatesSwapAction
|
| StopLoadBityRatesSwapAction
|
||||||
| StopLoadShapeshiftRatesSwapAction
|
| StopLoadShapeshiftRatesSwapAction
|
||||||
| BityOrderCreateRequestedSwapAction
|
| BityOrderCreateRequestedSwapAction
|
||||||
|
|
|
@ -7,6 +7,8 @@ export enum TypeKeys {
|
||||||
SWAP_RESTART = 'SWAP_RESTART',
|
SWAP_RESTART = 'SWAP_RESTART',
|
||||||
SWAP_LOAD_BITY_RATES_REQUESTED = 'SWAP_LOAD_BITY_RATES_REQUESTED',
|
SWAP_LOAD_BITY_RATES_REQUESTED = 'SWAP_LOAD_BITY_RATES_REQUESTED',
|
||||||
SWAP_LOAD_SHAPESHIFT_RATES_REQUESTED = 'SWAP_LOAD_SHAPESHIFT_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_BITY_RATES = 'SWAP_STOP_LOAD_BITY_RATES',
|
||||||
SWAP_STOP_LOAD_SHAPESHIFT_RATES = 'SWAP_STOP_LOAD_SHAPESHIFT_RATES',
|
SWAP_STOP_LOAD_SHAPESHIFT_RATES = 'SWAP_STOP_LOAD_SHAPESHIFT_RATES',
|
||||||
SWAP_ORDER_TIME = 'SWAP_ORDER_TIME',
|
SWAP_ORDER_TIME = 'SWAP_ORDER_TIME',
|
||||||
|
|
|
@ -6,6 +6,7 @@ import {
|
||||||
SetValueFieldAction,
|
SetValueFieldAction,
|
||||||
InputGasLimitAction,
|
InputGasLimitAction,
|
||||||
InputGasPriceAction,
|
InputGasPriceAction,
|
||||||
|
InputGasPriceIntentAction,
|
||||||
InputDataAction,
|
InputDataAction,
|
||||||
InputNonceAction,
|
InputNonceAction,
|
||||||
ResetAction,
|
ResetAction,
|
||||||
|
@ -25,6 +26,12 @@ const inputGasPrice = (payload: InputGasPriceAction['payload']) => ({
|
||||||
payload
|
payload
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type TInputGasPriceIntent = typeof inputGasPrice;
|
||||||
|
const inputGasPriceIntent = (payload: InputGasPriceIntentAction['payload']) => ({
|
||||||
|
type: TypeKeys.GAS_PRICE_INPUT_INTENT,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
|
||||||
type TInputNonce = typeof inputNonce;
|
type TInputNonce = typeof inputNonce;
|
||||||
const inputNonce = (payload: InputNonceAction['payload']) => ({
|
const inputNonce = (payload: InputNonceAction['payload']) => ({
|
||||||
type: TypeKeys.NONCE_INPUT,
|
type: TypeKeys.NONCE_INPUT,
|
||||||
|
@ -74,11 +81,15 @@ const setGasPriceField = (payload: SetGasPriceFieldAction['payload']): SetGasPri
|
||||||
});
|
});
|
||||||
|
|
||||||
type TReset = typeof reset;
|
type TReset = typeof reset;
|
||||||
const reset = (): ResetAction => ({ type: TypeKeys.RESET });
|
const reset = (payload: ResetAction['payload'] = { include: {}, exclude: {} }): ResetAction => ({
|
||||||
|
type: TypeKeys.RESET,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
|
||||||
export {
|
export {
|
||||||
TInputGasLimit,
|
TInputGasLimit,
|
||||||
TInputGasPrice,
|
TInputGasPrice,
|
||||||
|
TInputGasPriceIntent,
|
||||||
TInputNonce,
|
TInputNonce,
|
||||||
TInputData,
|
TInputData,
|
||||||
TSetGasLimitField,
|
TSetGasLimitField,
|
||||||
|
@ -90,6 +101,7 @@ export {
|
||||||
TReset,
|
TReset,
|
||||||
inputGasLimit,
|
inputGasLimit,
|
||||||
inputGasPrice,
|
inputGasPrice,
|
||||||
|
inputGasPriceIntent,
|
||||||
inputNonce,
|
inputNonce,
|
||||||
inputData,
|
inputData,
|
||||||
setGasLimitField,
|
setGasLimitField,
|
||||||
|
|
|
@ -5,23 +5,22 @@ import {
|
||||||
SetTokenToMetaAction
|
SetTokenToMetaAction
|
||||||
} from 'actions/transaction';
|
} from 'actions/transaction';
|
||||||
|
|
||||||
type TSetTokenBalance = typeof setTokenValue;
|
export type TSetTokenTo = typeof setTokenTo;
|
||||||
type TSetUnitMeta = typeof setUnitMeta;
|
export const setTokenTo = (payload: SetTokenToMetaAction['payload']): SetTokenToMetaAction => ({
|
||||||
type TSetTokenTo = typeof setTokenTo;
|
|
||||||
|
|
||||||
const setTokenTo = (payload: SetTokenToMetaAction['payload']): SetTokenToMetaAction => ({
|
|
||||||
type: TypeKeys.TOKEN_TO_META_SET,
|
type: TypeKeys.TOKEN_TO_META_SET,
|
||||||
payload
|
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,
|
type: TypeKeys.TOKEN_VALUE_META_SET,
|
||||||
payload
|
payload
|
||||||
});
|
});
|
||||||
|
|
||||||
const setUnitMeta = (payload: SetUnitMetaAction['payload']): SetUnitMetaAction => ({
|
export type TSetUnitMeta = typeof setUnitMeta;
|
||||||
|
export const setUnitMeta = (payload: SetUnitMetaAction['payload']): SetUnitMetaAction => ({
|
||||||
type: TypeKeys.UNIT_META_SET,
|
type: TypeKeys.UNIT_META_SET,
|
||||||
payload
|
payload
|
||||||
});
|
});
|
||||||
|
|
||||||
export { TSetUnitMeta, TSetTokenBalance, TSetTokenTo, setUnitMeta, setTokenValue, setTokenTo };
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import {
|
import {
|
||||||
|
TypeKeys,
|
||||||
EstimateGasFailedAction,
|
EstimateGasFailedAction,
|
||||||
EstimateGasRequestedAction,
|
EstimateGasRequestedAction,
|
||||||
TypeKeys,
|
EstimateGasTimeoutAction,
|
||||||
EstimateGasSucceededAction,
|
EstimateGasSucceededAction,
|
||||||
GetFromRequestedAction,
|
GetFromRequestedAction,
|
||||||
GetFromSucceededAction,
|
GetFromSucceededAction,
|
||||||
|
@ -29,6 +30,11 @@ const estimateGasFailed = (): EstimateGasFailedAction => ({
|
||||||
type: TypeKeys.ESTIMATE_GAS_FAILED
|
type: TypeKeys.ESTIMATE_GAS_FAILED
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type TEstimateGasTimedout = typeof estimateGasTimedout;
|
||||||
|
const estimateGasTimedout = (): EstimateGasTimeoutAction => ({
|
||||||
|
type: TypeKeys.ESTIMATE_GAS_TIMEDOUT
|
||||||
|
});
|
||||||
|
|
||||||
type TGetFromRequested = typeof getFromRequested;
|
type TGetFromRequested = typeof getFromRequested;
|
||||||
const getFromRequested = (): GetFromRequestedAction => ({
|
const getFromRequested = (): GetFromRequestedAction => ({
|
||||||
type: TypeKeys.GET_FROM_REQUESTED
|
type: TypeKeys.GET_FROM_REQUESTED
|
||||||
|
@ -63,6 +69,7 @@ const getNonceFailed = (): GetNonceFailedAction => ({
|
||||||
export {
|
export {
|
||||||
estimateGasRequested,
|
estimateGasRequested,
|
||||||
estimateGasFailed,
|
estimateGasFailed,
|
||||||
|
estimateGasTimedout,
|
||||||
estimateGasSucceeded,
|
estimateGasSucceeded,
|
||||||
getFromRequested,
|
getFromRequested,
|
||||||
getFromSucceeded,
|
getFromSucceeded,
|
||||||
|
@ -73,6 +80,7 @@ export {
|
||||||
TEstimateGasRequested,
|
TEstimateGasRequested,
|
||||||
TEstimateGasFailed,
|
TEstimateGasFailed,
|
||||||
TEstimateGasSucceeded,
|
TEstimateGasSucceeded,
|
||||||
|
TEstimateGasTimedout,
|
||||||
TGetFromRequested,
|
TGetFromRequested,
|
||||||
TGetFromSucceeded,
|
TGetFromSucceeded,
|
||||||
TGetNonceRequested,
|
TGetNonceRequested,
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import {
|
import {
|
||||||
SignTransactionFailedAction,
|
SignTransactionFailedAction,
|
||||||
SignLocalTransactionRequestedAction,
|
|
||||||
SignWeb3TransactionRequestedAction,
|
|
||||||
SignLocalTransactionSucceededAction,
|
SignLocalTransactionSucceededAction,
|
||||||
SignWeb3TransactionSucceededAction
|
SignWeb3TransactionSucceededAction,
|
||||||
|
SignTransactionRequestedAction
|
||||||
} from '../actionTypes';
|
} from '../actionTypes';
|
||||||
import { TypeKeys } from '../constants';
|
import { TypeKeys } from '../constants';
|
||||||
|
|
||||||
|
@ -12,6 +11,12 @@ const signTransactionFailed = (): SignTransactionFailedAction => ({
|
||||||
type: TypeKeys.SIGN_TRANSACTION_FAILED
|
type: TypeKeys.SIGN_TRANSACTION_FAILED
|
||||||
});
|
});
|
||||||
|
|
||||||
|
type TSignTransactionRequested = typeof signTransactionRequested;
|
||||||
|
const signTransactionRequested = (payload: SignTransactionRequestedAction['payload']) => ({
|
||||||
|
type: TypeKeys.SIGN_TRANSACTION_REQUESTED,
|
||||||
|
payload
|
||||||
|
});
|
||||||
|
|
||||||
type TSignLocalTransactionSucceeded = typeof signLocalTransactionSucceeded;
|
type TSignLocalTransactionSucceeded = typeof signLocalTransactionSucceeded;
|
||||||
const signLocalTransactionSucceeded = (
|
const signLocalTransactionSucceeded = (
|
||||||
payload: SignLocalTransactionSucceededAction['payload']
|
payload: SignLocalTransactionSucceededAction['payload']
|
||||||
|
@ -20,14 +25,6 @@ const signLocalTransactionSucceeded = (
|
||||||
payload
|
payload
|
||||||
});
|
});
|
||||||
|
|
||||||
type TSignLocalTransactionRequested = typeof signLocalTransactionRequested;
|
|
||||||
const signLocalTransactionRequested = (
|
|
||||||
payload: SignLocalTransactionRequestedAction['payload']
|
|
||||||
): SignLocalTransactionRequestedAction => ({
|
|
||||||
type: TypeKeys.SIGN_LOCAL_TRANSACTION_REQUESTED,
|
|
||||||
payload
|
|
||||||
});
|
|
||||||
|
|
||||||
type TSignWeb3TransactionSucceeded = typeof signWeb3TransactionSucceeded;
|
type TSignWeb3TransactionSucceeded = typeof signWeb3TransactionSucceeded;
|
||||||
const signWeb3TransactionSucceeded = (
|
const signWeb3TransactionSucceeded = (
|
||||||
payload: SignWeb3TransactionSucceededAction['payload']
|
payload: SignWeb3TransactionSucceededAction['payload']
|
||||||
|
@ -36,23 +33,13 @@ const signWeb3TransactionSucceeded = (
|
||||||
payload
|
payload
|
||||||
});
|
});
|
||||||
|
|
||||||
type TSignWeb3TransactionRequested = typeof signWeb3TransactionRequested;
|
|
||||||
const signWeb3TransactionRequested = (
|
|
||||||
payload: SignWeb3TransactionRequestedAction['payload']
|
|
||||||
): SignWeb3TransactionRequestedAction => ({
|
|
||||||
type: TypeKeys.SIGN_WEB3_TRANSACTION_REQUESTED,
|
|
||||||
payload
|
|
||||||
});
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
signTransactionRequested,
|
||||||
signTransactionFailed,
|
signTransactionFailed,
|
||||||
signLocalTransactionSucceeded,
|
signLocalTransactionSucceeded,
|
||||||
signLocalTransactionRequested,
|
|
||||||
signWeb3TransactionSucceeded,
|
signWeb3TransactionSucceeded,
|
||||||
signWeb3TransactionRequested,
|
|
||||||
TSignLocalTransactionSucceeded,
|
TSignLocalTransactionSucceeded,
|
||||||
TSignLocalTransactionRequested,
|
|
||||||
TSignWeb3TransactionSucceeded,
|
TSignWeb3TransactionSucceeded,
|
||||||
TSignWeb3TransactionRequested,
|
TSignTransactionFailed,
|
||||||
TSignTransactionFailed
|
TSignTransactionRequested
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,6 +7,9 @@ import { SignAction } from './sign';
|
||||||
import { SwapAction } from './swap';
|
import { SwapAction } from './swap';
|
||||||
import { CurrentAction } from './current';
|
import { CurrentAction } from './current';
|
||||||
import { SendEverythingAction } from './sendEverything';
|
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 './broadcast';
|
||||||
export * from './fields';
|
export * from './fields';
|
||||||
|
@ -19,6 +22,18 @@ export * from './sendEverything';
|
||||||
|
|
||||||
export interface ResetAction {
|
export interface ResetAction {
|
||||||
type: TypeKeys.RESET;
|
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 =
|
export type TransactionAction =
|
||||||
|
|
|
@ -10,6 +10,10 @@ interface InputGasPriceAction {
|
||||||
type: TypeKeys.GAS_PRICE_INPUT;
|
type: TypeKeys.GAS_PRICE_INPUT;
|
||||||
payload: string;
|
payload: string;
|
||||||
}
|
}
|
||||||
|
interface InputGasPriceIntentAction {
|
||||||
|
type: TypeKeys.GAS_PRICE_INPUT_INTENT;
|
||||||
|
payload: string;
|
||||||
|
}
|
||||||
interface InputDataAction {
|
interface InputDataAction {
|
||||||
type: TypeKeys.DATA_FIELD_INPUT;
|
type: TypeKeys.DATA_FIELD_INPUT;
|
||||||
payload: string;
|
payload: string;
|
||||||
|
@ -52,7 +56,6 @@ interface SetToFieldAction {
|
||||||
payload: {
|
payload: {
|
||||||
raw: string;
|
raw: string;
|
||||||
value: Address | null;
|
value: Address | null;
|
||||||
error?: string | null;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,6 +88,7 @@ type FieldAction =
|
||||||
export {
|
export {
|
||||||
InputGasLimitAction,
|
InputGasLimitAction,
|
||||||
InputGasPriceAction,
|
InputGasPriceAction,
|
||||||
|
InputGasPriceIntentAction,
|
||||||
InputDataAction,
|
InputDataAction,
|
||||||
InputNonceAction,
|
InputNonceAction,
|
||||||
SetGasLimitFieldAction,
|
SetGasLimitFieldAction,
|
||||||
|
|
|
@ -7,7 +7,6 @@ interface SetTokenToMetaAction {
|
||||||
payload: {
|
payload: {
|
||||||
raw: string;
|
raw: string;
|
||||||
value: Address | null;
|
value: Address | null;
|
||||||
error?: string | null;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,9 @@ interface EstimateGasSucceededAction {
|
||||||
interface EstimateGasFailedAction {
|
interface EstimateGasFailedAction {
|
||||||
type: TypeKeys.ESTIMATE_GAS_FAILED;
|
type: TypeKeys.ESTIMATE_GAS_FAILED;
|
||||||
}
|
}
|
||||||
|
interface EstimateGasTimeoutAction {
|
||||||
|
type: TypeKeys.ESTIMATE_GAS_TIMEDOUT;
|
||||||
|
}
|
||||||
interface GetFromRequestedAction {
|
interface GetFromRequestedAction {
|
||||||
type: TypeKeys.GET_FROM_REQUESTED;
|
type: TypeKeys.GET_FROM_REQUESTED;
|
||||||
}
|
}
|
||||||
|
@ -36,6 +39,7 @@ type NetworkAction =
|
||||||
| EstimateGasFailedAction
|
| EstimateGasFailedAction
|
||||||
| EstimateGasRequestedAction
|
| EstimateGasRequestedAction
|
||||||
| EstimateGasSucceededAction
|
| EstimateGasSucceededAction
|
||||||
|
| EstimateGasTimeoutAction
|
||||||
| GetFromRequestedAction
|
| GetFromRequestedAction
|
||||||
| GetFromSucceededAction
|
| GetFromSucceededAction
|
||||||
| GetFromFailedAction
|
| GetFromFailedAction
|
||||||
|
@ -47,6 +51,7 @@ export {
|
||||||
EstimateGasRequestedAction,
|
EstimateGasRequestedAction,
|
||||||
EstimateGasSucceededAction,
|
EstimateGasSucceededAction,
|
||||||
EstimateGasFailedAction,
|
EstimateGasFailedAction,
|
||||||
|
EstimateGasTimeoutAction,
|
||||||
GetFromRequestedAction,
|
GetFromRequestedAction,
|
||||||
GetFromSucceededAction,
|
GetFromSucceededAction,
|
||||||
GetFromFailedAction,
|
GetFromFailedAction,
|
||||||
|
|
|
@ -8,8 +8,8 @@ import { TypeKeys } from 'actions/transaction/constants';
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Signing / Async actions */
|
/* Signing / Async actions */
|
||||||
interface SignLocalTransactionRequestedAction {
|
interface SignTransactionRequestedAction {
|
||||||
type: TypeKeys.SIGN_LOCAL_TRANSACTION_REQUESTED;
|
type: TypeKeys.SIGN_TRANSACTION_REQUESTED;
|
||||||
payload: EthTx;
|
payload: EthTx;
|
||||||
}
|
}
|
||||||
interface SignLocalTransactionSucceededAction {
|
interface SignLocalTransactionSucceededAction {
|
||||||
|
@ -17,10 +17,6 @@ interface SignLocalTransactionSucceededAction {
|
||||||
payload: { signedTransaction: Buffer; indexingHash: string; noVerify?: boolean }; // dont verify against fields, for pushTx
|
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 {
|
interface SignWeb3TransactionSucceededAction {
|
||||||
type: TypeKeys.SIGN_WEB3_TRANSACTION_SUCCEEDED;
|
type: TypeKeys.SIGN_WEB3_TRANSACTION_SUCCEEDED;
|
||||||
payload: { transaction: Buffer; indexingHash: string; noVerify?: boolean };
|
payload: { transaction: Buffer; indexingHash: string; noVerify?: boolean };
|
||||||
|
@ -30,16 +26,14 @@ interface SignTransactionFailedAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
type SignAction =
|
type SignAction =
|
||||||
| SignLocalTransactionRequestedAction
|
| SignTransactionRequestedAction
|
||||||
| SignLocalTransactionSucceededAction
|
| SignLocalTransactionSucceededAction
|
||||||
| SignWeb3TransactionRequestedAction
|
|
||||||
| SignWeb3TransactionSucceededAction
|
| SignWeb3TransactionSucceededAction
|
||||||
| SignTransactionFailedAction;
|
| SignTransactionFailedAction;
|
||||||
|
|
||||||
export {
|
export {
|
||||||
SignLocalTransactionRequestedAction,
|
SignTransactionRequestedAction,
|
||||||
SignLocalTransactionSucceededAction,
|
SignLocalTransactionSucceededAction,
|
||||||
SignWeb3TransactionRequestedAction,
|
|
||||||
SignWeb3TransactionSucceededAction,
|
SignWeb3TransactionSucceededAction,
|
||||||
SignTransactionFailedAction,
|
SignTransactionFailedAction,
|
||||||
SignAction
|
SignAction
|
||||||
|
|
|
@ -2,6 +2,7 @@ export enum TypeKeys {
|
||||||
ESTIMATE_GAS_REQUESTED = 'ESTIMATE_GAS_REQUESTED',
|
ESTIMATE_GAS_REQUESTED = 'ESTIMATE_GAS_REQUESTED',
|
||||||
ESTIMATE_GAS_SUCCEEDED = 'ESTIMATE_GAS_SUCCEEDED',
|
ESTIMATE_GAS_SUCCEEDED = 'ESTIMATE_GAS_SUCCEEDED',
|
||||||
ESTIMATE_GAS_FAILED = 'ESTIMATE_GAS_FAILED',
|
ESTIMATE_GAS_FAILED = 'ESTIMATE_GAS_FAILED',
|
||||||
|
ESTIMATE_GAS_TIMEDOUT = 'ESTIMATE_GAS_TIMEDOUT',
|
||||||
|
|
||||||
GET_FROM_REQUESTED = 'GET_FROM_REQUESTED',
|
GET_FROM_REQUESTED = 'GET_FROM_REQUESTED',
|
||||||
GET_FROM_SUCCEEDED = 'GET_FROM_SUCCEEDED',
|
GET_FROM_SUCCEEDED = 'GET_FROM_SUCCEEDED',
|
||||||
|
@ -11,9 +12,8 @@ export enum TypeKeys {
|
||||||
GET_NONCE_SUCCEEDED = 'GET_NONCE_SUCCEEDED',
|
GET_NONCE_SUCCEEDED = 'GET_NONCE_SUCCEEDED',
|
||||||
GET_NONCE_FAILED = 'GET_NONCE_FAILED',
|
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_WEB3_TRANSACTION_SUCCEEDED = 'SIGN_WEB3_TRANSACTION_SUCCEEDED',
|
||||||
SIGN_LOCAL_TRANSACTION_REQUESTED = 'SIGN_LOCAL_TRANSACTION_REQUESTED',
|
|
||||||
SIGN_LOCAL_TRANSACTION_SUCCEEDED = 'SIGN_LOCAL_TRANSACTION_SUCCEEDED',
|
SIGN_LOCAL_TRANSACTION_SUCCEEDED = 'SIGN_LOCAL_TRANSACTION_SUCCEEDED',
|
||||||
SIGN_TRANSACTION_FAILED = 'SIGN_TRANSACTION_FAILED',
|
SIGN_TRANSACTION_FAILED = 'SIGN_TRANSACTION_FAILED',
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ export enum TypeKeys {
|
||||||
DATA_FIELD_INPUT = 'DATA_FIELD_INPUT',
|
DATA_FIELD_INPUT = 'DATA_FIELD_INPUT',
|
||||||
GAS_LIMIT_INPUT = 'GAS_LIMIT_INPUT',
|
GAS_LIMIT_INPUT = 'GAS_LIMIT_INPUT',
|
||||||
GAS_PRICE_INPUT = 'GAS_PRICE_INPUT',
|
GAS_PRICE_INPUT = 'GAS_PRICE_INPUT',
|
||||||
|
GAS_PRICE_INPUT_INTENT = 'GAS_PRICE_INPUT_INTENT',
|
||||||
NONCE_INPUT = 'NONCE_INPUT',
|
NONCE_INPUT = 'NONCE_INPUT',
|
||||||
|
|
||||||
DATA_FIELD_SET = 'DATA_FIELD_SET',
|
DATA_FIELD_SET = 'DATA_FIELD_SET',
|
||||||
|
|
|
@ -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
|
||||||
|
};
|
||||||
|
}
|
|
@ -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;
|
|
@ -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'
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
export * from './actionCreators';
|
||||||
|
export * from './actionTypes';
|
||||||
|
export * from './constants';
|
|
@ -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 {
|
export function setBalancePending(): types.SetBalancePendingAction {
|
||||||
return {
|
return {
|
||||||
type: TypeKeys.WALLET_SET_BALANCE_PENDING
|
type: TypeKeys.WALLET_SET_BALANCE_PENDING
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setPasswordPrompt(): types.SetPasswordPendingAction {
|
||||||
|
return {
|
||||||
|
type: TypeKeys.WALLET_SET_PASSWORD_PENDING
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export type TSetBalance = typeof setBalanceFullfilled;
|
export type TSetBalance = typeof setBalanceFullfilled;
|
||||||
export function setBalanceFullfilled(value: Wei): types.SetBalanceFullfilledAction {
|
export function setBalanceFullfilled(value: Wei): types.SetBalanceFullfilledAction {
|
||||||
return {
|
return {
|
||||||
|
@ -146,3 +159,10 @@ export function setWalletConfig(config: WalletConfig): types.SetWalletConfigActi
|
||||||
payload: config
|
payload: config
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type TSetAccountBalance = typeof setAccountBalance;
|
||||||
|
export function setAccountBalance(): types.SetAccountBalanceAction {
|
||||||
|
return {
|
||||||
|
type: TypeKeys.WALLET_SET_ACCOUNT_BALANCE
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -32,6 +32,11 @@ export interface ResetWalletAction {
|
||||||
type: TypeKeys.WALLET_RESET;
|
type: TypeKeys.WALLET_RESET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SetWalletPendingAction {
|
||||||
|
type: TypeKeys.WALLET_SET_PENDING;
|
||||||
|
payload: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
/*** Set Balance ***/
|
/*** Set Balance ***/
|
||||||
export interface SetBalancePendingAction {
|
export interface SetBalancePendingAction {
|
||||||
type: TypeKeys.WALLET_SET_BALANCE_PENDING;
|
type: TypeKeys.WALLET_SET_BALANCE_PENDING;
|
||||||
|
@ -116,10 +121,19 @@ export interface SetWalletConfigAction {
|
||||||
payload: WalletConfig;
|
payload: WalletConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface SetPasswordPendingAction {
|
||||||
|
type: TypeKeys.WALLET_SET_PASSWORD_PENDING;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SetAccountBalanceAction {
|
||||||
|
type: TypeKeys.WALLET_SET_ACCOUNT_BALANCE;
|
||||||
|
}
|
||||||
|
|
||||||
/*** Union Type ***/
|
/*** Union Type ***/
|
||||||
export type WalletAction =
|
export type WalletAction =
|
||||||
| UnlockPrivateKeyAction
|
| UnlockPrivateKeyAction
|
||||||
| SetWalletAction
|
| SetWalletAction
|
||||||
|
| SetWalletPendingAction
|
||||||
| ResetWalletAction
|
| ResetWalletAction
|
||||||
| SetBalancePendingAction
|
| SetBalancePendingAction
|
||||||
| SetBalanceFullfilledAction
|
| SetBalanceFullfilledAction
|
||||||
|
@ -132,4 +146,6 @@ export type WalletAction =
|
||||||
| SetTokenBalanceRejectedAction
|
| SetTokenBalanceRejectedAction
|
||||||
| ScanWalletForTokensAction
|
| ScanWalletForTokensAction
|
||||||
| SetWalletTokensAction
|
| SetWalletTokensAction
|
||||||
| SetWalletConfigAction;
|
| SetWalletConfigAction
|
||||||
|
| SetPasswordPendingAction
|
||||||
|
| SetAccountBalanceAction;
|
||||||
|
|
|
@ -10,11 +10,15 @@ export enum TypeKeys {
|
||||||
WALLET_SET_TOKEN_BALANCES_PENDING = 'WALLET_SET_TOKEN_BALANCES_PENDING',
|
WALLET_SET_TOKEN_BALANCES_PENDING = 'WALLET_SET_TOKEN_BALANCES_PENDING',
|
||||||
WALLET_SET_TOKEN_BALANCES_FULFILLED = 'WALLET_SET_TOKEN_BALANCES_FULFILLED',
|
WALLET_SET_TOKEN_BALANCES_FULFILLED = 'WALLET_SET_TOKEN_BALANCES_FULFILLED',
|
||||||
WALLET_SET_TOKEN_BALANCES_REJECTED = 'WALLET_SET_TOKEN_BALANCES_REJECTED',
|
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_PENDING = 'WALLET_SET_TOKEN_BALANCE_PENDING',
|
||||||
WALLET_SET_TOKEN_BALANCE_FULFILLED = 'WALLET_SET_TOKEN_BALANCE_FULFILLED',
|
WALLET_SET_TOKEN_BALANCE_FULFILLED = 'WALLET_SET_TOKEN_BALANCE_FULFILLED',
|
||||||
WALLET_SET_TOKEN_BALANCE_REJECTED = 'WALLET_SET_TOKEN_BALANCE_REJECTED',
|
WALLET_SET_TOKEN_BALANCE_REJECTED = 'WALLET_SET_TOKEN_BALANCE_REJECTED',
|
||||||
WALLET_SCAN_WALLET_FOR_TOKENS = 'WALLET_SCAN_WALLET_FOR_TOKENS',
|
WALLET_SCAN_WALLET_FOR_TOKENS = 'WALLET_SCAN_WALLET_FOR_TOKENS',
|
||||||
WALLET_SET_WALLET_TOKENS = 'WALLET_SET_WALLET_TOKENS',
|
WALLET_SET_WALLET_TOKENS = 'WALLET_SET_WALLET_TOKENS',
|
||||||
WALLET_SET_CONFIG = 'WALLET_SET_CONFIG',
|
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'
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import bityConfig, { WhitelistedCoins } from 'config/bity';
|
import { WhitelistedCoins, bityConfig } from 'config';
|
||||||
import { checkHttpStatus, parseJSON, filter } from './utils';
|
import { checkHttpStatus, parseJSON, filter } from './utils';
|
||||||
import bitcoinIcon from 'assets/images/bitcoin.png';
|
import bitcoinIcon from 'assets/images/bitcoin.png';
|
||||||
import repIcon from 'assets/images/augur.png';
|
import repIcon from 'assets/images/augur.png';
|
||||||
|
@ -29,10 +29,14 @@ const repOptions = {
|
||||||
name: 'Augur'
|
name: 'Augur'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export interface MappedRates {
|
||||||
|
[key: string]: any;
|
||||||
|
}
|
||||||
|
|
||||||
export function getAllRates() {
|
export function getAllRates() {
|
||||||
const mappedRates = {};
|
const mappedRates: MappedRates = {};
|
||||||
return _getAllRates().then(bityRates => {
|
return _getAllRates().then(bityRates => {
|
||||||
bityRates.objects.forEach(each => {
|
bityRates.objects.forEach((each: any) => {
|
||||||
const pairName = each.pair;
|
const pairName = each.pair;
|
||||||
const from = { id: pairName.substring(0, 3) };
|
const from = { id: pairName.substring(0, 3) };
|
||||||
const to = { id: pairName.substring(3, 6) };
|
const to = { id: pairName.substring(3, 6) };
|
||||||
|
|
|
@ -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
|
||||||
|
}));
|
||||||
|
}
|
|
@ -1,14 +1,56 @@
|
||||||
import { handleJSONResponse } from 'api/utils';
|
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
|
// TODO - internationalize
|
||||||
const ERROR_MESSAGE = 'Could not fetch rate data.';
|
const ERROR_MESSAGE = 'Could not fetch rate data.';
|
||||||
const CCApi = 'https://min-api.cryptocompare.com';
|
const CCApi = 'https://min-api.cryptocompare.com';
|
||||||
|
|
||||||
const CCRates = (symbols: string[]) => {
|
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}`;
|
return `${CCApi}/data/price?fsym=ETH&tsyms=${tsyms}`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,16 +58,6 @@ export interface CCResponse {
|
||||||
[symbol: string]: ISymbol;
|
[symbol: string]: ISymbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ISymbol {
|
|
||||||
USD: number;
|
|
||||||
EUR: number;
|
|
||||||
GBP: number;
|
|
||||||
BTC: number;
|
|
||||||
CHF: number;
|
|
||||||
REP: number;
|
|
||||||
ETH: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IRates extends ISymbol {
|
interface IRates extends ISymbol {
|
||||||
Response?: 'Error';
|
Response?: 'Error';
|
||||||
}
|
}
|
||||||
|
@ -45,7 +77,7 @@ export const fetchRates = (symbols: string[] = []): Promise<CCResponse> =>
|
||||||
return symbols.reduce(
|
return symbols.reduce(
|
||||||
(eqRates, sym: keyof ISymbol) => {
|
(eqRates, sym: keyof ISymbol) => {
|
||||||
if (rates[sym]) {
|
if (rates[sym]) {
|
||||||
eqRates[sym] = rateSymbols.reduce(
|
eqRates[sym] = rateSymbols.symbols.all.reduce(
|
||||||
(symRates, rateSym) => {
|
(symRates, rateSym) => {
|
||||||
symRates[rateSym] = 1 / rates[sym] * rates[rateSym];
|
symRates[rateSym] = 1 / rates[sym] * rates[rateSym];
|
||||||
return symRates;
|
return symRates;
|
||||||
|
@ -60,10 +92,10 @@ export const fetchRates = (symbols: string[] = []): Promise<CCResponse> =>
|
||||||
USD: rates.USD,
|
USD: rates.USD,
|
||||||
EUR: rates.EUR,
|
EUR: rates.EUR,
|
||||||
GBP: rates.GBP,
|
GBP: rates.GBP,
|
||||||
BTC: rates.BTC,
|
|
||||||
CHF: rates.CHF,
|
CHF: rates.CHF,
|
||||||
REP: rates.REP,
|
BTC: rates.BTC,
|
||||||
ETH: 1
|
ETH: 1,
|
||||||
|
REP: rates.REP
|
||||||
}
|
}
|
||||||
} as CCResponse
|
} as CCResponse
|
||||||
);
|
);
|
|
@ -1,5 +1,8 @@
|
||||||
import { checkHttpStatus, parseJSON } from 'api/utils';
|
import { checkHttpStatus, parseJSON } from 'api/utils';
|
||||||
|
|
||||||
|
const SHAPESHIFT_API_KEY =
|
||||||
|
'8abde0f70ca69d5851702d57b10305705d7333e93263124cc2a2649dab7ff9cf86401fc8de7677e8edcd0e7f1eed5270b1b49be8806937ef95d64839e319e6d9';
|
||||||
|
|
||||||
const SHAPESHIFT_BASE_URL = 'https://shapeshift.io';
|
const SHAPESHIFT_BASE_URL = 'https://shapeshift.io';
|
||||||
|
|
||||||
export const SHAPESHIFT_TOKEN_WHITELIST = [
|
export const SHAPESHIFT_TOKEN_WHITELIST = [
|
||||||
|
@ -25,21 +28,64 @@ export const SHAPESHIFT_TOKEN_WHITELIST = [
|
||||||
];
|
];
|
||||||
export const SHAPESHIFT_WHITELIST = [...SHAPESHIFT_TOKEN_WHITELIST, 'ETH', 'ETC', 'BTC'];
|
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 {
|
class ShapeshiftService {
|
||||||
public whitelist = SHAPESHIFT_WHITELIST;
|
public whitelist = SHAPESHIFT_WHITELIST;
|
||||||
private url = SHAPESHIFT_BASE_URL;
|
private url = SHAPESHIFT_BASE_URL;
|
||||||
private apiKey = '0ca1ccd50b708a3f8c02327f0caeeece06d3ddc1b0ac749a987b453ee0f4a29bdb5da2e53bc35e57fb4bb7ae1f43c93bb098c3c4716375fc1001c55d8c94c160';
|
private apiKey = SHAPESHIFT_API_KEY;
|
||||||
private postHeaders = {
|
private postHeaders = {
|
||||||
'Content-Type': 'application/json'
|
'Content-Type': 'application/json'
|
||||||
};
|
};
|
||||||
|
|
||||||
public checkStatus(address) {
|
public checkStatus(address: string) {
|
||||||
return fetch(`${this.url}/txStat/${address}`)
|
return fetch(`${this.url}/txStat/${address}`)
|
||||||
.then(checkHttpStatus)
|
.then(checkHttpStatus)
|
||||||
.then(parseJSON);
|
.then(parseJSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
public sendAmount(withdrawal, originKind, destinationKind, destinationAmount) {
|
public sendAmount(
|
||||||
|
withdrawal: string,
|
||||||
|
originKind: string,
|
||||||
|
destinationKind: string,
|
||||||
|
destinationAmount: number
|
||||||
|
) {
|
||||||
const pair = `${originKind.toLowerCase()}_${destinationKind.toLowerCase()}`;
|
const pair = `${originKind.toLowerCase()}_${destinationKind.toLowerCase()}`;
|
||||||
|
|
||||||
return fetch(`${this.url}/sendamount`, {
|
return fetch(`${this.url}/sendamount`, {
|
||||||
|
@ -53,7 +99,15 @@ class ShapeshiftService {
|
||||||
headers: new Headers(this.postHeaders)
|
headers: new Headers(this.postHeaders)
|
||||||
})
|
})
|
||||||
.then(checkHttpStatus)
|
.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() {
|
public getCoins() {
|
||||||
|
@ -70,7 +124,7 @@ class ShapeshiftService {
|
||||||
return mappedRates;
|
return mappedRates;
|
||||||
};
|
};
|
||||||
|
|
||||||
private getPairRates(marketInfo) {
|
private getPairRates(marketInfo: ShapeshiftMarketInfo[]) {
|
||||||
const filteredMarketInfo = marketInfo.filter(obj => {
|
const filteredMarketInfo = marketInfo.filter(obj => {
|
||||||
const { pair } = obj;
|
const { pair } = obj;
|
||||||
const pairArr = pair.split('_');
|
const pairArr = pair.split('_');
|
||||||
|
@ -86,7 +140,7 @@ class ShapeshiftService {
|
||||||
return pairRates;
|
return pairRates;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async checkAvl(pairRates) {
|
private async checkAvl(pairRates: IPairData[]) {
|
||||||
const avlCoins = await this.getAvlCoins();
|
const avlCoins = await this.getAvlCoins();
|
||||||
const mapAvl = pairRates.map(p => {
|
const mapAvl = pairRates.map(p => {
|
||||||
const { pair } = 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() {
|
private getAvlCoins() {
|
||||||
|
@ -119,7 +174,7 @@ class ShapeshiftService {
|
||||||
.then(parseJSON);
|
.then(parseJSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
private getSinglePairRate(pair) {
|
private getSinglePairRate(pair: string) {
|
||||||
return fetch(`${this.url}/rate/${pair}`)
|
return fetch(`${this.url}/rate/${pair}`)
|
||||||
.then(checkHttpStatus)
|
.then(checkHttpStatus)
|
||||||
.then(parseJSON);
|
.then(parseJSON);
|
||||||
|
@ -131,12 +186,12 @@ class ShapeshiftService {
|
||||||
.then(parseJSON);
|
.then(parseJSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
private isWhitelisted(coin) {
|
private isWhitelisted(coin: string) {
|
||||||
return this.whitelist.includes(coin);
|
return this.whitelist.includes(coin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private mapMarketInfo(marketInfo) {
|
private mapMarketInfo(marketInfo: (IPairData & IAvailablePairData)[]) {
|
||||||
const tokenMap = {};
|
const tokenMap: TokenMap = {};
|
||||||
marketInfo.forEach(m => {
|
marketInfo.forEach(m => {
|
||||||
const originKind = m.pair.substring(0, 3);
|
const originKind = m.pair.substring(0, 3);
|
||||||
const destinationKind = m.pair.substring(4, 7);
|
const destinationKind = m.pair.substring(4, 7);
|
||||||
|
|
|
@ -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=""
|
|
||||||
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=""
|
|
||||||
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=""
|
|
||||||
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=""
|
|
||||||
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=""
|
|
||||||
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=""
|
|
||||||
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=""
|
|
||||||
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=""
|
|
||||||
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 |
|
@ -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 |
After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 12 KiB |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 884 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 2.8 KiB |
|
@ -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 |
|
@ -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 |
|
@ -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 |