diff --git a/.babelrc b/.babelrc deleted file mode 100644 index cb4f88901..000000000 --- a/.babelrc +++ /dev/null @@ -1,18 +0,0 @@ - { - "presets": [ - "@babel/preset-react", - "@babel/preset-typescript", - [ - "@babel/preset-env", - { - "modules": false - } - ] - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-proposal-object-rest-spread", - "@babel/plugin-syntax-dynamic-import", - "react-hot-loader/babel" - ] - } diff --git a/.gitattributes b/.gitattributes index 6313b56c5..ea8ff05c7 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,10 @@ * text=auto eol=lf + +*.woff binary +*.woff2 binary + +*.png binary +*.jpg binary +*.icns binary +*.ico binary +*.gif binary \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..3d8593401 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,283 @@ +name: GitHub CI + +on: [push] + +jobs: +## WINDOWS-PREBUILD START ## + pre-build-and-build-windows: + name: Build el:win + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest] + steps: + - name: Retrieve project from the git branch + uses: actions/checkout@v1 + + - name: Print current engines' versions + run: > + echo "node: $(node -v)"; + echo "npm: $(npm -v)"; + echo "yarn: $(yarn -v)"; + echo "python: $(python -V)"; + + - name: Retrieve engines' versions from package.json to env variables + id: engines + run: > + $hashtable = Get-Content -Raw -Path ./package.json | ConvertFrom-Json -AsHashtable; + echo $hashtable.engines; + $nodeVersion = $hashtable.engines.node; + $npmVersion = $hashtable.engines.npm; + $yarnVersion = $hashtable.engines.yarn; + Write-Output "##[set-output name=NODE_VERSION;]$($nodeVersion)"; + Write-Output "##[set-output name=NPM_VERSION;]$($npmVersion)"; + Write-Output "##[set-output name=YARN_VERSION;]$($yarnVersion)"; + + - name: Setup node ${{ steps.engines.outputs.NODE_VERSION }} + uses: actions/setup-node@master + with: + node-version: ${{ steps.engines.outputs.NODE_VERSION }} + + - run: node -v + - name: install node tools + run: npm install --global --production windows-build-tools@4.0.0 + - name: install node-gyp + run: npm install --global node-gyp@latest + - name: Set node config to use python2.7 + run: npm config set python python2.7 + - name: Set node config to set msvs_version to 2015 + run: npm config set msvs_version 2015 + - name: Work around for Windows Server 2019 + run: set path=%path%;'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin' + + - name: Cache node modules + id: cache + uses: actions/cache@v1 + with: + path: node_modules + ## Check cache based on yarn.lock hashfile + key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.OS }}-build-${{ env.cache-name }}- + ${{ runner.OS }}-build- + ${{ runner.OS }}- + + - name: Install Dependencies + ## If no cache is found, install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: yarn install + + - name: yarn tslint + run: yarn tslint + + - name: yarn tscheck + run: yarn tscheck + + - name: yarn test:coverage -- --maxWorkers=2 + run: yarn test:coverage -- --maxWorkers=2 + +## NOT WORKING +# - name: yarn report-coverage +# run: yarn report-coverage + + - name: yarn build:electron:windows + run: yarn build:electron:windows + + - name: ls dist/electron-builds + run: ls dist/electron-builds + + - name: Read MyCrypto version from package.json + id: version + run: $json = Get-Content package.json | ConvertFrom-Json; Write-Output "##[set-output name=VERSION;]$($json.version)" + + - name: Save windows_${{ steps.version.outputs.VERSION }}_MyCrypto.exe to artifacts + uses: actions/upload-artifact@v1 + with: + name: "windows_${{ steps.version.outputs.VERSION }}_MyCrypto.exe" + path: "dist/electron-builds/MyCrypto Setup ${{ steps.version.outputs.VERSION }}.exe" +# ## WINDOWS-PREBUILD END ## + + pre-build: + name: Pre-build + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ + macOS-latest + # ubuntu-latest + ] + env: + ELECTRON_CACHE: $HOME/.cache/electron + ELECTRON_BUILDER_CACHE: $HOME/.cache/electron-builder + steps: + - name: Retrieves project from the git branch + uses: actions/checkout@v1 + +# - name: Slack Notification +# if: matrix.os == 'ubuntu-latest' +# uses: rtCamp/action-slack-notify@master +# env: +# # SLACK_CHANNEL: general +# SLACK_COLOR: '#3278BD' +# # SLACK_ICON: https://github.com/rtCamp.png?size=48 +# SLACK_MESSAGE: 'Post Content :rocket:' +# SLACK_TITLE: Post Title +# SLACK_USERNAME: rtCamp +# SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + + - name: Read .nvmrc + run: echo "##[set-output name=NVMRC;]$(cat package.json | grep '\"node\":' | sed 's/^ *//;s/ *$//;s/\"node\":\ \"//;s/\",//' )" + id: nvm + + - name: Setup node ${{ steps.nvm.outputs.NVMRC }} + uses: actions/setup-node@v1 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - run: node --version; npm --version; yarn --version + + - name: Cache node modules + id: cache + uses: actions/cache@v1 + with: + path: node_modules + ## Check cache based on yarn.lock hashfile + key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.OS }}-build-${{ env.cache-name }}- + ${{ runner.OS }}-build- + ${{ runner.OS }}- + + - name: Install Dependencies + ## If no cache is found, install dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: yarn install + + - name: yarn tslint + run: yarn tslint + + - name: yarn tscheck + run: yarn tscheck + + - name: yarn test:coverage -- --maxWorkers=2 + run: yarn test:coverage -- --maxWorkers=2 + +## NOT WORKING +# - name: yarn report-coverage +# run: yarn report-coverage + + electron-osx: + name: Build el:osx + ## Executes only if pre-build is true + needs: [pre-build] + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macOS-latest] + env: + ELECTRON_CACHE: $HOME/.cache/electron + ELECTRON_BUILDER_CACHE: $HOME/.cache/electron-builder + + steps: + - name: Retrieves project from the git branch + uses: actions/checkout@v1 + + - name: Retrieve node version from .nvmrc + run: echo "##[set-output name=NVMRC;]$(cat package.json | grep '\"node\":' | sed 's/^ *//;s/ *$//;s/\"node\":\ \"//;s/\",//')" + id: nvm + + - name: Setup node ${{ steps.nvm.outputs.NVMRC }} + uses: actions/setup-node@v1 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - name: Restoring node modules + uses: actions/cache@v1 + with: + path: node_modules + key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }} + + - name: yarn build:electron:osx + run: yarn build:electron:osx + + - name: ls -la dist/electron-builds + run: ls -la dist/electron-builds + + - name: Read app version + id: version + run: echo "##[set-output name=VERSION;]$(cat package.json | grep -m1 version | sed 's/...version....//' | sed 's/.\{2\}$//')" + + - name: "Save standalone_${{ steps.version.outputs.VERSION }}_MyCrypto.zip to artifacts" + uses: actions/upload-artifact@v1 + with: + name: "standalone_${{ steps.version.outputs.VERSION }}_MyCrypto.zip" + path: "dist/electron-builds/MyCrypto-${{ steps.version.outputs.VERSION }}-mac.zip" + - name: "Save mac_${{ steps.version.outputs.VERSION }}_MyCrypto.dmg to artifacts" + uses: actions/upload-artifact@v1 + with: + name: "mac_${{ steps.version.outputs.VERSION }}_MyCrypto.dmg" + path: "dist/electron-builds/MyCrypto-${{ steps.version.outputs.VERSION }}.dmg" + + electron-linux: + name: Build el:linux + # Executes only if pre-build is true + needs: [pre-build] + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ + ## Uncomment to run linux build on macOS + macOS-latest + # ubuntu-latest + ] + env: + ELECTRON_CACHE: $HOME/.cache/electron + ELECTRON_BUILDER_CACHE: $HOME/.cache/electron-builder + + steps: + - name: Retrieves project from the git branch + uses: actions/checkout@v1 + + - name: Retrieve node version from .nvmrc + run: echo "##[set-output name=NVMRC;]$(cat package.json | grep '\"node\":' | sed 's/^ *//;s/ *$//;s/\"node\":\ \"//;s/\",//')" + id: nvm + + - name: Setup node ${{ steps.nvm.outputs.NVMRC }} + uses: actions/setup-node@v1 + with: + node-version: "${{ steps.nvm.outputs.NVMRC }}" + + - name: Cache node modules + uses: actions/cache@v1 + with: + path: node_modules + ## Check cache based on yarn.lock hashfile + key: ${{ runner.OS }}-build-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.OS }}-build-${{ env.cache-name }}- + ${{ runner.OS }}-build- + ${{ runner.OS }}- + + - name: yarn build:electron:linux + run: yarn build:electron:linux + + - name: ls -la dist/electron-builds + run: ls -la dist/electron-builds + + - name: Read app version + id: version + run: echo "##[set-output name=VERSION;]$(cat package.json | grep -m1 version | sed 's/...version....//' | sed 's/.\{2\}$//')" + + - name: "Save linux-i386_${{ steps.version.outputs.VERSION }}_MyCrypto.AppImage to artifacts" + uses: actions/upload-artifact@v1 + with: + name: "linux-i386_${{ steps.version.outputs.VERSION }}_MyCrypto.AppImage" + path: "dist/electron-builds/MyCrypto-${{ steps.version.outputs.VERSION }}-i386.AppImage" + + - name: "Save linus-x86-64_${{ steps.version.outputs.VERSION }}-MyCrypto.AppImage to artifacts" + uses: actions/upload-artifact@v1 + with: + name: "linus-x86-64_${{ steps.version.outputs.VERSION }}-MyCrypto.AppImage" + path: "dist/electron-builds/MyCrypto-${{ steps.version.outputs.VERSION }}.AppImage" + +## TODO: Add "build electron:windows from Mac or Linux" diff --git a/.modernizrrc.js b/.modernizrrc.js new file mode 100644 index 000000000..65eea9c03 --- /dev/null +++ b/.modernizrrc.js @@ -0,0 +1,10 @@ +module.exports = { + "enableJSClass": false, + "enableClasses": false, + "minify": true, + "feature-detects": [ + "css/flexbox", + "css/flexwrap", + "storage/localstorage" + ] +}; diff --git a/.nvmrc b/.nvmrc index 441501581..ceeec5689 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v8.16.0 +v10.13.0 diff --git a/.travis.yml b/.travis.yml index edaef43fe..3f5484dec 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,54 +1,18 @@ language: node_js -addons: - apt: - sources: - - ubuntu-toolchain-r-test - packages: - - g++-4.8 - - g++-4.8-multilib - - gcc-multilib - - libusb-1.0-0-dev - - libudev-dev matrix: include: - - os: osx - osx_image: xcode9.3 - env: - - ELECTRON_CACHE=$HOME/.cache/electron - - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder - - os: linux - dist: trusty - sudo: required - services: docker + - os: osx + osx_image: xcode9.3 + env: + - ELECTRON_CACHE=$HOME/.cache/electron + - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder fast_finish: true -cache: - yarn: true - directories: - - node_modules - - "$HOME/.cache/electron" - - "$HOME/.cache/electron-builder" -before_cache: -- | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - rm -rf $HOME/.cache/electron-builder/wine - fi -before_install: -- | - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - # uncomment once integration tests are included in CI - # docker pull dternyak/eth-priv-to-addr:latest - sudo apt-get install libusb-1.0 - fi install: -- yarn --silent + - yarn --silent before_script: -- chmod +x ./travis-scripts/test-{linux,osx}.sh + - chmod +x ./travis-scripts/test-osx.sh script: -- "./travis-scripts/test-linux.sh" -- "./travis-scripts/test-osx.sh" + - './travis-scripts/test-osx.sh' notifications: email: on_success: never diff --git a/README.md b/README.md index e48061364..af88aa00f 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,30 @@ -# MyCrypto Web & Desktop Apps +# MyCrypto Beta Web App -[![Build Status](https://travis-ci.org/MyCryptoHQ/MyCrypto.svg?branch=develop)](https://travis-ci.org/MyCryptoHQ/MyCrypto) -[![Coverage Status](https://coveralls.io/repos/github/MyCryptoHQ/MyCrypto/badge.svg?branch=develop)](https://coveralls.io/github/MyCryptoHQ/MyCrypto?branch=develop) +[![Build Status](https://travis-ci.org/MyCryptoHQ/MyCrypto.svg?branch=master)](https://travis-ci.org/MyCryptoHQ/MyCrypto) +[![Coverage Status](https://coveralls.io/repos/github/MyCryptoHQ/MyCrypto/badge.svg?branch=master)](https://coveralls.io/github/MyCryptoHQ/MyCrypto?branch=develop) -* **Just looking to download?** Grab our [latest release](https://github.com/MyCryptoHQ/MyCrypto/releases). -* **Looking for the old site?** Check out [https://legacy.mycrypto.com](https://legacy.mycrypto.com) or the source at [MyCryptoHQ/mycrypto.com](https://github.com/MyCryptoHQ/mycrypto.com) - -## Verifying our releases -You can find how to do this on our [support document](https://support.mycrypto.com/staying-safe/verifying-authenticity-of-desktop-app) +This repo stores both the beta and production versions of the MyCrypto codebase. +#### The default `master` branch represents the beta code hosted on [beta.mycrypto.com](https://beta.mycrypto.com) +#### The `legacy` branch represents the production code hosted on [mycrypto.com](https://mycrypto.com) +#### Documentation can be found in [our wiki](https://github.com/MyCryptoHQ/MyCrypto/wiki) +- [Getting your token added to MyCrypto](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributing-%E2%80%90-Adding-Tokens) +- [Adding your Network or Node](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributing-%E2%80%90-Network-or-Node) +- [Adding your Web3 Wallet & Logo](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributing-%E2%80%90-Web3-Wallet) +- [MyCryptoBuilds](https://github.com/MyCryptoHQ/MyCrypto/wiki/MyCryptoBuilds) - access a build by commithash, PR number, or branch name without building it yourself! ## Development / Build Requirements -* Node 8.16.0\* +* Node 10.13.0\* * Yarn >= 1.7.0\*\* * Python 2.7.X\*\*\* \*Higher versions should work fine, but may cause inconsistencies. It's suggested you run 8.16.0 using `nvm`. -
+
**npm is NOT supported for package management. MyCrypto uses yarn.lock to ensure sub-dependency versions are pinned, so yarn is required to install node_modules -
+
\***Python 3 is **not** supported, since our dependencies use `node-gyp`. -
+
\***For users trying to build with WSL, you'll need to have install libpng via `sudo apt-get install libpng16-dev`. ## Running the App @@ -46,154 +49,3 @@ To disable it you can your settings in chrome: chrome://flags/#allow-insecure-lo yarn dev:electron ``` -#### Build Releases - -```bash -# builds the production server app -yarn build -``` - -```bash -# builds the downloadable version of the site -yarn build:downloadable -``` - -```bash -# builds the electron apps -yarn build:electron - -# builds only one OS's electron app -yarn build:electron:(osx|linux|windows) -``` - -All of these builds are output to a folder in `dist/`. - -#### Unit Tests: - -```bash -# run unit tests with Jest -yarn test -``` - -#### Integration Tests: - -```bash -# run integration tests with Jest -yarn test:int -``` - -#### Address Derivation Checker: - -EthereumJS-Util previously contained a bug that would incorrectly derive addresses from private keys with a 1/128 probability of occurring. A summary of this issue can be found [here](https://www.reddit.com/r/ethereum/comments/48rt6n/using_myetherwalletcom_just_burned_me_for/d0m4c6l/). - -As a reactionary measure, the address derivation checker was created. - -To test for correct address derivation, the address derivation checker uses multiple sources of address derivation (EthereumJS and PyEthereum) to ensure that multiple official implementations derive the same address for any given private key. - -##### The derivation checker utility assumes that you have: - -1. Docker installed/available -2. [dternyak/eth-priv-to-addr](https://hub.docker.com/r/dternyak/eth-priv-to-addr/) pulled from DockerHub - -##### Docker setup instructions: - -1. Install docker (on macOS, [Docker for Mac](https://docs.docker.com/docker-for-mac/) is suggested) -2. `docker pull dternyak/eth-priv-to-addr` - -##### Run Derivation Checker - -The derivation checker utility runs as part of the integration test suite. - -```bash -yarn test:int -``` - -## Folder structure: - -``` -│ -├── common -│ ├── api - Services and XHR utils -│ ├── assets - Images, fonts, etc. -│ ├── components - Components according to "Redux philosophy" -│ ├── config - Various config data and hard-coded json -│ ├── containers - Containers according to "Redux philosophy" -| ├── features - State management and async operations, organized per "feature", follows "ducks" philosophy, see: https://github.com/MyCryptoHQ/MyCrypto/issues/1435 -│ ├── libs - Framework-agnostic libraries and business logic -| ├── contracts - Takes in a contract interface ABI and returns an object with keys equivalent to the ABI function names that each have `.encodeInput`, `.decodeInput`, `decodeOutput` methods. -| ├── ens - Basic ENS functions for getting a name hash and mapping returned ENS contract values to human-readable strings -| ├── nodes - Configures Shepherd (https://github.com/MyCryptoHQ/shepherd) and exports a singleton provider -| ├── scheduling - Functionality for enabling Ethereum Alarm Clock usage for scheduled transactions. See https://github.com/MyCryptoHQ/MyCrypto/pull/1343 -| ├── transaction - Utilities for signing / parsing / validating transactions -| ├── wallet - Wallet implementations for deterministic (hw wallets, mnemonic wallets, etc), and non-deterministic (web3, parity signer, etc.) wallets. -| ├── web-workers - Web-worker implementation of generateKeystore + fromV3 for non-blocking encrypt/decryption -| ├── erc20 - `libs/contracts` instance of erc20 abi -| ├── formatters - Hex string formatters -| ├── signing - Message signing and signature verification -| ├── units - Helper functions for working with Ethereum / Token units in both base and unit form. Use these instead of using bn.js directly -| ├── validators - Validation functions for addresses, hex strings, keys, numbers, derivation paths, EAC values, Ethereum values, etc. -| ├── values - Functions for building EIP681 requests, numerical sanitization, string padding, bn.js conversion -│ ├── sass - SCSS styles, variables, mixins -│ ├── 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 -├── 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 -``` - -## Typescript Resources: -- https://basarat.gitbooks.io/typescript/ -- https://blog.mariusschulz.com/series/typescript-evolution - -## More information is available on the [Wiki Pages](https://github.com/MyCryptoHQ/MyCrypto/wiki) -- [Getting your token added to MyCrypto](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributing-%E2%80%90-Adding-Tokens) -- [Adding your Network or Node](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributing-%E2%80%90-Network-or-Node) -- [Adding your Web3 Wallet & Logo](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributing-%E2%80%90-Web3-Wallet) -- [MyCryptoBuilds](https://github.com/MyCryptoHQ/MyCrypto/wiki/MyCryptoBuilds) - access a build by commithash, PR number, or branch name without building it yourself! - -## Branching Model - -MyCrypto is open-source and encourages pull-requests from third-parties. Our branching model is described below. - -To start, fork this repository and have your own remote repository on GitHub. - -#### Naming Convention - -Your branch name must meet our naming conventions to help with administration and identify what type of branch it is. - -We name our branches like `/` - examples below; - -* `feature/foo` - A feature branch for a feature to do with foo. -* `enhancement/foo` - An enhancement branch to an already built feature called foo. -* `hotfix/foo` - A hotfix branch called foo (something affecting current production) -* `bugfix/foo` - A bugfix branch called foo (something affecting current staging) -* `release/1.4.2` - A release branch for tag 1.4.2 -* `revert/foo` - A branch to revert a logic to do with foo. - -#### Feature branches - -Feature branches are used to implement new enhancements for upcoming releases. A feature branch should be ephemeral (only lasting as long as the feature itself is in development. Once the feature is completed, it must be merged back into the `develop` branch and/or discarded.) - -We begin on the latest `develop` branch and branch off with the naming convention of `feature/foo`. - -Please also make yourself familiar with our [Contributor Guidelines](https://github.com/MyCryptoHQ/MyCrypto/wiki/Contributor-Guidelines). - -```sh -$ git checkout -b feature/foo develop -``` - -You should use `feature/foo` to implement and commit all changed required for your new feature. - -* Make many small commits so that the history of development for you feature branch is clear and so that it is easy to pinpoint and edit or cherry-pick specific commits if necessary. -* Avoid merging your feature branch with out feature branches being developed in parallel. -* Add neccessary unit tests for your features code. - -When your feature is complete, push it to your remote repo and prepare it for a pull request. - -When you are creating a pull request, make sure the base is `MyCryptoHQ/mycrypto/develop` and compare to `feature/foo`. diff --git a/SECURITY.md b/SECURITY.md index ee8b9e2c8..7e3a967c8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -21,11 +21,11 @@ MyCrypto looks forward to working with the security community to find security v 2. Other instances running our software (private or public forks, domains that are not listed in **“In Scope”** but are running our software) are not in scope - only the code under the `mycryptohq` namespace on GitHub.com is (with a select few other projects under the MyCrypto banner but a different namespace) - see the **"In Scope"** section for more information. -3. Bounties and disclosure process will be run under our [HackerOne program](https://hackerone.com/mycrypto "https://hackerone.com/mycrypto"). +3. The disclosure process will be run under our [HackerOne program](https://hackerone.com/mycrypto "https://hackerone.com/mycrypto"). - - Anyone who emails a matter that is eligible for a bounty / public disclosure to [security@mycrypto.com](mailto:security@mycrypto.com) (or the other emails listed below in **"Avenues to Contact"**) will be directed to open a ticket with our [HackerOne program](https://hackerone.com/mycrypto "https://hackerone.com/mycrypto") or a ticket will be opened on their behalf. + - Anyone who submits a matter that is eligible for a vulnerability disclosure to [security@mycrypto.com](mailto:security@mycrypto.com) (or the other emails listed below in **"Avenues to Contact"**) will be directed to open a ticket with our [HackerOne program](https://hackerone.com/mycrypto "https://hackerone.com/mycrypto") or a ticket will be opened on their behalf. -4. Bounties (if applicable) will not be rewarded if the vulnerability / exploit is made public before: +4. Any ticket that we have agreed to award swag for will not be rewarded if the vulnerability / exploit is made public before: - It has been made known to us through the [HackerOne program](https://hackerone.com/mycrypto "https://hackerone.com/mycrypto"). @@ -124,14 +124,14 @@ Please also refer to [HackerOne Disclosure Guidelines](https://www.hackerone.com - Any mitigating factors (e.g., the vulnerability is only present in non-default configurations on a specific environment) -3. If a bounty is applicable, the bounty process will be started. +3. If we have decided to reward a user with swag, we will notify them and the reward will be processed through the HackerOne swag system. -### Bounty Distribution +### Swag Distribution -MyCrypto has not set standards for bounty rewards, whether they be monetary, "swag," or otherwise. Bounty rewards, when applicable, will be considered on a case-by-case basis and are at the sole discretion of MyCrypto. +MyCrypto has not set standards for swag rewards. Swag rewards, when applicable, will be considered on a case-by-case basis and are at the sole discretion of MyCrypto. -If your report has been considered for a bounty, this will be communicated to you on HackerOne and handled off-channel (usually via e-mail) to get the reporters details (either shipping details for swag rewards or details to send a monetary bounty.) +If your report has been considered for a swag reward, this will be communicated to you on HackerOne and handled via the HackerOne Swag Reward feature. ### In Scope diff --git a/STRUCTURE.md b/STRUCTURE.md new file mode 100644 index 000000000..962075cc0 --- /dev/null +++ b/STRUCTURE.md @@ -0,0 +1,49 @@ +## File Structure + +``` +├── components - React components used across multiple features. Components in this directory must be in at least two features. +| ├── Component.tsx - The React component logic. +| ├── Component.scss - Styling for the component. +├── config - Configuration constants used across multiple features. Constants in this directory must be in at least two features. +├── features - Related chunks of application functionality. +| ├── Feature - An individual feature. +| | ├── Subfeature - A nested feature that acts as a piece of the feature. +| | ├── Feature.tsx - The primary component encapsulating the feature; typically the landing page of a route. +| | ├── Feature.scss - Styling for the primary feature component. +| | ├── components - Single-use components that are solely used in the feature. If used elsewhere, it should be moved to the global directory. +| | ├── constants.ts - Single-use constants that are solely used in the feature. If used elsewhere, it should be moved to the global directory. +| | ├── helpers.ts - Single-use helper functions that are solely used in the feature. If used elsewhere, it should be moved to the global directory (in /utils). +| | ├── routes.ts - Routing configuration objects that point to the feature and subfeatures. +| ├── registry.json - Configuration file used to enumerate the various features for the routing mechanism. +├── providers - React components that utilize context, contain domain over one particular set of functionality. +├── routing - Utility functions that gather all of the routes prior to loading in the Root-level component. +├── services - Chunks of business-layer-logic functionality with domain over one particular set of functionality. +| ├── Service - An individual service. +| | ├── Service.ts - The class file for the service. +| | ├── constants.ts - Single-use configuration variables only used for the service. If used elsewhere, it should be moved to the global directory. +| | ├── helpers.ts - Single-use helper functions only used for the service. If used elsewhere, it should be moved to the global directory. +├── utils - Reusable utility functions that are used across multiple features. +``` + +## Providers + +* `Providers` are special React components that are used to provide functionality potentially many layers deep, while avoiding prop-drilling. +* Each Provider file exports a constant (e.g. `const ExampleContext = React.createContext()`), as well as a class. +* The class contains a state variable that includes all variables and functions to be accessed down the hierarchy. _Functions are placed in state._ +* In the render method of the class, `this.props.children` is returned inside of (e.g. `). +* When `Service` modules need to interact with UI across features, they should use a `Provider`, and communicate changes through state (e.g. ExampleProvider should use an ExampleContext). +* Providers should be placed in the `Layout` feature, wrapping all other components. + +## Services + +* `Service` modules are business-layer-logic classes that encapsulate interactions with a particular entity. +* The API service module is used to interact with external servers to gather information. +* The Storage and Cache service modules are used to interact with local storage, to aid in persisting data. +* Services should export an abstract class, containing the functionality, as a named export. +* Services should default-export a singleton class which prevents other classes from being instantiated. + +## Indexing + +* Every level of directory should contain an `index.ts` file which re-exports everything in the directory, recursively. +* Externally interfacing with a directory should always be done with the most senior index file (e.g. `import { Foo } from 'v2/components';` vs. `import Foo from 'v2/components/Foo/Foo';`) +* Internally interfacing with a directory should always be done with relative pathing `../../`. diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..ab8c44ed9 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,22 @@ +module.exports = { + 'presets': [ + '@babel/preset-react', + '@babel/preset-typescript', + [ + '@babel/preset-env', + { + // The following plugin fixes false warnings + // "export '...' was not found in '...' " + // https://github.com/webpack-contrib/imports-loader/issues/68 + 'modules': ['commonjs'], + } + ] + ], + 'plugins': [ + 'babel-plugin-styled-components', + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-dynamic-import', + 'react-hot-loader/babel', + ] +}; diff --git a/common/AppProviders.tsx b/common/AppProviders.tsx new file mode 100644 index 000000000..5ff9dd76a --- /dev/null +++ b/common/AppProviders.tsx @@ -0,0 +1,45 @@ +import React from 'react'; + +import { NotificationsProvider, ToastProvider } from 'v2/features'; +import { + AccountProvider, + AddressBookProvider, + AssetProvider, + NetworkProvider, + SettingsProvider, + ContractProvider, + DataProvider +} from 'v2/services/Store'; +import { DevToolsProvider, RatesProvider, StoreProvider } from 'v2/services'; + +function AppProviders({ children }: { children: JSX.Element[] | JSX.Element | null }) { + return ( + + + + + + + + + + + {/* StoreProvider relies on the others Providers */} + + {/* RatesProvider relies on the Store */} + {children} + + + + + + + + + + + + ); +} + +export default AppProviders; diff --git a/common/AppRouter.tsx b/common/AppRouter.tsx new file mode 100644 index 000000000..774ab4fa4 --- /dev/null +++ b/common/AppRouter.tsx @@ -0,0 +1,60 @@ +import React from 'react'; +import { HashRouter, BrowserRouter, Route, Switch, withRouter } from 'react-router-dom'; + +import { Layout } from 'v2/features/Layout'; +import { Home, PageNotFound, ScreenLockProvider, DrawerProvider } from 'v2/features'; +import { IS_PROD, IS_DOWNLOADABLE, ScrollToTop } from 'v2/utils'; +import { ROUTE_PATHS } from 'v2/config/routePaths'; +import { + APP_ROUTES, + PageVisitsAnalytics, + LegacyRoutesHandler, + DefaultHomeHandler, + PrivateRoute +} from 'v2/routing'; + +const LayoutWithLocation = withRouter(({ location, children }) => { + const homeLayout = { + centered: false, + fluid: true, + fullW: true, + bgColor: '#fff' + }; + const isHomeRoute = + location.pathname === ROUTE_PATHS.ROOT.path || location.pathname === ROUTE_PATHS.HOME.path; + return {children}; +}); + +export const AppRouter = () => { + const Router: any = IS_DOWNLOADABLE && IS_PROD ? HashRouter : BrowserRouter; + + return ( + + <> + + + + + + + {/* To avoid fiddling with layout we provide a complete route to home */} + + + + + {APP_ROUTES.filter(route => !route.seperateLayout).map((config, idx) => ( + + ))} + + + + + + + + + + + + ); +}; diff --git a/common/Root.tsx b/common/Root.tsx index 62c2c73ca..82f157590 100644 --- a/common/Root.tsx +++ b/common/Root.tsx @@ -1,147 +1,69 @@ -import { hot } from 'react-hot-loader/root'; -import { setConfig } from 'react-hot-loader'; import React, { Component } from 'react'; -import { Store } from 'redux'; -import { Provider, connect } from 'react-redux'; -import { - withRouter, - Switch, - HashRouter, - Route, - BrowserRouter, - RouteComponentProps -} from 'react-router-dom'; - -import { AnalyticsService } from 'v2/services'; -import { AppState } from 'features/reducers'; -import { configSelectors, configMetaSelectors } from 'features/config'; -import { transactionMetaActions } from 'features/transaction'; -import { onboardingSelectors } from 'features/onboarding'; -// Components -import Contracts from 'containers/Tabs/Contracts'; -import ENS from 'containers/Tabs/ENS'; -import GenerateWallet from 'containers/Tabs/GenerateWallet'; -import SendTransaction from 'containers/Tabs/SendTransaction'; -import SignAndVerifyMessage from 'containers/Tabs/SignAndVerifyMessage'; -import BroadcastTx from 'containers/Tabs/BroadcastTx'; -import CheckTransaction from 'containers/Tabs/CheckTransaction'; -import SupportPage from 'containers/Tabs/SupportPage'; -import ErrorScreen from 'components/ErrorScreen'; -import PageNotFound from 'components/PageNotFound'; -import LogOutPrompt from 'components/LogOutPrompt'; -import QrSignerModal from 'containers/QrSignerModal'; -import OnboardingModal from 'containers/OnboardingModal'; -import NewAppReleaseModal from 'components/NewAppReleaseModal'; -import PalettePage from 'components/Palette'; -import { RouteNotFound } from 'components/RouteNotFound'; -import { RedirectWithQuery } from 'components/RedirectWithQuery'; -import { Theme } from 'config'; -import 'what-input'; - +import { setConfig } from 'react-hot-loader'; +import { hot } from 'react-hot-loader/root'; +import styled, { ThemeProvider } from 'styled-components'; // v2 -import { gatherFeatureRoutes } from 'v2'; - -interface OwnProps { - store: Store; -} - -interface StateProps { - onboardingActive: ReturnType; - networkUnit: ReturnType; - theme: ReturnType; -} - -interface DispatchProps { - setUnitMeta: transactionMetaActions.TSetUnitMeta; -} - -type Props = OwnProps & StateProps & DispatchProps; - -interface State { - error: Error | null; -} - -class RootClass extends Component { - public state = { - error: null - }; +import { BREAK_POINTS, GAU_THEME } from 'v2/theme'; +import { IS_DEV, IS_ELECTRON } from 'v2/utils'; +import { NewAppReleaseModal } from 'v2/components'; +import { DevToolsManager } from 'v2/features'; +import AppProviders from './AppProviders'; +import { AppRouter } from './AppRouter'; + +const AppProvidersInnerContainer = styled.div` + display: flex; +`; +const AppRouterContainer = styled.div` + flex: 1; + overflow: auto; + max-height: 100vh; +`; +const DevToolsManagerContainer = styled.div` + overflow: auto; + max-height: 100vh; + + @media (max-width: ${BREAK_POINTS.SCREEN_SM}) { + position: absolute; + z-index: 100; + width: 100vw; + } +`; +class RootClass extends Component { public componentDidMount() { - this.props.setUnitMeta(this.props.networkUnit); this.addBodyClasses(); - this.updateTheme(this.props.theme); } public componentDidCatch(error: Error) { - this.setState({ error }); - } - - public componentDidUpdate(prevProps: Props) { - if (this.props.theme !== prevProps.theme) { - this.updateTheme(this.props.theme, prevProps.theme); - } + console.error(error); } public render() { - const { store, onboardingActive } = this.props; - const { error } = this.state; - - if (error) { - // @ts-ignore - return ; - } - - const routes = ( - - - {gatherFeatureRoutes().map((config, i) => ( - - ))} - - - - - - - - - {process.env.NODE_ENV !== 'production' && ( - - )} - - - - - ); - - const Router: any = - process.env.BUILD_DOWNLOADABLE && process.env.NODE_ENV === 'production' - ? HashRouter - : BrowserRouter; - return ( - - - - - {onboardingActive && } - {routes} - - - - {process.env.BUILD_ELECTRON && } - - - -
- + + + + {/* DevToolsManager */} + + {IS_DEV ? : <>} + + + {/* Router */} + + +
+ {IS_ELECTRON ? : <>} + + + + ); } private addBodyClasses() { - const classes = []; + const classes: string[] = []; - if (process.env.BUILD_ELECTRON) { + if (IS_ELECTRON) { classes.push('is-electron'); if (navigator.appVersion.includes('Win')) { @@ -155,102 +77,9 @@ class RootClass extends Component { document.body.className += ` ${classes.join(' ')}`; } - - private updateTheme(theme: Theme, oldTheme?: Theme) { - const root = document.documentElement; - if (oldTheme) { - root.classList.remove(`theme--${oldTheme}`); - } - root.classList.add(`theme--${theme}`); - } } -let previousURL = ''; -const PageVisitsAnalytics = withRouter( - // tslint:disable-next-line: max-classes-per-file - class extends Component> { - public componentDidMount() { - this.props.history.listen(() => { - if (previousURL !== window.location.href) { - AnalyticsService.instance.trackPageVisit(window.location.href); - previousURL = window.location.href; - } - }); - } - - public render() { - return this.props.children; - } - } -); - -const LegacyRoutes = withRouter(props => { - const { history } = props; - const { pathname, search } = props.location; - let { hash } = props.location; - - if (search.includes('redirectToSignMessage')) { - history.push('/sign-and-verify-message'); - return null; - } - - if (pathname === '/') { - hash = hash.split('?')[0]; - switch (hash) { - case '#send-transaction': - case '#offline-transaction': - return ; - case '#generate-wallet': - history.push('/'); - break; - case '#swap': - history.push('/swap'); - break; - case '#contracts': - history.push('/contracts'); - break; - case '#ens': - history.push('/ens'); - break; - case '#view-wallet-info': - history.push('/account/info'); - break; - case '#check-tx-status': - return ; - } - } - - return ( - - - - - - ); -}); - -const CaptureRouteNotFound = withRouter(({ children, location }) => { - return location && location.state && location.state.error ? ( - - ) : ( - (children as JSX.Element) - ); -}); - -const mapStateToProps = (state: AppState): StateProps => ({ - onboardingActive: onboardingSelectors.getActive(state), - networkUnit: configSelectors.getNetworkUnit(state), - theme: configMetaSelectors.getTheme(state) -}); - -const ConnectedRoot = connect( - mapStateToProps, - { - setUnitMeta: transactionMetaActions.setUnitMeta - } -)(RootClass); - // Silence RHL 'reconciliation failed' errors // https://github.com/gatsbyjs/gatsby/issues/7209#issuecomment-415807021 setConfig({ logLevel: 'no-errors-please' }); -export default hot(ConnectedRoot); +export default hot(RootClass); diff --git a/common/api/bity.ts b/common/api/bity.ts deleted file mode 100644 index e3b35b3b1..000000000 --- a/common/api/bity.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { WhitelistedCoins, bityConfig } from 'config'; -import { checkHttpStatus, parseJSON, filter } from './utils'; -import bitcoinIcon from 'assets/images/bitcoin.png'; -import repIcon from 'assets/images/augur.png'; -import etherIcon from 'assets/images/ether.png'; - -const isCryptoPair = (from: string, to: string, arr: WhitelistedCoins[]) => { - return filter(from, arr) && filter(to, arr); -}; - -const btcOptions = { - id: 'BTC', - status: 'available', - image: bitcoinIcon, - name: 'Bitcoin' -}; - -const ethOptions = { - id: 'ETH', - status: 'available', - image: etherIcon, - name: 'Ether' -}; - -const repOptions = { - id: 'REP', - status: 'available', - image: repIcon, - name: 'Augur' -}; - -export interface MappedRates { - [key: string]: any; -} - -export function getAllRates() { - const mappedRates: MappedRates = {}; - return _getAllRates().then(bityRates => { - bityRates.objects.forEach((each: any) => { - const pairName = each.pair; - const from = { id: pairName.substring(0, 3) }; - const to = { id: pairName.substring(3, 6) }; - // Check if rate exists= && check if the pair only crypto to crypto, not crypto to fiat, or any other combination - if (parseFloat(each.rate_we_sell) && isCryptoPair(from.id, to.id, ['BTC', 'ETH'])) { - let fromOptions; - let toOptions; - switch (from.id) { - case 'BTC': - fromOptions = btcOptions; - break; - case 'ETH': - fromOptions = ethOptions; - break; - case 'REP': - fromOptions = repOptions; - } - switch (to.id) { - case 'BTC': - toOptions = btcOptions; - break; - case 'ETH': - toOptions = ethOptions; - break; - case 'REP': - toOptions = repOptions; - } - mappedRates[pairName] = { - id: pairName, - options: [fromOptions, toOptions], - rate: parseFloat(each.rate_we_sell) - }; - } - }); - return mappedRates; - }); -} - -export function postOrder(amount: number, destAddress: string, mode: number, pair: string) { - return fetch(`${bityConfig.serverURL}/order`, { - method: 'post', - body: JSON.stringify({ - amount, - destAddress, - mode, - pair - }), - headers: new Headers(bityConfig.postConfig.headers) - }) - .then(checkHttpStatus) - .then(parseJSON); -} - -export function getOrderStatus(orderId: string) { - return fetch(`${bityConfig.serverURL}/status`, { - method: 'POST', - body: JSON.stringify({ - orderid: orderId - }), - headers: new Headers(bityConfig.postConfig.headers) - }) - .then(checkHttpStatus) - .then(parseJSON); -} - -function _getAllRates() { - return fetch(`${bityConfig.bityURL}/v1/rate2/`) - .then(checkHttpStatus) - .then(parseJSON); -} diff --git a/common/api/gas.ts b/common/api/gas.ts deleted file mode 100644 index dd8b8de41..000000000 --- a/common/api/gas.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Omit } from 'react-redux'; - -import { checkHttpStatus, parseJSON } from './utils'; - -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 { - return fetch('https://gas.mycryptoapi.com', { - 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)[] = [ - '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 - })); -} diff --git a/common/api/rates.ts b/common/api/rates.ts deleted file mode 100644 index 262885f02..000000000 --- a/common/api/rates.ts +++ /dev/null @@ -1,127 +0,0 @@ -import { handleJSONResponse } from 'api/utils'; - -interface IRateSymbols { - symbols: { - all: TAllSymbols; - fiat: TFiatSymbols; - coinAndToken: TCoinAndTokenSymbols; - }; - isFiat: isFiat; -} - -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; - RUB: number; - JPY: number; - KRW: number; - INR: number; -} -interface IFiatSymbols { - USD: number; - EUR: number; - GBP: number; - CHF: number; - RUB: number; - JPY: number; - KRW: number; - INR: number; -} -interface ICoinAndTokenSymbols { - BTC: number; - ETH: number; -} - -const fiat: TFiatSymbols = ['USD', 'EUR', 'GBP', 'CHF', 'RUB', 'JPY', 'KRW', 'INR']; -const coinAndToken: TCoinAndTokenSymbols = ['BTC', 'ETH']; -export const rateSymbols: IRateSymbols = { - symbols: { - all: [...fiat, ...coinAndToken], - fiat, - coinAndToken - }, - isFiat: (rate: string) => (fiat as string[]).includes(rate) -}; - -// TODO - internationalize -const ERROR_MESSAGE = 'Could not fetch rate data.'; -const CCApi = 'https://proxy.mycryptoapi.com/cc'; - -const CCRates = (symbols: string[]) => { - const tsyms = rateSymbols.symbols.all.concat(symbols as any).join(','); - return `${CCApi}?fsym=ETH&tsyms=${tsyms}`; -}; - -export interface CCResponse { - [symbol: string]: ISymbol; -} - -interface IRatesResponse { - [key: string]: number; -} -interface IRatesError { - Response: 'Error'; -} - -export const fetchRates = (symbols: string[] = []): Promise => - fetch(CCRates(symbols)) - .then(response => handleJSONResponse(response, ERROR_MESSAGE)) - .then((rates: IRatesResponse | IRatesError) => { - // API errors come as 200s, so check the json for error - if ((rates as IRatesError).Response === 'Error') { - throw new Error('Failed to fetch rates'); - } - return rates; - }) - .then((rates: IRatesResponse) => { - // Sometimes the API erroneously gives tokens an extremely high value, - // like 10000000 ETH to 1 token. Filter those out. If that ever turns - // out to be true, we should all go home. - return Object.keys(rates).reduce((filteredRates: IRatesResponse, key) => { - if (rates[key] > 0.000001) { - filteredRates[key] = rates[key]; - } - return filteredRates; - }, {}); - }) - .then((rates: IRatesResponse) => { - // All currencies are in ETH right now. We'll do token -> eth -> value to - // do it all in one request to their respective rates via ETH. - return symbols.reduce( - (eqRates, sym) => { - if (rates[sym]) { - eqRates[sym] = rateSymbols.symbols.all.reduce( - (symRates, rateSym) => { - symRates[rateSym] = (1 / rates[sym]) * rates[rateSym]; - return symRates; - }, - {} as ISymbol - ); - } - return eqRates; - }, - { - ETH: { - USD: rates.USD, - EUR: rates.EUR, - GBP: rates.GBP, - CHF: rates.CHF, - RUB: rates.RUB, - JPY: rates.JPY, - KRW: rates.KRW, - INR: rates.INR, - BTC: rates.BTC, - ETH: 1 - } - } as CCResponse - ); - }); diff --git a/common/api/shapeshift.spec.ts b/common/api/shapeshift.spec.ts deleted file mode 100644 index 8df9ceb4d..000000000 --- a/common/api/shapeshift.spec.ts +++ /dev/null @@ -1,125 +0,0 @@ -import shapeshift, { SHAPESHIFT_BASE_URL } from './shapeshift'; - -describe('ShapeShift service', () => { - beforeEach(() => { - (global as any).fetch = jest.fn().mockImplementation( - (url: string) => - new Promise(resolve => { - const returnValues = { - [`${SHAPESHIFT_BASE_URL}/marketinfo`]: { - status: 200, - json: () => [ - { - limit: 1, - maxLimit: 2, - min: 1, - minerFee: 2, - pair: 'BTC_ETH', - rate: '1.0' - }, - { - limit: 1, - maxLimit: 2, - min: 1, - minerFee: 2, - pair: 'ETH_BTC', - rate: '1.0' - } - ] - }, - [`${SHAPESHIFT_BASE_URL}/getcoins`]: { - status: 200, - json: () => ({ - BTC: { - name: 'Bitcoin', - symbol: 'BTC', - image: '', - imageSmall: '', - status: 'available', - minerFee: 1 - }, - ETH: { - name: 'Ethereum', - symbol: 'ETH', - image: '', - imageSmall: '', - status: 'available', - minerFee: 1 - }, - XMR: { - name: 'Monero', - symbol: 'XMR', - image: '', - imageSmall: '', - status: 'unavailable', - minerFee: 1 - } - }) - } - }; - - resolve(returnValues[url]); - }) - ); - }); - it('provides a collection of all available and unavailable coins and tokens', async done => { - const rates = await shapeshift.getAllRates(); - - expect(rates).toEqual({ - BTCETH: { - id: 'BTCETH', - rate: '1.0', - limit: 1, - min: 1, - options: [ - { - id: 'BTC', - image: '', - name: 'Bitcoin', - status: 'available' - }, - { - id: 'ETH', - image: '', - name: 'Ethereum', - status: 'available' - } - ] - }, - ETHBTC: { - id: 'ETHBTC', - rate: '1.0', - limit: 1, - min: 1, - options: [ - { - id: 'ETH', - image: '', - name: 'Ethereum', - status: 'available' - }, - { - id: 'BTC', - image: '', - name: 'Bitcoin', - status: 'available' - } - ] - }, - __XMR: { - id: '__XMR', - limit: 0, - min: 0, - options: [ - { - id: 'XMR', - image: '', - name: 'Monero', - status: 'unavailable' - } - ] - } - }); - done(); - }); -}); diff --git a/common/api/shapeshift.ts b/common/api/shapeshift.ts deleted file mode 100644 index 75de226c2..000000000 --- a/common/api/shapeshift.ts +++ /dev/null @@ -1,380 +0,0 @@ -import axios from 'axios'; -import flatten from 'lodash/flatten'; -import uniqBy from 'lodash/uniqBy'; -import queryString from 'query-string'; - -import { checkHttpStatus, parseJSON } from 'api/utils'; - -export const SHAPESHIFT_BASE_URL = 'https://shapeshift.io'; -export const SHAPESHIFT_TOKEN_WHITELIST = [ - 'OMG', - 'REP', - 'SNT', - 'SNGLS', - 'ZRX', - 'SWT', - 'ANT', - 'BAT', - 'BNT', - 'CVC', - 'DNT', - '1ST', - 'GNO', - 'GNT', - 'EDG', - 'FUN', - 'RLC', - 'TRST', - 'GUP' -]; -export const SHAPESHIFT_WHITELIST = [...SHAPESHIFT_TOKEN_WHITELIST, 'ETH', 'ETC', 'BTC', 'XMR']; -export const SHAPESHIFT_ACCESS_TOKEN = 'c640aa85-dd01-4db1-a6f2-ed57e6fd6c54'; -export const SHAPESHIFT_API_URL = 'https://auth.shapeshift.io/oauth/authorize'; -export const SHAPESHIFT_CLIENT_ID = 'c74cd600-2f91-4107-af60-b70954da5ad2'; -export const SHAPESHIFT_REDIRECT_URI = 'https://mycrypto.com/swap'; - -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 })[]; - }; -} - -interface ShapeshiftCoinInfo { - image: string; - imageSmall: string; - minerFee: number; - name: string; - status: string; - symbol: string; -} - -interface ShapeshiftCoinInfoMap { - [id: string]: ShapeshiftCoinInfo; -} - -interface ShapeshiftOption { - id?: string; - status?: string; - image?: string; -} - -interface ShapeshiftOptionMap { - [symbol: string]: ShapeshiftOption; -} - -class ShapeshiftService { - public whitelist = SHAPESHIFT_WHITELIST; - private url = SHAPESHIFT_BASE_URL; - private supportedCoinsAndTokens: ShapeshiftCoinInfoMap = {}; - private fetchedSupportedCoinsAndTokens = false; - private token: string | null = null; - - public constructor() { - this.retrieveAccessTokenFromStorage(); - - if (process.env.BUILD_ELECTRON) { - const { ipcRenderer } = (window as any).require('electron'); - - ipcRenderer.on('shapeshift-set-token', (_: any, token: string) => - this.saveAccessTokenToStorage(token) - ); - } - } - - public hasToken() { - return !!window.localStorage.getItem(SHAPESHIFT_ACCESS_TOKEN); - } - - public urlHasCodeParam() { - return !!queryString.parse(window.location.search).code; - } - - public checkStatus(address: string) { - return fetch(`${this.url}/txStat/${address}`) - .then(checkHttpStatus) - .then(parseJSON); - } - - public sendAmount( - withdrawal: string, - originKind: string, - destinationKind: string, - destinationAmount: number - ) { - const pair = `${originKind.toLowerCase()}_${destinationKind.toLowerCase()}`; - - return fetch(`${this.url}/sendamount`, { - method: 'POST', - body: JSON.stringify({ - amount: destinationAmount, - pair, - withdrawal - }), - headers: new Headers(this.getPostHeaders()) - }) - .then(checkHttpStatus) - .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() { - return fetch(`${this.url}/getcoins`) - .then(checkHttpStatus) - .then(parseJSON); - } - - public getAllRates = async () => { - const marketInfo = await this.getMarketInfo(); - const pairRates = this.filterPairs(marketInfo); - const checkAvl = await this.checkAvl(pairRates); - const mappedRates = this.mapMarketInfo(checkAvl); - const allRates = this.addUnavailableCoinsAndTokens(mappedRates); - - return allRates; - }; - - public sendUserToAuthorize = () => { - const query = queryString.stringify({ - client_id: SHAPESHIFT_CLIENT_ID, - scope: 'users:read', - response_type: 'code', - redirect_uri: SHAPESHIFT_REDIRECT_URI - }); - const url = `${SHAPESHIFT_API_URL}?${query}`; - - if (process.env.BUILD_ELECTRON) { - const { ipcRenderer } = (window as any).require('electron'); - - ipcRenderer.send('shapeshift-authorize', url); - } else { - window.open(url, '_blank', 'width=800, height=600, menubar=yes'); - } - }; - - public requestAccessToken = async () => { - const { code } = queryString.parse(window.location.search); - const { - data: { access_token: token } - } = await axios.post('https://proxy.mycryptoapi.com/request-shapeshift-token', { - code, - grant_type: 'authorization_code' - }); - - this.token = token; - this.saveAccessTokenToStorage(token); - - if (process.env.BUILD_ELECTRON) { - const { ipcRenderer } = (window as any).require('electron'); - - ipcRenderer.send('shapeshift-token-retrieved', token); - } - }; - - public addUnavailableCoinsAndTokens = (availableCoinsAndTokens: TokenMap) => { - if (this.fetchedSupportedCoinsAndTokens) { - /** @desc Create a hash for efficiently checking which tokens are currently available. */ - const allOptions = flatten( - Object.values(availableCoinsAndTokens).map(({ options }) => options) - ); - const availableOptions: ShapeshiftOptionMap = uniqBy(allOptions, 'id').reduce( - (prev: ShapeshiftOptionMap, next) => { - prev[next.id] = next; - return prev; - }, - {} - ); - - const unavailableCoinsAndTokens = this.whitelist - .map(token => { - /** @desc ShapeShift claims support for the token and it is available. */ - const availableCoinOrToken = availableOptions[token]; - - if (availableCoinOrToken) { - return null; - } - - /** @desc ShapeShift claims support for the token, but it is unavailable. */ - const supportedCoinOrToken = this.supportedCoinsAndTokens[token]; - - if (supportedCoinOrToken) { - const { symbol: id, image, name, status } = supportedCoinOrToken; - - return { - /** @desc Preface the false id with '__' to differentiate from actual pairs. */ - id: `__${id}`, - limit: 0, - min: 0, - options: [{ id, image, name, status }] - }; - } - - /** @desc We claim support for the coin or token, but ShapeShift doesn't. */ - return null; - }) - .reduce((prev: ShapeshiftOptionMap, next) => { - if (next) { - prev[next.id] = next; - - return prev; - } - - return prev; - }, {}); - - return { ...availableCoinsAndTokens, ...unavailableCoinsAndTokens }; - } - - return availableCoinsAndTokens; - }; - - private getPostHeaders = () => ({ - 'Content-Type': 'application/json', - Authorization: `Bearer ${this.token}` - }); - - private filterPairs(marketInfo: ShapeshiftMarketInfo[]) { - return marketInfo.filter(obj => { - const { pair } = obj; - const pairArr = pair.split('_'); - return this.whitelist.includes(pairArr[0]) && this.whitelist.includes(pairArr[1]); - }); - } - - private async checkAvl(pairRates: IPairData[]) { - const avlCoins = await this.getAvlCoins(); - const mapAvl = pairRates.map(p => { - const { pair } = p; - const pairArr = pair.split('_'); - - if (pairArr[0] in avlCoins && pairArr[1] in avlCoins) { - return { - ...p, - ...{ - [pairArr[0]]: { - name: avlCoins[pairArr[0]].name, - status: avlCoins[pairArr[0]].status, - image: avlCoins[pairArr[0]].image - }, - [pairArr[1]]: { - name: avlCoins[pairArr[1]].name, - status: avlCoins[pairArr[1]].status, - image: avlCoins[pairArr[1]].image - } - } - }; - } - }); - const filered = mapAvl.filter(v => v); - return filered as (IPairData & IAvailablePairData)[]; - } - - private getAvlCoins() { - return fetch(`${this.url}/getcoins`) - .then(checkHttpStatus) - .then(parseJSON) - .then(supportedCoinsAndTokens => { - this.supportedCoinsAndTokens = supportedCoinsAndTokens; - this.fetchedSupportedCoinsAndTokens = true; - - return supportedCoinsAndTokens; - }); - } - - private getMarketInfo() { - return fetch(`${this.url}/marketinfo`) - .then(checkHttpStatus) - .then(parseJSON); - } - - private isWhitelisted(coin: string) { - return this.whitelist.includes(coin); - } - - private mapMarketInfo(marketInfo: (IPairData & IAvailablePairData)[]) { - const tokenMap: TokenMap = {}; - marketInfo.forEach(m => { - const [originKind, destinationKind] = m.pair.split('_'); - if (this.isWhitelisted(originKind) && this.isWhitelisted(destinationKind)) { - const pairName = originKind + destinationKind; - const { rate, limit, min } = m; - tokenMap[pairName] = { - id: pairName, - options: [ - { - id: originKind, - status: m[originKind].status, - image: m[originKind].image, - name: m[originKind].name - }, - { - id: destinationKind, - status: m[destinationKind].status, - image: m[destinationKind].image, - name: m[destinationKind].name - } - ], - rate, - limit, - min - }; - } - }); - return tokenMap; - } - - private saveAccessTokenToStorage = (token: string) => { - if (window && window.localStorage) { - window.localStorage.setItem(SHAPESHIFT_ACCESS_TOKEN, token); - } - }; - - private retrieveAccessTokenFromStorage = () => { - if (window && window.localStorage) { - const token = window.localStorage.getItem(SHAPESHIFT_ACCESS_TOKEN); - this.token = token; - } - }; -} - -const shapeshift = new ShapeshiftService(); - -export default shapeshift; diff --git a/common/assets/images/arrow-right.svg b/common/assets/images/arrow-right.svg new file mode 100644 index 000000000..7912ffa11 --- /dev/null +++ b/common/assets/images/arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/augur.png b/common/assets/images/augur.png deleted file mode 100644 index 8e69dd533..000000000 Binary files a/common/assets/images/augur.png and /dev/null differ diff --git a/common/assets/images/banners/Ledger_Desktop.png b/common/assets/images/banners/Ledger_Desktop.png new file mode 100644 index 000000000..1ee864ba9 Binary files /dev/null and b/common/assets/images/banners/Ledger_Desktop.png differ diff --git a/common/assets/images/banners/Ledger_Mobile.png b/common/assets/images/banners/Ledger_Mobile.png new file mode 100644 index 000000000..236ae88da Binary files /dev/null and b/common/assets/images/banners/Ledger_Mobile.png differ diff --git a/common/assets/images/banners/Simplex_Desktop.png b/common/assets/images/banners/Simplex_Desktop.png new file mode 100644 index 000000000..3f7d8ce20 Binary files /dev/null and b/common/assets/images/banners/Simplex_Desktop.png differ diff --git a/common/assets/images/banners/Simplex_Mobile.png b/common/assets/images/banners/Simplex_Mobile.png new file mode 100644 index 000000000..4543e6701 Binary files /dev/null and b/common/assets/images/banners/Simplex_Mobile.png differ diff --git a/common/assets/images/banners/Trezor_Desktop.png b/common/assets/images/banners/Trezor_Desktop.png new file mode 100644 index 000000000..4987c6ba6 Binary files /dev/null and b/common/assets/images/banners/Trezor_Desktop.png differ diff --git a/common/assets/images/banners/Trezor_Mobile.png b/common/assets/images/banners/Trezor_Mobile.png new file mode 100644 index 000000000..8aa009444 Binary files /dev/null and b/common/assets/images/banners/Trezor_Mobile.png differ diff --git a/common/assets/images/checkmark_outline.svg b/common/assets/images/checkmark_outline.svg new file mode 100644 index 000000000..8b4f0ba64 --- /dev/null +++ b/common/assets/images/checkmark_outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/common/assets/images/chevron-right.svg b/common/assets/images/chevron-right.svg new file mode 100644 index 000000000..d2ed66581 --- /dev/null +++ b/common/assets/images/chevron-right.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/common/assets/images/chronologic-logo-dark.svg b/common/assets/images/chronologic-logo-dark.svg deleted file mode 100644 index 4b00bbb91..000000000 --- a/common/assets/images/chronologic-logo-dark.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Layer 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/common/assets/images/chronologic-logo.svg b/common/assets/images/chronologic-logo.svg deleted file mode 100644 index 0a2e3fde8..000000000 --- a/common/assets/images/chronologic-logo.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Layer 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/common/assets/images/control-crypto-mobile.svg b/common/assets/images/control-crypto-mobile.svg new file mode 100644 index 000000000..19388d037 --- /dev/null +++ b/common/assets/images/control-crypto-mobile.svg @@ -0,0 +1,529 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Manage your information and your + cryptocurrency easily and without fear. + + + diff --git a/common/assets/images/control-crypto.svg b/common/assets/images/control-crypto.svg new file mode 100644 index 000000000..57adb79a5 --- /dev/null +++ b/common/assets/images/control-crypto.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/cross_outline.svg b/common/assets/images/cross_outline.svg new file mode 100644 index 000000000..b3927b018 --- /dev/null +++ b/common/assets/images/cross_outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/common/assets/images/exit.svg b/common/assets/images/exit.svg deleted file mode 100644 index 919d64cbd..000000000 --- a/common/assets/images/exit.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/common/assets/images/header-bg.jpg b/common/assets/images/header-bg.jpg deleted file mode 100644 index 03317e173..000000000 Binary files a/common/assets/images/header-bg.jpg and /dev/null differ diff --git a/common/assets/images/icn-add-assets.svg b/common/assets/images/icn-add-assets.svg new file mode 100644 index 000000000..fcda3ac21 --- /dev/null +++ b/common/assets/images/icn-add-assets.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/common/assets/images/icn-announcement.svg b/common/assets/images/icn-announcement.svg new file mode 100644 index 000000000..317bf3350 --- /dev/null +++ b/common/assets/images/icn-announcement.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/common/assets/images/icn-back-arrow.svg b/common/assets/images/icn-back-arrow.svg new file mode 100644 index 000000000..f4dc14fd9 --- /dev/null +++ b/common/assets/images/icn-back-arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-back.svg b/common/assets/images/icn-back.svg new file mode 100644 index 000000000..eca2910c9 --- /dev/null +++ b/common/assets/images/icn-back.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-bank-vs-mycrypto.svg b/common/assets/images/icn-bank-vs-mycrypto.svg deleted file mode 100644 index c74f96d4b..000000000 --- a/common/assets/images/icn-bank-vs-mycrypto.svg +++ /dev/null @@ -1 +0,0 @@ -Untitled-1 \ No newline at end of file diff --git a/common/assets/images/icn-buy.svg b/common/assets/images/icn-buy.svg new file mode 100644 index 000000000..9f6961c7f --- /dev/null +++ b/common/assets/images/icn-buy.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-champagne-2.svg b/common/assets/images/icn-champagne-2.svg new file mode 100644 index 000000000..8e2ef6134 --- /dev/null +++ b/common/assets/images/icn-champagne-2.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-champagne.svg b/common/assets/images/icn-champagne.svg deleted file mode 100644 index 363b1908c..000000000 --- a/common/assets/images/icn-champagne.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/common/assets/images/icn-chest.svg b/common/assets/images/icn-chest.svg deleted file mode 100644 index e2cbea052..000000000 --- a/common/assets/images/icn-chest.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/common/assets/images/icn-close.svg b/common/assets/images/icn-close.svg new file mode 100644 index 000000000..81b3d850a --- /dev/null +++ b/common/assets/images/icn-close.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-connect-trezor-new.svg b/common/assets/images/icn-connect-trezor-new.svg new file mode 100644 index 000000000..78bf5bd52 --- /dev/null +++ b/common/assets/images/icn-connect-trezor-new.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/common/assets/images/icn-create-pw.svg b/common/assets/images/icn-create-pw.svg new file mode 100644 index 000000000..4496abcd0 --- /dev/null +++ b/common/assets/images/icn-create-pw.svg @@ -0,0 +1,29 @@ + + + + 4FBCFCD9-6341-4ABD-AD1C-C7692052E1E0 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-dashboard.svg b/common/assets/images/icn-dashboard.svg new file mode 100644 index 000000000..85aa7d790 --- /dev/null +++ b/common/assets/images/icn-dashboard.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/common/assets/images/icn-desktop-app.svg b/common/assets/images/icn-desktop-app.svg new file mode 100644 index 000000000..78ef7d95d --- /dev/null +++ b/common/assets/images/icn-desktop-app.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-don-t-lose-crypto.svg b/common/assets/images/icn-don-t-lose-crypto.svg new file mode 100644 index 000000000..7ff164513 --- /dev/null +++ b/common/assets/images/icn-don-t-lose-crypto.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-download.svg b/common/assets/images/icn-download.svg new file mode 100644 index 000000000..2d62f74d0 --- /dev/null +++ b/common/assets/images/icn-download.svg @@ -0,0 +1,18 @@ + + + + E05B9B79-3F0E-4EC4-98F9-2EB3B483C3F4 + Created with sketchtool. + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-existing-wallet.svg b/common/assets/images/icn-existing-wallet.svg new file mode 100644 index 000000000..02054f6a9 --- /dev/null +++ b/common/assets/images/icn-existing-wallet.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-expand.svg b/common/assets/images/icn-expand.svg new file mode 100644 index 000000000..63e1deb06 --- /dev/null +++ b/common/assets/images/icn-expand.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icon-external-link.svg b/common/assets/images/icn-external-link.svg similarity index 100% rename from common/assets/images/icon-external-link.svg rename to common/assets/images/icn-external-link.svg diff --git a/common/assets/images/icn-fee.svg b/common/assets/images/icn-fee.svg new file mode 100644 index 000000000..3f78a7306 --- /dev/null +++ b/common/assets/images/icn-fee.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-forgot-password.svg b/common/assets/images/icn-forgot-password.svg new file mode 100644 index 000000000..07602d24c --- /dev/null +++ b/common/assets/images/icn-forgot-password.svg @@ -0,0 +1,29 @@ + + + + 79B14051-D0B7-4E9F-BC9E-B7AD99A31F70 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-hardware-wallet.svg b/common/assets/images/icn-hardware-wallet.svg new file mode 100644 index 000000000..d5ce01228 --- /dev/null +++ b/common/assets/images/icn-hardware-wallet.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-how-do-i-buy-crypto.svg b/common/assets/images/icn-how-do-i-buy-crypto.svg new file mode 100644 index 000000000..17f1c0c22 --- /dev/null +++ b/common/assets/images/icn-how-do-i-buy-crypto.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-important-update.svg b/common/assets/images/icn-important-update.svg new file mode 100644 index 000000000..0edb0e291 --- /dev/null +++ b/common/assets/images/icn-important-update.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/assets/images/icn-keystore.svg b/common/assets/images/icn-keystore.svg new file mode 100644 index 000000000..76a823658 --- /dev/null +++ b/common/assets/images/icn-keystore.svg @@ -0,0 +1,26 @@ + + + + 0EAEF11C-05BE-4E50-AF1D-32B5CD0EE171 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-ledger-nano-large.svg b/common/assets/images/icn-ledger-nano-large.svg new file mode 100644 index 000000000..ce47730ab --- /dev/null +++ b/common/assets/images/icn-ledger-nano-large.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/common/assets/images/icn-ledger-nano.svg b/common/assets/images/icn-ledger-nano.svg deleted file mode 100644 index 7177c87cd..000000000 --- a/common/assets/images/icn-ledger-nano.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/common/assets/images/icn-lock-safety.svg b/common/assets/images/icn-lock-safety.svg new file mode 100644 index 000000000..20d048995 --- /dev/null +++ b/common/assets/images/icn-lock-safety.svg @@ -0,0 +1,20 @@ + + + + F0739086-BD8C-4061-9ABD-93792C7F5EB2 + Created with sketchtool. + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-more.svg b/common/assets/images/icn-more.svg new file mode 100644 index 000000000..799342099 --- /dev/null +++ b/common/assets/images/icn-more.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-new-wallet.svg b/common/assets/images/icn-new-wallet.svg new file mode 100644 index 000000000..c00161d48 --- /dev/null +++ b/common/assets/images/icn-new-wallet.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-new-window.svg b/common/assets/images/icn-new-window.svg new file mode 100644 index 000000000..2fd7463c8 --- /dev/null +++ b/common/assets/images/icn-new-window.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-node.svg b/common/assets/images/icn-node.svg deleted file mode 100644 index 46953784b..000000000 --- a/common/assets/images/icn-node.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/common/assets/images/icn-opensource.svg b/common/assets/images/icn-opensource.svg new file mode 100644 index 000000000..307c3be2e --- /dev/null +++ b/common/assets/images/icn-opensource.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-oval.svg b/common/assets/images/icn-oval.svg new file mode 100644 index 000000000..74b302c23 --- /dev/null +++ b/common/assets/images/icn-oval.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-printer.svg b/common/assets/images/icn-printer.svg new file mode 100644 index 000000000..1fd310f9d --- /dev/null +++ b/common/assets/images/icn-printer.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-privatekey-new.svg b/common/assets/images/icn-privatekey-new.svg new file mode 100644 index 000000000..a2bd66818 --- /dev/null +++ b/common/assets/images/icn-privatekey-new.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/common/assets/images/icn-protect.svg b/common/assets/images/icn-protect.svg new file mode 100644 index 000000000..afc489324 --- /dev/null +++ b/common/assets/images/icn-protect.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-purple-swoosh.svg b/common/assets/images/icn-purple-swoosh.svg new file mode 100644 index 000000000..c2c650a45 --- /dev/null +++ b/common/assets/images/icn-purple-swoosh.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-question.svg b/common/assets/images/icn-question.svg new file mode 100644 index 000000000..7deb98ce7 --- /dev/null +++ b/common/assets/images/icn-question.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-questions.svg b/common/assets/images/icn-questions.svg new file mode 100644 index 000000000..3d493452a --- /dev/null +++ b/common/assets/images/icn-questions.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/common/assets/images/icn-receive.svg b/common/assets/images/icn-receive.svg new file mode 100644 index 000000000..fd73ed82c --- /dev/null +++ b/common/assets/images/icn-receive.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-reload.svg b/common/assets/images/icn-reload.svg new file mode 100644 index 000000000..c2035dd43 --- /dev/null +++ b/common/assets/images/icn-reload.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-sad-wallet.svg b/common/assets/images/icn-sad-wallet.svg new file mode 100644 index 000000000..bf94b3cbe --- /dev/null +++ b/common/assets/images/icn-sad-wallet.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-safet-mini-new.svg b/common/assets/images/icn-safet-mini-new.svg new file mode 100644 index 000000000..ec762d3b1 --- /dev/null +++ b/common/assets/images/icn-safet-mini-new.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/assets/images/icn-save-dash-board-settings.svg b/common/assets/images/icn-save-dash-board-settings.svg new file mode 100644 index 000000000..3fc82fe69 --- /dev/null +++ b/common/assets/images/icn-save-dash-board-settings.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-send.svg b/common/assets/images/icn-send.svg new file mode 100644 index 000000000..b027124d5 --- /dev/null +++ b/common/assets/images/icn-send.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/assets/images/icn-sent.svg b/common/assets/images/icn-sent.svg new file mode 100644 index 000000000..d28f83d2a --- /dev/null +++ b/common/assets/images/icn-sent.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-settings.svg b/common/assets/images/icn-settings.svg new file mode 100644 index 000000000..9392e8e15 --- /dev/null +++ b/common/assets/images/icn-settings.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-show-closed-eye-svg.svg b/common/assets/images/icn-show-closed-eye-svg.svg new file mode 100644 index 000000000..9712dd5cd --- /dev/null +++ b/common/assets/images/icn-show-closed-eye-svg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-show.svg b/common/assets/images/icn-show-eye.svg similarity index 100% rename from common/assets/images/icn-show.svg rename to common/assets/images/icn-show-eye.svg diff --git a/common/assets/images/icn-sparkles-1.svg b/common/assets/images/icn-sparkles-1.svg new file mode 100644 index 000000000..743fca922 --- /dev/null +++ b/common/assets/images/icn-sparkles-1.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-sparkles-2.svg b/common/assets/images/icn-sparkles-2.svg new file mode 100644 index 000000000..0fe88788d --- /dev/null +++ b/common/assets/images/icn-sparkles-2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-sparkles-3.svg b/common/assets/images/icn-sparkles-3.svg new file mode 100644 index 000000000..a6136cbb5 --- /dev/null +++ b/common/assets/images/icn-sparkles-3.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-sparkles-4.svg b/common/assets/images/icn-sparkles-4.svg new file mode 100644 index 000000000..a530bf754 --- /dev/null +++ b/common/assets/images/icn-sparkles-4.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/common/assets/images/icn-swap.svg b/common/assets/images/icn-swap.svg new file mode 100644 index 000000000..be9e67d0b --- /dev/null +++ b/common/assets/images/icn-swap.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-toast-alert.svg b/common/assets/images/icn-toast-alert.svg new file mode 100644 index 000000000..f11b2edb9 --- /dev/null +++ b/common/assets/images/icn-toast-alert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/icn-toast-close.svg b/common/assets/images/icn-toast-close.svg new file mode 100644 index 000000000..bb2d907aa --- /dev/null +++ b/common/assets/images/icn-toast-close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/icn-toast-error.svg b/common/assets/images/icn-toast-error.svg new file mode 100644 index 000000000..ce40627b7 --- /dev/null +++ b/common/assets/images/icn-toast-error.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-toast-progress.svg b/common/assets/images/icn-toast-progress.svg new file mode 100644 index 000000000..7bbc15ef8 --- /dev/null +++ b/common/assets/images/icn-toast-progress.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-toast-success.svg b/common/assets/images/icn-toast-success.svg new file mode 100644 index 000000000..161608d7e --- /dev/null +++ b/common/assets/images/icn-toast-success.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/icn-toast-swap.svg b/common/assets/images/icn-toast-swap.svg new file mode 100644 index 000000000..a84af5b18 --- /dev/null +++ b/common/assets/images/icn-toast-swap.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-trezor-new.svg b/common/assets/images/icn-trezor-new.svg deleted file mode 100644 index c19e35d71..000000000 --- a/common/assets/images/icn-trezor-new.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/common/assets/images/icn-unlock-wallet.svg b/common/assets/images/icn-unlock-wallet.svg new file mode 100644 index 000000000..71c87e1c7 --- /dev/null +++ b/common/assets/images/icn-unlock-wallet.svg @@ -0,0 +1,25 @@ + + + + 772B41BB-2AAF-4B9A-B2E9-6EC13EABF405 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/assets/images/icn-unlock.svg b/common/assets/images/icn-unlock.svg new file mode 100644 index 000000000..83affbf59 --- /dev/null +++ b/common/assets/images/icn-unlock.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icn-update.svg b/common/assets/images/icn-update.svg new file mode 100644 index 000000000..58a71fc45 --- /dev/null +++ b/common/assets/images/icn-update.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/common/assets/images/icn-vault.svg b/common/assets/images/icn-vault.svg deleted file mode 100644 index 6470b4337..000000000 --- a/common/assets/images/icn-vault.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/common/assets/images/icn-vault2.svg b/common/assets/images/icn-vault2.svg new file mode 100644 index 000000000..abe923f67 --- /dev/null +++ b/common/assets/images/icn-vault2.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-wallet.svg b/common/assets/images/icn-wallet.svg new file mode 100644 index 000000000..a1676e99d --- /dev/null +++ b/common/assets/images/icn-wallet.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-website.svg b/common/assets/images/icn-website.svg new file mode 100644 index 000000000..c576317e7 --- /dev/null +++ b/common/assets/images/icn-website.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/icn-whitepaper.svg b/common/assets/images/icn-whitepaper.svg new file mode 100644 index 000000000..a07f0a0e2 --- /dev/null +++ b/common/assets/images/icn-whitepaper.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/icon-dot-arrow.svg b/common/assets/images/icon-dot-arrow.svg deleted file mode 100644 index 9856f9d05..000000000 --- a/common/assets/images/icon-dot-arrow.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - \ No newline at end of file diff --git a/common/assets/images/icon-help-3.svg b/common/assets/images/icon-help-3.svg deleted file mode 100644 index dcf0b8317..000000000 --- a/common/assets/images/icon-help-3.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/common/assets/images/icon-remove.svg b/common/assets/images/icon-remove.svg deleted file mode 100755 index b398fe135..000000000 --- a/common/assets/images/icon-remove.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - diff --git a/common/assets/images/icon-theme-dark.svg b/common/assets/images/icon-theme-dark.svg deleted file mode 100644 index 59738a28f..000000000 --- a/common/assets/images/icon-theme-dark.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - \ No newline at end of file diff --git a/common/assets/images/icon-theme-light.svg b/common/assets/images/icon-theme-light.svg deleted file mode 100644 index d89d3326e..000000000 --- a/common/assets/images/icon-theme-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/common/assets/images/illo-bank.svg b/common/assets/images/illo-bank.svg new file mode 100644 index 000000000..ca694e8d3 --- /dev/null +++ b/common/assets/images/illo-bank.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/illo-with-mycrypto.svg b/common/assets/images/illo-with-mycrypto.svg new file mode 100644 index 000000000..869693995 --- /dev/null +++ b/common/assets/images/illo-with-mycrypto.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/logo-bity-white.svg b/common/assets/images/logo-bity-white.svg deleted file mode 100755 index 660284e73..000000000 --- a/common/assets/images/logo-bity-white.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - diff --git a/common/assets/images/logo-bity.svg b/common/assets/images/logo-bity.svg deleted file mode 100755 index 5ba55ec29..000000000 --- a/common/assets/images/logo-bity.svg +++ /dev/null @@ -1,23 +0,0 @@ - - Bity_Logo_Vectoriel - - - - - - - - - - - \ No newline at end of file diff --git a/common/assets/images/logo-coinbase.svg b/common/assets/images/logo-coinbase.svg deleted file mode 100644 index 486a5a40e..000000000 --- a/common/assets/images/logo-coinbase.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/common/assets/images/logo-ethercards.png b/common/assets/images/logo-ethercards.png deleted file mode 100644 index 496f934bb..000000000 Binary files a/common/assets/images/logo-ethercards.png and /dev/null differ diff --git a/common/assets/images/logo-ethereum-1.png b/common/assets/images/logo-ethereum-1.png deleted file mode 100755 index 0428f4356..000000000 Binary files a/common/assets/images/logo-ethereum-1.png and /dev/null differ diff --git a/common/assets/images/logo-ledger.svg b/common/assets/images/logo-ledger.svg deleted file mode 100644 index b17fe522a..000000000 --- a/common/assets/images/logo-ledger.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/common/assets/images/logo-mycrypto-transparent.png b/common/assets/images/logo-mycrypto-transparent.png new file mode 100644 index 000000000..537612c08 Binary files /dev/null and b/common/assets/images/logo-mycrypto-transparent.png differ diff --git a/common/assets/images/logo-mycrypto-transparent.svg b/common/assets/images/logo-mycrypto-transparent.svg deleted file mode 100644 index 73a3f86fa..000000000 --- a/common/assets/images/logo-mycrypto-transparent.svg +++ /dev/null @@ -1 +0,0 @@ -logo \ No newline at end of file diff --git a/common/assets/images/logo-mycrypto-white.svg b/common/assets/images/logo-mycrypto-white.svg deleted file mode 100644 index 177bd060b..000000000 --- a/common/assets/images/logo-mycrypto-white.svg +++ /dev/null @@ -1 +0,0 @@ -logo \ No newline at end of file diff --git a/common/assets/images/logo-shapeshift-no-text-white.svg b/common/assets/images/logo-shapeshift-no-text-white.svg deleted file mode 100644 index c2d0a67b8..000000000 --- a/common/assets/images/logo-shapeshift-no-text-white.svg +++ /dev/null @@ -1 +0,0 @@ -ShapeShift Logo diff --git a/common/assets/images/logo-shapeshift-no-text.svg b/common/assets/images/logo-shapeshift-no-text.svg deleted file mode 100644 index 054c738a2..000000000 --- a/common/assets/images/logo-shapeshift-no-text.svg +++ /dev/null @@ -1 +0,0 @@ -ShapeShift Logo diff --git a/common/assets/images/logo-shapeshift.svg b/common/assets/images/logo-shapeshift.svg deleted file mode 100644 index 0688be7e2..000000000 --- a/common/assets/images/logo-shapeshift.svg +++ /dev/null @@ -1 +0,0 @@ -ShapeShift Logo diff --git a/common/assets/images/logo-simplex.png b/common/assets/images/logo-simplex.png deleted file mode 100644 index d10268087..000000000 Binary files a/common/assets/images/logo-simplex.png and /dev/null differ diff --git a/common/assets/images/logo-trezor.svg b/common/assets/images/logo-trezor.svg deleted file mode 100644 index 76efb7f39..000000000 --- a/common/assets/images/logo-trezor.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/common/assets/images/logo-zeroex.png b/common/assets/images/logo-zeroex.png deleted file mode 100644 index 647fefcbf..000000000 Binary files a/common/assets/images/logo-zeroex.png and /dev/null differ diff --git a/common/assets/images/manage-your-wallets-mobile.svg b/common/assets/images/manage-your-wallets-mobile.svg new file mode 100644 index 000000000..8f9330454 --- /dev/null +++ b/common/assets/images/manage-your-wallets-mobile.svg @@ -0,0 +1,528 @@ + + + + + + image/svg+xml + + 0EFC2C9C-4B99-4A38-BD8F-E4DD90E57515 + + + + + 0EFC2C9C-4B99-4A38-BD8F-E4DD90E57515 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MyCrypto allows you to create, import, and + manage all the wallets you'll ever need. + + + + View Your Dashboard + + + diff --git a/common/assets/images/manage-your-wallets.svg b/common/assets/images/manage-your-wallets.svg new file mode 100644 index 000000000..56c6b29e7 --- /dev/null +++ b/common/assets/images/manage-your-wallets.svg @@ -0,0 +1,744 @@ + + + + + + image/svg+xml + + BF3F2E58-79B5-47F9-987C-A6C2C981FAE0 + + + + + BF3F2E58-79B5-47F9-987C-A6C2C981FAE0 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/next-page-button.svg b/common/assets/images/next-page-button.svg new file mode 100644 index 000000000..d5cfd092f --- /dev/null +++ b/common/assets/images/next-page-button.svg @@ -0,0 +1 @@ +next-page-button \ No newline at end of file diff --git a/common/assets/images/notes-bg.png b/common/assets/images/notes-bg.png deleted file mode 100755 index 174d07b20..000000000 Binary files a/common/assets/images/notes-bg.png and /dev/null differ diff --git a/common/assets/images/onboarding/icn-cant-access.svg b/common/assets/images/onboarding/icn-cant-access.svg new file mode 100644 index 000000000..8dd97ee63 --- /dev/null +++ b/common/assets/images/onboarding/icn-cant-access.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/onboarding/icn-cant-freeze.svg b/common/assets/images/onboarding/icn-cant-freeze.svg new file mode 100644 index 000000000..48b387be7 --- /dev/null +++ b/common/assets/images/onboarding/icn-cant-freeze.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/common/assets/images/onboarding/icn-cant-modify.svg b/common/assets/images/onboarding/icn-cant-modify.svg new file mode 100644 index 000000000..6b1e5d7b7 --- /dev/null +++ b/common/assets/images/onboarding/icn-cant-modify.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/onboarding/icn-cant-reverse.svg b/common/assets/images/onboarding/icn-cant-reverse.svg new file mode 100644 index 000000000..77b36159a --- /dev/null +++ b/common/assets/images/onboarding/icn-cant-reverse.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/common/assets/images/onboarding/icn-json.svg b/common/assets/images/onboarding/icn-json.svg new file mode 100644 index 000000000..6770390b0 --- /dev/null +++ b/common/assets/images/onboarding/icn-json.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/common/assets/images/onboarding/icn-key-mnemonic.svg b/common/assets/images/onboarding/icn-key-mnemonic.svg new file mode 100644 index 000000000..af7fcfced --- /dev/null +++ b/common/assets/images/onboarding/icn-key-mnemonic.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/common/assets/images/onboarding/icn-mnycrpto-app.svg b/common/assets/images/onboarding/icn-mnycrpto-app.svg new file mode 100644 index 000000000..95a8ba26d --- /dev/null +++ b/common/assets/images/onboarding/icn-mnycrpto-app.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/common/assets/images/onboarding/icn-phishing.svg b/common/assets/images/onboarding/icn-phishing.svg new file mode 100644 index 000000000..0871fb2c8 --- /dev/null +++ b/common/assets/images/onboarding/icn-phishing.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/common/assets/images/onboarding/slide-01.svg b/common/assets/images/onboarding/slide-01.svg deleted file mode 100644 index 516b8131c..000000000 --- a/common/assets/images/onboarding/slide-01.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/common/assets/images/onboarding/slide-02.svg b/common/assets/images/onboarding/slide-02.svg deleted file mode 100644 index 8836f4142..000000000 --- a/common/assets/images/onboarding/slide-02.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-03.svg b/common/assets/images/onboarding/slide-03.svg deleted file mode 100644 index 2966e1d36..000000000 --- a/common/assets/images/onboarding/slide-03.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-04.svg b/common/assets/images/onboarding/slide-04.svg deleted file mode 100644 index 6aaad3d8a..000000000 --- a/common/assets/images/onboarding/slide-04.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-05.svg b/common/assets/images/onboarding/slide-05.svg deleted file mode 100644 index 2192d668b..000000000 --- a/common/assets/images/onboarding/slide-05.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-06.svg b/common/assets/images/onboarding/slide-06.svg deleted file mode 100644 index d9f115219..000000000 --- a/common/assets/images/onboarding/slide-06.svg +++ /dev/null @@ -1,47 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/common/assets/images/onboarding/slide-07.svg b/common/assets/images/onboarding/slide-07.svg deleted file mode 100644 index 3505afb47..000000000 --- a/common/assets/images/onboarding/slide-07.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icon-07 \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-08.svg b/common/assets/images/onboarding/slide-08.svg deleted file mode 100644 index 3e27f52a8..000000000 --- a/common/assets/images/onboarding/slide-08.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-09.svg b/common/assets/images/onboarding/slide-09.svg deleted file mode 100644 index 566a9337c..000000000 --- a/common/assets/images/onboarding/slide-09.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/onboarding/slide-10.svg b/common/assets/images/onboarding/slide-10.svg deleted file mode 100644 index 11a47ca39..000000000 --- a/common/assets/images/onboarding/slide-10.svg +++ /dev/null @@ -1 +0,0 @@ -onboarding_icons \ No newline at end of file diff --git a/common/assets/images/previous-page-button.svg b/common/assets/images/previous-page-button.svg new file mode 100644 index 000000000..332c2bc6f --- /dev/null +++ b/common/assets/images/previous-page-button.svg @@ -0,0 +1 @@ +previous-page-button \ No newline at end of file diff --git a/common/assets/images/print-sidebar.png b/common/assets/images/print-sidebar.png deleted file mode 100755 index 343ac0c13..000000000 Binary files a/common/assets/images/print-sidebar.png and /dev/null differ diff --git a/common/assets/images/radio-checked.svg b/common/assets/images/radio-checked.svg new file mode 100644 index 000000000..8fcbc5ba3 --- /dev/null +++ b/common/assets/images/radio-checked.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/common/assets/images/radio.svg b/common/assets/images/radio.svg new file mode 100644 index 000000000..b8ec4cd09 --- /dev/null +++ b/common/assets/images/radio.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/returning.svg b/common/assets/images/returning.svg new file mode 100644 index 000000000..566281297 --- /dev/null +++ b/common/assets/images/returning.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/common/assets/images/shapeshift-dark.svg b/common/assets/images/shapeshift-dark.svg deleted file mode 100644 index 80d733fb2..000000000 --- a/common/assets/images/shapeshift-dark.svg +++ /dev/null @@ -1 +0,0 @@ -ShapeShift Logo diff --git a/common/assets/images/social-icons/social-cmc.svg b/common/assets/images/social-icons/social-cmc.svg new file mode 100644 index 000000000..6e42da29c --- /dev/null +++ b/common/assets/images/social-icons/social-cmc.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/social-icons/social-facebook.svg b/common/assets/images/social-icons/social-facebook.svg new file mode 100644 index 000000000..94d26877d --- /dev/null +++ b/common/assets/images/social-icons/social-facebook.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/social-icons/social-github.svg b/common/assets/images/social-icons/social-github.svg new file mode 100644 index 000000000..c3f213e8b --- /dev/null +++ b/common/assets/images/social-icons/social-github.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/social-icons/social-reddit.svg b/common/assets/images/social-icons/social-reddit.svg new file mode 100644 index 000000000..5265bea43 --- /dev/null +++ b/common/assets/images/social-icons/social-reddit.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/social-icons/social-slack.svg b/common/assets/images/social-icons/social-slack.svg new file mode 100644 index 000000000..1e27e87d0 --- /dev/null +++ b/common/assets/images/social-icons/social-slack.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/social-icons/social-telegram.svg b/common/assets/images/social-icons/social-telegram.svg new file mode 100644 index 000000000..0dc989809 --- /dev/null +++ b/common/assets/images/social-icons/social-telegram.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/social-icons/social-twitter.svg b/common/assets/images/social-icons/social-twitter.svg new file mode 100644 index 000000000..e4c874873 --- /dev/null +++ b/common/assets/images/social-icons/social-twitter.svg @@ -0,0 +1,3 @@ + + + diff --git a/common/assets/images/swap copy.svg b/common/assets/images/swap copy.svg new file mode 100644 index 000000000..be9e67d0b --- /dev/null +++ b/common/assets/images/swap copy.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/tail-triangle-down.svg b/common/assets/images/tail-triangle-down.svg deleted file mode 100644 index f25df9b34..000000000 --- a/common/assets/images/tail-triangle-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/common/assets/images/title-illustration.svg b/common/assets/images/title-illustration.svg new file mode 100644 index 000000000..09525174e --- /dev/null +++ b/common/assets/images/title-illustration.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/transactions/inbound.svg b/common/assets/images/transactions/inbound.svg new file mode 100644 index 000000000..ad7e0a243 --- /dev/null +++ b/common/assets/images/transactions/inbound.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/transactions/outbound.svg b/common/assets/images/transactions/outbound.svg new file mode 100644 index 000000000..90ac5ac91 --- /dev/null +++ b/common/assets/images/transactions/outbound.svg @@ -0,0 +1,4 @@ + + + + diff --git a/common/assets/images/transactions/transfer.svg b/common/assets/images/transactions/transfer.svg new file mode 100644 index 000000000..cfe2fa324 --- /dev/null +++ b/common/assets/images/transactions/transfer.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/common/assets/images/unlock-guide/open-app.png b/common/assets/images/unlock-guide/open-app.png deleted file mode 100644 index eabbbf737..000000000 Binary files a/common/assets/images/unlock-guide/open-app.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/open-web.png b/common/assets/images/unlock-guide/open-web.png deleted file mode 100644 index da1355ede..000000000 Binary files a/common/assets/images/unlock-guide/open-web.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/provide-keystore.png b/common/assets/images/unlock-guide/provide-keystore.png deleted file mode 100644 index abd0027bc..000000000 Binary files a/common/assets/images/unlock-guide/provide-keystore.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/provide-mnemonic.png b/common/assets/images/unlock-guide/provide-mnemonic.png deleted file mode 100644 index c86327e2d..000000000 Binary files a/common/assets/images/unlock-guide/provide-mnemonic.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/select-keystore.png b/common/assets/images/unlock-guide/select-keystore.png deleted file mode 100644 index c0e0996e7..000000000 Binary files a/common/assets/images/unlock-guide/select-keystore.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/select-mnemonic.png b/common/assets/images/unlock-guide/select-mnemonic.png deleted file mode 100644 index 6406b74e0..000000000 Binary files a/common/assets/images/unlock-guide/select-mnemonic.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/tab-app.png b/common/assets/images/unlock-guide/tab-app.png deleted file mode 100644 index c7a4ea15e..000000000 Binary files a/common/assets/images/unlock-guide/tab-app.png and /dev/null differ diff --git a/common/assets/images/unlock-guide/tab-web.png b/common/assets/images/unlock-guide/tab-web.png deleted file mode 100644 index 88131b128..000000000 Binary files a/common/assets/images/unlock-guide/tab-web.png and /dev/null differ diff --git a/common/assets/images/view-dashboard-mobile.svg b/common/assets/images/view-dashboard-mobile.svg new file mode 100644 index 000000000..5f0fa34da --- /dev/null +++ b/common/assets/images/view-dashboard-mobile.svg @@ -0,0 +1,304 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Oct 29 + + + + + + + + + + + + + + + + See a detailed breakdown of all your + wallets, tokens, and transactions. + + + diff --git a/common/assets/images/view-dashboard.svg b/common/assets/images/view-dashboard.svg new file mode 100644 index 000000000..42f2367fa --- /dev/null +++ b/common/assets/images/view-dashboard.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/assets/images/wallets/coinbase.jpg b/common/assets/images/wallets/coinbase.jpg new file mode 100644 index 000000000..6496c98e1 Binary files /dev/null and b/common/assets/images/wallets/coinbase.jpg differ diff --git a/common/assets/images/wallets/digital-bitbox.svg b/common/assets/images/wallets/digital-bitbox.svg deleted file mode 100644 index dd3829402..000000000 --- a/common/assets/images/wallets/digital-bitbox.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - digital-bitbox - Created with Sketch. - - - - - - - - - - diff --git a/common/assets/images/wallets/file.svg b/common/assets/images/wallets/file.svg deleted file mode 100644 index 31f2a29e1..000000000 --- a/common/assets/images/wallets/file.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/common/assets/images/wallets/frame.svg b/common/assets/images/wallets/frame.svg new file mode 100644 index 000000000..bc0809072 --- /dev/null +++ b/common/assets/images/wallets/frame.svg @@ -0,0 +1,4 @@ + + FrameLogo4 + + \ No newline at end of file diff --git a/common/assets/images/wallets/hardware.svg b/common/assets/images/wallets/hardware.svg deleted file mode 100644 index 0821465ff..000000000 --- a/common/assets/images/wallets/hardware.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - Artboard - Created with Sketch. - - - - - - - \ No newline at end of file diff --git a/common/assets/images/wallets/metamask.svg b/common/assets/images/wallets/metamask.svg index 9000b8a1c..35895c9fb 100644 --- a/common/assets/images/wallets/metamask.svg +++ b/common/assets/images/wallets/metamask.svg @@ -1,81 +1 @@ - - - - metamask - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file +logo-metamask \ No newline at end of file diff --git a/common/assets/images/wallets/safe-t.png b/common/assets/images/wallets/safe-t.png new file mode 100644 index 000000000..9f11125fb Binary files /dev/null and b/common/assets/images/wallets/safe-t.png differ diff --git a/common/assets/images/wallets/trust-2.svg b/common/assets/images/wallets/trust-2.svg new file mode 100644 index 000000000..237951708 --- /dev/null +++ b/common/assets/images/wallets/trust-2.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/common/assets/images/wallets/trust-3.webp b/common/assets/images/wallets/trust-3.webp new file mode 100644 index 000000000..de9754676 Binary files /dev/null and b/common/assets/images/wallets/trust-3.webp differ diff --git a/common/assets/images/wallets/web3-default.svg b/common/assets/images/wallets/web3-default.svg new file mode 100644 index 000000000..7f1d3b74e --- /dev/null +++ b/common/assets/images/wallets/web3-default.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/common/assets/images/wifi-off.svg b/common/assets/images/wifi-off.svg deleted file mode 100644 index cc164c15d..000000000 --- a/common/assets/images/wifi-off.svg +++ /dev/null @@ -1 +0,0 @@ -Offline Icon diff --git a/common/assets/images/wifi-on.svg b/common/assets/images/wifi-on.svg deleted file mode 100644 index 0675b2e18..000000000 --- a/common/assets/images/wifi-on.svg +++ /dev/null @@ -1 +0,0 @@ -Online Icon diff --git a/common/badBrowserCheck.ts b/common/badBrowserCheck.ts new file mode 100644 index 000000000..6f9b992e7 --- /dev/null +++ b/common/badBrowserCheck.ts @@ -0,0 +1,31 @@ +import Modernizr from 'modernizr'; + +const features: (keyof typeof Modernizr)[] = ['flexbox', 'flexwrap', 'localstorage']; + +/** + * Checks for browser support in the specified feature. If the feature is not supported, the `BadBrowser` overlay will + * be shown. + * + * @param feature + * @return {boolean} + */ +const isSupported = (feature: keyof typeof Modernizr): boolean => { + if (Modernizr[feature]) { + return true; + } + + const element = document.getElementsByClassName('BadBrowser')[0]; + element.className += ' is-open'; + + if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) { + element.className += ' is-mobile'; + } + + console.warn(`Feature '${feature}' not supported.`); + + return false; +}; + +document.addEventListener('DOMContentLoaded', () => { + features.every(isSupported); +}); diff --git a/common/badBrowserCheckA.js b/common/badBrowserCheckA.js deleted file mode 100644 index ec2a16587..000000000 --- a/common/badBrowserCheckA.js +++ /dev/null @@ -1,9 +0,0 @@ - -// use dates as vars so they're not stripped out by minification -let letCheck = new Date(); -const constCheck = new Date(); -const arrowCheck = (() => new Date())(); - -if (letCheck && constCheck && arrowCheck) { - window.localStorage.setItem('goodBrowser', 'true'); -} diff --git a/common/badBrowserCheckB.js b/common/badBrowserCheckB.js deleted file mode 100644 index 51a823342..000000000 --- a/common/badBrowserCheckB.js +++ /dev/null @@ -1,33 +0,0 @@ -var badBrowser = false; - -try { - // Local storage - window.localStorage.setItem('test', 'test'); - window.localStorage.removeItem('test'); - - // Flexbox - var elTest = document.createElement('div'); - elTest.style.display = 'flex'; - if (elTest.style.display !== 'flex') { - badBrowser = true; - } - - // const and let check from badBrowserCheckA.js - if (window.localStorage.goodBrowser !== 'true') { - badBrowser = true; - } - window.localStorage.removeItem('goodBrowser'); - -} catch (err) { - badBrowser = true; -} - -if (badBrowser) { - var el = document.getElementsByClassName('BadBrowser')[0]; - el.className += ' is-open'; - // Dumb check for known mobile OS's. Not important to catch all, just - // displays more appropriate information. - if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) { - el.className += ' is-mobile'; - } -} diff --git a/common/components/AddressBookTable.scss b/common/components/AddressBookTable.scss deleted file mode 100644 index 1b56cd711..000000000 --- a/common/components/AddressBookTable.scss +++ /dev/null @@ -1,139 +0,0 @@ -@import 'common/sass/variables/spacing'; -@import 'common/sass/variables/colors'; - -.AddressBookTable { - &-row { - display: flex; - align-items: center; - margin-bottom: $space-md; - - @media (max-width: 650px) { - flex-direction: column; - align-items: flex-start; - padding: 1rem; - box-shadow: 0 1px rgba(0, 0, 0, 0.1), 0 1px 4px rgba(0, 0, 0, 0.12); - } - - &-label { - flex: 1 0; - } - - &-error { - align-items: flex-end; - align-self: stretch; - padding: 0; - box-shadow: none; - color: color(brand-danger); - - &-temporary-input--non-mobile { - flex: 1; - visibility: hidden; - - &-address { - align-self: flex-start; - } - - &-label { - align-self: flex-end; - } - - @media (max-width: 650px) { - display: none; - } - } - - &--non-mobile { - justify-content: flex-end; - - @media (max-width: 650px) { - display: none; - } - } - - &--mobile { - @media (min-width: 650px) { - display: none; - } - } - } - - &-identicon { - margin-left: $space-sm; - - &-mobile { - width: 30px; - height: 30px; - margin-right: $space-md; - - @media (min-width: 650px) { - display: none; - } - } - - &-non-mobile { - width: 80px; - height: 80px; - - @media (max-width: 650px) { - display: none; - } - } - } - - &-labels { - @media (max-width: 650px) { - display: none; - } - } - - &-input { - display: flex; - align-items: center; - flex-direction: row; - align-self: stretch; - flex: 1; - margin-right: $space-sm; - - @media (max-width: 650px) { - margin-right: 0; - margin-bottom: $space-md; - } - - label { - margin-bottom: $space-sm; - } - - .btn { - margin-left: $space-sm; - height: $space-lg * 2; - - @media (max-width: 650px) { - align-self: flex-end; - } - } - - &-wrapper { - flex: 1; - - &-label { - @media (min-width: 651px) { - display: none; - } - } - - &-error { - color: color(brand-danger); - align-self: end; - } - } - } - } - - input { - margin-bottom: 0; - } - - .is-visible { - visibility: visible; - } -} diff --git a/common/components/AddressBookTable.tsx b/common/components/AddressBookTable.tsx deleted file mode 100644 index 2937d8474..000000000 --- a/common/components/AddressBookTable.tsx +++ /dev/null @@ -1,319 +0,0 @@ -import React from 'react'; -import { connect, MapStateToProps } from 'react-redux'; -import classnames from 'classnames'; - -import translate, { translateRaw } from 'translations'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import { - addressBookConstants, - addressBookActions, - addressBookSelectors -} from 'features/addressBook'; -import { Input, Identicon } from 'components/ui'; -import AddressBookTableRow from './AddressBookTableRow'; -import './AddressBookTable.scss'; - -interface DispatchProps { - changeAddressLabelEntry: addressBookActions.TChangeAddressLabelEntry; - saveAddressLabelEntry: addressBookActions.TSaveAddressLabelEntry; - removeAddressLabelEntry: addressBookActions.TRemoveAddressLabelEntry; -} - -interface StateProps { - rows: ReturnType; - entry: ReturnType; - addressLabels: ReturnType; - labelAddresses: ReturnType; - toChecksumAddress: ReturnType; -} - -type Props = DispatchProps & StateProps; - -interface State { - editingRow: number | null; - addressTouched: boolean; - addressBlurred: boolean; - labelTouched: boolean; - labelBlurred: boolean; -} - -class AddressBookTable extends React.Component { - public state: State = { - editingRow: null, - addressTouched: false, - addressBlurred: false, - labelTouched: false, - labelBlurred: false - }; - - private addressInput: HTMLInputElement | null = null; - - private labelInput: HTMLInputElement | null = null; - - public render() { - const { - entry: { temporaryAddress = '', addressError = '', temporaryLabel = '', labelError = '' }, - rows - } = this.props; - const { addressTouched, addressBlurred, labelTouched, labelBlurred } = this.state; - - // Classnames - const addressTouchedWithError = addressTouched && addressError; - const labelTouchedWithError = labelTouched && labelError; - const nonMobileTemporaryInputErrorClassName = - 'AddressBookTable-row-error-temporary-input--non-mobile'; - - const nonMobileTemporaryAddressErrorClassName = classnames({ - [nonMobileTemporaryInputErrorClassName]: true, - [`${nonMobileTemporaryInputErrorClassName}-address`]: true, - 'is-visible': !!addressTouchedWithError - }); - - const nonMobileTemporaryLabelErrorClassName = classnames({ - [nonMobileTemporaryInputErrorClassName]: true, - [`${nonMobileTemporaryInputErrorClassName}-label`]: true, - 'is-visible': !!labelTouchedWithError - }); - - return ( -
-
- - -
-
-
-
- - -
-
- -
-
- -
-
-
- -
-
-
- - -
- -
-
- -
-
-
- - -
- {rows.map(this.makeLabelRow)} -
- ); - } - - private handleAddEntry = () => { - const { - entry: { temporaryAddress, addressError, labelError } - } = this.props; - - if (!temporaryAddress || addressError || temporaryAddress.length === 0) { - return this.addressInput && this.addressInput.focus(); - } - - if (labelError && this.labelInput) { - this.labelInput.focus(); - } - - this.props.saveAddressLabelEntry(addressBookConstants.ADDRESS_BOOK_TABLE_ID); - - if (!addressError && !labelError) { - this.clearFieldStatuses(); - this.setEditingRow(null); - } - }; - - private handleKeyDown = (e: React.KeyboardEvent) => { - if (e.key === 'Enter') { - this.handleAddEntry(); - } - }; - - private setEditingRow = (editingRow: number | null) => this.setState({ editingRow }); - - private clearEditingRow = () => this.setEditingRow(null); - - private makeLabelRow = (row: any, index: number) => { - const { editingRow } = this.state; - const { id, label, temporaryLabel, labelError } = row; - const address = this.props.toChecksumAddress(row.address); - const isEditing = index === editingRow; - const onChange = (newLabel: string) => - this.props.changeAddressLabelEntry({ - id, - address, - label: newLabel, - isEditing: true - }); - const onSave = () => { - this.props.saveAddressLabelEntry(id); - this.setEditingRow(null); - }; - const onLabelInputBlur = () => { - // If the new changes aren't valid, undo them. - if (labelError) { - this.props.changeAddressLabelEntry({ - id, - address, - temporaryAddress: address, - label, - temporaryLabel: label, - overrideValidation: true - }); - } - - this.clearEditingRow(); - }; - - return ( - this.setEditingRow(index)} - onRemoveClick={() => this.props.removeAddressLabelEntry(id)} - /> - ); - }; - - private setAddressInputRef = (node: HTMLInputElement) => (this.addressInput = node); - - private setAddressTouched = () => - !this.state.addressTouched && this.setState({ addressTouched: true }); - - private clearAddressTouched = () => this.setState({ addressTouched: false }); - - private setAddressBlurred = () => this.setState({ addressBlurred: true }); - - private handleAddressChange = (e: React.ChangeEvent) => { - const { entry } = this.props; - const address = e.target.value; - const label = entry.temporaryLabel || ''; - - this.props.changeAddressLabelEntry({ - id: addressBookConstants.ADDRESS_BOOK_TABLE_ID, - address, - label - }); - - this.setState( - { addressTouched: true }, - () => address.length === 0 && this.clearAddressTouched() - ); - }; - - private setLabelInputRef = (node: HTMLInputElement) => (this.labelInput = node); - - private setLabelTouched = () => !this.state.labelTouched && this.setState({ labelTouched: true }); - - private clearLabelTouched = () => this.setState({ labelTouched: false }); - - private setLabelBlurred = () => this.setState({ labelBlurred: true }); - - private handleLabelChange = (e: React.ChangeEvent) => { - const { entry } = this.props; - const address = entry.temporaryAddress || ''; - const label = e.target.value; - - this.props.changeAddressLabelEntry({ - id: addressBookConstants.ADDRESS_BOOK_TABLE_ID, - address, - label - }); - - this.setState({ labelTouched: true }, () => label.length === 0 && this.clearLabelTouched()); - }; - - private clearFieldStatuses = () => - this.setState({ - addressTouched: false, - addressBlurred: false, - labelTouched: false, - labelBlurred: false - }); -} - -const mapStateToProps: MapStateToProps = state => ({ - rows: addressBookSelectors.getAddressLabelRows(state), - entry: addressBookSelectors.getAddressBookTableEntry(state), - addressLabels: addressBookSelectors.getAddressLabels(state), - labelAddresses: addressBookSelectors.getLabelAddresses(state), - toChecksumAddress: configSelectors.getChecksumAddressFn(state) -}); - -const mapDispatchToProps: DispatchProps = { - changeAddressLabelEntry: addressBookActions.changeAddressLabelEntry, - saveAddressLabelEntry: addressBookActions.saveAddressLabelEntry, - removeAddressLabelEntry: addressBookActions.removeAddressLabelEntry -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(AddressBookTable); diff --git a/common/components/AddressBookTableRow.tsx b/common/components/AddressBookTableRow.tsx deleted file mode 100644 index 497390e13..000000000 --- a/common/components/AddressBookTableRow.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import React from 'react'; -import noop from 'lodash/noop'; - -import translate, { translateRaw } from 'translations'; -import { Input, Identicon } from 'components/ui'; - -interface Props { - index: number; - address: string; - label: string; - temporaryLabel: string; - labelError?: string; - isEditing: boolean; - onChange(label: string): void; - onSave(): void; - onLabelInputBlur(): void; - onEditClick(): void; - onRemoveClick(): void; -} - -interface State { - labelInputTouched: boolean; -} - -class AddressBookTableRow extends React.Component { - public state: State = { - labelInputTouched: false - }; - - private labelInput: HTMLInputElement | null = null; - - public componentWillReceiveProps(nextProps: Props) { - this.setState({ label: nextProps.label, mostRecentValidLabel: nextProps.label }); - } - - public render() { - const { - address, - temporaryLabel, - labelError, - isEditing, - onEditClick, - onRemoveClick - } = this.props; - const { labelInputTouched } = this.state; - const trOnClick = isEditing ? noop : onEditClick; - const hashName = `${address}-hash`; - const labelName = `${address}-label`; - - return ( - -
-
-
- - -
-
- -
-
- -
-
-
-
- - -
- -
- {labelError && ( -
- -
- )} -
- {labelError && ( -
- -
- )} -
- ); - } - - private handleKeyDown = (e: React.KeyboardEvent) => { - const { labelInputTouched } = this.state; - - e.stopPropagation(); - - if (e.key === 'Enter' && this.labelInput) { - this.labelInput.blur(); - } else if (!labelInputTouched) { - this.setLabelTouched(); - } - }; - - private handleBlur = () => { - this.clearLabelTouched(); - this.props.onSave(); - this.props.onLabelInputBlur(); - }; - - private setLabelInputRef = (node: HTMLInputElement) => (this.labelInput = node); - - private setLabelTouched = () => - !this.state.labelInputTouched && this.setState({ labelInputTouched: true }); - - private clearLabelTouched = () => this.setState({ labelInputTouched: false }); - - private handleLabelChange = (e: React.ChangeEvent) => { - const label = e.target.value; - - this.props.onChange(label); - - this.setState( - { labelInputTouched: true }, - () => label.length === 0 && this.clearLabelTouched() - ); - }; -} - -export default AddressBookTableRow; diff --git a/common/components/AddressField.tsx b/common/components/AddressField.tsx deleted file mode 100644 index 085fceca0..000000000 --- a/common/components/AddressField.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { donationAddressMap } from 'config'; -import translate from 'translations'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import { Input } from 'components/ui'; -import { AddressFieldFactory } from './AddressFieldFactory'; - -interface OwnProps { - isReadOnly?: boolean; - isSelfAddress?: boolean; - isCheckSummed?: boolean; - showLabelMatch?: boolean; - showIdenticon?: boolean; - showInputLabel?: boolean; - showEnsResolution?: boolean; - placeholder?: string; - value?: string; - dropdownThreshold?: number; - onChangeOverride?(ev: React.FormEvent): void; -} - -interface StateProps { - toChecksumAddress: ReturnType; -} - -type Props = OwnProps & StateProps; - -const AddressField: React.SFC = ({ - isReadOnly, - isSelfAddress, - isCheckSummed, - showLabelMatch, - toChecksumAddress, - showIdenticon, - placeholder = `donate.mycryptoid.eth or ${donationAddressMap.ETH}`, - showInputLabel = true, - onChangeOverride, - value, - dropdownThreshold, - showEnsResolution = true -}) => ( - ( -
- -
- )} - /> -); - -export default connect( - (state: AppState): StateProps => ({ - toChecksumAddress: configSelectors.getChecksumAddressFn(state) - }) -)(AddressField); diff --git a/common/components/AddressFieldFactory/AddressFieldDropdown.scss b/common/components/AddressFieldFactory/AddressFieldDropdown.scss deleted file mode 100644 index d7d14bfd2..000000000 --- a/common/components/AddressFieldFactory/AddressFieldDropdown.scss +++ /dev/null @@ -1,78 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/variables/colors'; -@import 'common/sass/variables/spacing'; - -.AddressFieldDropdown { - position: absolute; - top: calc(100% - #{$space}); - width: 100%; - border: 1px solid color(gray-lighter); - border-top: none; - background: color(component-active-color); - z-index: 1; - list-style-type: none; - margin: 0; - padding: 0; - box-shadow: $tab-box-shadow; - text-align: center; - - &-dropdown-item { - margin: 0; - padding: $space-md $space; - display: flex; - align-items: center; - - &:hover { - cursor: pointer; - background: color(gray-lightest); - } - - &-identicon { - width: 40px; - height: 40px; - margin-right: $space-sm; - - .Identicon { - width: 40px !important; - height: 40px !important; - } - - @media (max-width: 380px) { - display: none; - } - } - - &-label, - &-address { - overflow: hidden; - text-overflow: ellipsis; - } - - &-label { - flex: 1 0 0; - padding-left: 0.2rem; - text-align: left; - } - - &-address { - flex: 3 0 0; - } - - &-no-match { - word-break: break-word; - - &:hover { - cursor: not-allowed; - background: inherit; - } - - i { - margin-right: $space-sm; - } - } - - &--active { - background: color(gray-lighter); - } - } -} diff --git a/common/components/AddressFieldFactory/AddressFieldDropdown.tsx b/common/components/AddressFieldFactory/AddressFieldDropdown.tsx deleted file mode 100644 index 96a67bbf4..000000000 --- a/common/components/AddressFieldFactory/AddressFieldDropdown.tsx +++ /dev/null @@ -1,316 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import translate, { translateRaw } from 'translations'; -import { AppState } from 'features/reducers'; -import { transactionActions, transactionSelectors } from 'features/transaction'; -import { addressBookSelectors } from 'features/addressBook'; -import { walletSelectors } from 'features/wallet'; -import { Address, Identicon } from 'components/ui'; -import './AddressFieldDropdown.scss'; - -interface Props { - addressInput: string; - dropdownThreshold?: number; - labelAddresses: ReturnType; - recentAddresses: ReturnType; - onEntryClick(address: string): void; -} - -interface State { - activeIndex: number | null; -} - -class AddressFieldDropdownClass extends React.Component { - public state = { - activeIndex: null - }; - - private exists: boolean = true; - - public componentDidMount() { - window.addEventListener('keydown', this.handleKeyDown); - } - - public componentWillUnmount() { - window.removeEventListener('keydown', this.handleKeyDown); - this.exists = false; - } - - public render() { - const { addressInput } = this.props; - - return ( - this.getIsVisible() && ( -
    - {this.getFilteredLabels().length > 0 ? ( - this.renderDropdownItems() - ) : ( -
  • - {translate('NO_LABEL_FOUND_CONTAINING')} " - {addressInput}". -
  • - )} -
- ) - ); - } - - private renderDropdownItems = () => { - const { onEntryClick } = this.props; - const { activeIndex } = this.state; - - return this.getFilteredLabels().map( - ({ address, label }: { address: string; label: string }, index: number) => { - const isActive = activeIndex === index; - const className = `AddressFieldDropdown-dropdown-item ${ - isActive ? 'AddressFieldDropdown-dropdown-item--active' : '' - }`; - - return ( -
  • onEntryClick(address)} - title={`${translateRaw('SEND_TO')}${label}`} - > -
    - -
    - {label} - -
    - -
  • - ); - } - ); - }; - - private getFormattedRecentAddresses = (): { [label: string]: string } => { - const { labelAddresses, recentAddresses } = this.props; - // Hash existing entries by address for performance. - const addressesInBook: { [address: string]: boolean } = Object.values(labelAddresses).reduce( - (prev: { [address: string]: boolean }, next: string) => { - prev[next] = true; - return prev; - }, - {} - ); - // Make recent addresses sequential. - let recentAddressCount: number = 0; - const addresses = recentAddresses.reduce((prev: { [label: string]: string }, next: string) => { - // Prevent duplication. - if (addressesInBook[next]) { - return prev; - } - prev[ - translateRaw('RECENT_ADDRESS_NUMBER', { $number: (++recentAddressCount).toString() }) - ] = next; - - return prev; - }, {}); - - return addresses; - }; - - private getFilteredLabels = () => { - const { addressInput, labelAddresses } = this.props; - const formattedRecentAddresses = this.getFormattedRecentAddresses(); - - return Object.keys({ ...labelAddresses, ...formattedRecentAddresses }) - .filter(label => label.toLowerCase().includes(addressInput)) - .map(label => ({ address: labelAddresses[label] || formattedRecentAddresses[label], label })) - .slice(0, 5); - }; - - private getIsVisible = () => { - const { addressInput, dropdownThreshold = 3 } = this.props; - - return addressInput.length >= dropdownThreshold && this.getFilteredLabels().length > 0; - }; - - private setActiveIndex = (activeIndex: number | null) => this.setState({ activeIndex }); - - private clearActiveIndex = () => this.setActiveIndex(null); - - //#region Keyboard Controls - private handleKeyDown = (e: KeyboardEvent) => { - if (this.getIsVisible()) { - switch (e.key) { - case 'Enter': - e.preventDefault(); - return this.handleEnterKeyDown(); - case 'ArrowUp': - e.preventDefault(); - return this.handleUpArrowKeyDown(); - case 'ArrowDown': - e.preventDefault(); - return this.handleDownArrowKeyDown(); - default: - return; - } - } - }; - - private handleEnterKeyDown = () => { - const { onEntryClick } = this.props; - const { activeIndex } = this.state; - - if (activeIndex !== null) { - const filteredLabels = this.getFilteredLabels(); - - filteredLabels.forEach(({ address }, index) => { - if (activeIndex === index) { - onEntryClick(address); - } - }); - - if (this.exists) { - this.clearActiveIndex(); - } - } - }; - - private handleUpArrowKeyDown = () => { - const { activeIndex: previousActiveIndex } = this.state; - const filteredLabelCount = this.getFilteredLabels().length; - - let activeIndex = - previousActiveIndex === null ? filteredLabelCount - 1 : previousActiveIndex! - 1; - - // Loop back to end - if (activeIndex < 0) { - activeIndex = filteredLabelCount - 1; - } - - this.setState({ activeIndex }); - }; - - private handleDownArrowKeyDown = () => { - const { activeIndex: previousActiveIndex } = this.state; - const filteredLabelCount = this.getFilteredLabels().length; - - let activeIndex = previousActiveIndex === null ? 0 : previousActiveIndex! + 1; - - // Loop back to beginning - if (activeIndex >= filteredLabelCount) { - activeIndex = 0; - } - - this.setState({ activeIndex }); - }; - //#endregion Keyboard Controls -} - -//#region Uncontrolled -/** - * @desc The `onChangeOverride` prop needs to work - * with actual events, but also needs a value to be directly passed in - * occasionally. This interface allows us to skip all of the other FormEvent - * properties and methods. - */ -interface FakeFormEvent { - currentTarget: { - value: string; - }; -} - -interface UncontrolledAddressFieldDropdownProps { - value: string; - labelAddresses: ReturnType; - recentAddresses: ReturnType; - dropdownThreshold?: number; - onChangeOverride(ev: React.FormEvent | FakeFormEvent): void; -} - -/** - * @desc The uncontrolled dropdown changes the address input onClick, - * as well as calls the onChange override, but does not update the `currentTo` - * property in the Redux store. - */ -function RawUncontrolledAddressFieldDropdown({ - value, - onChangeOverride, - labelAddresses, - recentAddresses, - dropdownThreshold -}: UncontrolledAddressFieldDropdownProps) { - const onEntryClick = (address: string) => onChangeOverride({ currentTarget: { value: address } }); - - return ( - - ); -} - -const UncontrolledAddressFieldDropdown = connect((state: AppState) => ({ - labelAddresses: addressBookSelectors.getLabelAddresses(state), - recentAddresses: walletSelectors.getRecentAddresses(state) -}))(RawUncontrolledAddressFieldDropdown); -//#endregion Uncontrolled - -//#region Controlled -interface ControlledAddressFieldDropdownProps { - currentTo: ReturnType; - labelAddresses: ReturnType; - recentAddresses: ReturnType; - setCurrentTo: transactionActions.TSetCurrentTo; - dropdownThreshold?: number; -} - -/** - * @desc The controlled dropdown connects directly to the Redux store, - * modifying the `currentTo` property onChange. - */ -function RawControlledAddressFieldDropdown({ - currentTo, - labelAddresses, - recentAddresses, - setCurrentTo, - dropdownThreshold -}: ControlledAddressFieldDropdownProps) { - return ( - - ); -} - -const ControlledAddressFieldDropdown = connect( - (state: AppState) => ({ - currentTo: transactionSelectors.getToRaw(state), - labelAddresses: addressBookSelectors.getLabelAddresses(state), - recentAddresses: walletSelectors.getRecentAddresses(state) - }), - { - setCurrentTo: transactionActions.setCurrentTo - } -)(RawControlledAddressFieldDropdown); -//#endregion Controlled - -interface AddressFieldDropdownProps { - controlled: boolean; - value?: string; - dropdownThreshold?: number; - onChangeOverride?(ev: React.FormEvent | FakeFormEvent): void; -} - -export default function AddressFieldDropdown({ - controlled = true, - ...props -}: AddressFieldDropdownProps) { - const Dropdown = controlled ? ControlledAddressFieldDropdown : UncontrolledAddressFieldDropdown; - // @ts-ignore - return ; -} diff --git a/common/components/AddressFieldFactory/AddressFieldFactory.scss b/common/components/AddressFieldFactory/AddressFieldFactory.scss deleted file mode 100644 index 544668f93..000000000 --- a/common/components/AddressFieldFactory/AddressFieldFactory.scss +++ /dev/null @@ -1,3 +0,0 @@ -.AddressField { - position: relative; -} diff --git a/common/components/AddressFieldFactory/AddressFieldFactory.tsx b/common/components/AddressFieldFactory/AddressFieldFactory.tsx deleted file mode 100644 index 834d922d2..000000000 --- a/common/components/AddressFieldFactory/AddressFieldFactory.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { ICurrentTo } from 'features/types'; -import { transactionActions } from 'features/transaction'; -import { Query } from 'components/renderCbs'; -import { AddressInputFactory } from './AddressInputFactory'; -import './AddressFieldFactory.scss'; - -interface DispatchProps { - setCurrentTo: transactionActions.TSetCurrentTo; -} - -interface OwnProps { - to: string | null; - isSelfAddress?: boolean; - showLabelMatch?: boolean; - showIdenticon?: boolean; - showEnsResolution?: boolean; - value?: string; - dropdownThreshold?: number; - withProps(props: CallbackProps): React.ReactElement | null; - onChangeOverride?(ev: React.FormEvent): void; -} - -interface State { - isFocused: boolean; -} - -export interface CallbackProps { - isValid: boolean; - isLabelEntry: boolean; - readOnly: boolean; - currentTo: ICurrentTo; - onChange(ev: React.FormEvent): void; - onFocus(ev: React.FormEvent): void; - onBlur(ev: React.FormEvent): void; -} - -type Props = DispatchProps & OwnProps; - -class AddressFieldFactoryClass extends React.Component { - public state: State = { - isFocused: false - }; - - private goingToBlur: number | null = null; - - public componentDidMount() { - // this 'to' parameter can be either token or actual field related - const { to } = this.props; - if (to) { - this.props.setCurrentTo(to); - } - } - - public componentWillUnmount() { - if (this.goingToBlur) { - window.clearTimeout(this.goingToBlur); - } - } - - public render() { - const { - isSelfAddress, - showLabelMatch, - withProps, - showIdenticon, - onChangeOverride, - value, - dropdownThreshold, - showEnsResolution - } = this.props; - - return ( -
    - -
    - ); - } - - private focus = () => this.setState({ isFocused: true }); - - private blur = () => this.setState({ isFocused: false }); - - private setAddress = (ev: React.FormEvent) => { - const { onChangeOverride, setCurrentTo } = this.props; - const { value } = ev.currentTarget; - - onChangeOverride ? onChangeOverride(ev) : setCurrentTo(value); - }; - - private setBlurTimeout = () => (this.goingToBlur = window.setTimeout(this.blur, 150)); -} - -const AddressFieldFactory = connect( - null, - { setCurrentTo: transactionActions.setCurrentTo } -)(AddressFieldFactoryClass); - -interface DefaultAddressFieldProps { - isSelfAddress?: boolean; - showLabelMatch?: boolean; - showIdenticon?: boolean; - showEnsResolution?: boolean; - value?: string; - dropdownThreshold?: number; - withProps(props: CallbackProps): React.ReactElement | null; - onChangeOverride?(ev: React.FormEvent): void; -} - -const DefaultAddressField: React.SFC = ({ - isSelfAddress, - showLabelMatch, - showIdenticon, - showEnsResolution, - value, - withProps, - onChangeOverride, - dropdownThreshold -}) => ( - ( - - )} - /> -); - -export { DefaultAddressField as AddressFieldFactory }; diff --git a/common/components/AddressFieldFactory/AddressInputFactory.scss b/common/components/AddressFieldFactory/AddressInputFactory.scss deleted file mode 100644 index 629ff40cc..000000000 --- a/common/components/AddressFieldFactory/AddressInputFactory.scss +++ /dev/null @@ -1,45 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/variables/spacing'; -@import 'common/sass/variables/colors'; - -.AddressInput { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - - &-input { - position: relative; - flex-grow: 1; - - &-with-label { - margin-bottom: $space-lg; - } - - &-label { - position: absolute; - width: 100%; - color: color(brand-success-darker); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - } - - &-identicon { - padding-top: $space-md; - transform: translateX(20%); - - @media (max-width: $screen-sm) { - padding-top: 1.5rem; - - .Identicon { - width: 3.4rem !important; - height: 3.4rem !important; - } - } - - @media (max-width: 380px) { - display: none; - } - } -} diff --git a/common/components/AddressFieldFactory/AddressInputFactory.tsx b/common/components/AddressFieldFactory/AddressInputFactory.tsx deleted file mode 100644 index 7a4a01b9d..000000000 --- a/common/components/AddressFieldFactory/AddressInputFactory.tsx +++ /dev/null @@ -1,187 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { addHexPrefix } from 'ethereumjs-util'; - -import translate, { translateRaw } from 'translations'; -import { Address } from 'libs/units'; -import { ICurrentTo } from 'features/types'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { walletSelectors } from 'features/wallet'; -import { ensSelectors } from 'features/ens'; -import { Identicon, Spinner } from 'components/ui'; -import { Query } from 'components/renderCbs'; -import { CallbackProps } from 'components/AddressFieldFactory'; -import AddressFieldDropdown from './AddressFieldDropdown'; -import './AddressInputFactory.scss'; -import { configSelectors } from 'features/config'; -import { getIsValidENSAddressFunction } from 'libs/validators'; -import { getENSTLDForChain } from 'libs/ens/networkConfigs'; - -interface StateProps { - currentTo: ICurrentTo; - label: string | null; - isValid: boolean; - isLabelEntry: boolean; - isResolving: boolean; - chainId: number; -} - -interface OwnProps { - isSelfAddress?: boolean; - showLabelMatch?: boolean; - showIdenticon?: boolean; - showEnsResolution?: boolean; - isFocused?: boolean; - className?: string; - value?: string; - dropdownThreshold?: number; - onChange(ev: React.FormEvent): void; - onChangeOverride?(ev: React.FormEvent): void; - onFocus(ev: React.FormEvent): void; - onBlur(ev: React.FormEvent): void; - withProps(props: CallbackProps): React.ReactElement | null; -} - -const ENSStatus: React.SFC<{ - isLoading: boolean; - ensAddress: string; - rawAddress: string; - chainId: number; -}> = ({ isLoading, ensAddress, rawAddress, chainId }) => { - const isValidENS = getIsValidENSAddressFunction(chainId); - const isENS = isValidENS(ensAddress); - - const text = translate('LOADING_ENS_ADDRESS'); - - if (isLoading) { - return ( - - {text} - - ); - } else { - return isENS ? {`Resolved Address: ${rawAddress}`} : null; - } -}; - -type Props = OwnProps & StateProps; - -class AddressInputFactoryClass extends Component { - public render() { - const { - label, - currentTo, - onChange, - onFocus, - onBlur, - isValid, - isLabelEntry, - withProps, - showLabelMatch, - isSelfAddress, - isResolving, - isFocused, - showIdenticon = true, - onChangeOverride, - value, - dropdownThreshold, - showEnsResolution, - chainId - } = this.props; - const inputClassName = `AddressInput-input ${label ? 'AddressInput-input-with-label' : ''}`; - const sendingTo = label - ? translateRaw('SENDING_TO', { - $label: label - }) - : ''; - const ensTLD = getENSTLDForChain(chainId); - const isENSAddress = currentTo.raw.endsWith(`.${ensTLD}`); - - /** - * @desc Initially set the address to the passed value. - * If there wasn't a value passed, use the value from the redux store. - */ - let addr = value; - - if (addr == null) { - addr = addHexPrefix(currentTo.value ? currentTo.value.toString('hex') : '0'); - } - - /** - * @desc If passed a value and an onChangeOverride function, - * infer that the dropdown should be uncontrolled. - */ - const controlled = value == null && !onChangeOverride; - - return ( -
    -
    - - withProps({ - currentTo, - isValid, - isLabelEntry, - onChange, - onFocus, - onBlur, - readOnly: !!(readOnly || this.props.isResolving || isSelfAddress) - }) - } - /> - {showEnsResolution && ( - - )} - {isFocused && !isENSAddress && ( - - )} - {showLabelMatch && label && ( -
    - {sendingTo} -
    - )} -
    - {showIdenticon && ( -
    - -
    - )} -
    - ); - } -} - -export const AddressInputFactory = connect((state: AppState, ownProps: OwnProps) => { - let currentTo: ICurrentTo; - if (ownProps.isSelfAddress) { - const wallet = walletSelectors.getWalletInst(state); - const addr = wallet ? wallet.getAddressString() : ''; - currentTo = { - raw: addr, - value: Address(addr) - }; - } else { - currentTo = selectors.getCurrentTo(state); - } - - return { - currentTo, - label: selectors.getCurrentToLabel(state), - isResolving: ensSelectors.getResolvingDomain(state), - isValid: selectors.isValidCurrentTo(state), - isLabelEntry: selectors.isCurrentToLabelEntry(state), - chainId: configSelectors.getNetworkChainId(state) - }; -})(AddressInputFactoryClass); diff --git a/common/components/AddressFieldFactory/index.ts b/common/components/AddressFieldFactory/index.ts deleted file mode 100644 index 3bff01335..000000000 --- a/common/components/AddressFieldFactory/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './AddressFieldFactory'; diff --git a/common/components/AmountField.tsx b/common/components/AmountField.tsx deleted file mode 100644 index 2248b615d..000000000 --- a/common/components/AmountField.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { UnitDropDown, SendEverything } from 'components'; -import { Input } from 'components/ui'; -import { AmountFieldFactory } from './AmountFieldFactory'; - -interface Props { - hasUnitDropdown?: boolean; - hasSendEverything?: boolean; - showAllTokens?: boolean; - showInvalidWithoutValue?: boolean; - customValidator?(rawAmount: string): boolean; -} - -export const AmountField: React.SFC = ({ - hasUnitDropdown, - hasSendEverything, - showAllTokens, - customValidator, - showInvalidWithoutValue -}) => ( - ( -
    - -
    - )} - /> -); - -const isAmountValid = ( - raw: string, - customValidator: ((rawAmount: string) => boolean) | undefined, - isValid: boolean -) => (customValidator ? customValidator(raw) : isValid); diff --git a/common/components/AmountFieldFactory/AmountFieldFactory.tsx b/common/components/AmountFieldFactory/AmountFieldFactory.tsx deleted file mode 100644 index 9be162e46..000000000 --- a/common/components/AmountFieldFactory/AmountFieldFactory.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { transactionActions } from 'features/transaction'; -import { Query } from 'components/renderCbs'; -import { AmountInput } from './AmountInputFactory'; - -export interface CallbackProps { - isValid: boolean; - readOnly: boolean; - currentValue: - | AppState['transaction']['fields']['value'] - | AppState['transaction']['meta']['tokenValue']; - onChange(ev: React.FormEvent): void; -} - -interface DispatchProps { - setCurrentValue: transactionActions.TSetCurrentValue; -} - -interface OwnProps { - value: string | null; - withProps(props: CallbackProps): React.ReactElement | null; -} - -type Props = DispatchProps & OwnProps; - -class AmountFieldClass extends Component { - public componentDidMount() { - const { value } = this.props; - if (value) { - this.props.setCurrentValue(value); - } - } - - public render() { - return ; - } - - private setValue = (ev: React.FormEvent) => { - const { value } = ev.currentTarget; - this.props.setCurrentValue(value); - }; -} - -const AmountField = connect( - null, - { setCurrentValue: transactionActions.setCurrentValue } -)(AmountFieldClass); - -interface DefaultAmountFieldProps { - withProps(props: CallbackProps): React.ReactElement | null; -} - -const DefaultAmountField: React.SFC = ({ withProps }) => ( - } - /> -); - -export { DefaultAmountField as AmountFieldFactory }; diff --git a/common/components/AmountFieldFactory/AmountInputFactory.tsx b/common/components/AmountFieldFactory/AmountInputFactory.tsx deleted file mode 100644 index 0a1ac2970..000000000 --- a/common/components/AmountFieldFactory/AmountInputFactory.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { ICurrentValue } from 'features/types'; -import { getCurrentValue, nonStandardTransaction } from 'features/selectors'; -import { CallbackProps } from 'components/AmountFieldFactory'; -import { Query } from 'components/renderCbs'; - -interface OwnProps { - onChange(ev: React.FormEvent): void; - withProps(props: CallbackProps): React.ReactElement | null; -} - -interface StateProps { - isNonStandard: boolean; - currentValue: ICurrentValue; -} - -type Props = OwnProps & StateProps; - -class AmountInputClass extends Component { - public render() { - const { currentValue, onChange, withProps, isNonStandard } = this.props; - - return ( - - withProps({ - currentValue, - isValid: !!currentValue.value || isNonStandard, - readOnly: !!readOnly, - onChange - }) - } - /> - ); - } -} - -export const AmountInput = connect((state: AppState) => ({ - currentValue: getCurrentValue(state), - isNonStandard: nonStandardTransaction(state) -}))(AmountInputClass); diff --git a/common/components/AmountFieldFactory/index.tsx b/common/components/AmountFieldFactory/index.tsx deleted file mode 100644 index 92425697c..000000000 --- a/common/components/AmountFieldFactory/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from './AmountFieldFactory'; diff --git a/common/components/BalanceSidebar/AccountAddress.tsx b/common/components/BalanceSidebar/AccountAddress.tsx deleted file mode 100644 index 4a3aa8ec0..000000000 --- a/common/components/BalanceSidebar/AccountAddress.tsx +++ /dev/null @@ -1,272 +0,0 @@ -import React from 'react'; -import { connect, MapStateToProps } from 'react-redux'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; - -import translate, { translateRaw } from 'translations'; -import { AppState } from 'features/reducers'; -import { - addressBookConstants, - addressBookActions, - addressBookSelectors -} from 'features/addressBook'; -import { Address, Identicon, Input } from 'components/ui'; - -interface StateProps { - entry: ReturnType; - addressLabel: string; -} - -interface DispatchProps { - changeAddressLabelEntry: addressBookActions.TChangeAddressLabelEntry; - saveAddressLabelEntry: addressBookActions.TSaveAddressLabelEntry; - removeAddressLabelEntry: addressBookActions.TRemoveAddressLabelEntry; -} - -interface OwnProps { - address: string; -} - -type Props = StateProps & DispatchProps & OwnProps; - -interface State { - copied: boolean; - editingLabel: boolean; - labelInputTouched: boolean; -} - -class AccountAddress extends React.Component { - public state = { - copied: false, - editingLabel: false, - labelInputTouched: false - }; - - private goingToClearCopied: number | null = null; - - private labelInput: HTMLInputElement | null = null; - - public handleCopy = () => - this.setState( - (prevState: State) => ({ - copied: !prevState.copied - }), - this.clearCopied - ); - - public componentWillUnmount() { - if (this.goingToClearCopied) { - window.clearTimeout(this.goingToClearCopied); - } - } - - public render() { - const { address, addressLabel } = this.props; - const { copied } = this.state; - const labelContent = this.generateLabelContent(); - const labelButton = this.generateLabelButton(); - const addressClassName = `AccountInfo-address-addr ${ - addressLabel ? 'AccountInfo-address-addr--small' : '' - }`; - - return ( -
    -
    {translate('SIDEBAR_ACCOUNTADDR')}
    -
    -
    - -
    -
    - {labelContent} -
    -
    -
    - -
    - - {translateRaw(copied ? 'COPIED' : 'COPY_ADDRESS')} -
    -
    -
    - {labelButton} -
    -
    -
    -
    - ); - } - - private clearCopied = () => - (this.goingToClearCopied = window.setTimeout(() => this.setState({ copied: false }), 2000)); - - private startEditingLabel = () => - this.setState({ editingLabel: true }, () => { - if (this.labelInput) { - this.labelInput.focus(); - this.labelInput.select(); - } - }); - - private stopEditingLabel = () => this.setState({ editingLabel: false }); - - private setLabelInputRef = (node: HTMLInputElement) => (this.labelInput = node); - - private generateLabelContent = () => { - const { - addressLabel, - entry: { temporaryLabel, labelError } - } = this.props; - const { editingLabel, labelInputTouched } = this.state; - const newLabelSameAsPrevious = temporaryLabel === addressLabel; - const labelInputTouchedWithError = labelInputTouched && !newLabelSameAsPrevious && labelError; - - let labelContent = null; - - if (editingLabel) { - labelContent = ( - - - {labelInputTouchedWithError && ( - - )} - - ); - } else { - labelContent = ; - } - - return labelContent; - }; - - private generateLabelButton = () => { - const { addressLabel } = this.props; - const { editingLabel } = this.state; - const labelButton = editingLabel ? ( - - - - {translate('SAVE_LABEL')} - - - ) : ( - - - - {addressLabel ? translate('EDIT_LABEL') : translate('ADD_LABEL_9')} - - - ); - - return labelButton; - }; - - private handleBlur = () => { - const { - address, - addressLabel, - entry: { id, label, temporaryLabel, labelError } - } = this.props; - - this.clearTemporaryLabelTouched(); - this.stopEditingLabel(); - - if (temporaryLabel === addressLabel) { - return; - } - - if (temporaryLabel && temporaryLabel.length > 0) { - this.props.saveAddressLabelEntry(id); - - if (labelError) { - // If the new changes aren't valid, undo them. - this.props.changeAddressLabelEntry({ - id, - address, - temporaryAddress: address, - label, - temporaryLabel: label, - overrideValidation: true - }); - } - } else { - this.props.removeAddressLabelEntry(id); - } - }; - - private handleKeyDown = (e: React.KeyboardEvent) => { - switch (e.key) { - case 'Enter': - return this.handleBlur(); - case 'Escape': - return this.stopEditingLabel(); - } - }; - - private handleLabelChange = (e: React.ChangeEvent) => { - const { address } = this.props; - const label = e.target.value; - - this.props.changeAddressLabelEntry({ - id: addressBookConstants.ACCOUNT_ADDRESS_ID, - address, - label, - isEditing: true - }); - - this.setState( - { - labelInputTouched: true - }, - () => label.length === 0 && this.clearTemporaryLabelTouched() - ); - }; - - private setTemporaryLabelTouched = () => { - const { labelInputTouched } = this.state; - - if (!labelInputTouched) { - this.setState({ labelInputTouched: true }); - } - }; - - private clearTemporaryLabelTouched = () => this.setState({ labelInputTouched: false }); -} - -const mapStateToProps: MapStateToProps = ( - state: AppState, - ownProps: OwnProps -) => { - const labelEntry = addressBookSelectors.getAddressLabelEntryFromAddress(state, ownProps.address); - return { - entry: addressBookSelectors.getAccountAddressEntry(state), - addressLabel: labelEntry ? labelEntry.label : '' - }; -}; - -const mapDispatchToProps: DispatchProps = { - changeAddressLabelEntry: addressBookActions.changeAddressLabelEntry, - saveAddressLabelEntry: addressBookActions.saveAddressLabelEntry, - removeAddressLabelEntry: addressBookActions.removeAddressLabelEntry -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(AccountAddress); diff --git a/common/components/BalanceSidebar/AccountInfo.scss b/common/components/BalanceSidebar/AccountInfo.scss deleted file mode 100644 index 765c077fb..000000000 --- a/common/components/BalanceSidebar/AccountInfo.scss +++ /dev/null @@ -1,154 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.AccountInfo { - &-copy { - display: inline-block; - cursor: pointer; - color: color(text-color); - font-size: $font-size-xs; - opacity: 0.5; - transition: $transition; - - &:hover { - opacity: 1; - } - - &.is-copied { - color: color(brand-success); - opacity: 1; - } - - .fa { - margin-right: $space-xs; - } - } - - &-label { - display: inline-block; - cursor: pointer; - color: color(text-color); - font-size: $font-size-xs; - opacity: 0.5; - - .fa { - margin: 0 $space-xs 0 $space-sm; - } - } - - &-section { - margin: $space 0; - - &:first-child { - margin-top: 0; - } - - &-header { - margin-top: 0; - display: inline-block; - } - - &-refresh { - background: transparent; - border: none; - padding: 0; - height: 1.4rem; - width: 1.2rem; - opacity: 0.3; - transition: opacity 0.3s; - > img { - height: inherit; - width: inherit; - vertical-align: top; - } - &:hover { - opacity: 0.54; - } - &:active { - transition: opacity 120ms; - opacity: 1; - } - } - } - - &-address, - &-list { - padding-left: $space; - } - - &-address { - @include clearfix; - - &-section { - display: flex; - max-width: 100%; - flex-direction: row; - flex-wrap: nowrap; - align-items: center; - } - - &-wrapper { - max-width: calc(100% - 44px - 24px); - - &-error { - color: color(brand-danger); - margin-bottom: $space-md; - } - } - - &-icon { - width: 44px; - height: 44px; - margin-right: $space-md; - } - - &-addr { - margin-top: -$space-xs; - word-wrap: break-word; - @include mono; - - &--small { - font-size: 0.8rem; - } - } - - &-confirm { - display: flex; - align-items: center; - .Spinner { - margin-right: 16px; - } - } - - &-label { - font-weight: bolder; - font-size: 1.3rem; - overflow: hidden; - text-overflow: ellipsis; - word-wrap: break-word; - } - } - - &-balance { - display: flex; - justify-content: flex-start; - align-items: center; - - &-amount { - margin-right: $space-sm; - } - } - - &-list { - &-item { - margin-bottom: 0; - list-style-type: none; - word-break: break-all; - - &-clickable:hover { - cursor: pointer; - text-decoration: underline; - } - } - } -} diff --git a/common/components/BalanceSidebar/AccountInfo.tsx b/common/components/BalanceSidebar/AccountInfo.tsx deleted file mode 100644 index 4a31b43a8..000000000 --- a/common/components/BalanceSidebar/AccountInfo.tsx +++ /dev/null @@ -1,213 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { etherChainExplorerInst } from 'config/data'; -import translate, { translateRaw } from 'translations'; -import { IWallet, HardwareWallet, Balance } from 'libs/wallet'; -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { configSelectors, configMetaSelectors } from 'features/config'; -import { walletActions } from 'features/wallet'; -import Spinner from 'components/ui/Spinner'; -import { UnitDisplay, NewTabLink } from 'components/ui'; -import AccountAddress from './AccountAddress'; -import './AccountInfo.scss'; - -interface OwnProps { - wallet: IWallet; -} - -interface StateProps { - balance: Balance; - network: ReturnType; - isOffline: ReturnType; - toChecksumAddress: ReturnType; -} - -interface State { - showLongBalance: boolean; - address: string; - confirmAddr: boolean; -} - -interface DispatchProps { - refreshAccountBalance: walletActions.TRefreshAccountBalance; -} - -type Props = OwnProps & StateProps & DispatchProps; - -class AccountInfo extends React.Component { - public state = { - showLongBalance: false, - address: '', - confirmAddr: false - }; - - public setAddressFromWallet() { - const address = this.props.wallet.getAddressString(); - if (address !== this.state.address) { - this.setState({ address }); - } - } - - public componentDidMount() { - this.setAddressFromWallet(); - } - - public componentDidUpdate() { - this.setAddressFromWallet(); - } - - public toggleConfirmAddr = () => { - this.setState(state => { - return { confirmAddr: !state.confirmAddr }; - }); - }; - - public toggleShowLongBalance = (e: React.FormEvent) => { - e.preventDefault(); - this.setState(state => { - return { - showLongBalance: !state.showLongBalance - }; - }); - }; - - public render() { - const { network, isOffline, balance, toChecksumAddress, wallet } = this.props; - const { address, showLongBalance, confirmAddr } = this.state; - - let blockExplorer; - let tokenExplorer; - if (!network.isCustom) { - // this is kind of ugly but its the result of typeguards, maybe we can find a cleaner solution later on such as just dedicating it to a selector - blockExplorer = network.blockExplorer; - tokenExplorer = network.tokenExplorer; - } - - return ( -
    - - - {isHardwareWallet(wallet) && ( - - )} - -
    -
    {translate('SIDEBAR_ACCOUNTBAL')}
    -
      -
    • - - - - {balance.wei && ( - - {balance.isPending ? ( - - ) : ( - !isOffline && ( - - ) - )} - - )} -
    • -
    -
    - - {(!!blockExplorer || !!tokenExplorer) && ( -
    -
    {translate('SIDEBAR_TRANSHISTORY')}
    -
      - {!!blockExplorer && ( -
    • - - {`${network.name} (${blockExplorer.origin})`} - -
    • - )} - {network.id === 'ETH' && ( -
    • - - {`${network.name} (${etherChainExplorerInst.origin})`} - -
    • - )} - {!!tokenExplorer && ( -
    • - - {`Tokens (${tokenExplorer.name})`} - -
    • - )} -
    -
    - )} -
    - ); - } - - private setSymbol(network: NetworkConfig) { - if (network.isTestnet) { - return `${network.unit} (${translateRaw('TESTNET')})`; - } - return network.unit; - } -} - -function isHardwareWallet(wallet: IWallet): wallet is HardwareWallet { - return typeof (wallet as any).displayAddress === 'function'; -} - -function mapStateToProps(state: AppState): StateProps { - return { - balance: state.wallet.balance, - network: configSelectors.getNetworkConfig(state), - isOffline: configMetaSelectors.getOffline(state), - toChecksumAddress: configSelectors.getChecksumAddressFn(state) - }; -} -const mapDispatchToProps: DispatchProps = { - refreshAccountBalance: walletActions.refreshAccountBalance -}; -export default connect( - mapStateToProps, - mapDispatchToProps -)(AccountInfo); diff --git a/common/components/BalanceSidebar/EquivalentValues.scss b/common/components/BalanceSidebar/EquivalentValues.scss deleted file mode 100644 index 4330d3a51..000000000 --- a/common/components/BalanceSidebar/EquivalentValues.scss +++ /dev/null @@ -1,72 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.EquivalentValues { - &-header { - display: flex; - align-items: center; - margin-bottom: $space; - - .Select { - flex-grow: 1; - } - } - - &-spinner { - text-align: center; - padding: 1.6rem; - } - - &-title { - margin: 0; - margin-right: 16px; - } - - &-values { - display: flex; - flex-wrap: wrap; - &-spacer { - height: 1px; - width: 100%; - margin: 0.5rem 0rem; - margin-bottom: 0.75rem; - background-color: color(control-border); - background-position: center; - background-size: 1px 1px; - } - &-currency { - min-width: 50%; - margin-bottom: $space-xs; - display: flex; - flex-wrap: nowrap; - align-items: center; - &-fiat-symbol { - width: 18px; - margin-right: 0.5rem; - text-align: center; - } - &-coin-and-token { - img { - height: 18px; - width: 18px; - margin-right: 0.5rem; - } - } - &-label { - white-space: pre-wrap; - display: inline-block; - min-width: 36px; - color: shade-dark(0.5); - } - &-value { - font-weight: 600; - @include mono; - } - } - } - - &-offline { - margin-bottom: 0; - text-align: center; - } -} diff --git a/common/components/BalanceSidebar/EquivalentValues.tsx b/common/components/BalanceSidebar/EquivalentValues.tsx deleted file mode 100644 index aa39084d2..000000000 --- a/common/components/BalanceSidebar/EquivalentValues.tsx +++ /dev/null @@ -1,343 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import Select from 'react-select'; -import BN from 'bn.js'; -import { chain, flatMap } from 'lodash'; - -import translate from 'translations'; -import { rateSymbols } from 'api/rates'; -import { NetworkConfig } from 'types/network'; -import { Balance } from 'libs/wallet'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { configSelectors, configMetaSelectors } from 'features/config'; -import { ratesActions } from 'features/rates'; -import { walletTypes } from 'features/wallet'; -import { UnitDisplay, Spinner } from 'components/ui'; -import btcIco from 'assets/images/bitcoin.png'; -import ethIco from 'assets/images/ether.png'; -import './EquivalentValues.scss'; - -interface AllValue { - symbol: string; - balance: Balance['wei']; -} - -interface DefaultOption { - label: string; - value: AllValue[]; -} - -interface Option { - label: string; - value: Balance['wei'] | AllValue[]; -} - -interface State { - equivalentValues: Option; - options: Option[]; -} - -interface StateProps { - balance: Balance; - network: NetworkConfig; - - tokenBalances: walletTypes.TokenBalance[]; - rates: AppState['rates']['rates']; - ratesError: AppState['rates']['ratesError']; - isOffline: AppState['config']['meta']['offline']; -} - -interface DispatchProps { - fetchCCRates: ratesActions.TFetchCCRatesRequested; -} - -interface FiatSymbols { - [key: string]: string; -} - -interface Rates { - [rate: string]: number; -} - -type Props = StateProps & DispatchProps; - -class EquivalentValues extends React.Component { - private requestedCurrencies: string[] | null = null; - - public constructor(props: Props) { - super(props); - const { balance, tokenBalances, network } = this.props; - this.state = { - equivalentValues: this.defaultOption(balance, tokenBalances, network), - options: [] - }; - - if (props.balance && props.tokenBalances) { - this.fetchRates(props); - } - } - - public defaultOption( - balance: Balance, - tokenBalances: walletTypes.TokenBalance[], - network: StateProps['network'] - ): DefaultOption { - return { - label: 'All', - value: [{ symbol: network.unit, balance: balance.wei }, ...tokenBalances] - }; - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - const { balance, tokenBalances, isOffline, network } = this.props; - if ( - nextProps.balance !== balance || - nextProps.tokenBalances !== tokenBalances || - nextProps.isOffline !== isOffline || - nextProps.network.unit !== network.unit - ) { - const defaultOption = this.defaultOption( - nextProps.balance, - nextProps.tokenBalances, - nextProps.network - ); - const options: Option[] = [ - defaultOption, - { label: nextProps.network.unit, value: nextProps.balance.wei }, - ...Object.values(nextProps.tokenBalances).map(token => { - return { label: token.symbol, value: token.balance }; - }) - ]; - const equivalentValues = - options.find(opt => opt.label === this.state.equivalentValues.label) || defaultOption; - this.setState({ - equivalentValues, - options - }); - this.fetchRates(nextProps); - } - } - - public selectOption = (equivalentValues: Option) => { - this.setState({ equivalentValues }); - }; - - public render(): JSX.Element { - const { balance, isOffline, tokenBalances, rates, network, ratesError } = this.props; - const { equivalentValues, options } = this.state; - const isFetching = - !balance || balance.isPending || !tokenBalances || Object.keys(rates).length === 0; - const pairRates = this.generateValues(equivalentValues.label, equivalentValues.value); - const fiatSymbols: FiatSymbols = { - USD: '$', - EUR: '€', - GBP: '£', - CHF: '₣', - RUB: '₽', - JPY: '¥', - KRW: '₩', - INR: '₹' - }; - const coinAndTokenSymbols: any = { - BTC: btcIco, - ETH: ethIco - }; - interface ValueProps { - className: string; - rate: string; - value: BN | null; - symbol?: string; - icon?: string; - key?: number | string; - } - - const Value = (props: ValueProps) => ( -
    - - {!!props.symbol && ( - {props.symbol} - )} - {props.rate}{' '} - - - -
    - ); - - return ( -
    -
    -
    {translate('SIDEBAR_EQUIV')}
    - - {address.err() &&
    {address.err()}
    } - - ); - } - - private handleFieldChange = (e: React.FormEvent) => { - const userInput = e.currentTarget.value; - const addrTaken = this.props.addressLookup[userInput]; - const validAddr = isValidETHAddress(userInput); - const err = addrTaken ? ErrType.ADDRTAKEN : !validAddr ? ErrType.INVALIDADDR : undefined; - const address: Result = err ? Result.from({ err }) : Result.from({ res: userInput }); - - this.setState({ userInput, address }); - this.props.onChange(address); - }; -} diff --git a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/BalanceField.tsx b/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/BalanceField.tsx deleted file mode 100644 index 427b3522f..000000000 --- a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/BalanceField.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { Result } from 'mycrypto-nano-result'; - -import ERC20 from 'libs/erc20'; -import { shepherdProvider } from 'libs/nodes'; -import { AppState } from 'features/reducers'; -import { walletSelectors } from 'features/wallet'; -import Spinner from 'components/ui/Spinner'; -import { Input } from 'components/ui'; - -interface OwnProps { - address?: string; -} - -interface StateProps { - walletInst: ReturnType; -} - -interface State { - balance: Result; - addressToLoad?: string; - loading: boolean; -} - -type Props = OwnProps & StateProps; - -class BalanceFieldClass extends React.Component { - public static getDerivedStateFromProps( - nextProps: OwnProps, - prevState: State - ): Partial | null { - if (nextProps.address && nextProps.address !== prevState.addressToLoad) { - return { loading: true, addressToLoad: nextProps.address }; - } - return null; - } - - public state: State = { - balance: Result.from({ res: '' }), - loading: false - }; - - private currentRequest: Promise | null; - - public componentDidUpdate() { - if (this.state.addressToLoad && this.state.loading) { - this.attemptToLoadBalance(this.state.addressToLoad); - } - } - - public componentWillUnmount() { - if (this.currentRequest) { - this.currentRequest = null; - } - } - public render() { - const { balance, loading } = this.state; - - return ( - - ); - } - - private attemptToLoadBalance(address: string) { - // process request - this.currentRequest = this.loadBalance(address) - // set state on successful request e.g it was not cancelled - // and then also set our current request to null - .then(({ balance }) => - this.setState({ - balance, - loading: false - }) - ) - .catch(e => { - console.error(e); - // if the component is unmounted, then dont call set state - if (!this.currentRequest) { - return; - } - - // otherwise it was a failed fetch call - this.setState({ loading: false }); - }) - .then(() => (this.currentRequest = null)); - } - - private loadBalance(address: string) { - if (!this.props.walletInst) { - return Promise.reject('No wallet found'); - } - - const owner = this.props.walletInst.getAddressString(); - return shepherdProvider - .sendCallRequest({ data: ERC20.balanceOf.encodeInput({ _owner: owner }), to: address }) - .then(ERC20.balanceOf.decodeOutput) - .then(({ balance }) => { - const result = Result.from({ res: balance }); - return { balance: result }; - }); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { walletInst: walletSelectors.getWalletInst(state) }; -} - -export const BalanceField = connect(mapStateToProps)(BalanceFieldClass); diff --git a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/DecimalField.tsx b/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/DecimalField.tsx deleted file mode 100644 index 908cc1aac..000000000 --- a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/DecimalField.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import { Result } from 'mycrypto-nano-result'; - -import { translateRaw } from 'translations'; -import { isPositiveIntegerOrZero } from 'libs/validators'; -import { FieldInput } from './FieldInput'; - -interface OwnProps { - address?: string; - isOffline: boolean; - onChange(decimals: Result): void; -} - -export class DecimalField extends React.Component { - public render() { - return ( - false} - address={this.props.address} - isOffline={this.props.isOffline} - userInputValidator={this.isValidUserInput} - onChange={this.props.onChange} - /> - ); - } - - private isValidUserInput = (userInput: string) => { - const validDecimals = isPositiveIntegerOrZero(Number(userInput)); - const decimals: Result = validDecimals - ? Result.from({ res: userInput }) - : Result.from({ err: 'Invalid decimal' }); - return decimals; - }; -} diff --git a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/FieldInput.tsx b/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/FieldInput.tsx deleted file mode 100644 index dd576ce3f..000000000 --- a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/FieldInput.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React from 'react'; -import { Result } from 'mycrypto-nano-result'; - -import { shepherdProvider } from 'libs/nodes'; -import ERC20 from 'libs/erc20'; -import Spinner from 'components/ui/Spinner'; -import { Input } from 'components/ui'; - -interface OwnProps { - fieldToFetch: keyof Pick; - fieldName: string; - address?: string; - isOffline: boolean; - userInputValidator(input: string): Result; - fetchedFieldValidator?(input: any): Result; - shouldEnableAutoField(input: Result): boolean; - onChange(symbol: Result): void; -} - -interface State { - field: Result; - autoField: boolean; - userInput: string; - addressToLoad?: string; - loading: boolean; -} - -export class FieldInput extends React.Component { - public static getDerivedStateFromProps( - nextProps: OwnProps, - prevState: State - ): Partial | null { - if ( - !nextProps.isOffline && - nextProps.address && - nextProps.address !== prevState.addressToLoad - ) { - return { loading: true, autoField: true, addressToLoad: nextProps.address }; - } - return null; - } - - public state: State = { - userInput: '', - autoField: true, - field: Result.from({ res: '' }), - loading: false - }; - - private currentRequest: Promise | null; - - public componentDidUpdate() { - if (!this.props.isOffline && this.state.addressToLoad && this.state.loading) { - this.attemptToLoadField(this.state.addressToLoad); - } - } - - public componentWillUnmount() { - if (this.currentRequest) { - this.currentRequest = null; - } - } - - public render() { - const { userInput, field, autoField, loading } = this.state; - - return ( - - ); - } - - private handleFieldChange = (args: React.FormEvent) => { - const userInput = args.currentTarget.value; - const field = this.props.userInputValidator(userInput); - this.setState({ userInput, field }); - this.props.onChange(field); - }; - - private attemptToLoadField(address: string) { - // process request - this.currentRequest = this.loadField(address) - // set state on successful request e.g it was not cancelled - // and then also set our current request to null - .then(({ [this.props.fieldToFetch]: field }) => - this.setState({ - field, - loading: false, - autoField: this.props.shouldEnableAutoField(field) - }) - ) - .catch(e => { - console.error(e); - // if the component is unmounted, then dont call set state - if (!this.currentRequest) { - return; - } - - // otherwise it was a failed fetch call - this.setState({ autoField: false, loading: false }); - }) - .then(() => (this.currentRequest = null)); - } - - private loadField(address: string) { - const { fieldToFetch } = this.props; - return shepherdProvider - .sendCallRequest({ data: ERC20[fieldToFetch].encodeInput(), to: address }) - .then(ERC20[fieldToFetch].decodeOutput as any) - .then(({ [fieldToFetch]: field }: any) => { - let result: Result; - if (this.props.fetchedFieldValidator) { - result = this.props.fetchedFieldValidator(field); - } else { - result = Result.from({ res: field }); - } - - // - // - this.props.onChange(result); - return { [fieldToFetch]: result }; - }); - } -} diff --git a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/SymbolField.tsx b/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/SymbolField.tsx deleted file mode 100644 index 9eee04de0..000000000 --- a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/SymbolField.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { Result } from 'mycrypto-nano-result'; - -import { translateRaw } from 'translations'; -import { IGenerateSymbolLookup } from './AddCustomTokenForm'; -import { FieldInput } from './FieldInput'; - -interface OwnProps { - address?: string; - symbolLookup: IGenerateSymbolLookup; - isOffline: boolean; - onChange(symbol: Result): void; -} - -export class SymbolField extends React.Component { - public render() { - return ( - false} - address={this.props.address} - userInputValidator={this.isValidUserInput} - fetchedFieldValidator={field => - field - ? Result.from({ res: field }) - : Result.from({ err: 'No Symbol found, please input the token symbol manually' }) - } - isOffline={this.props.isOffline} - onChange={this.props.onChange} - /> - ); - } - - private isValidUserInput = (userInput: string) => { - const validSymbol = !this.props.symbolLookup[userInput]; - const symbol: Result = validSymbol - ? Result.from({ res: userInput }) - : Result.from({ err: 'A token with this symbol already exists' }); - return symbol; - }; -} diff --git a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/index.ts b/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/index.ts deleted file mode 100644 index bd180f659..000000000 --- a/common/components/BalanceSidebar/TokenBalances/AddCustomTokenForm/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './AddCustomTokenForm'; diff --git a/common/components/BalanceSidebar/TokenBalances/Balances.tsx b/common/components/BalanceSidebar/TokenBalances/Balances.tsx deleted file mode 100644 index 6b7040f4c..000000000 --- a/common/components/BalanceSidebar/TokenBalances/Balances.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { Token } from 'types/network'; -import { walletTypes } from 'features/wallet'; -import { AddCustomTokenForm } from './AddCustomTokenForm'; -import TokenRow from './TokenRow'; - -interface Props { - allTokens: Token[]; - tokenBalances: walletTypes.TokenBalance[]; - hasSavedWalletTokens: boolean; - isOffline: boolean; - scanWalletForTokens(): any; - setWalletTokens(tokens: string[]): any; - onAddCustomToken(token: Token): any; - onRemoveCustomToken(symbol: string): any; -} - -interface TrackedTokens { - [symbol: string]: boolean; -} - -interface State { - trackedTokens: TrackedTokens; - showCustomTokenForm: boolean; -} -export default class TokenBalances extends React.PureComponent { - public state: State = { - trackedTokens: {}, - showCustomTokenForm: false - }; - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (nextProps.tokenBalances !== this.props.tokenBalances) { - const trackedTokens = nextProps.tokenBalances.reduce((prev, t) => { - prev[t.symbol] = !t.balance.isZero() || t.custom; - return prev; - }, {}); - this.setState({ trackedTokens }); - } - } - - public render() { - const { allTokens, tokenBalances, hasSavedWalletTokens, isOffline } = this.props; - const { showCustomTokenForm, trackedTokens } = this.state; - - let bottom; - let help; - if (tokenBalances.length && !hasSavedWalletTokens && !this.onlyCustomTokens()) { - help = translate('SELECT_WHICH_TOKENS'); - bottom = ( -
    - -

    {translate('PROMPT_ADD_CUSTOM_TKN')}

    -
    - ); - } else if (showCustomTokenForm) { - bottom = ( -
    - -
    - ); - } else { - bottom = ( -
    - - {!isOffline && ( - - )} -
    - ); - } - - return ( -
    - {help &&

    {help}

    } - - {tokenBalances.length ? ( - - - {tokenBalances.map(token => - token ? ( - - ) : null - )} - -
    - ) : isOffline ? ( -
    - {translate('SCAN_TOKENS_OFFLINE')} -
    - ) : ( -
    {translate('SCAN_TOKENS_FAIL_NO_TOKENS')}
    - )} - {bottom} -
    - ); - } - - private toggleTrack = (symbol: string) => { - this.setState({ - trackedTokens: { - ...this.state.trackedTokens, - [symbol]: !this.state.trackedTokens[symbol] - } - }); - }; - - private toggleShowCustomTokenForm = () => { - this.setState({ - showCustomTokenForm: !this.state.showCustomTokenForm - }); - }; - - /** - * - * @description Checks if all currently tracked tokens are custom - * @private - * @returns - * @memberof TokenBalances - */ - private onlyCustomTokens() { - const tokenMap = this.props.tokenBalances.reduce<{ [key: string]: walletTypes.TokenBalance }>( - (acc, cur) => ({ ...acc, [cur.symbol]: cur }), - {} - ); - - return Object.keys(this.state.trackedTokens).reduce( - (prev, tokenName) => tokenMap[tokenName].custom && prev, - true - ); - } - private addCustomToken = (token: Token) => { - this.props.onAddCustomToken(token); - this.setState({ showCustomTokenForm: false }); - }; - - private handleSetWalletTokens = () => { - const { trackedTokens } = this.state; - const desiredTokens = Object.keys(trackedTokens).filter(t => trackedTokens[t]); - this.props.setWalletTokens(desiredTokens); - }; -} diff --git a/common/components/BalanceSidebar/TokenBalances/TokenRow.scss b/common/components/BalanceSidebar/TokenBalances/TokenRow.scss deleted file mode 100644 index 66a1c1aa0..000000000 --- a/common/components/BalanceSidebar/TokenBalances/TokenRow.scss +++ /dev/null @@ -1,35 +0,0 @@ -@import "common/sass/variables"; -@import "common/sass/mixins"; - -.TokenRow { - border-bottom: 1px solid shade-dark(0.1); - - &-balance, - &-symbol { - padding: $space-xs 0 $space-xs $space-md; - } - - &-balance { - @include mono; - } - - &-symbol { - position: relative; - font-weight: 300; - - &-remove { - position: absolute; - top: 50%; - right: 4px; - float: right; - font-size: 18px; - cursor: pointer; - opacity: 0.4; - transform: translateY(-50%); - - &:hover { - opacity: 1; - } - } - } -} diff --git a/common/components/BalanceSidebar/TokenBalances/TokenRow.tsx b/common/components/BalanceSidebar/TokenBalances/TokenRow.tsx deleted file mode 100644 index fd5b34b0a..000000000 --- a/common/components/BalanceSidebar/TokenBalances/TokenRow.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import React from 'react'; - -import { translateRaw } from 'translations'; -import { TokenValue } from 'libs/units'; -import removeIcon from 'assets/images/icon-remove.svg'; -import { UnitDisplay } from 'components/ui'; -import './TokenRow.scss'; - -type ToggleTrackedFn = (symbol: string) => void; - -interface Props { - balance: TokenValue; - symbol: string; - custom?: boolean; - decimal: number; - tracked: boolean; - isOffline: boolean; - toggleTracked: ToggleTrackedFn | false; - onRemove(symbol: string): void; -} -interface State { - showLongBalance: boolean; -} - -export default class TokenRow extends React.PureComponent { - public state = { - showLongBalance: false - }; - - public render() { - const { balance, symbol, custom, decimal, tracked, isOffline } = this.props; - const { showLongBalance } = this.state; - - return ( - - {/* Only allow to toggle tracking on non custom tokens - because the user can just remove the custom token instead */} - {this.props.toggleTracked && ( - - - - )} - {!isOffline && ( - - - - - - )} - - {symbol} - {!!custom && ( - {translateRaw('REMOVE')} - )} - - - ); - } - - public toggleShowLongBalance = (e: React.FormEvent) => { - e.preventDefault(); - this.setState(state => { - return { - showLongBalance: !state.showLongBalance - }; - }); - }; - - private onRemove = () => { - this.props.onRemove(this.props.symbol); - }; - - private handleToggleTracked = () => { - if (this.props.toggleTracked) { - this.props.toggleTracked(this.props.symbol); - } - }; -} diff --git a/common/components/BalanceSidebar/TokenBalances/index.scss b/common/components/BalanceSidebar/TokenBalances/index.scss deleted file mode 100644 index 8372ec1f1..000000000 --- a/common/components/BalanceSidebar/TokenBalances/index.scss +++ /dev/null @@ -1,67 +0,0 @@ -@import 'common/sass/variables'; - -.TokenBalances { - &-title { - margin-top: 0; - } - - &-help { - font-size: $font-size-small; - margin-bottom: 15px; - } - - &-scan { - margin-top: 10px; - } - - &-none { - text-align: center; - margin-bottom: -5px; - } - - &-loader { - padding: 25px 0; - text-align: center; - } - - &-rows { - width: 100%; - margin-bottom: $space; - } - - &-form { - margin-top: $space; - } - - &-error { - color: color(brand-danger); - text-align: center; - - &-message { - margin-top: 0; - } - - .fa { - margin-left: $space-md; - } - } - - &-buttons { - display: flex; - flex-wrap: wrap; - justify-content: center; - margin: 0 #{-$space-xs} #{-$space-xs}; - - &-btn { - flex-grow: 1; - margin: 0 $space-xs $space-xs; - } - - &-help { - padding-top: 10px; - text-align: center; - font-size: $font-size-xs; - color: shade-dark(0.7); - } - } -} diff --git a/common/components/BalanceSidebar/TokenBalances/index.tsx b/common/components/BalanceSidebar/TokenBalances/index.tsx deleted file mode 100644 index 8530b21cf..000000000 --- a/common/components/BalanceSidebar/TokenBalances/index.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { Token } from 'types/network'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { configSelectors, configMetaSelectors } from 'features/config'; -import { customTokensActions } from 'features/customTokens'; -import { walletTypes, walletActions, walletSelectors } from 'features/wallet'; -import Spinner from 'components/ui/Spinner'; -import Balances from './Balances'; -import './index.scss'; - -interface StateProps { - wallet: AppState['wallet']['inst']; - walletConfig: AppState['wallet']['config']; - tokens: Token[]; - tokenBalances: walletTypes.TokenBalance[]; - tokensError: AppState['wallet']['tokensError']; - isTokensLoading: AppState['wallet']['isTokensLoading']; - hasSavedWalletTokens: AppState['wallet']['hasSavedWalletTokens']; - isOffline: AppState['config']['meta']['offline']; -} -interface ActionProps { - attemptAddCustomToken: customTokensActions.TAttemptAddCustomToken; - removeCustomToken: customTokensActions.TRemoveCustomToken; - scanWalletForTokens: walletActions.TScanWalletForTokens; - setWalletTokens: walletActions.TSetWalletTokens; - refreshTokenBalances: walletActions.TRefreshTokenBalances; -} -type Props = StateProps & ActionProps; - -class TokenBalances extends React.Component { - public render() { - const { - tokens, - walletConfig, - tokenBalances, - hasSavedWalletTokens, - isTokensLoading, - tokensError, - isOffline - } = this.props; - - const walletTokens = walletConfig ? walletConfig.tokens : []; - - let content; - if (tokensError) { - content = ( -
    -
    {tokensError}
    - -
    - ); - } else if (isTokensLoading) { - content = ( -
    - -
    - ); - } else if (!walletTokens && !isOffline) { - content = ( - - ); - } else { - const shownBalances = - (walletTokens && tokenBalances.filter(t => walletTokens.includes(t.symbol))) || []; - - content = ( - - ); - } - - return ( -
    -
    {translate('SIDEBAR_TOKENBAL')}
    - {content} -
    - ); - } - - private scanWalletForTokens = () => { - if (this.props.wallet) { - this.props.scanWalletForTokens(this.props.wallet); - this.setState({ hasScanned: true }); - } - }; -} - -function mapStateToProps(state: AppState): StateProps { - return { - wallet: walletSelectors.getWalletInst(state), - walletConfig: walletSelectors.getWalletConfig(state), - tokens: configSelectors.getAllTokens(state), - tokenBalances: selectors.getTokenBalances(state), - tokensError: state.wallet.tokensError, - isTokensLoading: state.wallet.isTokensLoading, - hasSavedWalletTokens: state.wallet.hasSavedWalletTokens, - isOffline: configMetaSelectors.getOffline(state) - }; -} - -export default connect( - mapStateToProps, - { - attemptAddCustomToken: customTokensActions.attemptAddCustomToken, - removeCustomToken: customTokensActions.removeCustomToken, - scanWalletForTokens: walletActions.scanWalletForTokens, - setWalletTokens: walletActions.setWalletTokens, - refreshTokenBalances: walletActions.refreshTokenBalances - } -)(TokenBalances); diff --git a/common/components/BalanceSidebar/index.tsx b/common/components/BalanceSidebar/index.tsx deleted file mode 100644 index 60bf67da5..000000000 --- a/common/components/BalanceSidebar/index.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { walletSelectors } from 'features/wallet'; -import EquivalentValues from './EquivalentValues'; -import AccountInfo from './AccountInfo'; -import Promos from './Promos'; -import TokenBalances from './TokenBalances'; - -interface Block { - name: string; - content: React.ReactElement; - isFullWidth?: boolean; -} - -interface StateProps { - wallet: AppState['wallet']['inst']; -} - -export class BalanceSidebar extends React.Component { - public render() { - const { wallet } = this.props; - - if (!wallet) { - return null; - } - - const blocks: Block[] = [ - { - name: 'Account Info', - content: - }, - { - name: 'Promos', - isFullWidth: true, - content: - }, - { - name: 'Token Balances', - content: - }, - { - name: 'Equivalent Values', - content: - } - ]; - - return ( - - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => ({ - wallet: walletSelectors.getWalletInst(state) -}); - -export default connect(mapStateToProps)(BalanceSidebar); diff --git a/common/components/ConfirmationModal/ConfirmationModal.tsx b/common/components/ConfirmationModal/ConfirmationModal.tsx deleted file mode 100644 index b6be7dfa9..000000000 --- a/common/components/ConfirmationModal/ConfirmationModal.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { Omit } from 'react-redux'; - -import { - ConfirmationModalTemplate, - OwnProps as TemplateProps -} from 'components/ConfirmationModalTemplate'; -import { Body } from './components'; - -type Props = Omit; - -export const ConfirmationModal: React.SFC = props => ( - } {...props} /> -); diff --git a/common/components/ConfirmationModal/components/Body/Body.scss b/common/components/ConfirmationModal/components/Body/Body.scss deleted file mode 100644 index 358c96a80..000000000 --- a/common/components/ConfirmationModal/components/Body/Body.scss +++ /dev/null @@ -1,18 +0,0 @@ -@import 'common/sass/variables'; - -.tx-modal-body { - margin: auto; - max-width: 35rem; - width: 100%; -} - -.tx-modal-testnet-warn { - text-align: center; - background-color: color(brand-warning); - border-radius: 2px; - padding: 0.5rem 0.75rem; - font-weight: 400; - color: color(text-color-inverted); - margin: auto; - margin-bottom: 1rem; -} diff --git a/common/components/ConfirmationModal/components/Body/Body.tsx b/common/components/ConfirmationModal/components/Body/Body.tsx deleted file mode 100644 index 529c5cbf6..000000000 --- a/common/components/ConfirmationModal/components/Body/Body.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import { Addresses } from './components/Addresses'; -import { Amounts } from './components/Amounts'; -import { Details } from './components/Details'; -import './Body.scss'; -import { scheduleSelectors } from 'features/schedule'; -import * as selectors from 'features/selectors'; - -interface State { - showDetails: boolean; -} - -interface StateProps { - isToken: boolean; - isSchedulingEnabled: boolean; - network: NetworkConfig; - sendingTokenApproveTransaction: boolean; -} - -class BodyClass extends React.Component { - public state: State = { - showDetails: false - }; - - public toggleDetails = () => { - this.setState({ - showDetails: !this.state.showDetails - }); - }; - - public render() { - const { showDetails } = this.state; - - return ( -
    - {this.props.network.isTestnet && ( -

    Testnet Transaction

    - )} - {this.props.isSchedulingEnabled && this.props.isToken && ( -

    - {translate('SCHEDULE_TOKEN_TRANSFER_NOTICE')} -

    - )} - - {this.props.sendingTokenApproveTransaction && ( -

    - {translate('SCHEDULE_TOKEN_TRANSFER_APPROVE')} -

    - )} - - - - - {showDetails &&
    } -
    - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => { - return { - isSchedulingEnabled: scheduleSelectors.isSchedulingEnabled(state), - isToken: !selectors.isEtherTransaction(state), - network: configSelectors.getNetworkConfig(state), - sendingTokenApproveTransaction: scheduleSelectors.getSendingTokenApproveTransaction(state) - }; -}; - -export const Body = connect(mapStateToProps)(BodyClass); diff --git a/common/components/ConfirmationModal/components/Body/components/Addresses.scss b/common/components/ConfirmationModal/components/Body/components/Addresses.scss deleted file mode 100644 index fde6c8034..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Addresses.scss +++ /dev/null @@ -1,84 +0,0 @@ -@import 'common/sass/variables'; - -.tx-modal-address { - // Table is necessary here so the size of the div fits to it's content, and margins can be applied to it. - // width: fit-content; margin: auto; isn't widely supported, so for now, this is the best option - display: table; - padding: 1rem 0; - margin: auto; - .Identicon { - margin-right: 1rem; - } - &-from, - &-tkn-contract, - &-to, - &-send-amount { - display: flex; - align-items: center; - margin: 1rem 0rem; - width: inherit; - &-icon { - margin-right: 1rem; - } - &:first-child { - margin-top: 0; - } - &-content { - width: inherit; - } - &-title { - margin: 0; - margin-right: 16px; - padding-bottom: 0.25rem; - } - &-address { - margin: 0; - font-family: $font-family-monospace; - font-weight: 400; - color: shade-dark(0.4); - word-wrap: break-word; - } - } - - &-tkn-contract { - &-icon { - > img { - transform: scale(0.75); - } - } - &-title { - margin: 0; - padding: 0; - font-weight: 400; - color: shade-dark(0.4); - } - &-link { - font-family: $font-family-monospace; - font-weight: 400; - } - } - - &-send-amount { - > img { - height: 3rem; - width: 3rem; - transform: scale(0.75); - } - } - - @media screen and (max-width: 525px) { - width: inherit; - .Identicon { - display: none; - } - &-tkn-contract { - &-icon { - display: none; - } - &-link { - width: inherit; - word-wrap: break-word; - } - } - } -} diff --git a/common/components/ConfirmationModal/components/Body/components/Addresses.tsx b/common/components/ConfirmationModal/components/Body/components/Addresses.tsx deleted file mode 100644 index 06b5fd8f2..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Addresses.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { ETHAddressExplorer } from 'config'; -import translate, { translateRaw } from 'translations'; -import ERC20 from 'libs/erc20'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { scheduleSelectors } from 'features/schedule'; -import { configSelectors } from 'features/config'; -import arrow from 'assets/images/tail-triangle-down.svg'; -import { SerializedTransaction } from 'components/renderCbs'; -import { Identicon } from 'components/ui'; -import './Addresses.scss'; -import Scheduler from 'libs/scheduling/contracts/Scheduler'; -import { bufferToHex } from 'ethereumjs-util'; - -interface StateProps { - from: ReturnType; - unit: ReturnType; - isToken: boolean; - isSchedulingEnabled: boolean; - toChecksumAddress: ReturnType; - sendingTokenApproveTransaction: boolean; - scheduledTransactionAddress: string; - scheduledTokenTransferSymbol: string; -} - -const size = '3rem'; - -class AddressesClass extends Component { - public render() { - const { - from, - isSchedulingEnabled, - isToken, - toChecksumAddress, - sendingTokenApproveTransaction, - scheduledTransactionAddress, - scheduledTokenTransferSymbol: scheduledTokenTransferSymbol - } = this.props; - let unit = this.props.unit; - - return ( - { - let toFormatted = ''; - let tokenAddress = to; - let schedulerAddress = ''; - - if (isSchedulingEnabled) { - const scheduledTxParams = Scheduler.schedule.decodeInput(data); - - if (isToken) { - const scheduledTxCallData = bufferToHex(scheduledTxParams._callData as Buffer); - - toFormatted = ERC20.transferFrom.decodeInput(scheduledTxCallData)._to; - tokenAddress = scheduledTxParams._toAddress; - } else { - toFormatted = scheduledTxParams._toAddress; - } - - schedulerAddress = to; - } else if (sendingTokenApproveTransaction) { - toFormatted = scheduledTransactionAddress; - unit = scheduledTokenTransferSymbol; - } else { - toFormatted = toChecksumAddress(isToken ? ERC20.transfer.decodeInput(data)._to : to); - } - - return ( -
    -
    - {from && ( - - -
    -
    - {translate('CONFIRM_TX_FROM')}{' '} -
    -
    - {toChecksumAddress(from)} -
    -
    -
    - )} -
    - {(isToken || sendingTokenApproveTransaction) && ( -
    -
    - arrow -
    -
    -

    - {translate('CONFIRM_TX_VIA_CONTRACT', { - $unit: unit - })} -

    - - {toChecksumAddress(tokenAddress)} - -
    -
    - )} - {isSchedulingEnabled && ( -
    -
    - arrow -
    -
    -

    - {translate('CONFIRM_TX_VIA_CONTRACT', { - $unit: 'SCHEDULER' - })} -

    - - {toChecksumAddress(schedulerAddress)} - -
    -
    - )} -
    - {to && ( - - -
    -
    - {translate('CONFIRM_TX_TO')}{' '} - {sendingTokenApproveTransaction && - `(${translateRaw('SCHEDULE_TOKEN_TRANSFER_SCHEDULED_TX')})`} -
    -
    {toFormatted}
    -
    -
    - )} -
    -
    - ); - }} - /> - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => ({ - from: selectors.getFrom(state), - isToken: !selectors.isEtherTransaction(state), - unit: selectors.getUnit(state), - toChecksumAddress: configSelectors.getChecksumAddressFn(state), - isSchedulingEnabled: scheduleSelectors.isSchedulingEnabled(state), - sendingTokenApproveTransaction: scheduleSelectors.getSendingTokenApproveTransaction(state), - scheduledTransactionAddress: scheduleSelectors.getScheduledTransactionAddress(state), - scheduledTokenTransferSymbol: scheduleSelectors.getScheduledTokenTransferSymbol(state) -}); - -export const Addresses = connect(mapStateToProps)(AddressesClass); diff --git a/common/components/ConfirmationModal/components/Body/components/Amounts.scss b/common/components/ConfirmationModal/components/Body/components/Amounts.scss deleted file mode 100644 index bed66ba19..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Amounts.scss +++ /dev/null @@ -1,52 +0,0 @@ -@import 'common/sass/variables'; - -.tx-modal-amount { - width: inherit; - border-collapse: separate; - padding-top: 1rem; - padding-bottom: 0; - &-send, - &-fee, - &-total { - font-size: 1.15rem; - @media screen and (max-width: 525px) { - font-size: 1rem; - } - - > td { - padding: 0.5rem 0; - text-align: right; - color: shade-dark(0.5); - - &:not(:first-child) { - padding-left: 0.5rem; - } - - &:first-child { - text-align: left; - color: color(text-color); - } - - &:last-child { - font-size: 85%; - } - } - } - - &-fee { - > td { - padding-bottom: 1rem; - } - } - - &-total { - background-image: linear-gradient(to right, color(control-border) 33%, transparent 0%); - background-position: top; - background-size: 5px 1px; - background-repeat: repeat-x; - > td { - padding-top: 1rem; - padding-bottom: 1.5rem; - } - } -} diff --git a/common/components/ConfirmationModal/components/Body/components/Amounts.tsx b/common/components/ConfirmationModal/components/Body/components/Amounts.tsx deleted file mode 100644 index edfbc8666..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Amounts.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import * as derivedSelectors from 'features/selectors'; -import { configSelectors } from 'features/config'; -import { transactionSignTypes } from 'features/transaction'; -import { UnitDisplay } from 'components/ui'; -import './Amounts.scss'; - -interface StateProps - extends transactionSignTypes.SerializedTxParams, - derivedSelectors.AllUSDValues { - network: NetworkConfig; -} - -class AmountsClass extends Component { - public render() { - const { - unit, - decimal, - feeUSD, - totalUSD, - valueUSD, - isToken, - currentValue, - fee, - total, - network - } = this.props; - const showConversion = valueUSD && totalUSD && feeUSD; - - return ( - - - - - - {showConversion && ( - - )} - - - - - {showConversion && ( - - )} - - {!isToken && ( - - - - {showConversion && ( - - )} - - )} - -
    {translate('CONFIRM_TX_SENDING')} - - - $ - -
    {translate('CONFIRM_TX_FEE')} - - - $ - -
    {translate('CONFIRM_TX_TOTAL')} - - - $ - -
    - ); - } -} - -const mapStateToProps = (state: AppState): StateProps => ({ - ...derivedSelectors.getParamsFromSerializedTx(state), - ...derivedSelectors.getAllUSDValuesFromSerializedTx(state), - network: configSelectors.getNetworkConfig(state) -}); - -export const Amounts = connect(mapStateToProps)(AmountsClass); diff --git a/common/components/ConfirmationModal/components/Body/components/Details.scss b/common/components/ConfirmationModal/components/Body/components/Details.scss deleted file mode 100644 index fce1bc323..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Details.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import 'common/sass/variables'; - -.tx-modal-details { - margin-top: 1rem; - &-network-info { - text-align: center; - font-weight: 400; - color: shade-dark(0.5); - } - &-button { - display: block; - margin: auto; - padding: 8px 32px; - border: none; - border-radius: 2px; - transition: background-color 300ms; - background-color: transparent; - &:hover { - background-color: shade-dark(0.06); - } - } -} diff --git a/common/components/ConfirmationModal/components/Body/components/Details.tsx b/common/components/ConfirmationModal/components/Body/components/Details.tsx deleted file mode 100644 index 08df81c97..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Details.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { addHexPrefix } from 'ethereumjs-util'; - -import translate, { translateRaw } from 'translations'; -import { NodeConfig } from 'types/node'; -import { CodeBlock, Input } from 'components/ui'; -import { AppState } from 'features/reducers'; -import { configNodesSelectors } from 'features/config'; -import { SerializedTransaction } from 'components/renderCbs'; -import './Details.scss'; - -interface StateProps { - node: NodeConfig; -} - -class DetailsClass extends Component { - public render() { - const { - node: { network, service } - } = this.props; - return ( -
    - - - { - return ( - - - - - ); - }} - /> -
    - ); - } -} - -const mapStateToProps = (state: AppState) => ({ node: configNodesSelectors.getNodeConfig(state) }); - -export const Details = connect(mapStateToProps)(DetailsClass); diff --git a/common/components/ConfirmationModal/components/Body/components/Node.tsx b/common/components/ConfirmationModal/components/Body/components/Node.tsx deleted file mode 100644 index a902c3ef7..000000000 --- a/common/components/ConfirmationModal/components/Body/components/Node.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { StaticNodeConfig } from 'types/node'; -import { AppState } from 'features/reducers'; -import { configNodesSelectors } from 'features/config'; - -interface StateProps { - node: StaticNodeConfig; -} - -class NodeClass extends Component { - public render() { - return ( -
  • - {translate('YOU_ARE_INTERACTING', { - $network: this.props.node.network - })} - {translate('PROVIDED_BY', { $service: this.props.node.service })} -
  • - ); - } -} - -export const Node = connect((state: AppState) => ({ - node: configNodesSelectors.getNodeConfig(state) -}))(NodeClass); diff --git a/common/components/ConfirmationModal/components/Body/index.ts b/common/components/ConfirmationModal/components/Body/index.ts deleted file mode 100644 index 0b63ac835..000000000 --- a/common/components/ConfirmationModal/components/Body/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Body'; diff --git a/common/components/ConfirmationModal/components/index.ts b/common/components/ConfirmationModal/components/index.ts deleted file mode 100644 index 0b63ac835..000000000 --- a/common/components/ConfirmationModal/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './Body'; diff --git a/common/components/ConfirmationModal/index.ts b/common/components/ConfirmationModal/index.ts deleted file mode 100644 index 828239d50..000000000 --- a/common/components/ConfirmationModal/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ConfirmationModal'; diff --git a/common/components/ConfirmationModalTemplate/ConfirmationModalTemplate.scss b/common/components/ConfirmationModalTemplate/ConfirmationModalTemplate.scss deleted file mode 100644 index e40bc7a1e..000000000 --- a/common/components/ConfirmationModalTemplate/ConfirmationModalTemplate.scss +++ /dev/null @@ -1,76 +0,0 @@ -@import "common/sass/variables"; - -$summary-height: 54px; -$button-break: 'max-width: 620px'; - -.ConfModal { - min-width: 580px; - - @media (#{$button-break}) { - min-width: 0; - } - - &-summary { - display: flex; - margin-bottom: 30px; - - &-icon { - height: $summary-height; - width: $summary-height; - margin: 0 30px; - } - - &-amount { - flex-grow: 1; - text-align: center; - line-height: $summary-height / 2; - - &-arrow { - display: inline-block; - height: $summary-height / 3; - width: 100%; - background-image: url('~assets/images/icon-dot-arrow.svg'); - background-size: auto 100%; - background-repeat: no-repeat; - background-position: center; - } - - &-currency { - color: color(brand-danger); - } - } - } - - &-details { - padding-left: 30px; - margin-bottom: 20px; - } - - &-confirm { - text-align: center; - font-weight: bold; - font-size: $font-size-medium-bump; - } - - &-loading { - text-align: center; - font-size: $font-size-medium-bump - } - -} - -// Modal overrides for extra long buttons -@media (#{$button-break}) { - .ConfModalWrap { - .Modal-footer-btn { - display: block; - float: none; - width: 100%; - margin: 0 0 5px; - - &:last-child { - margin: 0; - } - } - } -} diff --git a/common/components/ConfirmationModalTemplate/ConfirmationModalTemplate.tsx b/common/components/ConfirmationModalTemplate/ConfirmationModalTemplate.tsx deleted file mode 100644 index a8f05be18..000000000 --- a/common/components/ConfirmationModalTemplate/ConfirmationModalTemplate.tsx +++ /dev/null @@ -1,141 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { translateRaw, translate } from 'translations'; -import { AppState } from 'features/reducers'; -import { configMetaSelectors } from 'features/config'; -import { transactionBroadcastActions, transactionSelectors } from 'features/transaction'; -import { walletSelectors } from 'features/wallet'; -import Modal, { IButton } from 'components/ui/Modal'; -import Spinner from 'components/ui/Spinner'; -import './ConfirmationModalTemplate.scss'; - -interface DispatchProps { - broadcastLocalTransactionRequested: transactionBroadcastActions.TBroadcastLocalTransactionRequested; - broadcastWeb3TransactionRequested: transactionBroadcastActions.TBroadcastWeb3TransactionRequested; -} - -interface StateProps { - lang: string; - walletTypes: walletSelectors.IWalletType; - transactionBroadcasting: boolean; -} - -export interface ConfirmButtonCBProps { - type: IButton['type']; - timeLocked: boolean; - timeLeft: number; - timePrefix: string; - defaultText: string; - onConfirm: ConfirmationModalTemplateClass['confirm']; -} - -export interface OwnProps { - isOpen?: boolean; - Body: React.ReactElement; - withConfirmButton?(props: ConfirmButtonCBProps): IButton; - onClose(): void; -} - -interface State { - timeToRead: number; -} - -type Props = DispatchProps & StateProps & OwnProps; - -class ConfirmationModalTemplateClass extends React.Component { - private readTimer = 0; - public constructor(props: Props) { - super(props); - this.state = { - timeToRead: 5 - }; - } - - // Count down 5 seconds before allowing them to confirm - public componentDidMount() { - this.readTimer = window.setInterval(() => { - if (this.state.timeToRead > 0) { - this.setState({ timeToRead: this.state.timeToRead - 1 }); - } else { - window.clearInterval(this.readTimer); - } - }, 1000); - } - - public render() { - const { onClose, transactionBroadcasting, isOpen } = this.props; - const { timeToRead } = this.state; - const buttonPrefix = timeToRead > 0 ? `(${timeToRead}) ` : ''; - const defaultConfirmButton = { - text: buttonPrefix + translateRaw('ACTION_11'), - type: 'primary' as IButton['type'], - disabled: timeToRead > 0, - onClick: this.confirm - }; - - const confirmButton: IButton = this.props.withConfirmButton - ? this.props.withConfirmButton({ - onConfirm: defaultConfirmButton.onClick, - timeLeft: timeToRead, - timePrefix: buttonPrefix, - timeLocked: defaultConfirmButton.disabled, - defaultText: translateRaw('ACTION_11'), - type: defaultConfirmButton.type - }) - : defaultConfirmButton; - - const buttons: IButton[] = [ - confirmButton, - { - text: translate('ACTION_2'), - type: 'default', - onClick: onClose - } - ]; - - return ( - - {transactionBroadcasting ? ( - - - - ) : ( - {this.props.Body} - )} - - ); - } - - public componentWillUnmount() { - window.clearInterval(this.readTimer); - } - - private confirm = () => { - if (this.state.timeToRead < 1) { - this.props.walletTypes.isWeb3Wallet - ? this.props.broadcastWeb3TransactionRequested() - : this.props.broadcastLocalTransactionRequested(); - } - }; -} - -export const ConfirmationModalTemplate = connect( - (state: AppState) => ({ - transactionBroadcasting: transactionSelectors.currentTransactionBroadcasting(state), - lang: configMetaSelectors.getLanguageSelection(state), - walletTypes: walletSelectors.getWalletType(state) - }), - { - broadcastLocalTransactionRequested: - transactionBroadcastActions.broadcastLocalTransactionRequested, - broadcastWeb3TransactionRequested: transactionBroadcastActions.broadcastWeb3TransactionRequested - } -)(ConfirmationModalTemplateClass); diff --git a/common/components/ConfirmationModalTemplate/index.ts b/common/components/ConfirmationModalTemplate/index.ts deleted file mode 100644 index 9d0695e06..000000000 --- a/common/components/ConfirmationModalTemplate/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ConfirmationModalTemplate'; diff --git a/common/components/CurrentCustomMessage.tsx b/common/components/CurrentCustomMessage.tsx deleted file mode 100644 index 5c8649155..000000000 --- a/common/components/CurrentCustomMessage.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; - -import { getAddressMessage } from 'config'; -import { Token } from 'types/network'; -import { ICurrentTo } from 'features/types'; -import { AppState } from 'features/reducers'; -import * as derivedSelectors from 'features/selectors'; -import { configSelectors } from 'features/config'; -import { walletSelectors } from 'features/wallet'; -import { Address } from 'components/ui'; - -interface ReduxProps { - currentTo: ICurrentTo; - tokens: Token[]; - wallet: AppState['wallet']['inst']; -} - -type Props = ReduxProps; - -interface State { - walletAddress: string | null; -} - -class CurrentCustomMessageClass extends PureComponent { - public state: State = { - walletAddress: null - }; - - public async componentDidMount() { - this.setAddressState(this.props); - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.wallet !== nextProps.wallet) { - this.setAddressState(nextProps); - } - } - - public render() { - const message = this.getMessage(); - if (message) { - return ( -
    -
    {message.message}
    -
    - ); - } else { - return null; - } - } - - private setAddressState(props: Props) { - if (props.wallet) { - const walletAddress = props.wallet.getAddressString(); - this.setState({ walletAddress }); - } else { - this.setState({ walletAddress: '' }); - } - } - - private getMessage() { - const { currentTo, tokens } = this.props; - const { walletAddress } = this.state; - // Make sure all comparisons are lower-cased. - const address = currentTo.raw.toLowerCase(); - - let message; - let severity; - - // First check against our hard-coded messages - const msg = getAddressMessage(address); - if (msg) { - message = ( - -

    - - A message regarding{' '} - -

    - - : - -

    -

    {msg.msg}

    - - ); - severity = msg.severity || 'info'; - } - - // Otherwise check if any of our tokens match the address - if (!message) { - const token = tokens.find(tk => tk.address.toLowerCase() === address); - if (token) { - message = ` - You’re currently sending to the ${token.symbol} contract. If you - wanted to send ${token.symbol} to an address, change the To Address to - where you want it to go, make sure you have a positive ${token.symbol} - balance in your wallet, and select it from the dropdown next to the - Amount field. - `; - severity = 'warning'; - } - } - - // Finally check if they're sending to themselves (lol) - if (walletAddress === address) { - message = 'You’re sending to yourself. Are you sure you want to do that?'; - severity = 'warning'; - } - - if (message) { - return { - message, - severity - }; - } - } -} - -export const CurrentCustomMessage = connect( - (state: AppState): ReduxProps => ({ - currentTo: derivedSelectors.getCurrentTo(state), - tokens: configSelectors.getAllTokens(state), - wallet: walletSelectors.getWalletInst(state) - }) -)(CurrentCustomMessageClass); diff --git a/common/components/CustomNodeModal/CustomNodeModal.scss b/common/components/CustomNodeModal/CustomNodeModal.scss deleted file mode 100644 index 25c061812..000000000 --- a/common/components/CustomNodeModal/CustomNodeModal.scss +++ /dev/null @@ -1,15 +0,0 @@ -.CustomNodeModal { - .flex-wrapper { - margin: 0px -8px; - > .input-group { - margin: 0px 8px; - > .input-group-input { - width: 100%; - } - } - } - input[type='checkbox'] { - margin-right: 1rem; - margin-bottom: 1rem; - } -} diff --git a/common/components/CustomNodeModal/CustomNodeModal.tsx b/common/components/CustomNodeModal/CustomNodeModal.tsx deleted file mode 100644 index 2302a8cac..000000000 --- a/common/components/CustomNodeModal/CustomNodeModal.tsx +++ /dev/null @@ -1,463 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { exists, SuccessConfig, FailConfig } from 'mycrypto-eth-exists'; - -import translate, { translateRaw } from 'translations'; -import { CustomNetworkConfig } from 'types/network'; -import { CustomNodeConfig } from 'types/node'; -import { AppState } from 'features/reducers'; -import { - configNodesCustomSelectors, - configNetworksStaticSelectors, - configNetworksCustomSelectors, - configNetworksCustomActions, - configNodesCustomTypes -} from 'features/config'; -import { Input, Dropdown } from 'components/ui'; -import Modal, { IButton } from 'components/ui/Modal'; -import './CustomNodeModal.scss'; - -const CUSTOM = { label: 'Custom', value: 'custom' }; - -interface OwnProps { - isOpen: boolean; - addCustomNode(payload: configNodesCustomTypes.AddCustomNodeAction['payload']): void; - handleClose(): void; -} - -interface DispatchProps { - addCustomNetwork: configNetworksCustomActions.TAddCustomNetwork; -} - -interface StateProps { - customNodes: AppState['config']['nodes']['customNodes']; - customNetworks: AppState['config']['networks']['customNetworks']; - staticNetworks: AppState['config']['networks']['staticNetworks']; -} - -interface State { - name: string; - url: string; - network: string; - customNetworkId: string; - customNetworkUnit: string; - customNetworkChainId: string; - hasAuth: boolean; - username: string; - password: string; - defaultNodes: ((SuccessConfig | FailConfig) & { display: string; index: number })[]; -} - -type Props = OwnProps & StateProps & DispatchProps; - -class CustomNodeModal extends React.Component { - public INITIAL_STATE: State = { - name: '', - url: '', - network: Object.keys(this.props.staticNetworks)[0], - customNetworkId: '', - customNetworkUnit: '', - customNetworkChainId: '', - hasAuth: false, - username: '', - password: '', - defaultNodes: [] - }; - - public state: State = this.INITIAL_STATE; - - private timer: number | null; - - constructor(props: Props) { - super(props); - this.pollForDefaultNodes(); - } - - public componentDidUpdate(prevProps: Props) { - // Reset state when modal opens - if (!prevProps.isOpen && prevProps.isOpen !== this.props.isOpen) { - this.setState(this.INITIAL_STATE); - } - } - - public componentWillUnmount() { - if (this.timer) { - window.clearInterval(this.timer); - } - this.timer = null; - } - - public render() { - const { customNetworks, handleClose, staticNetworks, isOpen } = this.props; - const { network, customNetworkChainId } = this.state; - const isHttps = window.location.protocol.includes('https'); - const invalids = this.getInvalids(); - - const buttons: IButton[] = [ - { - type: 'primary', - text: translate('NODE_CTA'), - onClick: this.saveAndAdd, - disabled: !!Object.keys(invalids).length - }, - { - type: 'default', - text: translate('ACTION_2'), - onClick: handleClose - } - ]; - - const nameConflictNode = this.getNameConflictNode(); - const chainidConflictNetwork = - network === CUSTOM.value && this.getChainIdCollisionNetwork(customNetworkChainId); - - const staticNetwrks = Object.keys(staticNetworks).map(net => { - return { label: net, value: net }; - }); - const customNetwrks = Object.entries(customNetworks).map(([id, net]) => { - return { label: net.name + ' (Custom)', value: id }; - }); - const options = [...staticNetwrks, ...customNetwrks, CUSTOM]; - return ( - - {isHttps &&
    {translate('NODE_WARNING')}
    } - - {nameConflictNode && ( -
    - {translate('CUSTOM_NODE_NAME_CONFLICT', { $node: nameConflictNode.name })} -
    - )} - - {this.renderDefaultNodeDropdown()} - -
    -
    - - -
    - - {network === CUSTOM.value && ( -
    - - - -
    - )} - {chainidConflictNetwork && ( -
    - {translate('CUSTOM_NODE_CHAINID_CONFLICT', { $network: chainidConflictNetwork.name })} -
    - )} - - - - - - {this.state.hasAuth && ( -
    - - -
    - )} -
    -
    - ); - } - - private pollForDefaultNodes() { - return null; - // @ts-ignore - const pollingInterval = 3000; - // console.warning in production to explain to users why we are making a call to localhost - console.warn( - "Don't panic! MyCrypto is going to start a poll for default nodes on port 8545. If you don't like this feature, send us a ping at support@mycrypto.com and we'll walk you through disabling it." - ); - this.timer = window.setInterval(async () => { - const results = await exists( - [ - // tslint:disable-next-line:no-http-string - { type: 'http', addr: 'http://localhost', port: 8545, timeout: 3000 } - ], - { includeDefaults: false } - ); - if (!this.timer) { - return; - } - this.setState({ - defaultNodes: results - .filter(r => r.success) - .map((r, index) => ({ - ...r, - display: `${r.addr}:${r.port}`, - index - })) - }); - }, pollingInterval); - } - - private renderDefaultNodeDropdown() { - const { defaultNodes } = this.state; - if (!defaultNodes.length) { - return null; - } - - return ( - - ); - } - - private getInvalids(): { [key: string]: boolean } { - const { - url, - hasAuth, - username, - password, - network, - customNetworkId, - customNetworkUnit, - customNetworkChainId - } = this.state; - const required: (keyof State)[] = ['name', 'url', 'network']; - const invalids: { [key: string]: boolean } = {}; - - // Required fields - required.forEach(field => { - if (!this.state[field]) { - invalids[field] = true; - } - }); - - // Parse the URL, and make sure what they typed isn't parsed as relative. - // Not a perfect regex, just checks for protocol + any char - if (!/^https?:\/\/.+/i.test(url)) { - invalids.url = true; - } - - // If they have auth, make sure it's provided - if (hasAuth) { - if (!username) { - invalids.username = true; - } - if (!password) { - invalids.password = true; - } - } - - // If they have a custom network, make sure info is provided - if (network === CUSTOM.value) { - if (!customNetworkId) { - invalids.customNetworkId = true; - } - if (!customNetworkUnit) { - invalids.customNetworkUnit = true; - } - - // Numeric chain ID - if (this.getChainIdCollisionNetwork(customNetworkChainId)) { - invalids.customNetworkChainId = true; - } else { - const iChainId = parseInt(customNetworkChainId, 10); - if (!customNetworkChainId || !iChainId || iChainId < 0) { - invalids.customNetworkChainId = true; - } - } - } - - return invalids; - } - - private getChainIdCollisionNetwork(chainId: string) { - if (!chainId) { - return false; - } - - const chainIdInt = parseInt(chainId, 10); - const allNetworks = [ - ...Object.values(this.props.staticNetworks), - ...Object.values(this.props.customNetworks) - ]; - return allNetworks.reduce( - (collision, network) => (network.chainId === chainIdInt ? network : collision), - null - ); - } - - private makeCustomNetworkConfigFromState(): CustomNetworkConfig { - const similarNetworkConfig = Object.values(this.props.staticNetworks).find( - n => n.chainId === +this.state.customNetworkChainId - ); - const dPathFormats = similarNetworkConfig ? similarNetworkConfig.dPathFormats : null; - - return { - isCustom: true, - id: this.state.customNetworkChainId, - name: this.state.customNetworkId, - unit: this.state.customNetworkUnit, - chainId: parseInt(this.state.customNetworkChainId, 10), - dPathFormats - }; - } - - private makeCustomNodeConfigFromState(): CustomNodeConfig { - const { network, url, name, username, password } = this.state; - - const networkId = - network === CUSTOM.value - ? this.makeCustomNetworkId(this.makeCustomNetworkConfigFromState()) - : network; - - return { - isCustom: true, - service: 'your custom node', - id: url, - name: name.trim(), - url, - network: networkId, - ...(this.state.hasAuth - ? { - auth: { - username, - password - } - } - : {}) - }; - } - - private getNameConflictNode(): CustomNodeConfig | undefined { - const { customNodes } = this.props; - const config = this.makeCustomNodeConfigFromState(); - - return customNodes[config.id]; - } - - private saveAndAdd = () => { - const node = this.makeCustomNodeConfigFromState(); - - if (this.state.network === CUSTOM.value) { - const network = this.makeCustomNetworkConfigFromState(); - - this.props.addCustomNetwork(network); - } - - this.props.addCustomNode(node); - }; - - private makeCustomNetworkId(config: CustomNetworkConfig): string { - return config.chainId.toString(); - } -} - -const mapStateToProps = (state: AppState): StateProps => ({ - customNetworks: configNetworksCustomSelectors.getCustomNetworkConfigs(state), - customNodes: configNodesCustomSelectors.getCustomNodeConfigs(state), - staticNetworks: configNetworksStaticSelectors.getStaticNetworkConfigs(state) -}); - -const mapDispatchToProps: DispatchProps = { - addCustomNetwork: configNetworksCustomActions.addCustomNetwork -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(CustomNodeModal); diff --git a/common/components/CustomNodeModal/index.ts b/common/components/CustomNodeModal/index.ts deleted file mode 100644 index b5a31825b..000000000 --- a/common/components/CustomNodeModal/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -import CustomNodeModal from './CustomNodeModal'; -export default CustomNodeModal; diff --git a/common/components/DataField.tsx b/common/components/DataField.tsx deleted file mode 100644 index f45f8c892..000000000 --- a/common/components/DataField.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; - -import { donationAddressMap } from 'config'; -import translate from 'translations'; -import { Input } from 'components/ui'; -import { DataFieldFactory } from './DataFieldFactory'; - -export const DataField: React.SFC<{}> = () => ( - ( -
    - -
    - )} - /> -); diff --git a/common/components/DataFieldFactory/DataFieldFactory.tsx b/common/components/DataFieldFactory/DataFieldFactory.tsx deleted file mode 100644 index 32a71cb79..000000000 --- a/common/components/DataFieldFactory/DataFieldFactory.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { transactionFieldsActions } from 'features/transaction'; -import { Query } from 'components/renderCbs'; -import { DataInput } from './DataInputFactory'; - -export interface CallBackProps { - data: AppState['transaction']['fields']['data']; - validData: boolean; - readOnly: boolean; - onChange(ev: React.FormEvent): void; -} -interface DispatchProps { - isEtherTransaction: boolean; - inputData: transactionFieldsActions.TInputData; -} -interface OwnProps { - data: string | null; - withProps(props: CallBackProps): React.ReactElement | null; -} -interface StateProps { - isEtherTransaction: boolean; -} - -type Props = DispatchProps & OwnProps & StateProps; - -class DataFieldClass extends React.Component { - public componentDidMount() { - const { data } = this.props; - if (data) { - this.props.inputData(data); - } - } - - public render() { - return this.props.isEtherTransaction ? ( - - ) : null; - } - - private setData = (ev: React.FormEvent) => { - const { value } = ev.currentTarget; - this.props.inputData(value); - }; -} - -const DataField = connect( - (state: AppState) => ({ isEtherTransaction: selectors.isEtherTransaction(state) }), - { inputData: transactionFieldsActions.inputData } -)(DataFieldClass); - -interface DefaultDataFieldProps { - withProps(props: CallBackProps): React.ReactElement | null; -} -const DefaultDataField: React.SFC = ({ withProps }) => ( - /* TODO: check query param of tokens too */ - - } - /> -); - -export { DefaultDataField as DataFieldFactory }; diff --git a/common/components/DataFieldFactory/DataInputFactory.tsx b/common/components/DataFieldFactory/DataInputFactory.tsx deleted file mode 100644 index 4e2c4b80d..000000000 --- a/common/components/DataFieldFactory/DataInputFactory.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { isHexString } from 'ethereumjs-util'; - -import { AppState } from 'features/reducers'; -import { transactionFieldsSelectors } from 'features/transaction'; -import { CallBackProps } from 'components/DataFieldFactory'; -import { Query } from 'components/renderCbs'; - -interface OwnProps { - withProps(props: CallBackProps): React.ReactElement | null; - onChange(ev: React.FormEvent): void; -} -interface StateProps { - data: AppState['transaction']['fields']['data']; - validData: boolean; -} - -type Props = OwnProps & StateProps; - -class DataInputClass extends Component { - public render() { - const { data, onChange, validData } = this.props; - return ( - - this.props.withProps({ data, onChange, readOnly: !!readOnly, validData }) - } - /> - ); - } -} - -export const DataInput = connect((state: AppState) => ({ - data: transactionFieldsSelectors.getData(state), - validData: - transactionFieldsSelectors.getData(state).raw === '' || - isHexString(transactionFieldsSelectors.getData(state).raw) -}))(DataInputClass); diff --git a/common/components/DataFieldFactory/index.ts b/common/components/DataFieldFactory/index.ts deleted file mode 100644 index 7826ddbf3..000000000 --- a/common/components/DataFieldFactory/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './DataFieldFactory'; diff --git a/common/components/ElectronNav/ElectronNav.scss b/common/components/ElectronNav/ElectronNav.scss deleted file mode 100644 index f41699549..000000000 --- a/common/components/ElectronNav/ElectronNav.scss +++ /dev/null @@ -1,167 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -// Prefer pixels of rem in this file, Electron shouldn't be responsive in the -// same way the content is. -$branding-spacing-top: 12px; -$back-spacing: 10px; - -.ElectronNav { - transition: transform 300ms ease; - - &.is-panel-open { - transform: translateX(-100%); - } - - &-branding { - position: -webkit-sticky; - position: sticky; - top: 0; - padding-top: $branding-spacing-top; - background: color(control-bg); - z-index: 1; - border-bottom: 1px solid shade-dark(0.1); - - .is-osx & { - padding-top: $electron-osx-control-spacing + $branding-spacing-top - 5; - } - - &-logo { - margin-left: -1px; - height: 35px; - margin-bottom: 10px; - background-image: url('~assets/images/logo-mycrypto-transparent.svg'); - background-position: center; - background-repeat: no-repeat; - background-size: auto 100%; - cursor: pointer; - - @include theme(dark) { - background-image: url('~assets/images/logo-mycrypto.svg'); - } - - &:hover { - opacity: 0.8; - } - } - - &-beta { - text-align: center; - letter-spacing: 4px; - height: 20px; - line-height: 20px; - color: color(text-color-inverted); - background: color(brand-info); - text-transform: uppercase; - font-size: 8px; - opacity: 0.8; - pointer-events: none; - - @include theme(dark) { - opacity: 1; - } - } - } - - &-links { - padding: 0; - margin: 0 auto; - } - - &-status { - margin: 12px 0; - padding-left: 10px; - } - - &-controls { - margin: 10px 0; - padding: 0 10px; - - &-btn { - @include reset-button; - display: flex; - align-items: center; - width: 100%; - color: shade-dark(0.5); - font-size: 12px; - padding: 6px 0; - - &-icon { - font-size: 11px; - margin-left: 4px; - } - - &:hover { - color: shade-dark(0.7); - } - } - } - - &-panel { - position: absolute; - top: 0; - left: 100%; - width: 100%; - z-index: $zindex-navbar - 1; - - &-back { - @include reset-button; - position: sticky; - top: 0; - display: flex; - align-items: center; - width: 100%; - text-align: left; - padding: $back-spacing 0 8px $back-spacing; - color: shade-dark(0.2); - border-bottom: 1px solid shade-dark(0.05); - background: color(control-bg); - - .is-osx & { - padding-top: $electron-osx-control-spacing + $back-spacing; - } - - &-icon { - font-size: 12px; - margin-right: 4px; - } - - &:hover { - color: color(brand-primary); - } - } - } -} - -// Styling for common/components/NavigationLink, with custom classname -.ElectronNavLink { - display: block; - margin: 0; - @include ellipsis; - - &-link { - display: block; - height: 48px; - line-height: 48px; - padding: 0 0 0 10px; - border-bottom: 1px solid shade-dark(0.08); - color: color(text-color); - font-size: 14px; - font-weight: normal; - - &.is-active { - color: color(link-color); - background: shade-dark(0.03); - } - - &:hover { - color: color(link-hover-color); - } - - &-icon { - font-size: 12px; - margin-left: 3px; - opacity: 0.8; - } - } -} diff --git a/common/components/ElectronNav/ElectronNav.tsx b/common/components/ElectronNav/ElectronNav.tsx deleted file mode 100644 index 36bb7baa9..000000000 --- a/common/components/ElectronNav/ElectronNav.tsx +++ /dev/null @@ -1,130 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import classnames from 'classnames'; -import translate from 'translations'; -import { navigationLinks, Theme } from 'config'; -import NavigationLink from 'components/NavigationLink'; -import NetworkSelect from './NetworkSelect'; -import LanguageSelect from './LanguageSelect'; -import NetworkStatus from './NetworkStatus'; -import { configMetaActions, configMetaSelectors } from 'features/config'; -import { AppState } from 'features/reducers'; -import './ElectronNav.scss'; - -interface StateProps { - theme: ReturnType; -} - -interface ActionProps { - changeTheme: typeof configMetaActions.changeTheme; -} - -type Props = StateProps & ActionProps; - -interface State { - panelContent: React.ReactElement | null; - isPanelOpen: boolean; -} - -class ElectronNav extends React.Component { - public state: State = { - panelContent: null, - isPanelOpen: false - }; - - public render() { - const { panelContent, isPanelOpen } = this.state; - - return ( -
    -
    -
    -
    - -
      - {navigationLinks.map(link => ( - - ))} -
    - -
    - - -
    - -
    - -
    - -
    - -
    {panelContent}
    -
    -
    - ); - } - - private openLanguageSelect = () => { - const panelContent = ; - this.setState({ - panelContent, - isPanelOpen: true - }); - }; - - private openNodeSelect = () => { - const panelContent = ; - this.setState({ - panelContent, - isPanelOpen: true - }); - }; - - private closePanel = () => { - const { panelContent } = this.state; - - // Start closing panel - this.setState({ isPanelOpen: false }); - - // Remove content when out of sight - setTimeout(() => { - if (this.state.panelContent === panelContent) { - this.setState({ panelContent: null }); - } - }, 300); - }; - - private toggleTheme = () => { - const theme = this.props.theme === Theme.LIGHT ? Theme.DARK : Theme.LIGHT; - this.props.changeTheme(theme); - }; -} - -export default connect( - (state: AppState) => ({ - theme: configMetaSelectors.getTheme(state) - }), - { - changeTheme: configMetaActions.changeTheme - } -)(ElectronNav); diff --git a/common/components/ElectronNav/LanguageSelect.scss b/common/components/ElectronNav/LanguageSelect.scss deleted file mode 100644 index 0180784a4..000000000 --- a/common/components/ElectronNav/LanguageSelect.scss +++ /dev/null @@ -1,25 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.LanguageSelect { - &-language { - @include reset-button; - display: block; - width: 100%; - height: 48px; - line-height: 48px; - padding: 0 10px; - color: color(text-color); - border-bottom: 1px solid color(gray-lighter); - text-align: left; - - &:hover { - color: color(link-hover-color); - } - - &.is-selected { - color: color(link-color); - background: color(gray-lightest); - } - } -} diff --git a/common/components/ElectronNav/LanguageSelect.tsx b/common/components/ElectronNav/LanguageSelect.tsx deleted file mode 100644 index 31a421111..000000000 --- a/common/components/ElectronNav/LanguageSelect.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; -import classnames from 'classnames'; -import { connect } from 'react-redux'; - -import { languages } from 'config'; -import { AppState } from 'features/reducers'; -import { configMetaActions, configMetaSelectors } from 'features/config'; -import './LanguageSelect.scss'; - -interface OwnProps { - closePanel(): void; -} - -interface StateProps { - languageSelection: string; -} - -interface DispatchProps { - changeLanguage: configMetaActions.TChangeLanguage; -} - -type Props = OwnProps & StateProps & DispatchProps; - -class LanguageSelect extends React.Component { - public render() { - const { languageSelection } = this.props; - return ( -
    - {Object.entries(languages).map(([code, lang]: [string, string]) => ( - - ))} -
    - ); - } - - private handleLanguageSelect = (lang: string) => { - this.props.changeLanguage(lang); - this.props.closePanel(); - }; -} - -export default connect( - (state: AppState): StateProps => ({ - languageSelection: configMetaSelectors.getLanguageSelection(state) - }), - { - changeLanguage: configMetaActions.changeLanguage - } -)(LanguageSelect); diff --git a/common/components/ElectronNav/NetworkSelect.tsx b/common/components/ElectronNav/NetworkSelect.tsx deleted file mode 100644 index dddc63d9b..000000000 --- a/common/components/ElectronNav/NetworkSelect.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { configNodesCustomTypes, configNodesCustomActions } from 'features/config'; -import NetworkSelector from 'components/NetworkSelector'; -import CustomNodeModal from 'components/CustomNodeModal'; - -interface OwnProps { - closePanel(): void; -} - -interface DispatchProps { - addCustomNode: configNodesCustomActions.TAddCustomNode; -} - -type Props = OwnProps & DispatchProps; - -interface State { - isAddingCustomNode: boolean; -} - -class NetworkSelect extends React.Component { - public state: State = { - isAddingCustomNode: false - }; - - public render() { - const { isAddingCustomNode } = this.state; - return ( - - - - - ); - } - - private openCustomNodeModal = () => { - this.setState({ isAddingCustomNode: true }); - }; - - private closeCustomNodeModal = () => { - this.setState({ isAddingCustomNode: false }); - }; - - private addCustomNode = (payload: configNodesCustomTypes.AddCustomNodeAction['payload']) => { - this.closeCustomNodeModal(); - this.props.addCustomNode(payload); - this.props.closePanel(); - }; -} - -export default connect( - undefined, - { addCustomNode: configNodesCustomActions.addCustomNode } -)(NetworkSelect); diff --git a/common/components/ElectronNav/NetworkStatus.scss b/common/components/ElectronNav/NetworkStatus.scss deleted file mode 100644 index 1721b4332..000000000 --- a/common/components/ElectronNav/NetworkStatus.scss +++ /dev/null @@ -1,30 +0,0 @@ -@import 'common/sass/variables'; - -.NetworkStatus { - display: flex; - align-items: center; - - &-icon { - width: 10px; - height: 10px; - margin-right: 4px; - border-radius: 100%; - - &.is-online { - background: color(brand-success); - } - - &.is-offline { - background: color(brand-danger); - } - - &.is-connecting { - background: color(brand-warning); - } - } - - &-text { - color: shade-dark(0.4); - font-size: 9px; - } -} diff --git a/common/components/ElectronNav/NetworkStatus.tsx b/common/components/ElectronNav/NetworkStatus.tsx deleted file mode 100644 index f765d1ec1..000000000 --- a/common/components/ElectronNav/NetworkStatus.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { - configMetaSelectors, - configSelectors, - configNodesSelectedSelectors -} from 'features/config'; -import './NetworkStatus.scss'; - -enum NETWORK_STATUS { - CONNECTING = 'NETWORK_STATUS_CONNECTING', - OFFLINE = 'NETWORK_STATUS_OFFLINE', - ONLINE = 'NETWORK_STATUS_ONLINE' -} - -interface StateProps { - network: NetworkConfig; - isOffline: boolean; - isChangingNode: boolean; -} - -const NetworkStatus: React.SFC = ({ isOffline, isChangingNode, network }) => { - let statusClass: string; - let statusText: string; - const $network = network.isCustom ? network.unit : network.name; - - if (isChangingNode) { - statusClass = 'is-connecting'; - statusText = NETWORK_STATUS.CONNECTING; - } else if (isOffline) { - statusClass = 'is-offline'; - statusText = NETWORK_STATUS.OFFLINE; - } else { - statusClass = 'is-online'; - statusText = NETWORK_STATUS.ONLINE; - } - - return ( -
    -
    -
    {translate(statusText, { $network })}
    -
    - ); -}; - -export default connect( - (state: AppState): StateProps => ({ - network: configSelectors.getNetworkConfig(state), - isOffline: configMetaSelectors.getOffline(state), - isChangingNode: configNodesSelectedSelectors.isNodeChanging(state) - }) -)(NetworkStatus); diff --git a/common/components/ElectronNav/index.tsx b/common/components/ElectronNav/index.tsx deleted file mode 100644 index 905b034e6..000000000 --- a/common/components/ElectronNav/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default } from './ElectronNav'; diff --git a/common/components/ErrorScreen/index.scss b/common/components/ErrorScreen/index.scss deleted file mode 100644 index 858df6611..000000000 --- a/common/components/ErrorScreen/index.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.ErrorScreen { - @include cover-message; - background: color(brand-danger); - - code { - display: block; - word-wrap: break-word; - background: rgba(#fff, 0.25); - border: 1px solid rgba(#fff, 0.6); - color: #FFF; - width: 100%; - padding: 10px; - border-radius: 2px; - text-shadow: none; - opacity: 0.8; - } -} diff --git a/common/components/ErrorScreen/index.tsx b/common/components/ErrorScreen/index.tsx deleted file mode 100644 index 52f3afaaa..000000000 --- a/common/components/ErrorScreen/index.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; - -import { NewTabLink } from 'components/ui'; -import './index.scss'; - -const SUBJECT = 'Error!'; -const DESCRIPTION = - 'I encountered an error while using MyCrypto. Here are the steps to re-create the issue:\n\nThe full error message:'; - -interface Props { - error: Error; -} - -const ErrorScreen: React.SFC = ({ error }) => { - return ( -
    -
    -

    Oops!

    -

    Something went really wrong, so we're showing you this red error page! 😱

    -

    - Please contact{' '} - - support@mycrypto.com - {' '} - if a refresh doesn't fix it (or click it anyway to open a ticket 😊). You can also submit - an issue on our{' '} - - GitHub Repository - - . Please attach the following error to help our team solve your issue. -

    - {error.message} -
    - Please make sure the error message does not include any sensitive information before - sending it to us. We don't want your private keys! -
    -
    -
    - ); -}; - -export default ErrorScreen; diff --git a/common/components/Errorable.tsx b/common/components/Errorable.tsx deleted file mode 100644 index 881170ec2..000000000 --- a/common/components/Errorable.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { notificationsActions } from 'features/notifications'; - -interface DispatchProps { - showNotification: notificationsActions.TShowNotification; -} - -interface OwnProps { - /** - * Optional custom error message to display when a error is caught, otherwise the - * actual error message is displayed to the user - */ - errorMessage?: string; - /** - * Optional should catch condition, if left undefined then the component will by default - * catch all errors, if false, then the component will not catch errors, if true, - * the component will catch errors - */ - shouldCatch?: boolean; - - /** - * Optional callback handler when an error is encountered and this component - * should catch it - */ - onError?(): void; -} - -type Props = DispatchProps & OwnProps; - -class ErrorBoundary extends React.Component { - public componentDidCatch(error: Error, info: any) { - console.error(error); - console.error(info); - const { errorMessage, onError, shouldCatch } = this.props; - - if (shouldCatch === false) { - throw error; - } - - this.props.showNotification('danger', errorMessage || error.message); - if (onError) { - onError(); - } - } - - public render() { - return this.props.children; - } -} - -export default connect( - null, - { showNotification: notificationsActions.showNotification } -)(ErrorBoundary); diff --git a/common/components/ExtendedNotifications/TransactionSucceeded.tsx b/common/components/ExtendedNotifications/TransactionSucceeded.tsx deleted file mode 100644 index 9cc515270..000000000 --- a/common/components/ExtendedNotifications/TransactionSucceeded.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react'; -import { Link } from 'react-router-dom'; - -import { etherChainExplorerInst } from 'config/data'; -import translate from 'translations'; -import { BlockExplorerConfig } from 'types/network'; -import { getAwaitingMiningURL } from 'libs/scheduling'; -import { NewTabLink } from 'components/ui'; - -export interface TransactionSucceededProps { - txHash: string; - blockExplorer?: BlockExplorerConfig; - scheduling?: boolean; -} - -const TransactionSucceeded = ({ txHash, blockExplorer, scheduling }: TransactionSucceededProps) => { - let verifyBtn: React.ReactElement | undefined; - let altVerifyBtn: React.ReactElement | undefined; - if (blockExplorer) { - verifyBtn = ( - - {translate('VERIFY_TX', { $block_explorer: blockExplorer.name })} - - ); - } - // TODO: In the future, we'll want to refactor staticNetworks so that multiple blockexplorers can be configured per network. - // This requires a large refactor, so for now we'll hard-code the etherchain link when etherscan is shown to verify your transaction - if (blockExplorer && blockExplorer.origin === 'https://etherscan.io') { - altVerifyBtn = ( - - {translate('VERIFY_TX', { $block_explorer: etherChainExplorerInst.name })} - - ); - } - - let scheduleDetailsBtn: React.ReactElement | undefined; - if (scheduling) { - scheduleDetailsBtn = ( - - {translate('SCHEDULE_CHECK')} - - ); - } - - return ( -
    -

    - {translate('SUCCESS_3')} {txHash} -

    - {scheduleDetailsBtn} - {verifyBtn} - {altVerifyBtn} - - {translate('NAV_CHECKTXSTATUS')} - -
    - ); -}; - -export default TransactionSucceeded; diff --git a/common/components/Footer/NewFooter/NewFooter.scss b/common/components/Footer/NewFooter/NewFooter.scss deleted file mode 100644 index 54b72576e..000000000 --- a/common/components/Footer/NewFooter/NewFooter.scss +++ /dev/null @@ -1,98 +0,0 @@ -@mixin perfectly-centered { - display: flex; - align-items: center; - justify-content: center; -} - -$footer-background: #163150; -$footer-text-color: #fff; - -.mobile-only { - display: block; - - @media (min-width: 800px) { - display: none; - } -} - -.tablet-only { - display: none; - - @media (min-width: 800px) { - display: block; - } - @media (min-width: 1050px) { - display: none; - } -} - -.desktop-only { - display: none; - - @media (min-width: 1050px) { - display: block; - } -} - -.HorizontalRule { - @include perfectly-centered; - - margin: 30px 0; - - &-line { - width: 150px; - height: 2px; - background: #3f546c; - } - - @media (min-width: 800px) { - display: none; - } -} - -.VerticalRule { - display: none; - margin: 0 20px; - - &-line { - width: 2px; - height: 220px; - background: #3f546c; - } - - @media (min-width: 800px) { - display: block; - } - @media (min-width: 1050px) { - margin: 0 30px; - } -} - -.NewFooter-wrapper { - display: flex; - align-items: center; - justify-content: center; - background: $footer-background; - border-top: 1px solid #3e546d; -} - -.NewFooter { - display: flex; - flex-direction: column; - min-width: 320px; - padding: 41px 33px; - background: $footer-background; - - &-socials-legal { - @media (min-width: 800px) { - display: none; - } - } - - @media (min-width: 800px) { - flex-direction: row; - } - @media (min-width: 1050px) { - padding-bottom: 0; - } -} diff --git a/common/components/Footer/NewFooter/NewFooter.tsx b/common/components/Footer/NewFooter/NewFooter.tsx deleted file mode 100644 index 8256f8bf8..000000000 --- a/common/components/Footer/NewFooter/NewFooter.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import React from 'react'; - -import { DonateAndSubscribe, Linkset, LogoBox, SocialsAndLegal } from './components'; -import './NewFooter.scss'; - -const HorizontalRule = () => ( -
    -
    -
    -); - -const VerticalRule = () => ( -
    -
    -
    -); - -const MobileFooter = () => ( -
    -
    - - - - - - -
    -
    -); - -const TabletFooter = () => ( -
    -
    - - -
    - - -
    -
    -
    -); - -const DesktopFooter = () => ( -
    -
    -
    - - - - - -
    -
    -
    -); - -export default function NewFooter() { - return ( - - - - - - ); -} diff --git a/common/components/Footer/NewFooter/components/DonateAndSubscribe.tsx b/common/components/Footer/NewFooter/components/DonateAndSubscribe.tsx deleted file mode 100644 index 09cdf8b37..000000000 --- a/common/components/Footer/NewFooter/components/DonateAndSubscribe.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import React, { Component } from 'react'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; -import classnames from 'classnames'; - -import { donationAddressMap } from 'config'; -import translate from 'translations'; -import ether from 'assets/images/ether.png'; -import bitcoin from 'assets/images/bitcoin.png'; -import Subscribe from './Subscribe'; -import './DonateAndSubscribe.scss'; - -interface DonationButtonProps { - icon: string; - title: string; -} - -function DonationButton({ icon, title, ...rest }: DonationButtonProps) { - return ( - - ); -} - -class Donate extends Component { - public state = { - displayingMessage: false - }; - - private timeout: NodeJS.Timer | null = null; - - public render() { - const { displayingMessage } = this.state; - const messageClassName = classnames({ - 'Donate-buttons-message': true, - visible: displayingMessage - }); - - return ( -
    -

    {translate('NEW_FOOTER_TEXT_1')}

    -
    - - - - - - -
    -

    - - {translate('NEW_FOOTER_TEXT_2')} -

    -
    - ); - } - - private displayMessage = () => { - clearTimeout(this.timeout as NodeJS.Timer); - - this.setState( - { - displayingMessage: true - }, - () => - (this.timeout = setTimeout( - () => - this.setState({ - displayingMessage: false - }), - 3000 - )) - ); - }; -} - -export default function DonateAndSubscribe() { - return ( -
    - - -
    - ); -} diff --git a/common/components/Footer/NewFooter/components/Linkset.scss b/common/components/Footer/NewFooter/components/Linkset.scss deleted file mode 100644 index 69fccac6f..000000000 --- a/common/components/Footer/NewFooter/components/Linkset.scss +++ /dev/null @@ -1,76 +0,0 @@ -@mixin no-margin-padding { - margin: 0; - padding: 0; -} - -@mixin heading { - font-family: Lato; - font-size: 16px; - font-weight: 500; - color: #fff; -} - -@mixin text { - font-family: Lato; - font-size: 14px; - font-weight: 300; - color: #bbc2cb; -} - -$spacing-sm: 8px; -$spacing-md: 32px; - -.Linkset { - display: flex; - flex-direction: column; - text-align: center; - margin-bottom: $spacing-md; - - &-column { - &:not(:last-child) { - margin-bottom: $spacing-md; - - @media (min-width: 800px) { - margin-right: $spacing-md; - margin-bottom: 0; - } - } - - h2 { - @include heading; - @include no-margin-padding; - - margin-bottom: $spacing-sm; - } - ul { - @include no-margin-padding; - - list-style-type: none; - margin: 0; - padding: 0; - - li { - @include no-margin-padding; - - margin-bottom: $spacing-sm; - - a { - @include text; - } - } - } - - @media (min-width: 1050px) { - padding: $spacing-md 0; - } - } - - @media (min-width: 800px) { - flex: 2; - flex-direction: row; - margin-bottom: 40px; - } - @media (min-width: 1050px) { - justify-content: space-evenly; - } -} diff --git a/common/components/Footer/NewFooter/components/Linkset.tsx b/common/components/Footer/NewFooter/components/Linkset.tsx deleted file mode 100644 index 16490f9ea..000000000 --- a/common/components/Footer/NewFooter/components/Linkset.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React from 'react'; - -import { translateRaw } from 'translations'; -import './Linkset.scss'; - -const LINK_COLUMNS = [ - { - heading: translateRaw('NEW_FOOTER_TEXT_6'), - links: [ - { - title: 'MyCrypto.com', - link: 'https://www.mycrypto.com/' - }, - { - title: translateRaw('NEW_FOOTER_TEXT_7'), - link: 'https://support.mycrypto.com/' - }, - { - title: translateRaw('NEW_FOOTER_TEXT_8'), - link: 'https://about.mycrypto.com/' - }, - { - title: translateRaw('NEW_FOOTER_TEXT_9'), - link: 'mailto:press@mycrypto.com' - }, - { - title: translateRaw('NEW_FOOTER_TEXT_10'), - link: 'https://about.mycrypto.com/privacy/' - } - ] - }, - { - heading: translateRaw('NEW_FOOTER_TEXT_11'), - links: [ - { - title: 'Ledger Wallet', - link: 'https://www.ledgerwallet.com/r/1985?path=/products/' - }, - { - title: 'TREZOR', - link: 'https://shop.trezor.io/?offer_id=10&aff_id=1735' - }, - { - title: 'ether.card', - link: 'https://ether.cards/?utm_source=mycrypto&utm_medium=cpm&utm_campaign=site' - } - ] - }, - { - heading: translateRaw('NEW_FOOTER_TEXT_12'), - links: [ - { - title: 'EtherAddressLookup', - link: - 'https://chrome.google.com/webstore/detail/etheraddresslookup/pdknmigbbbhmllnmgdfalmedcmcefdfn' - }, - { - title: 'EtherScamDB', - link: 'https://etherscamdb.info/' - }, - { - title: 'MoneroVision', - link: 'https://monerovision.com/' - }, - { - title: 'MyCrypto Desktop App', - link: 'https://download.mycrypto.com' - }, - { - title: 'Ambo Mobile App', - link: 'https://ambo.io' - } - ] - } -]; - -export default function Linkset() { - return ( -
    - {LINK_COLUMNS.map(({ heading, links }) => ( -
    -

    {heading}

    -
      - {links.map(({ title, link }) => ( -
    • - {title} -
    • - ))} -
    -
    - ))} -
    - ); -} diff --git a/common/components/Footer/NewFooter/components/LogoBox.tsx b/common/components/Footer/NewFooter/components/LogoBox.tsx deleted file mode 100644 index a461f73cd..000000000 --- a/common/components/Footer/NewFooter/components/LogoBox.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import logo from 'assets/images/logo-mycrypto.svg'; -import ThemeToggle from 'components/Footer/ThemeToggle'; -import SocialsAndLegal from './SocialsAndLegal'; -import './LogoBox.scss'; - -export default function LogoBox() { - return ( -
    -
    - Logo -
    - -
    -
    -
    -

    {translate('NEW_FOOTER_TEXT_13')}

    -
    -
    - -
    -
    - -
    -
    - ); -} diff --git a/common/components/Footer/NewFooter/components/SocialsAndLegal.tsx b/common/components/Footer/NewFooter/components/SocialsAndLegal.tsx deleted file mode 100644 index c20a63ef8..000000000 --- a/common/components/Footer/NewFooter/components/SocialsAndLegal.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { Component } from 'react'; - -import { socialMediaLinks, VERSION } from 'config'; -import { translateRaw } from 'translations'; -import { NewTabLink } from 'components/ui'; -import DisclaimerModal from 'components/DisclaimerModal'; -import './SocialsAndLegal.scss'; - -const SocialMediaLink = ({ link, text }: { link: string; text: string }) => { - return ( - - - - ); -}; - -function Socials() { - return ( -
    - {socialMediaLinks.map((socialMediaItem, idx) => ( - - ))} -
    - ); -} - -interface LegalState { - modalOpen: boolean; -} - -class Legal extends Component { - public state: LegalState = { - modalOpen: false - }; - - public render() { - const { modalOpen } = this.state; - - return ( - -
    -

    © {new Date().getFullYear()} MyCrypto, Inc.

    - {translateRaw('DISCLAIMER')} -

    {VERSION}

    -
    - -
    - ); - } - - private toggleModal = () => - this.setState((prevState: LegalState) => ({ - modalOpen: !prevState.modalOpen - })); -} - -export default function SocialsAndLegal() { - return ( -
    - - -
    - ); -} diff --git a/common/components/Footer/PreFooter.scss b/common/components/Footer/PreFooter.scss deleted file mode 100644 index 1a0933f70..000000000 --- a/common/components/Footer/PreFooter.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import 'common/sass/variables'; - -.pre-footer { - padding: 1rem; - box-shadow: 16px 16px 47px 0 rgba(0, 0, 0, 0.07); - margin-top: 2rem; - background-color: color(control-bg); - text-align: center; - - p { - font-size: $font-size-medium; - - @media screen and (max-width: $screen-sm) { - font-size: $font-size-small; - } - } -} diff --git a/common/components/Footer/PreFooter.tsx b/common/components/Footer/PreFooter.tsx deleted file mode 100644 index 540a7f261..000000000 --- a/common/components/Footer/PreFooter.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; - -import translate, { translateRaw } from 'translations'; -import './PreFooter.scss'; - -interface Props { - openModal(): void; -} - -const PreFooter: React.SFC = ({ openModal }) => { - return ( -
    -
    -

    - {translate('PREFOOTER_WARNING')}{' '} - {translateRaw('PREFOOTER_SECURITY_WARNING')} -

    -
    -
    - ); -}; - -export default PreFooter; diff --git a/common/components/Footer/ThemeToggle.scss b/common/components/Footer/ThemeToggle.scss deleted file mode 100644 index 292e2a646..000000000 --- a/common/components/Footer/ThemeToggle.scss +++ /dev/null @@ -1,76 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -@mixin theme-icon-showing { - transform: translate(-50%, -50%); - transition-delay: 100ms; -} - -$toggle-height: 30px; -$toggle-width: 60px; -$toggle-control-gutter: 3px; -$toggle-control-size: $toggle-height - $toggle-control-gutter * 2; - -.ThemeToggle { - position: relative; - height: $toggle-height; - width: $toggle-width; - border-radius: $toggle-height / 2; - border: 1px solid shade-light(0.4); - background: shade-dark(0.2); - opacity: 0.6; - transition: opacity 100ms ease; - - &:hover { - opacity: 1; - } - - &-control { - position: absolute; - top: 50%; - left: $toggle-control-gutter; - height: $toggle-control-size; - width: $toggle-control-size; - border-radius: 100%; - background: color(control-bg); - transform: translateY(-50%); - overflow: hidden; - transition: transform 300ms ease; - - @include theme('dark') { - transform: translateY(-50%) translateX(-100%) translateX($toggle-width) - translateX($toggle-control-gutter * -3); - } - - &-icon { - position: absolute; - top: 50%; - left: 50%; - width: 13px; - height: 13px; - transform: translate(-50%, -50%) translateY(30px); - fill: color(text-color); - transition: transform 200ms ease; - background-size: 100%; - background-position: center; - background-repeat: no-repeat; - - &.is-light { - background-image: url('~assets/images/icon-theme-light.svg'); - opacity: 0.9; - @include theme('light') { - @include theme-icon-showing; - } - } - - &.is-dark { - background-image: url('~assets/images/icon-theme-dark.svg'); - opacity: 0.85; - filter: invert(1); - @include theme('dark') { - @include theme-icon-showing; - } - } - } - } -} diff --git a/common/components/Footer/ThemeToggle.tsx b/common/components/Footer/ThemeToggle.tsx deleted file mode 100644 index ba7603ad9..000000000 --- a/common/components/Footer/ThemeToggle.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { Theme } from 'config'; -import { configMetaActions, configMetaSelectors } from 'features/config'; -import { AppState } from 'features/reducers'; -import './ThemeToggle.scss'; - -interface ActionProps { - changeTheme: typeof configMetaActions.changeTheme; -} - -interface StateProps { - theme: ReturnType; -} - -type Props = ActionProps & StateProps; - -class ThemeToggle extends React.Component { - public render() { - return ( - - ); - } - - private toggleTheme = () => { - const theme = this.props.theme === Theme.LIGHT ? Theme.DARK : Theme.LIGHT; - this.props.changeTheme(theme); - }; -} - -export default connect( - (state: AppState) => ({ - theme: configMetaSelectors.getTheme(state) - }), - { - changeTheme: configMetaActions.changeTheme - } -)(ThemeToggle); diff --git a/common/components/Footer/index.scss b/common/components/Footer/index.scss deleted file mode 100644 index c847c2d2c..000000000 --- a/common/components/Footer/index.scss +++ /dev/null @@ -1,173 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -$footer-link-color: color(text-color-inverted); - -.Footer { - background-color: color(footer-bg); - padding: $space-sm $space-sm 0; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: space-between; - border-top: 3px solid color(footer-border); - - &-section { - color: color(text-color-inverted); - padding: $space; - } - - // Responsive ordering behavior - &-links { - order: 1; - text-align: left; - } - &-about { - order: 2; - text-align: center; - } - &-support { - order: 3; - text-align: right; - } - - @media (max-width: 75rem) { - justify-content: center; - - &-links { - text-align: center; - order: 2; - } - &-about { - order: 1; - width: 100%; - padding-bottom: $space * 2; - margin-bottom: $space * 2; - border-bottom: 1px solid color(gray-dark); - } - &-support { - text-align: center; - order: 3; - } - } - - - &-links { - &-social { - margin-bottom: $space; - margin-left: -$space-xs; - } - - &-links { - a { - display: block; - font-size: $font-size-small; - color: $footer-link-color; - margin-bottom: $space-md; - } - } - } - - - &-about { - &-logo { - display: block; - width: 100%; - max-width: 245px; - margin: -$space-xs auto $space * 1.25; - text-align: center; - } - - &-links { - margin-bottom: $space; - - > a { - margin: 0 $space-md; - color: $footer-link-color; - font-size: $font-size-bump; - } - } - - &-text { - font-size: $font-size-xs; - opacity: 0.8; - margin: 0 auto $space; - max-width: 530px; - } - - &-legal { - font-size: $font-size-xs-bump; - margin-bottom: $space-md; - - &-text { - display: inline-block; - margin: 0 $space-sm; - - > a { - color: $footer-link-color; - } - } - } - } - - - &-support { - &-title { - margin: 0 0 $space-sm; - font-size: $font-size-base; - } - - &-affiliates { - margin-bottom: $space-sm; - - > a { - display: block; - font-size: $font-size-xs-bump; - margin-bottom: $space-xs; - color: $footer-link-color; - } - } - - &-donate { - margin-bottom: $space-sm; - - &-address { - font-size: 0.7rem; - opacity: 0.8; - } - } - - &-friends { - > a { - display: inline-block; - font-size: $font-size-xs; - color: $footer-link-color; - - &:after { - content: '·'; - margin: 0 $space-sm; - } - - &:last-child:after { - display: none; - } - } - } - } -} - -.SocialMediaLink { - transition: opacity 0.3s; - color: $footer-link-color; - margin: 0.55rem; - - > i { - font-size: 1.15rem; - } - - &:hover, - &:focus { - opacity: 0.8; - color: $footer-link-color; - } -} diff --git a/common/components/Footer/index.tsx b/common/components/Footer/index.tsx deleted file mode 100644 index 31de0e084..000000000 --- a/common/components/Footer/index.tsx +++ /dev/null @@ -1,151 +0,0 @@ -import React from 'react'; - -import { translateRaw } from 'translations'; -import logo from 'assets/images/logo-mycrypto.svg'; -import { - donationAddressMap, - VERSION, - knowledgeBaseURL, - socialMediaLinks, - productLinks, - affiliateLinks, - partnerLinks -} from 'config'; -import DisclaimerModal from 'components/DisclaimerModal'; -import { NewTabLink } from 'components/ui'; -import PreFooter from './PreFooter'; -import ThemeToggle from './ThemeToggle'; -import './index.scss'; - -const SocialMediaLink = ({ link, text }: { link: string; text: string }) => { - return ( - - - - ); -}; - -interface Props { - latestBlock: string; -} - -interface State { - isDisclaimerOpen: boolean; -} - -export default class Footer extends React.PureComponent { - public state: State = { - isDisclaimerOpen: false - }; - - public render() { - return ( -
    - -
    -
    -
    - {socialMediaLinks.map((socialMediaItem, idx) => ( - - ))} -
    - -
    - {productLinks.map(link => ( - - {link.text} - - ))} - - {translateRaw('FOOTER_PRESS')} - -
    -
    - -
    - - MyCrypto logo - - -
    - MyCrypto.com - {translateRaw('FOOTER_SUPPORT')} - - {translateRaw('FOOTER_TEAM')} - - - {translateRaw('FOOTER_PRIVACY_POLICY')} - -
    - -

    {translateRaw('FOOTER_ABOUT')}

    - -
    -
    - © {new Date().getFullYear()} MyCrypto, Inc. -
    - -
    v{VERSION}
    -
    - -
    - -
    -
    - -
    -
    {translateRaw('FOOTER_AFFILIATE_TITLE')}
    -
    - {affiliateLinks.map((link, i) => ( - - {link.text} - - ))} -
    - -
    -
    - {translateRaw('DONATE_CURRENCY', { $currency: 'ETH' })} -
    -
    {donationAddressMap.ETH}
    -
    - -
    -
    - {translateRaw('DONATE_CURRENCY', { $currency: 'BTC' })} -
    -
    {donationAddressMap.BTC}
    -
    - -
    - {partnerLinks.map((link, i) => ( - - {link.text} - - ))} -
    -
    -
    - -
    - ); - } - - private toggleModal = () => { - this.setState(state => ({ - isDisclaimerOpen: !state.isDisclaimerOpen - })); - }; -} diff --git a/common/components/GasLimitField.scss b/common/components/GasLimitField.scss deleted file mode 100644 index cfc36f7ae..000000000 --- a/common/components/GasLimitField.scss +++ /dev/null @@ -1,11 +0,0 @@ -@import 'common/sass/variables'; - -.gaslimit { - &-label-wrapper { - align-items: center; - margin-bottom: $space-xs; - > label { - margin-bottom: 0; - } - } -} diff --git a/common/components/GasLimitField.tsx b/common/components/GasLimitField.tsx deleted file mode 100644 index 690d72560..000000000 --- a/common/components/GasLimitField.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { gasLimitValidator } from 'libs/validators'; -import { Input } from 'components/ui'; -import { InlineSpinner } from 'components/ui/InlineSpinner'; -import { GasLimitFieldFactory } from './GasLimitFieldFactory'; -import './GasLimitField.scss'; - -interface Props { - customLabel?: string; - disabled?: boolean; - hideGasCalculationSpinner?: boolean; -} - -export const GasLimitField: React.SFC = ({ - customLabel, - disabled, - hideGasCalculationSpinner -}) => ( - ( -
    -
    - ); - } - - private renderFee() { - const { gasPrice, scheduleGasPrice } = this.props; - const { feeSummary } = this.state.options; - - if (!feeSummary) { - return; - } - - return ( -
    - this.printFeeFormula(data)} - /> -
    - ); - } - - private printFeeFormula(data: RenderData) { - if (this.props.scheduling) { - return this.getScheduleFeeFormula(data); - } - - return this.getStandardFeeFormula(data); - } - - private getStandardFeeFormula({ gasPriceWei, gasLimit, fee, usd }: RenderData) { - return ( - - {gasPriceWei} * {gasLimit} = {fee} {usd && ~= ${usd} USD} - - ); - } - - private getScheduleFeeFormula({ gasLimit, gasPriceWei, scheduleGasLimit, fee, usd }: RenderData) { - const { scheduleGasPrice, timeBounty } = this.props; - - return ( -
    - {timeBounty && timeBounty.value && timeBounty.value.toString()} + {gasPriceWei} *{' '} - {gasLimit.toString()} +{' '} - {scheduleGasPrice && scheduleGasPrice.value && scheduleGasPrice.value.toString()} * ( - {EAC_SCHEDULING_CONFIG.FUTURE_EXECUTION_COST.toString()} + {scheduleGasLimit}) = {fee} -  {usd && ~= ${usd} USD} -
    - ); - } - - private handleGasPriceChange = (ev: React.FormEvent) => { - const { value } = ev.currentTarget; - this.props.inputGasPrice(value); - }; - - private handleToggleAutoGasLimit = (_: React.FormEvent) => { - this.props.toggleAutoGasLimit(); - }; -} - -export default connect( - (state: AppState) => ({ - autoGasLimitEnabled: configMetaSelectors.getAutoGasLimitEnabled(state), - validGasPrice: transactionSelectors.isValidGasPrice(state), - timeBounty: scheduleSelectors.getTimeBounty(state), - scheduleGasPrice: scheduleSelectors.getScheduleGasPrice(state) - }), - { toggleAutoGasLimit: configMetaActions.toggleAutoGasLimit } -)(AdvancedGas); diff --git a/common/components/TXMetaDataPanel/components/FeeSummary.scss b/common/components/TXMetaDataPanel/components/FeeSummary.scss deleted file mode 100644 index 2a3f85ae5..000000000 --- a/common/components/TXMetaDataPanel/components/FeeSummary.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import 'common/sass/variables'; - -.FeeSummary { - background: shade-dark(0.08); - height: 42px; - line-height: 42px; - padding: 0 12px; - font-family: $font-family-monospace; - text-align: center; - font-size: 14px; -} - -.SchedulingFeeSummary { - font-size: 12px; - height: auto; - min-height: 42px; -} diff --git a/common/components/TXMetaDataPanel/components/FeeSummary.tsx b/common/components/TXMetaDataPanel/components/FeeSummary.tsx deleted file mode 100644 index f46b654f3..000000000 --- a/common/components/TXMetaDataPanel/components/FeeSummary.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import BN from 'bn.js'; -import classNames from 'classnames'; - -import { NetworkConfig } from 'types/network'; -import { calcEACTotalCost } from 'libs/scheduling'; -import { AppState } from 'features/reducers'; -import { configSelectors, configMetaSelectors } from 'features/config'; -import { gasSelectors } from 'features/gas'; -import { transactionFieldsSelectors } from 'features/transaction'; -import { scheduleSelectors } from 'features/schedule'; -import { UnitDisplay, Spinner } from 'components/ui'; -import './FeeSummary.scss'; - -export interface RenderData { - gasPriceWei: string; - gasPriceGwei: string; - gasLimit: string; - scheduleGasLimit: string; - fee: React.ReactElement; - usd: React.ReactElement | null; -} - -interface ReduxStateProps { - gasLimit: AppState['transaction']['fields']['gasLimit']; - rates: AppState['rates']['rates']; - network: NetworkConfig; - isOffline: AppState['config']['meta']['offline']; - isGasEstimating: AppState['gas']['isEstimating']; - scheduleGasLimit: AppState['schedule']['scheduleGasLimit']; - timeBounty: AppState['schedule']['timeBounty']; - scheduling: AppState['schedule']['schedulingToggle']['value']; -} - -interface OwnProps { - gasPrice: AppState['transaction']['fields']['gasPrice']; - scheduleGasPrice: AppState['schedule']['scheduleGasPrice']; - - render(data: RenderData): React.ReactElement | string; -} - -type Props = OwnProps & ReduxStateProps; - -class FeeSummary extends React.Component { - public render() { - const { - gasPrice, - gasLimit, - rates, - network, - isOffline, - isGasEstimating, - scheduling, - scheduleGasLimit - } = this.props; - - if (!gasPrice.value || gasPrice.value.eqn(0) || !gasLimit.value || gasLimit.value.eqn(0)) { - return null; - } - if (isGasEstimating) { - return ( -
    - -
    - ); - } - - const feeBig = this.getFee(); - const fee = ( - - ); - - const usdBig = network.isTestnet - ? new BN(0) - : feeBig && rates[network.unit] && feeBig.muln(rates[network.unit].USD); - const usd = - isOffline || network.hideEquivalentValues ? null : ( - - ); - - const feeSummaryClasses = classNames({ - FeeSummary: true, - SchedulingFeeSummary: scheduling - }); - - return ( -
    - {this.props.render({ - gasPriceWei: gasPrice.value.toString(), - gasPriceGwei: gasPrice.raw, - fee, - usd, - gasLimit: gasLimit.raw, - scheduleGasLimit: scheduleGasLimit.raw - })} -
    - ); - } - - private getFee() { - const { scheduling } = this.props; - - if (scheduling) { - return this.calculateSchedulingFee(); - } - - return this.calculateStandardFee(); - } - - private calculateStandardFee() { - const { gasPrice, gasLimit } = this.props; - - return gasPrice.value && gasLimit.value && gasPrice.value.mul(gasLimit.value); - } - - private calculateSchedulingFee() { - const { gasLimit, gasPrice, scheduleGasLimit, scheduleGasPrice, timeBounty } = this.props; - - return ( - gasPrice.value && - scheduleGasLimit.value && - timeBounty.value && - calcEACTotalCost( - scheduleGasLimit.value, - gasPrice.value, - scheduleGasPrice.value, - timeBounty.value, - gasLimit.value - ) - ); - } -} - -function mapStateToProps(state: AppState): ReduxStateProps { - return { - gasLimit: transactionFieldsSelectors.getGasLimit(state), - rates: state.rates.rates, - network: configSelectors.getNetworkConfig(state), - isOffline: configMetaSelectors.getOffline(state), - isGasEstimating: gasSelectors.getIsEstimating(state), - scheduling: scheduleSelectors.getSchedulingToggle(state).value, - scheduleGasLimit: scheduleSelectors.getScheduleGasLimit(state), - timeBounty: scheduleSelectors.getTimeBounty(state) - }; -} - -export default connect(mapStateToProps)(FeeSummary); diff --git a/common/components/TXMetaDataPanel/components/SimpleGas.scss b/common/components/TXMetaDataPanel/components/SimpleGas.scss deleted file mode 100644 index 8434702e0..000000000 --- a/common/components/TXMetaDataPanel/components/SimpleGas.scss +++ /dev/null @@ -1,65 +0,0 @@ -@import 'common/sass/variables'; - -.SimpleGas { - margin-top: 0; - margin-bottom: 0; - - &-input-group { - display: flex; - > .SimpleGas-slider { - flex-grow: 1; - margin-right: $space; - - > .rc-slider > .rc-slider-step > .rc-slider-dot { - height: 20px; - width: 12px; - bottom: -7px - } - } - - > .FeeSummary { - margin-left: $space; - min-width: 224px; - } - - @media screen and (max-width: $screen-md) { - flex-wrap: wrap; - - > .SimpleGas-slider { - width: 100%; - margin-right: 0; - } - - > .FeeSummary { - width: 100%; - margin-left: 0; - } - } - } - - &-slider { - padding-top: 8px; - margin-bottom: $space-xs; - - &-labels { - margin-top: 4px; - display: flex; - - > span { - flex: 1; - padding: 0 $space-xs; - text-align: center; - color: shade-dark(0.4); - font-size: $font-size-xs; - - &:first-child { - text-align: left; - } - - &:last-child { - text-align: right; - } - } - } - } -} diff --git a/common/components/TXMetaDataPanel/components/SimpleGas.tsx b/common/components/TXMetaDataPanel/components/SimpleGas.tsx deleted file mode 100644 index a58b0ebe2..000000000 --- a/common/components/TXMetaDataPanel/components/SimpleGas.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import Slider, { createSliderWithTooltip, Marks } from 'rc-slider'; - -import { gasPriceDefaults } from 'config'; -import translate, { translateRaw } from 'translations'; -import { Wei, fromWei } from 'libs/units'; -import { AppState } from 'features/reducers'; -import { configNodesSelectors } from 'features/config'; -import { transactionFieldsActions, transactionNetworkSelectors } from 'features/transaction'; -import { gasActions, gasSelectors } from 'features/gas'; -import { scheduleSelectors } from 'features/schedule'; -import { InlineSpinner } from 'components/ui/InlineSpinner'; -import FeeSummary from './FeeSummary'; -import './SimpleGas.scss'; - -const SliderWithTooltip = createSliderWithTooltip(Slider); - -interface OwnProps { - gasPrice: AppState['transaction']['fields']['gasPrice']; - setGasPrice: transactionFieldsActions.TInputGasPrice; - - inputGasPrice(rawGas: string): void; -} - -interface StateProps { - gasEstimates: AppState['gas']['estimates']; - isGasEstimating: AppState['gas']['isEstimating']; - noncePending: boolean; - gasLimitPending: boolean; - isWeb3Node: boolean; - gasLimitEstimationTimedOut: boolean; - scheduleGasPrice: AppState['schedule']['scheduleGasPrice']; -} - -interface ActionProps { - fetchGasEstimates: gasActions.TFetchGasEstimates; -} - -type Props = OwnProps & StateProps & ActionProps; - -interface State { - hasSetRecommendedGasPrice: boolean; -} - -interface GasTooltips { - [estimationLevel: string]: string; -} - -class SimpleGas extends React.Component { - public state: State = { - hasSetRecommendedGasPrice: false - }; - - public componentDidMount() { - this.props.fetchGasEstimates(); - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (!this.state.hasSetRecommendedGasPrice && nextProps.gasEstimates) { - this.setState({ hasSetRecommendedGasPrice: true }); - this.props.setGasPrice(nextProps.gasEstimates.fast.toString()); - } - } - - public render() { - const { - isGasEstimating, - gasEstimates, - gasPrice, - gasLimitEstimationTimedOut, - isWeb3Node, - noncePending, - gasLimitPending, - scheduleGasPrice - } = this.props; - - const bounds = { - max: gasEstimates ? gasEstimates.fastest : gasPriceDefaults.max, - min: gasEstimates ? gasEstimates.safeLow : gasPriceDefaults.min - }; - - const gasNotches = this.makeGasNotches(); - - /** - * @desc On retrieval of gas estimates, - * the current gas price may be lower than the lowest recommended price. - * `rc-slider` will force the onChange if the value is too low, so we - * ensure it at least passes the lower boundary. - * When this occurs, the logic in `UNSAFE_componentWillReceiveProps` fires, - * and it cannot happen again from that point forward. - */ - const actualGasPrice = Math.max(this.getGasPriceGwei(gasPrice.value), bounds.min); - - return ( -
    -
    -
    - -
    - -
    -
    - - {gasLimitEstimationTimedOut && ( -
    -

    - {isWeb3Node - ? "Couldn't calculate gas limit, if you know what you're doing, try setting manually in Advanced settings" - : "Couldn't calculate gas limit, try switching nodes"} -

    -
    - )} - -
    -
    - -
    - {translate('TX_FEE_SCALE_LEFT')} - {translate('TX_FEE_SCALE_RIGHT')} -
    -
    - ( - - {fee} {usd && / ${usd}} - - )} - /> -
    -
    - ); - } - - private handleSlider = (gasGwei: number) => { - this.props.inputGasPrice(gasGwei.toString()); - }; - - private getGasPriceGwei(gasPriceValue: Wei) { - return parseFloat(fromWei(gasPriceValue, 'gwei')); - } - - private makeGasNotches = (): Marks => { - const { gasEstimates } = this.props; - - return gasEstimates - ? { - [gasEstimates.safeLow]: '', - [gasEstimates.standard]: '', - [gasEstimates.fast]: '', - [gasEstimates.fastest]: '' - } - : {}; - }; - - private formatTooltip = (gas: number) => { - const { gasEstimates } = this.props; - - if (!(gasEstimates && !gasEstimates.isDefault)) { - return ''; - } - - const gasTooltips: GasTooltips = { - [gasEstimates.fast]: translateRaw('TX_FEE_RECOMMENDED_FAST'), - [gasEstimates.fastest]: translateRaw('TX_FEE_RECOMMENDED_FASTEST'), - [gasEstimates.safeLow]: translateRaw('TX_FEE_RECOMMENDED_SAFELOW'), - [gasEstimates.standard]: translateRaw('TX_FEE_RECOMMENDED_STANDARD') - }; - - const recommended = gasTooltips[gas] || ''; - - return translateRaw('GAS_GWEI_COST', { - $gas: gas.toString(), - $recommended: recommended - }); - }; -} - -export default connect( - (state: AppState): StateProps => ({ - gasEstimates: gasSelectors.getEstimates(state), - isGasEstimating: gasSelectors.getIsEstimating(state), - noncePending: transactionNetworkSelectors.nonceRequestPending(state), - gasLimitPending: transactionNetworkSelectors.getGasEstimationPending(state), - gasLimitEstimationTimedOut: transactionNetworkSelectors.getGasLimitEstimationTimedOut(state), - isWeb3Node: configNodesSelectors.getIsWeb3Node(state), - scheduleGasPrice: scheduleSelectors.getScheduleGasPrice(state) - }), - { - fetchGasEstimates: gasActions.fetchGasEstimates - } -)(SimpleGas); diff --git a/common/components/TXMetaDataPanel/index.tsx b/common/components/TXMetaDataPanel/index.tsx deleted file mode 100644 index 7f68f3ca5..000000000 --- a/common/components/TXMetaDataPanel/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default } from './TXMetaDataPanel'; diff --git a/common/components/TransactionStatus/TransactionDataTable.scss b/common/components/TransactionStatus/TransactionDataTable.scss deleted file mode 100644 index 2e4b6b1cb..000000000 --- a/common/components/TransactionStatus/TransactionDataTable.scss +++ /dev/null @@ -1,49 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.TxData { - &-row { - font-size: 0.9rem; - - &-label { - font-weight: bold; - text-align: right; - } - - &-data { - @include mono; - - &-more { - margin-left: $space-sm; - font-size: 0.7rem; - opacity: 0.7; - } - - &-status { - font-weight: bold; - - &.is-success { - color: color(brand-success); - } - &.is-warning { - color: color(brand-warning); - } - &.is-danger { - color: color(brand-danger); - } - } - - .Identicon { - float: left; - margin-right: $space-sm; - } - - textarea { - display: block; - width: 100%; - height: 7.2rem; - background: color(gray-lighter); - } - } - } -} diff --git a/common/components/TransactionStatus/TransactionDataTable.tsx b/common/components/TransactionStatus/TransactionDataTable.tsx deleted file mode 100644 index 423568dee..000000000 --- a/common/components/TransactionStatus/TransactionDataTable.tsx +++ /dev/null @@ -1,172 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { TransactionData, TransactionReceipt } from 'types/transactions'; -import { NetworkConfig } from 'types/network'; -import { Identicon, UnitDisplay, NewTabLink, Address, CodeBlock } from 'components/ui'; -import './TransactionDataTable.scss'; - -interface TableRow { - label: React.ReactElement | string; - data: React.ReactElement | string | number | null; -} - -const MaybeLink: React.SFC<{ - href: string | null | undefined | false; - children: any; // Too many damn React element types -}> = ({ href, children }) => { - if (href) { - return {children}; - } else { - return {children}; - } -}; - -interface Props { - data: TransactionData; - receipt: TransactionReceipt | null; - network: NetworkConfig; -} - -const TransactionDataTable: React.SFC = ({ data, receipt, network }) => { - const explorer: { [key: string]: string | false | null } = {}; - const hasInputData = data.input && data.input !== '0x'; - - if (!network.isCustom) { - explorer.tx = network.blockExplorer && network.blockExplorer.txUrl(data.hash); - explorer.block = - network.blockExplorer && - !!data.blockNumber && - network.blockExplorer.blockUrl(data.blockNumber); - explorer.to = network.blockExplorer && network.blockExplorer.addressUrl(data.to); - explorer.from = network.blockExplorer && network.blockExplorer.addressUrl(data.from); - explorer.contract = - network.blockExplorer && - receipt && - receipt.contractAddress && - network.blockExplorer.addressUrl(receipt.contractAddress); - } - - let statusMsg = ''; - let statusType = ''; - let statusSeeMore = false; - if (receipt) { - if (receipt.status === 1) { - statusMsg = 'SUCCESSFUL'; - statusType = 'success'; - } else if (receipt.status === 0) { - statusMsg = 'FAILED'; - statusType = 'danger'; - statusSeeMore = true; - } else { - // Pre-byzantium transactions don't use status, and cannot have their - // success determined over the JSON RPC api - statusMsg = 'UNKNOWN'; - statusType = 'warning'; - statusSeeMore = true; - } - } else { - statusMsg = 'PENDING'; - statusType = 'warning'; - } - - const rows: TableRow[] = [ - { - label: translate('TX_STATUS'), - data: ( - - {statusMsg} - {statusSeeMore && explorer.tx && !network.isCustom && ( - - (See more on {network.blockExplorer.name}) - - )} - - ) - }, - { - label: translate('X_TXHASH'), - data: {data.hash} - }, - { - label: translate('TX_BLOCK_NUMB'), - data: receipt && {receipt.blockNumber} - }, - { - label: translate('OFFLINE_STEP1_LABEL_1'), - data: ( - - -
    - - ) - }, - { - label: translate('OFFLINE_STEP2_LABEL_1'), - data: ( - - -
    - - ) - }, - { - label: translate('SEND_AMOUNT_SHORT'), - data: - }, - { - label: translate('OFFLINE_STEP2_LABEL_3'), - data: - }, - { - label: translate('OFFLINE_STEP2_LABEL_4'), - data: - }, - { - label: translate('TX_GAS_USED'), - data: receipt && - }, - { - label: translate('CONFIRM_TX_FEE'), - data: receipt && ( - - ) - }, - { - label: translate('NEW_CONTRACT_ADDR'), - data: receipt && receipt.contractAddress && ( - -
    - - ) - }, - { - label: translate('OFFLINE_STEP2_LABEL_5'), - data: data.nonce - }, - { - label: translate('TRANS_DATA'), - data: hasInputData ? {data.input} : null - } - ]; - - const filteredRows = rows.filter(row => !!row.data); - return ( - - - {filteredRows.map((row, idx) => ( - - - - - ))} - -
    {row.label}{row.data}
    - ); -}; - -export default TransactionDataTable; diff --git a/common/components/TransactionStatus/TransactionStatus.scss b/common/components/TransactionStatus/TransactionStatus.scss deleted file mode 100644 index 17cf39e6c..000000000 --- a/common/components/TransactionStatus/TransactionStatus.scss +++ /dev/null @@ -1,36 +0,0 @@ -@import 'common/sass/variables'; - -.TxStatus { - text-align: center; - - &-title { - margin-top: 0; - } - - &-data { - text-align: left; - overflow-x: auto; - } - - &-loading { - padding: $space * 3 0; - } - - &-error { - max-width: 620px; - margin: 0 auto; - - &-title { - color: color(brand-danger); - } - - &-desc { - font-size: $font-size-bump; - margin-bottom: $space-md; - } - - &-list { - text-align: left; - } - } -} diff --git a/common/components/TransactionStatus/TransactionStatus.tsx b/common/components/TransactionStatus/TransactionStatus.tsx deleted file mode 100644 index 65581a7b1..000000000 --- a/common/components/TransactionStatus/TransactionStatus.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { NetworkConfig } from 'types/network'; -import { TransactionState } from 'types/transactions'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import { transactionsActions, transactionsSelectors } from 'features/transactions'; -import { Spinner } from 'components/ui'; -import TransactionDataTable from './TransactionDataTable'; -import './TransactionStatus.scss'; - -interface OwnProps { - txHash: string; -} - -interface StateProps { - tx: TransactionState | null; - network: NetworkConfig; -} - -interface ActionProps { - fetchTransactionData: transactionsActions.TFetchTransactionData; -} - -type Props = OwnProps & StateProps & ActionProps; - -class TransactionStatus extends React.Component { - public componentDidMount() { - this.props.fetchTransactionData(this.props.txHash); - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.txHash !== nextProps.txHash) { - this.props.fetchTransactionData(nextProps.txHash); - } - } - - public render() { - const { tx, network } = this.props; - let content; - - if (tx && tx.data) { - content = ( - -
    - -
    -
    - ); - } else if (tx && tx.error) { - content = ( -
    -

    {translate('TX_NOTFOUND')}

    -

    {translate('TX_NOTFOUND_1')}

    -
      -
    • {translate('TX_NOTFOUND_5')}
    • -
    • {translate('TX_NOTFOUND_2')}
    • -
    • {translate('TX_NOTFOUND_3')}
    • -
    • {translate('TX_NOTFOUND_4')}
    • -
    -
    - ); - } else if (tx && tx.isLoading) { - // tx.isLoading... probably. - content = ( -
    - -
    - ); - } - - return
    {content}
    ; - } -} - -function mapStateToProps(state: AppState, ownProps: OwnProps): StateProps { - const { txHash } = ownProps; - - return { - tx: transactionsSelectors.getTransactionDatas(state)[txHash], - network: configSelectors.getNetworkConfig(state) - }; -} - -export default connect( - mapStateToProps, - { - fetchTransactionData: transactionsActions.fetchTransactionData - } -)(TransactionStatus); diff --git a/common/components/TransactionStatus/index.tsx b/common/components/TransactionStatus/index.tsx deleted file mode 100644 index d0d15c434..000000000 --- a/common/components/TransactionStatus/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default } from './TransactionStatus'; diff --git a/common/components/Translate.tsx b/common/components/Translate.tsx deleted file mode 100644 index 30a72f645..000000000 --- a/common/components/Translate.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import Markdown from 'react-markdown'; - -import NewTabLink from 'components/ui/NewTabLink'; - -interface Props { - source: string; -} - -const TranslateMarkdown = ({ source }: Props) => { - return ( - - ); -}; - -export default TranslateMarkdown; diff --git a/common/components/UnitDropDown/UnitDropDown.tsx b/common/components/UnitDropDown/UnitDropDown.tsx deleted file mode 100644 index 21d9fb62d..000000000 --- a/common/components/UnitDropDown/UnitDropDown.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { Option } from 'react-select'; - -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { transactionMetaActions } from 'features/transaction'; -import { configSelectors } from 'features/config'; -import { walletTypes } from 'features/wallet'; -import { Query } from 'components/renderCbs'; -import { Dropdown } from 'components/ui'; - -interface DispatchProps { - setUnitMeta: transactionMetaActions.TSetUnitMeta; -} - -interface StateProps { - unit: string; - tokens: walletTypes.TokenBalance[]; - allTokens: walletTypes.MergedToken[]; - showAllTokens?: boolean; - networkUnit: string; -} - -class UnitDropdownClass extends Component { - public render() { - const { tokens, allTokens, showAllTokens, unit, networkUnit } = this.props; - const focusedTokens = showAllTokens ? allTokens : tokens; - const options = [networkUnit, ...getTokenSymbols(focusedTokens)]; - return ( - ( - 10} - disabled={!!readOnly} - /> - )} - /> - ); - } - private handleOnChange = (unit: Option) => { - if (!unit.value) { - throw Error('No unit value found'); - } - this.props.setUnitMeta(unit.value); - }; -} -const getTokenSymbols = (tokens: (walletTypes.TokenBalance | walletTypes.MergedToken)[]) => - tokens.map(t => t.symbol); - -function mapStateToProps(state: AppState) { - return { - tokens: selectors.getShownTokenBalances(state, true), - allTokens: selectors.getTokens(state), - unit: selectors.getUnit(state), - networkUnit: configSelectors.getNetworkUnit(state) - }; -} - -export const UnitDropDown = connect( - mapStateToProps, - { - setUnitMeta: transactionMetaActions.setUnitMeta - } -)(UnitDropdownClass); diff --git a/common/components/UnitDropDown/index.ts b/common/components/UnitDropDown/index.ts deleted file mode 100644 index 357146c4f..000000000 --- a/common/components/UnitDropDown/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './UnitDropDown'; diff --git a/common/components/WalletDecrypt/WalletDecrypt.scss b/common/components/WalletDecrypt/WalletDecrypt.scss deleted file mode 100644 index bf6e6e3c7..000000000 --- a/common/components/WalletDecrypt/WalletDecrypt.scss +++ /dev/null @@ -1,156 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -$speed: 500ms; - -@keyframes decrypt-enter { - 0% { - opacity: 0; - transform: translateY(8px); - } - 100% { - opacity: 1; - transform: translateY(0px); - } -} - -@mixin decrypt-title { - text-align: center; - line-height: 1; - margin: $space 0 2rem; - font-weight: normal; - animation: decrypt-enter $speed ease 1; -} - -.WalletDecrypt { - position: relative; - - &-wallets { - margin: 0 -$space-md; - - &-title { - @include decrypt-title; - } - - &-row { - display: flex; - justify-content: center; - flex-wrap: wrap; - margin-bottom: 10px; - - .Warning { - width: 40rem; - } - - @media screen and (max-width: $screen-xs) { - margin: 0; - } - - &:last-child { - margin: 0; - } - } - - &-generate { - text-align: center; - font-weight: 300; - margin: $space 0; - } - } - - &-decrypt { - position: relative; - text-align: center; - padding-bottom: $space; - - @media (max-width: $screen-md) { - padding-bottom: $space * 2; - } - - &-back { - @include reset-button; - position: absolute; - top: 0; - left: 0; - line-height: $font-size-large; - opacity: 0.4; - transition: opacity 120ms ease, transform 120ms ease; - - @media (max-width: $screen-md) { - top: auto; - bottom: -10px; - left: 50%; - transform: translateX(-50%); - } - - &:hover, - &:focus { - opacity: 0.8; - } - - &:active { - opacity: 1; - } - - .fa { - position: relative; - top: -2px; - font-size: 11px; - } - } - - &-title { - @include decrypt-title; - } - - &-form { - max-width: 480px; - margin: 0 auto; - } - &-label { - opacity: 0.8; - font-weight: 300; - white-space: nowrap; - width: 60%; - overflow: hidden; - text-overflow: ellipsis; - } - - &-override { - position: absolute; - bottom: 0; - right: 0; - opacity: 0.3; - - &:hover { - opacity: 1; - } - } - } -} - -// Animation between two slides -.DecryptContent { - &-enter { - opacity: 0; - transition: opacity $speed * 0.25 ease $speed * 0.125; - - &-active { - opacity: 1; - } - } - - &-exit { - position: absolute; - top: 0; - left: 0; - width: 100%; - opacity: 1; - transition: opacity $speed * 0.25 ease; - pointer-events: none; - - &-active { - opacity: 0; - } - } -} diff --git a/common/components/WalletDecrypt/WalletDecrypt.tsx b/common/components/WalletDecrypt/WalletDecrypt.tsx deleted file mode 100644 index 8a4e31938..000000000 --- a/common/components/WalletDecrypt/WalletDecrypt.tsx +++ /dev/null @@ -1,547 +0,0 @@ -import React, { Component } from 'react'; -import { TransitionGroup, CSSTransition } from 'react-transition-group'; -import { withRouter, RouteComponentProps } from 'react-router'; -import { connect } from 'react-redux'; -import { Link } from 'react-router-dom'; -import isEmpty from 'lodash/isEmpty'; - -import { - HardwareWalletName, - SecureWalletName, - InsecureWalletName, - MiscWalletName, - WalletName, - knowledgeBaseURL -} from 'config'; -import translate, { translateRaw } from 'translations'; -import { isWeb3NodeAvailable } from 'libs/nodes/web3'; -import { wikiLink as paritySignerHelpLink } from 'libs/wallet/non-deterministic/parity'; -import { AppState } from 'features/reducers'; -import * as derivedSelectors from 'features/selectors'; -import { walletActions, walletSelectors } from 'features/wallet'; -import { transactionFieldsActions } from 'features/transaction'; -import { notificationsActions } from 'features/notifications'; -import LedgerIcon from 'assets/images/wallets/ledger.svg'; -import TrezorIcon from 'assets/images/wallets/trezor.svg'; -import SafeTIcon from 'assets/images/wallets/safe-t.svg'; -import ParitySignerIcon from 'assets/images/wallets/parity-signer.svg'; -import { Errorable } from 'components'; -import { Warning } from 'components/ui'; -import { DisabledWallets } from './disables'; -import { getWeb3ProviderInfo } from 'utils/web3'; -import { - KeystoreDecrypt, - LedgerNanoSDecrypt, - MnemonicDecrypt, - PrivateKeyDecrypt, - PrivateKeyValue, - TrezorDecrypt, - SafeTminiDecrypt, - ViewOnlyDecrypt, - Web3Decrypt, - WalletButton, - ParitySignerDecrypt, - InsecureWalletWarning -} from './components'; -import './WalletDecrypt.scss'; - -interface OwnProps { - hidden?: boolean; - disabledWallets?: DisabledWallets; - showGenerateLink?: boolean; -} - -interface DispatchProps { - unlockKeystore: walletActions.TUnlockKeystore; - unlockMnemonic: walletActions.TUnlockMnemonic; - unlockPrivateKey: walletActions.TUnlockPrivateKey; - unlockWeb3: walletActions.TUnlockWeb3; - setWallet: walletActions.TSetWallet; - resetTransactionRequested: transactionFieldsActions.TResetTransactionRequested; - showNotification: notificationsActions.TShowNotification; -} - -interface StateProps { - computedDisabledWallets: DisabledWallets; - isWalletPending: AppState['wallet']['isWalletPending']; - isPasswordPending: AppState['wallet']['isPasswordPending']; - accessMessage: ReturnType; -} - -type Props = OwnProps & StateProps & DispatchProps & RouteComponentProps<{}>; - -type UnlockParams = {} | PrivateKeyValue; -interface State { - selectedWalletKey: WalletName | null; - isInsecureOverridden: boolean; - value: UnlockParams | null; -} - -interface BaseWalletInfo { - lid: string; - component: any; - initialParams: object; - unlock: any; - helpLink: string; - isReadOnly?: boolean; - attemptUnlock?: boolean; - redirect?: string; -} - -export interface SecureWalletInfo extends BaseWalletInfo { - icon?: string; - description: string; -} - -export interface InsecureWalletInfo extends BaseWalletInfo { - example: string; -} - -export interface MiscWalletInfo extends BaseWalletInfo { - description: string; -} - -type HardwareWallets = { [key in HardwareWalletName]: SecureWalletInfo }; -type SecureWallets = { [key in SecureWalletName]: SecureWalletInfo }; -type InsecureWallets = { [key in InsecureWalletName]: InsecureWalletInfo }; -type MiscWallet = { [key in MiscWalletName]: MiscWalletInfo }; -type Wallets = HardwareWallets & SecureWallets & InsecureWallets & MiscWallet; - -const HARDWARE_WALLETS = Object.values(HardwareWalletName); -/** @desc Hardware wallets are secure too, but we want to avoid duplication. */ -const SECURE_WALLETS = Object.values(SecureWalletName).filter( - value => !HARDWARE_WALLETS.includes(value) -); -const INSECURE_WALLETS = Object.values(InsecureWalletName); -const MISC_WALLETS = Object.values(MiscWalletName); - -const web3info = getWeb3ProviderInfo(); - -const WalletDecrypt = withRouter( - class WalletDecryptClass extends Component & Props, State> { - // https://github.com/Microsoft/TypeScript/issues/13042 - // index signature should become [key: Wallets] (from config) once typescript bug is fixed - public WALLETS: Wallets = { - [SecureWalletName.WEB3]: { - lid: web3info.lid, - icon: web3info.icon, - description: 'ADD_WEB3DESC', - component: Web3Decrypt, - initialParams: {}, - unlock: this.props.unlockWeb3, - attemptUnlock: true, - helpLink: `${knowledgeBaseURL}/how-to/migrating/moving-from-mycrypto-to-metamask` - }, - [SecureWalletName.LEDGER_NANO_S]: { - lid: 'X_LEDGER', - icon: LedgerIcon, - description: 'ADD_HARDWAREDESC', - component: LedgerNanoSDecrypt, - initialParams: {}, - unlock: this.props.setWallet, - helpLink: 'https://support.ledger.com/hc/en-us/articles/360008268594' - }, - [SecureWalletName.TREZOR]: { - lid: 'X_TREZOR', - icon: TrezorIcon, - description: 'ADD_HARDWAREDESC', - component: TrezorDecrypt, - initialParams: {}, - unlock: this.props.setWallet, - helpLink: `${knowledgeBaseURL}/how-to/migrating/moving-from-mycrypto-to-trezor` - }, - [SecureWalletName.SAFE_T]: { - lid: 'X_SAFE_T', - icon: SafeTIcon, - description: 'ADD_HARDWAREDESC', - component: SafeTminiDecrypt, - initialParams: {}, - unlock: this.props.setWallet, - // TODO - Update with the right id once available - helpLink: 'https://www.archos.com/fr/products/crypto/faq.html' - }, - [SecureWalletName.PARITY_SIGNER]: { - lid: 'X_PARITYSIGNER', - icon: ParitySignerIcon, - description: 'ADD_PARITY_DESC', - component: ParitySignerDecrypt, - initialParams: {}, - unlock: this.props.setWallet, - helpLink: paritySignerHelpLink - }, - [InsecureWalletName.KEYSTORE_FILE]: { - lid: 'X_KEYSTORE2', - example: 'UTC--2017-12-15T17-35-22.547Z--6be6e49e82425a5aa56396db03512f2cc10e95e8', - component: KeystoreDecrypt, - initialParams: { - file: '', - password: '' - }, - unlock: this.props.unlockKeystore, - helpLink: `${knowledgeBaseURL}/general-knowledge/ethereum-blockchain/difference-between-wallet-types` - }, - [InsecureWalletName.MNEMONIC_PHRASE]: { - lid: 'X_MNEMONIC', - example: 'brain surround have swap horror cheese file distinct', - component: MnemonicDecrypt, - initialParams: {}, - unlock: this.props.unlockMnemonic, - helpLink: `${knowledgeBaseURL}/general-knowledge/ethereum-blockchain/difference-between-wallet-types` - }, - [InsecureWalletName.PRIVATE_KEY]: { - lid: 'X_PRIVKEY2', - example: 'f1d0e0789c6d40f399ca90cc674b7858de4c719e0d5752a60d5d2f6baa45d4c9', - component: PrivateKeyDecrypt, - initialParams: { - key: '', - password: '' - }, - unlock: this.props.unlockPrivateKey, - helpLink: `${knowledgeBaseURL}/general-knowledge/ethereum-blockchain/difference-between-wallet-types` - }, - [MiscWalletName.VIEW_ONLY]: { - lid: 'VIEW_ADDR', - description: 'ADD_VIEW_ADDRESS_DESC', - component: ViewOnlyDecrypt, - initialParams: {}, - unlock: this.props.setWallet, - helpLink: '', - isReadOnly: true, - redirect: '/account/info' - } - }; - - public state: State = { - selectedWalletKey: null, - isInsecureOverridden: false, - value: null - }; - - public exists: boolean = true; - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - // Reset state when unlock is hidden / revealed - if (nextProps.hidden !== this.props.hidden) { - this.setState({ - value: null, - selectedWalletKey: null - }); - } - } - - public componentWillUnmount() { - this.exists = false; - } - - public getSelectedWallet() { - const { selectedWalletKey } = this.state; - if (!selectedWalletKey) { - return null; - } - - return this.WALLETS[selectedWalletKey]; - } - - public getDecryptionComponent() { - const { selectedWalletKey, isInsecureOverridden } = this.state; - const selectedWallet = this.getSelectedWallet(); - - if (!selectedWalletKey || !selectedWallet) { - return null; - } - - const isInsecure = INSECURE_WALLETS.includes(selectedWalletKey); - if (isInsecure && !isInsecureOverridden && !process.env.BUILD_DOWNLOADABLE) { - return ( -
    - - {process.env.NODE_ENV !== 'production' && ( - - )} -
    - ); - } - - return ( -
    - -

    - {!(selectedWallet.isReadOnly || selectedWallet.lid === 'X_PARITYSIGNER') && - translate('UNLOCK_WALLET', { - $wallet: translateRaw(selectedWallet.lid) - })} -

    -
    - - { - if (selectedWallet.redirect) { - this.props.history.push(selectedWallet.redirect); - } - this.onUnlock(value); - }} - showNotification={this.props.showNotification} - isWalletPending={ - this.state.selectedWalletKey === InsecureWalletName.KEYSTORE_FILE - ? this.props.isWalletPending - : undefined - } - isPasswordPending={ - this.state.selectedWalletKey === InsecureWalletName.KEYSTORE_FILE - ? this.props.isPasswordPending - : undefined - } - /> - -
    -
    - ); - } - - public buildWalletOptions() { - const { computedDisabledWallets, accessMessage } = this.props; - const { reasons } = computedDisabledWallets; - - return ( -
    -

    {translate('DECRYPT_ACCESS')}

    - {accessMessage && ( -
    - {accessMessage} -
    - )} -
    - {HARDWARE_WALLETS.map((walletType: SecureWalletName) => { - const wallet = this.WALLETS[walletType]; - return ( - - ); - })} -
    -
    - {SECURE_WALLETS.map((walletType: SecureWalletName) => { - const wallet = this.WALLETS[walletType]; - return ( - - ); - })} - {MISC_WALLETS.map((walletType: MiscWalletName) => { - const wallet = this.WALLETS[walletType]; - return ( - - ); - })} -
    - -
    - {INSECURE_WALLETS.map((walletType: InsecureWalletName) => { - const wallet = this.WALLETS[walletType]; - return ( - - ); - })} -
    - - {this.props.showGenerateLink && ( -
    - {translate('DONT_HAVE_WALLET_PROMPT')} -
    - )} -
    - ); - } - - public handleWalletChoice = async (walletType: WalletName) => { - const { showNotification } = this.props; - const wallet = this.WALLETS[walletType]; - - if (!wallet) { - return; - } - - let timeout = 0; - if (wallet.attemptUnlock) { - try { - const web3Available = await isWeb3NodeAvailable(); - if (web3Available) { - // timeout is only the maximum wait time before secondary view is shown - // send view will be shown immediately on web3 resolve - timeout = 1500; - wallet.unlock(); - } - } catch (e) { - // The permissions request for MetaMask was displayed, but permission was denied. - showNotification('danger', translateRaw('METAMASK_PERMISSION_DENIED')); - } - } - - window.setTimeout(() => { - if (this.exists) { - this.setState({ - selectedWalletKey: walletType, - value: wallet.initialParams - }); - } - }, timeout); - }; - - public clearWalletChoice = () => { - this.setState({ - selectedWalletKey: null, - value: null - }); - }; - - public render() { - const { hidden } = this.props; - const selectedWallet = this.getSelectedWallet(); - const decryptionComponent = this.getDecryptionComponent(); - - return ( -
    - {!hidden && ( -
    -
    - - {decryptionComponent && selectedWallet ? ( - - {decryptionComponent} - - ) : ( - - {this.buildWalletOptions()} - - )} - -
    -
    - )} -
    - ); - } - - public onChange = (value: UnlockParams) => { - this.setState({ value }); - }; - - public onUnlock = (payload: any) => { - const { value, selectedWalletKey } = this.state; - if (!selectedWalletKey) { - return; - } - - // some components (TrezorDecrypt) don't take an onChange prop, and thus - // this.state.value will remain unpopulated. in this case, we can expect - // the payload to contain the unlocked wallet info. - const unlockValue = value && !isEmpty(value) ? value : payload; - this.WALLETS[selectedWalletKey].unlock(unlockValue); - this.props.resetTransactionRequested(); - }; - - private isWalletDisabled = (walletKey: WalletName) => { - return this.props.computedDisabledWallets.wallets.indexOf(walletKey) !== -1; - }; - - private overrideInsecureWarning = () => { - if (process.env.NODE_ENV !== 'production') { - this.setState({ isInsecureOverridden: true }); - } - }; - } -); - -function mapStateToProps(state: AppState, ownProps: Props) { - const { disabledWallets } = ownProps; - let computedDisabledWallets = derivedSelectors.getDisabledWallets(state); - - if (disabledWallets) { - computedDisabledWallets = { - wallets: [...computedDisabledWallets.wallets, ...disabledWallets.wallets], - reasons: { - ...computedDisabledWallets.reasons, - ...disabledWallets.reasons - } - }; - } - - return { - computedDisabledWallets, - isWalletPending: state.wallet.isWalletPending, - isPasswordPending: state.wallet.isPasswordPending, - accessMessage: walletSelectors.getWalletAccessMessage(state) - }; -} - -export default connect( - mapStateToProps, - { - unlockKeystore: walletActions.unlockKeystore, - unlockMnemonic: walletActions.unlockMnemonic, - unlockPrivateKey: walletActions.unlockPrivateKey, - unlockWeb3: walletActions.unlockWeb3, - setWallet: walletActions.setWallet, - resetTransactionRequested: transactionFieldsActions.resetTransactionRequested, - showNotification: notificationsActions.showNotification - } -)(WalletDecrypt) as React.ComponentClass; diff --git a/common/components/WalletDecrypt/components/DeterministicWalletsModal.scss b/common/components/WalletDecrypt/components/DeterministicWalletsModal.scss deleted file mode 100644 index c031278b8..000000000 --- a/common/components/WalletDecrypt/components/DeterministicWalletsModal.scss +++ /dev/null @@ -1,122 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.DWModal { - &-path { - margin-bottom: 20px; - - &-label { - font-size: $font-size-medium; - margin-right: $space-md; - line-height: $input-height-base; - } - - &-select { - flex: 1; - - small { - padding-left: 5px; - opacity: 0.5; - font-size: 11px; - @include mono; - } - } - - &-custom { - flex: 1; - margin-left: $space-md; - - .input-group-input { - margin: 0; - } - } - - &-submit { - margin-left: $space-md; - padding-left: $space; - padding-right: $space; - border: none; - } - } - - &-addresses { - overflow-y: auto; - &-table { - width: 732px; - text-align: center; - margin: auto; - margin-bottom: 10px; - - &-token { - width: 82px; - background: color(control-bg); - color: control(control-color); - } - - &-address { - font-size: 13px; - text-align: left; - font-family: $font-family-monospace; - display: flex; - align-items: center; - - &-label { - font-weight: bold; - } - - input { - margin-right: 10px; - } - - &-text { - font-size: 10px; - } - } - - &-more { - display: inline-block; - width: 16px; - height: 16px; - background-image: url('~assets/images/icon-external-link.svg'); - } - - &-na { - font-size: $font-size-xs; - opacity: 0.3; - } - - // Specific selectors to override bootstrap - tbody { - tr { - cursor: pointer; - - label { - display: block; - font-family: $font-family-sans-serif; - } - } - - td { - vertical-align: middle; - } - } - } - - &-nav { - &-btn { - display: inline-block; - margin: 0; - width: 49.9%; - width: calc(50% - 5px); - margin: 0 5px; - - &:first-child { - margin-left: 0; - } - &:last-child { - margin-right: 0; - } - } - } - } -} diff --git a/common/components/WalletDecrypt/components/DeterministicWalletsModal.tsx b/common/components/WalletDecrypt/components/DeterministicWalletsModal.tsx deleted file mode 100644 index 517791426..000000000 --- a/common/components/WalletDecrypt/components/DeterministicWalletsModal.tsx +++ /dev/null @@ -1,375 +0,0 @@ -import React from 'react'; -import Select, { Option } from 'react-select'; -import { connect } from 'react-redux'; - -import translate, { translateRaw } from 'translations'; -import { isValidPath } from 'libs/validators'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import * as selectors from 'features/selectors'; -import { - deterministicWalletsTypes, - deterministicWalletsActions -} from 'features/deterministicWallets'; -import { addressBookSelectors } from 'features/addressBook'; -import { UnitDisplay, Input } from 'components/ui'; -import Modal, { IButton } from 'components/ui/Modal'; -import './DeterministicWalletsModal.scss'; - -const WALLETS_PER_PAGE = 5; - -interface OwnProps { - isOpen?: boolean; - dPath: DPath; - dPaths: DPath[]; - publicKey?: string; - chainCode?: string; - seed?: string; -} - -interface StateProps { - addressLabels: ReturnType; - wallets: AppState['deterministicWallets']['wallets']; - desiredToken: AppState['deterministicWallets']['desiredToken']; - network: ReturnType; - tokens: ReturnType; -} - -interface DispatchProps { - getDeterministicWallets( - args: deterministicWalletsTypes.GetDeterministicWalletsArgs - ): deterministicWalletsTypes.GetDeterministicWalletsAction; - setDesiredToken(tkn: string | undefined): deterministicWalletsTypes.SetDesiredTokenAction; - onCancel(): void; - onConfirmAddress(address: string, addressIndex: number): void; - onPathChange(dPath: DPath): void; -} - -type Props = OwnProps & StateProps & DispatchProps; - -interface State { - currentDPath: DPath; - selectedAddress: string; - selectedAddrIndex: number; - isCustomPath: boolean; - customPath: string; - page: number; -} - -const customDPath: DPath = { - label: 'custom', - value: 'custom' -}; - -class DeterministicWalletsModalClass extends React.PureComponent { - public state: State = { - selectedAddress: '', - selectedAddrIndex: 0, - isCustomPath: false, - customPath: '', - currentDPath: this.props.dPath, - page: 0 - }; - - public componentDidMount() { - this.getAddresses(); - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - const { publicKey, chainCode, seed, dPath } = this.props; - if ( - nextProps.publicKey !== publicKey || - nextProps.chainCode !== chainCode || - nextProps.dPath !== dPath || - nextProps.seed !== seed - ) { - this.getAddresses(nextProps); - } - } - - public render() { - const { wallets, desiredToken, network, tokens, dPaths, onCancel } = this.props; - const { selectedAddress, customPath, page } = this.state; - - const buttons: IButton[] = [ - { - text: translate('ACTION_3'), - type: 'primary', - onClick: this.handleConfirmAddress, - disabled: !selectedAddress - }, - { - text: translate('ACTION_2'), - type: 'default', - onClick: onCancel - } - ]; - - return ( - -
    -
    - {translate('DECRYPT_DROPDOWN_LABEL')} -
    - -
    - - - )} - - -
    - - - - - - - - - - - {wallets.map(wallet => this.renderWalletRow(wallet))} -
    #Address{network.unit} - - {translate('ACTION_5')}
    -
    -
    - - -
    -
    -
    - ); - } - - private getAddresses(props: Props = this.props) { - const { dPath, publicKey, chainCode, seed } = props; - if (dPath && ((publicKey && chainCode) || seed)) { - if (isValidPath(dPath.value)) { - this.props.getDeterministicWallets({ - seed, - dPath: dPath.value, - publicKey, - chainCode, - limit: WALLETS_PER_PAGE, - offset: WALLETS_PER_PAGE * this.state.page - }); - } else { - console.error('Invalid dPath provided', dPath); - } - } - } - - private handleChangePath = (newPath: DPath) => { - if (newPath.value === customDPath.value) { - this.setState({ isCustomPath: true, currentDPath: newPath }); - } else { - this.setState({ isCustomPath: false, currentDPath: newPath }); - this.props.onPathChange(newPath); - } - }; - - private handleChangeCustomPath = (ev: React.FormEvent) => { - this.setState({ customPath: ev.currentTarget.value }); - }; - - private handleSubmitCustomPath = (ev: React.FormEvent) => { - const { customPath, currentDPath } = this.state; - ev.preventDefault(); - - if (currentDPath.value === customDPath.value && isValidPath(customPath)) { - this.props.onPathChange({ - label: customDPath.label, - value: customPath - }); - } - }; - - private handleChangeToken = (ev: React.FormEvent) => { - this.props.setDesiredToken(ev.currentTarget.value || undefined); - this.refreshPage(); - }; - - private handleConfirmAddress = () => { - if (this.state.selectedAddress) { - this.props.onConfirmAddress(this.state.selectedAddress, this.state.selectedAddrIndex); - } - }; - - private selectAddress(selectedAddress: string, selectedAddrIndex: number) { - this.setState({ selectedAddress, selectedAddrIndex }); - } - - private refreshPage = () => { - this.setState({ page: this.state.page }, this.getAddresses); - }; - - private nextPage = () => { - this.setState({ page: this.state.page + 1 }, this.getAddresses); - }; - - private prevPage = () => { - this.setState({ page: Math.max(this.state.page - 1, 0) }, this.getAddresses); - }; - - private renderDPathOption(option: Option) { - if (option.value === customDPath.value) { - return translate('X_CUSTOM'); - } - - return ( - - {option.label} {option.value && ({option.value.toString().replace(' ', '')})} - - ); - } - - private renderWalletRow(wallet: deterministicWalletsTypes.DeterministicWalletData) { - const { desiredToken, network, addressLabels } = this.props; - const { selectedAddress } = this.state; - const label = addressLabels[wallet.address.toLowerCase()]; - const spanClassName = label ? 'DWModal-addresses-table-address-text' : ''; - - let blockExplorer; - if (!network.isCustom) { - blockExplorer = network.blockExplorer; - } else { - blockExplorer = { - addressUrl: (address: string) => { - return `https://ethplorer.io/address/${address}`; - } - }; - } - - // Get renderable values, but keep 'em short - const token = desiredToken ? wallet.tokenValues[desiredToken] : null; - - return ( - - {wallet.index + 1} - - -
    - {label && } - {wallet.address} -
    - - - - - - {desiredToken ? ( - - ) : ( - N/A - )} - - - - - - - - ); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { - addressLabels: addressBookSelectors.getAddressLabels(state), - wallets: state.deterministicWallets.wallets, - desiredToken: state.deterministicWallets.desiredToken, - network: configSelectors.getNetworkConfig(state), - tokens: selectors.getTokens(state) - }; -} - -const DeterministicWalletsModal = connect( - mapStateToProps, - { - getDeterministicWallets: deterministicWalletsActions.getDeterministicWallets, - setDesiredToken: deterministicWalletsActions.setDesiredToken - } -)(DeterministicWalletsModalClass); - -export default DeterministicWalletsModal; diff --git a/common/components/WalletDecrypt/components/InsecureWalletWarning.tsx b/common/components/WalletDecrypt/components/InsecureWalletWarning.tsx deleted file mode 100644 index f24abef65..000000000 --- a/common/components/WalletDecrypt/components/InsecureWalletWarning.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import translate from 'translations'; -import { NewTabLink } from 'components/ui'; -import './InsecureWalletWarning.scss'; - -interface Props { - walletType: string; - onCancel(): void; -} - -export class InsecureWalletWarning extends React.Component { - constructor(props: Props) { - super(props); - } - - public render() { - const { walletType, onCancel } = this.props; - - return ( -
    -

    - {translate('INSECURE_WALLET_TYPE_TITLE', { $wallet_type: walletType })} -

    -

    - {translate('INSECURE_WALLET_TYPE_DESC', { $wallet_type: walletType })} -

    - -
    - - {translate('WALLET_SUGGESTION_DESKTOP_APP')} - - -
    -
    - ); - } -} diff --git a/common/components/WalletDecrypt/components/Keystore.tsx b/common/components/WalletDecrypt/components/Keystore.tsx deleted file mode 100644 index 13dd6b994..000000000 --- a/common/components/WalletDecrypt/components/Keystore.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import React, { PureComponent } from 'react'; - -import translate, { translateRaw } from 'translations'; -import { isKeystorePassRequired } from 'libs/wallet'; -import { notificationsActions } from 'features/notifications'; -import Spinner from 'components/ui/Spinner'; -import { Input } from 'components/ui'; - -export interface KeystoreValue { - file: string; - password: string; - filename: string; - valid: boolean; -} - -function isPassRequired(file: string): boolean { - let passReq = false; - try { - passReq = isKeystorePassRequired(file); - } catch (e) { - // TODO: communicate invalid file to user - } - return passReq; -} - -function isValidFile(rawFile: File): boolean { - const fileType = rawFile.type; - return fileType === '' || fileType === 'application/json'; -} - -export class KeystoreDecrypt extends PureComponent { - public props: { - value: KeystoreValue; - isWalletPending: boolean; - isPasswordPending: boolean; - onChange(value: KeystoreValue): void; - onUnlock(): void; - showNotification(level: string, message: string): notificationsActions.TShowNotification; - }; - - public render() { - const { - isWalletPending, - value: { file, password, filename } - } = this.props; - const passReq = isPassRequired(file); - const unlockDisabled = !file || (passReq && !password); - - return ( -
    -
    - - - - - - {isWalletPending ? : ''} - 0} - className={`${file.length && isWalletPending ? 'hidden' : ''}`} - disabled={!file} - value={password} - onChange={this.onPasswordChange} - onKeyDown={this.onKeyDown} - placeholder={translateRaw('INPUT_PASSWORD_LABEL')} - type="password" - /> -
    - - -
    - ); - } - - private onKeyDown = (e: any) => { - if (e.keyCode === 13) { - this.unlock(e); - } - }; - - private unlock = (e: React.SyntheticEvent) => { - e.preventDefault(); - e.stopPropagation(); - this.props.onUnlock(); - }; - - private onPasswordChange = (e: any) => { - const valid = this.props.value.file.length && e.target.value.length; - this.props.onChange({ - ...this.props.value, - password: e.target.value, - valid - }); - }; - - private handleFileSelection = (e: any) => { - const fileReader = new FileReader(); - const target = e.target; - const inputFile = target.files[0]; - const fileName = inputFile.name; - - fileReader.onload = () => { - const keystore = fileReader.result; - const passReq = isPassRequired(keystore as any); - - this.props.onChange({ - ...this.props.value, - file: keystore, - valid: (keystore as any).length && !passReq, - password: '', - filename: fileName - } as any); - this.props.onUnlock(); - }; - if (isValidFile(inputFile)) { - fileReader.readAsText(inputFile, 'utf-8'); - } else { - this.props.showNotification('danger', translateRaw('ERROR_3')); - } - }; -} diff --git a/common/components/WalletDecrypt/components/LedgerNano.scss b/common/components/WalletDecrypt/components/LedgerNano.scss deleted file mode 100644 index e249975c7..000000000 --- a/common/components/WalletDecrypt/components/LedgerNano.scss +++ /dev/null @@ -1,39 +0,0 @@ -@import 'common/sass/variables'; - -.LedgerDecrypt { - text-align: center; - - &-tip { - font-size: $font-size-xs-bump; - opacity: 0.7; - margin-bottom: $space; - } - - &-help { - margin-top: 10px; - font-size: 13px; - } - - &-error { - opacity: 0; - transition: none; - - &.is-showing { - opacity: 1; - } - } - - &-buy { - margin: 10px 0; - } - - &-message { - display: flex; - justify-content: center; - align-items: center; - - .Spinner { - margin-right: 16px; - } - } -} diff --git a/common/components/WalletDecrypt/components/LedgerNano.tsx b/common/components/WalletDecrypt/components/LedgerNano.tsx deleted file mode 100644 index 46a42849d..000000000 --- a/common/components/WalletDecrypt/components/LedgerNano.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; - -import { SecureWalletName, ledgerReferralURL, HELP_ARTICLE } from 'config'; -import translate, { translateRaw } from 'translations'; -import { LedgerWallet } from 'libs/wallet'; -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { configSelectors, configNetworksStaticSelectors } from 'features/config'; -import { Spinner, NewTabLink, HelpLink } from 'components/ui'; -import UnsupportedNetwork from './UnsupportedNetwork'; -import DeterministicWalletsModal from './DeterministicWalletsModal'; -import './LedgerNano.scss'; - -interface OwnProps { - onUnlock(param: any): void; -} - -interface StateProps { - dPath: DPath | undefined; - dPaths: DPath[]; - network: NetworkConfig; -} - -interface State { - publicKey: string; - chainCode: string; - dPath: DPath; - error: string | null; - isLoading: boolean; -} - -type Props = OwnProps & StateProps; - -class LedgerNanoSDecryptClass extends PureComponent { - public state: State = { - publicKey: '', - chainCode: '', - dPath: this.props.dPath || this.props.dPaths[0], - error: null, - isLoading: false - }; - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.dPath !== nextProps.dPath && nextProps.dPath) { - this.setState({ dPath: nextProps.dPath }); - } - } - - public render() { - const { network } = this.props; - const { dPath, publicKey, chainCode, error, isLoading } = this.state; - const showErr = error ? 'is-showing' : ''; - - if (!dPath) { - return ; - } - - // TODO: This doesn't apply when WebUSB is used instead of U2F - if (!process.env.BUILD_ELECTRON && window.location.protocol !== 'https:') { - return ( -
    -
    - Unlocking a Ledger hardware wallet is only possible on pages served over HTTPS. You can - unlock your wallet at MyCrypto.com -
    -
    - ); - } - - return ( -
    -
    - {translate('LEDGER_TIP', { - $network: network.unit, - $browserSupportState: process.env.BUILD_ELECTRON - ? translateRaw('DISABLED') - : translateRaw('ENABLED') - })} -
    - - - - - {translate('LEDGER_REFERRAL_2')} - - -
    {error || '-'}
    - -
    - - {translate('HELP_ARTICLE_1')} - -
    - - -
    - ); - } - - private handlePathChange = (dPath: DPath) => { - this.handleConnect(dPath); - this.setState({ - dPath - }); - }; - - private handleConnect = (dPath: DPath) => { - this.setState({ - isLoading: true, - error: null - }); - - LedgerWallet.getChainCode(dPath.value) - .then(res => { - this.setState({ - publicKey: res.publicKey, - chainCode: res.chainCode, - isLoading: false - }); - }) - .catch(err => { - this.setState({ - error: translateRaw(err.message), - isLoading: false - }); - }); - }; - - private handleCancel = () => { - this.reset(); - }; - - private handleUnlock = (address: string, index: number) => { - this.props.onUnlock(new LedgerWallet(address, this.state.dPath.value, index)); - this.reset(); - }; - - private handleNullConnect = (): void => { - return this.handleConnect(this.state.dPath); - }; - - private reset() { - this.setState({ - publicKey: '', - chainCode: '', - dPath: this.props.dPath || this.props.dPaths[0] - }); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { - dPath: configSelectors.getSingleDPath(state, SecureWalletName.LEDGER_NANO_S), - dPaths: configNetworksStaticSelectors.getPaths(state, SecureWalletName.LEDGER_NANO_S), - network: configSelectors.getNetworkConfig(state) - }; -} - -export const LedgerNanoSDecrypt = connect(mapStateToProps)(LedgerNanoSDecryptClass); diff --git a/common/components/WalletDecrypt/components/Mnemonic.tsx b/common/components/WalletDecrypt/components/Mnemonic.tsx deleted file mode 100644 index dfe338bcf..000000000 --- a/common/components/WalletDecrypt/components/Mnemonic.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; -import { mnemonicToSeed, validateMnemonic } from 'bip39'; - -import { InsecureWalletName } from 'config'; -import translate, { translateRaw } from 'translations'; -import { formatMnemonic } from 'utils/formatters'; -import { AppState } from 'features/reducers'; -import { configSelectors, configNetworksStaticSelectors } from 'features/config'; -import { TogglablePassword } from 'components'; -import { Input } from 'components/ui'; -import DeterministicWalletsModal from './DeterministicWalletsModal'; - -interface OwnProps { - onUnlock(param: any): void; -} - -interface StateProps { - dPath: DPath; - dPaths: DPath[]; -} - -type Props = OwnProps & StateProps; - -interface State { - phrase: string; - formattedPhrase: string; - pass: string; - seed: string; - dPath: DPath; -} - -class MnemonicDecryptClass extends PureComponent { - public state: State = { - phrase: '', - formattedPhrase: '', - pass: '', - seed: '', - dPath: this.props.dPath - }; - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.dPath !== nextProps.dPath) { - this.setState({ dPath: nextProps.dPath }); - } - } - - public render() { - const { phrase, formattedPhrase, seed, dPath, pass } = this.state; - const isValidMnemonic = validateMnemonic(formattedPhrase); - - return ( - -
    -
    - -
    -
    -

    {translate('ADD_LABEL_8')}

    - -
    -
    - -
    -
    - - -
    - ); - } - - public onPasswordChange = (e: React.FormEvent) => { - this.setState({ pass: e.currentTarget.value }); - }; - - public onMnemonicChange = (e: React.FormEvent) => { - const phrase = e.currentTarget.value; - const formattedPhrase = formatMnemonic(phrase); - - this.setState({ - phrase, - formattedPhrase - }); - }; - - public onDWModalOpen = () => { - const { formattedPhrase, pass } = this.state; - - if (!validateMnemonic(formattedPhrase)) { - return; - } - - try { - const seed = mnemonicToSeed(formattedPhrase, pass).toString('hex'); - this.setState({ seed }); - } catch (err) { - console.log(err); - } - }; - - private handleCancel = () => { - this.setState({ seed: '' }); - }; - - private handlePathChange = (dPath: DPath) => { - this.setState({ dPath }); - }; - - private handleUnlock = (address: string, index: number) => { - const { formattedPhrase, pass, dPath } = this.state; - - this.props.onUnlock({ - path: `${dPath.value}/${index}`, - pass, - phrase: formattedPhrase, - address - }); - - this.setState({ - seed: '', - pass: '', - phrase: '', - formattedPhrase: '' - }); - }; -} - -function mapStateToProps(state: AppState): StateProps { - return { - // Mnemonic dPath is guaranteed to always be provided - dPath: configSelectors.getSingleDPath(state, InsecureWalletName.MNEMONIC_PHRASE) as DPath, - dPaths: configNetworksStaticSelectors.getPaths(state, InsecureWalletName.MNEMONIC_PHRASE) - }; -} - -export const MnemonicDecrypt = connect(mapStateToProps)(MnemonicDecryptClass); diff --git a/common/components/WalletDecrypt/components/ParitySigner.scss b/common/components/WalletDecrypt/components/ParitySigner.scss deleted file mode 100644 index 6ac13f825..000000000 --- a/common/components/WalletDecrypt/components/ParitySigner.scss +++ /dev/null @@ -1,37 +0,0 @@ -@import 'common/sass/variables'; - -.ParitySigner { - &-badge { - display: inline-block; - height: 3em; - margin: 0 0.4em; - } - &-fields { - display: flex; - flex-direction: column; - - &-field { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - flex: 1; - - &-margin { - margin-bottom: calc(1rem + 15px); - font-size: 1.2rem; - } - - & .AddressField { - width: 100%; - } - } - } - &-title { - text-align: center; - line-height: 1; - margin: $space 0 2rem; - font-weight: normal; - animation: decrypt-enter 500ms ease 1; - } -} diff --git a/common/components/WalletDecrypt/components/ParitySigner.tsx b/common/components/WalletDecrypt/components/ParitySigner.tsx deleted file mode 100644 index 7bdf3774a..000000000 --- a/common/components/WalletDecrypt/components/ParitySigner.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; - -import translate, { translateRaw } from 'translations'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import { ParitySignerWallet } from 'libs/wallet'; -import { wikiLink } from 'libs/wallet/non-deterministic/parity'; -import { notificationsActions } from 'features/notifications'; -import AppStoreBadge from 'assets/images/mobile/app-store-badge.png'; -import GooglePlayBadge from 'assets/images/mobile/google-play-badge.png'; -import { ParityQrSigner, AddressField } from 'components'; -import { NewTabLink } from 'components/ui'; - -import './ParitySigner.scss'; -interface OwnProps { - onUnlock(param: any): void; -} - -interface StateProps { - showNotification: notificationsActions.TShowNotification; - isValidAddress: ReturnType; -} - -type Props = OwnProps & StateProps; - -interface SignerAddress { - address: string; - chainId: number; -} - -type SignerQrContent = SignerAddress | string; - -class ParitySignerDecryptClass extends PureComponent { - public state = { - addressFromBook: '' - }; - - public render() { - const { addressFromBook } = this.state; - return ( -
    -

    {translate('SIGNER_SELECT_WALLET')}

    -
    -
    - -
    -
    - {translate('SIGNER_SELECT_WALLET_QR')} -
    -
    - -
    -
    -

    {translate('ADD_PARITY_4', { $wiki_link: wikiLink })}

    -

    {translate('ADD_PARITY_2')}

    -

    - - App Store - - - Google Play - -

    -
    - ); - } - - private handleSelectAddressFromBook = (ev: React.FormEvent) => { - const { - currentTarget: { value: addressFromBook } - } = ev; - this.setState({ addressFromBook }, () => { - this.props.onUnlock(new ParitySignerWallet(addressFromBook)); - }); - }; - - private unlockAddress = (content: SignerQrContent) => { - if (typeof content === 'string' || !this.props.isValidAddress(content.address)) { - this.props.showNotification('danger', 'Not a valid address!'); - return; - } - - this.props.onUnlock(new ParitySignerWallet(content.address)); - }; -} - -export const ParitySignerDecrypt = connect( - (state: AppState): StateProps => ({ - showNotification: notificationsActions.showNotification, - isValidAddress: configSelectors.getIsValidAddressFn(state) - }) -)(ParitySignerDecryptClass); diff --git a/common/components/WalletDecrypt/components/PrivateKey.tsx b/common/components/WalletDecrypt/components/PrivateKey.tsx deleted file mode 100644 index b931f9815..000000000 --- a/common/components/WalletDecrypt/components/PrivateKey.tsx +++ /dev/null @@ -1,125 +0,0 @@ -import React, { PureComponent } from 'react'; - -import translate, { translateRaw } from 'translations'; -import { isValidEncryptedPrivKey, isValidPrivKey } from 'libs/validators'; -import { stripHexPrefix } from 'libs/formatters'; -import { TogglablePassword } from 'components'; -import { Input } from 'components/ui'; - -export interface PrivateKeyValue { - key: string; - password: string; - valid: boolean; -} - -interface Validated { - fixedPkey: string; - isValidPkey: boolean; - isPassRequired: boolean; - valid: boolean; -} - -function validatePkeyAndPass(pkey: string, pass: string): Validated { - const fixedPkey = stripHexPrefix(pkey).trim(); - const validPkey = isValidPrivKey(fixedPkey); - const validEncPkey = isValidEncryptedPrivKey(fixedPkey); - const isValidPkey = validPkey || validEncPkey; - - let isValidPass = false; - - if (validPkey) { - isValidPass = true; - } else if (validEncPkey) { - isValidPass = pass.length > 0; - } - - return { - fixedPkey, - isValidPkey, - isPassRequired: validEncPkey, - valid: isValidPkey && isValidPass - }; -} - -interface Props { - value: PrivateKeyValue; - onChange(value: PrivateKeyValue): void; - onUnlock(): void; -} - -export class PrivateKeyDecrypt extends PureComponent { - public render() { - const { key, password } = this.props.value; - const { isValidPkey, isPassRequired } = validatePkeyAndPass(key, password); - const unlockDisabled = !isValidPkey || (isPassRequired && !password.length); - - return ( -
    -
    - -
    - {isValidPkey && isPassRequired && ( -
    - -
    - )} - -
    - ); - } - - private onPkeyChange = (e: React.FormEvent) => { - const pkey = e.currentTarget.value; - const pass = this.props.value.password; - const { fixedPkey, valid } = validatePkeyAndPass(pkey, pass); - - this.props.onChange({ ...this.props.value, key: fixedPkey, valid }); - }; - - private onPasswordChange = (e: React.FormEvent) => { - // NOTE: Textareas don't support password type, so we replace the value - // with an equal length number of dots. On change, we replace - const pkey = this.props.value.key; - const pass = e.currentTarget.value; - const { valid } = validatePkeyAndPass(pkey, pass); - - this.props.onChange({ - ...this.props.value, - password: pass, - valid - }); - }; - - private onKeyDown = (e: React.KeyboardEvent) => { - if (e.keyCode === 13) { - this.unlock(e); - } - }; - - private unlock = (e: React.SyntheticEvent) => { - e.preventDefault(); - e.stopPropagation(); - this.props.onUnlock(); - }; -} diff --git a/common/components/WalletDecrypt/components/SafeT.scss b/common/components/WalletDecrypt/components/SafeT.scss deleted file mode 100644 index c4e330839..000000000 --- a/common/components/WalletDecrypt/components/SafeT.scss +++ /dev/null @@ -1,31 +0,0 @@ -.SafeTminiDecrypt { - text-align: center; - - &-help { - margin-top: 10px; - font-size: 13px; - } - - &-error { - opacity: 0; - transition: none; - - &.is-showing { - opacity: 1; - } - } - - &-buy { - margin: 10px 0; - } - - &-message { - display: flex; - justify-content: center; - align-items: center; - - .Spinner { - margin-right: 16px; - } - } -} diff --git a/common/components/WalletDecrypt/components/SafeT.tsx b/common/components/WalletDecrypt/components/SafeT.tsx deleted file mode 100644 index 8bc9892f7..000000000 --- a/common/components/WalletDecrypt/components/SafeT.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; - -import { SecureWalletName, safeTReferralURL } from 'config'; -import translate, { translateRaw } from 'translations'; -import { SafeTWallet } from 'libs/wallet'; -import { AppState } from 'features/reducers'; -import { configSelectors, configNetworksStaticSelectors } from 'features/config'; -import { Spinner, NewTabLink } from 'components/ui'; -import UnsupportedNetwork from './UnsupportedNetwork'; -import DeterministicWalletsModal from './DeterministicWalletsModal'; -import './SafeT.scss'; - -//todo: conflicts with comment in walletDecrypt -> onUnlock method -interface OwnProps { - onUnlock(param: any): void; -} - -interface StateProps { - dPath: DPath | undefined; - dPaths: DPath[]; -} - -// todo: nearly duplicates ledger component props -interface State { - publicKey: string; - chainCode: string; - dPath: DPath; - error: string | null; - isLoading: boolean; -} - -type Props = OwnProps & StateProps; - -class SafeTminiDecryptClass extends PureComponent { - public state: State = { - publicKey: '', - chainCode: '', - dPath: this.props.dPath || this.props.dPaths[0], - error: null, - isLoading: false - }; - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.dPath !== nextProps.dPath && nextProps.dPath) { - this.setState({ dPath: nextProps.dPath }); - } - } - - public render() { - const { dPath, publicKey, chainCode, error, isLoading } = this.state; - const showErr = error ? 'is-showing' : ''; - - if (!dPath) { - return ; - } - - // todo: update help link - return ( -
    - - - - {translate('ORDER_SAFE_T')} - - -
    {error || '-'}
    - - -
    - ); - } - - private handlePathChange = (dPath: DPath) => { - this.setState({ dPath }); - this.handleConnect(dPath); - }; - - private handleConnect = (dPath: DPath): void => { - this.setState({ - isLoading: true, - error: null - }); - - SafeTWallet.getChainCode(dPath.value) - .then(res => { - this.setState({ - dPath, - publicKey: res.publicKey, - chainCode: res.chainCode, - isLoading: false - }); - }) - .catch(err => { - this.setState({ - error: err.message, - isLoading: false - }); - }); - }; - - private handleCancel = () => { - this.reset(); - }; - - private handleUnlock = (address: string, index: number) => { - this.props.onUnlock(new SafeTWallet(address, this.state.dPath.value, index)); - this.reset(); - }; - - private handleNullConnect = (): void => { - this.handleConnect(this.state.dPath); - }; - - private reset() { - this.setState({ - publicKey: '', - chainCode: '', - dPath: this.props.dPath || this.props.dPaths[0] - }); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { - dPath: configSelectors.getSingleDPath(state, SecureWalletName.SAFE_T), - dPaths: configNetworksStaticSelectors.getPaths(state, SecureWalletName.SAFE_T) - }; -} - -export const SafeTminiDecrypt = connect(mapStateToProps)(SafeTminiDecryptClass); diff --git a/common/components/WalletDecrypt/components/Trezor.scss b/common/components/WalletDecrypt/components/Trezor.scss deleted file mode 100644 index f7df6e66f..000000000 --- a/common/components/WalletDecrypt/components/Trezor.scss +++ /dev/null @@ -1,31 +0,0 @@ -.TrezorDecrypt { - text-align: center; - - &-help { - margin-top: 10px; - font-size: 13px; - } - - &-error { - opacity: 0; - transition: none; - - &.is-showing { - opacity: 1; - } - } - - &-buy { - margin: 10px 0; - } - - &-message { - display: flex; - justify-content: center; - align-items: center; - - .Spinner { - margin-right: 16px; - } - } -} diff --git a/common/components/WalletDecrypt/components/Trezor.tsx b/common/components/WalletDecrypt/components/Trezor.tsx deleted file mode 100644 index 39d6e6c62..000000000 --- a/common/components/WalletDecrypt/components/Trezor.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; - -import { SecureWalletName, trezorReferralURL } from 'config'; -import translate, { translateRaw } from 'translations'; -import { TrezorWallet } from 'libs/wallet'; -import { AppState } from 'features/reducers'; -import { configSelectors, configNetworksStaticSelectors } from 'features/config'; -import { Spinner, NewTabLink } from 'components/ui'; -import UnsupportedNetwork from './UnsupportedNetwork'; -import DeterministicWalletsModal from './DeterministicWalletsModal'; -import './Trezor.scss'; - -//todo: conflicts with comment in walletDecrypt -> onUnlock method -interface OwnProps { - onUnlock(param: any): void; -} - -interface StateProps { - dPath: DPath | undefined; - dPaths: DPath[]; -} - -// todo: nearly duplicates ledger component props -interface State { - publicKey: string; - chainCode: string; - dPath: DPath; - error: string | null; - isLoading: boolean; -} - -type Props = OwnProps & StateProps; - -class TrezorDecryptClass extends PureComponent { - public state: State = { - publicKey: '', - chainCode: '', - dPath: this.props.dPath || this.props.dPaths[0], - error: null, - isLoading: false - }; - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.dPath !== nextProps.dPath && nextProps.dPath) { - this.setState({ dPath: nextProps.dPath }); - } - } - - public render() { - const { dPath, publicKey, chainCode, error, isLoading } = this.state; - const showErr = error ? 'is-showing' : ''; - - if (!dPath) { - return ; - } - - return ( -
    - - - - {translate('ORDER_TREZOR')} - - -
    {error || '-'}
    - -
    - - {translate('HOWTO_TREZOR')} - -
    - - -
    - ); - } - - private handlePathChange = (dPath: DPath) => { - this.setState({ dPath }); - this.handleConnect(dPath); - }; - - private handleConnect = (dPath: DPath): void => { - this.setState({ - isLoading: true, - error: null - }); - - TrezorWallet.getChainCode(dPath.value) - .then(res => { - this.setState({ - dPath, - publicKey: res.publicKey, - chainCode: res.chainCode, - isLoading: false - }); - }) - .catch(err => { - this.setState({ - error: err.message, - isLoading: false - }); - }); - }; - - private handleCancel = () => { - this.reset(); - }; - - private handleUnlock = (address: string, index: number) => { - this.props.onUnlock(new TrezorWallet(address, this.state.dPath.value, index)); - this.reset(); - }; - - private handleNullConnect = (): void => { - this.handleConnect(this.state.dPath); - }; - - private reset() { - this.setState({ - publicKey: '', - chainCode: '', - dPath: this.props.dPath || this.props.dPaths[0] - }); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { - dPath: configSelectors.getSingleDPath(state, SecureWalletName.TREZOR), - dPaths: configNetworksStaticSelectors.getPaths(state, SecureWalletName.TREZOR) - }; -} - -export const TrezorDecrypt = connect(mapStateToProps)(TrezorDecryptClass); diff --git a/common/components/WalletDecrypt/components/UnsupportedNetwork.tsx b/common/components/WalletDecrypt/components/UnsupportedNetwork.tsx deleted file mode 100644 index 01a024c6a..000000000 --- a/common/components/WalletDecrypt/components/UnsupportedNetwork.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; - -interface StateProps { - network: NetworkConfig; -} - -interface OwnProps { - walletType: string | React.ReactElement; -} - -type Props = OwnProps & StateProps; - -const UnsupportedNetwork: React.SFC = ({ walletType, network }) => { - return ( -

    - {walletType} does not support the {network.name} network -

    - ); -}; - -export default connect( - (state: AppState): StateProps => ({ - network: configSelectors.getNetworkConfig(state) - }) -)(UnsupportedNetwork); diff --git a/common/components/WalletDecrypt/components/ViewOnly.scss b/common/components/WalletDecrypt/components/ViewOnly.scss deleted file mode 100644 index a90091694..000000000 --- a/common/components/WalletDecrypt/components/ViewOnly.scss +++ /dev/null @@ -1,26 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.ViewOnly { - &-fields { - display: flex; - flex-direction: column; - - &-field { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - flex: 1; - - &:nth-of-type(2) { - margin-bottom: calc(1rem + 15px); - font-size: 1.2rem; - } - - & .AddressField { - width: 100%; - } - } - } -} diff --git a/common/components/WalletDecrypt/components/ViewOnly.tsx b/common/components/WalletDecrypt/components/ViewOnly.tsx deleted file mode 100644 index 87898a10b..000000000 --- a/common/components/WalletDecrypt/components/ViewOnly.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import React, { PureComponent } from 'react'; -import { connect } from 'react-redux'; - -import translate, { translateRaw } from 'translations'; -import { AddressOnlyWallet } from 'libs/wallet'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { ICurrentTo } from 'features/types'; -import { configSelectors } from 'features/config'; -import { ensSelectors } from 'features/ens'; -import { AddressField } from 'components'; -import './ViewOnly.scss'; - -interface OwnProps { - onUnlock(param: any): void; -} - -interface StateProps { - isValidAddress: ReturnType; - currentAddress: ICurrentTo; - resolvedAddress: ReturnType; -} - -type Props = OwnProps & StateProps; - -interface State { - addressFromBook: string; -} - -class ViewOnlyDecryptClass extends PureComponent { - public state: State = { - addressFromBook: '' - }; - - public render() { - const { isValidAddress, currentAddress, resolvedAddress } = this.props; - const { addressFromBook } = this.state; - const isValid = - isValidAddress(currentAddress.raw) || (resolvedAddress && isValidAddress(resolvedAddress)); - - return ( -
    -
    -
    -
    - -
    -
    - {translate('OR')} -
    -
    - - -
    -
    -
    -
    - ); - } - - private handleSelectAddressFromBook = (ev: React.FormEvent) => { - const { - currentTarget: { value: addressFromBook } - } = ev; - this.setState({ addressFromBook }, this.openWallet); - }; - - private openWallet = () => { - const { isValidAddress, currentAddress, resolvedAddress, onUnlock } = this.props; - const { addressFromBook } = this.state; - - let wallet; - - if (isValidAddress(addressFromBook)) { - wallet = addressFromBook; - } else if (isValidAddress(currentAddress.raw)) { - wallet = currentAddress.raw; - } else if (resolvedAddress && isValidAddress(resolvedAddress)) { - wallet = resolvedAddress; - } - - if (wallet) { - onUnlock(new AddressOnlyWallet(wallet)); - } - }; -} - -export const ViewOnlyDecrypt = connect( - (state: AppState): StateProps => ({ - currentAddress: selectors.getCurrentTo(state), - isValidAddress: configSelectors.getIsValidAddressFn(state), - resolvedAddress: ensSelectors.getResolvedAddress(state) - }) -)(ViewOnlyDecryptClass); diff --git a/common/components/WalletDecrypt/components/WalletButton.scss b/common/components/WalletDecrypt/components/WalletButton.scss deleted file mode 100644 index 65630cf77..000000000 --- a/common/components/WalletDecrypt/components/WalletButton.scss +++ /dev/null @@ -1,244 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -@keyframes wallet-button-enter { - 0% { - opacity: 0; - transform: translateY(6px); - } - 100% { - opacity: 1; - transform: translateY(0px); - } -} - -.WalletButton { - position: relative; - flex: 1; - height: 155px; - max-width: 230px; - min-width: 200px; - padding: 25px 15px; - margin: 0 $space-md $space; - - background: color(control-bg); - box-shadow: 0 1px 4px rgba(#000, 0.2); - border-radius: 8px; - text-align: center; - cursor: pointer; - transition: transform 150ms ease, box-shadow 150ms ease; - animation: wallet-button-enter 400ms ease 1; - animation-fill-mode: backwards; - - @for $i from 0 to 6 { - &:nth-child(#{$i}) { - animation-delay: 100ms + ($i * 60ms); - } - } - - &:not(.is-disabled) { - &:hover, - &:focus { - transform: translateY(-2px); - z-index: 2; - box-shadow: 0 1px 4px rgba(#000, 0.12), 0 4px 6px rgba(#000, 0.12); - - .WalletButton-title { - color: color(brand-primary); - - &-icon { - opacity: 1; - } - } - } - - &:active { - transform: translateY(-1px); - box-shadow: 0 1px 2px rgba(#000, 0.2), 0 3px 4px rgba(#000, 0.2); - } - } - - &.is-disabled { - cursor: not-allowed; - @include show-tooltip-on-hover; - - .WalletButton-inner { - opacity: 0.3; - } - } - - &-inner { - transition: opacity 200ms ease; - } - - &-title { - display: flex; - justify-content: center; - align-items: center; - font-size: $font-size-medium; - margin-bottom: $space * 1.25; - transition: color 150ms ease; - - &-icon { - margin-right: 8px; - max-height: 26px; - opacity: 0.8; - - @include theme(dark) { - opacity: 1; - filter: invert(1); - - // Kind of hacky, but we don't want to invert metamask - &[src*='metamask'] { - filter: none; - } - } - } - } - - &-description { - color: shade-dark(0.65); - font-size: $font-size-small; - font-weight: lighter; - } - - &-example { - font-size: $font-size-xs; - color: color(brand-danger-light); - @include ellipsis; - } - - &-icons { - position: absolute; - bottom: 5px; - right: 5px; - - &-icon { - position: relative; - margin-left: 8px; - @include show-tooltip-on-hover; - - .fa { - position: relative; - opacity: 0.6; - font-size: $font-size-medium; - - &:hover { - opacity: 0.9; - } - - &-shield { - color: color(brand-primary); - } - - &-exclamation-triangle { - color: color(brand-warning); - } - - &-question-circle, - &-eye { - color: shade-dark(0.5); - } - - &-question-circle:hover { - color: color(brand-primary); - } - } - } - } - - &--small { - height: 105px; - max-width: 180px; - min-width: 160px; - margin: 0 $space-sm $space-md; - padding: 20px 15px; - - .WalletButton { - &-title { - font-size: $font-size-bump; - margin-bottom: $space-sm; - } - - &-icons { - &-icon { - margin-left: 6px; - - .fa { - font-size: $font-size-bump; - } - } - } - } - } - - // Mobile handling - @media screen and (max-width: $screen-xs) { - padding: 16px; - - &, - &--small { - height: auto; - width: 100%; - min-width: 100%; - max-width: none; - margin-left: 0; - margin-right: 0; - } - - &-title { - justify-content: flex-start; - margin: 0; - } - - &-description, - &-example { - display: none; - } - - &-icons { - top: 0; - right: 0; - bottom: 0; - - &-icon { - float: left; - display: block; - height: 100%; - margin: 0; - width: 48px; - text-align: center; - border-left: 1px solid rgba(0, 0, 0, 0.1); - - a { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - } - - .fa { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - } - } - } - - &--small { - padding: 12px; - - .WalletButton-title { - margin: 0; - } - - .WalletButton-icons { - &-icon { - margin: 0; - } - } - } - } -} diff --git a/common/components/WalletDecrypt/components/WalletButton.tsx b/common/components/WalletDecrypt/components/WalletButton.tsx deleted file mode 100644 index 8158b0aa8..000000000 --- a/common/components/WalletDecrypt/components/WalletButton.tsx +++ /dev/null @@ -1,163 +0,0 @@ -import React from 'react'; -import classnames from 'classnames'; - -import { WalletName } from 'config'; -import { translateRaw } from 'translations'; -import { NewTabLink, Tooltip } from 'components/ui'; -import './WalletButton.scss'; - -interface OwnProps { - name: string; - description?: string; - example?: string; - icon?: string; - helpLink: string; - walletType: WalletName; - isSecure?: boolean; - isReadOnly?: boolean; - isDisabled?: boolean; - disableReason?: string; - onClick(walletType: string): void; -} - -interface StateProps { - isFormatDisabled?: boolean; -} - -interface Icon { - icon: string; - tooltip: string; - href?: string; - arialabel: string; -} - -type Props = OwnProps & StateProps; - -export class WalletButton extends React.PureComponent { - public render() { - const { - name, - description, - example, - icon, - helpLink, - isSecure, - isReadOnly, - isDisabled, - disableReason - } = this.props; - - const icons: Icon[] = []; - if (isReadOnly) { - icons.push({ - icon: 'eye', - tooltip: translateRaw('TOOLTIP_READ_ONLY_WALLET'), - arialabel: 'Read Only' - }); - } else { - if (isSecure) { - icons.push({ - icon: 'shield', - tooltip: translateRaw('TOOLTIP_SECURE_WALLET_TYPE'), - arialabel: 'Secure wallet type' - }); - } else { - icons.push({ - icon: 'exclamation-triangle', - tooltip: translateRaw('TOOLTIP_INSECURE_WALLET_TYPE'), - arialabel: 'Insecure wallet type' - }); - } - } - if (helpLink) { - icons.push({ - icon: 'question-circle', - tooltip: translateRaw('TOOLTIP_MORE_INFO'), - href: helpLink, - arialabel: 'More info' - }); - } - - return ( -
    -
    -
    - {icon && {name} - {name} -
    - - {description && ( -
    - {description} -
    - )} - {example && ( -
    - {example} -
    - )} - -
    - {icons.map(i => { - const IconWrapper = (props: any) => { - if (isDisabled) { - return {props.children}; - } - - if (i.href) { - return ( - - {props.children} - - ); - } - - return props.children; - }; - - return ( - - - - - {!isDisabled && {i.tooltip}} - - ); - })} -
    -
    - - {isDisabled && disableReason && {disableReason}} -
    - ); - } - - private handleClick = () => { - if (this.props.isDisabled || this.props.isFormatDisabled) { - return; - } - - this.props.onClick(this.props.walletType); - }; - - private stopPropagation = (ev: React.FormEvent) => { - ev.stopPropagation(); - }; -} diff --git a/common/components/WalletDecrypt/components/Web3.scss b/common/components/WalletDecrypt/components/Web3.scss deleted file mode 100644 index 7130fd9ac..000000000 --- a/common/components/WalletDecrypt/components/Web3.scss +++ /dev/null @@ -1,21 +0,0 @@ -.Web3Decrypt { - text-align: center; - - &-help { - margin-top: 10px; - font-size: 13px; - } - - &-error { - opacity: 0; - transition: none; - - &.is-showing { - opacity: 1; - } - } - - &-install { - margin-top: 10px; - } -} diff --git a/common/components/WalletDecrypt/components/Web3.tsx b/common/components/WalletDecrypt/components/Web3.tsx deleted file mode 100644 index b29e84443..000000000 --- a/common/components/WalletDecrypt/components/Web3.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { NewTabLink } from 'components/ui'; -import './Web3.scss'; - -interface Props { - onUnlock(): void; -} - -export const Web3Decrypt: React.SFC = ({ onUnlock }) => ( -
    -
    - -
    - -
    - -
    - -

    - In order to use MetaMask with MyCrypto, your ad blocker must be disabled. -

    -
    -); diff --git a/common/components/WalletDecrypt/components/index.tsx b/common/components/WalletDecrypt/components/index.tsx deleted file mode 100644 index 3387229a5..000000000 --- a/common/components/WalletDecrypt/components/index.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export * from './DeterministicWalletsModal'; -export * from './InsecureWalletWarning'; -export * from './Keystore'; -export * from './LedgerNano'; -export * from './Mnemonic'; -export * from './ParitySigner'; -export * from './PrivateKey'; -export * from './Trezor'; -export * from './SafeT'; -export * from './ViewOnly'; -export * from './WalletButton'; -export * from './Web3'; diff --git a/common/components/WalletDecrypt/disables.ts b/common/components/WalletDecrypt/disables.ts deleted file mode 100644 index 6188a25bc..000000000 --- a/common/components/WalletDecrypt/disables.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { MiscWalletName, SecureWalletName, WalletName } from 'config'; - -export interface DisabledWallets { - wallets: WalletName[]; - reasons: { - [key: string]: string; - }; -} - -enum WalletMode { - READ_ONLY = 'READ_ONLY', - UNABLE_TO_SIGN = 'UNABLE_TO_SIGN' -} - -// Duplicating reasons is kind of tedious, but saves having to run through a -// bunch of loops to format it differently -export const DISABLE_WALLETS: { [key in WalletMode]: DisabledWallets } = { - [WalletMode.READ_ONLY]: { - wallets: [MiscWalletName.VIEW_ONLY], - reasons: { - [MiscWalletName.VIEW_ONLY]: 'Read only is not allowed' - } - }, - [WalletMode.UNABLE_TO_SIGN]: { - wallets: [SecureWalletName.TREZOR, SecureWalletName.SAFE_T, MiscWalletName.VIEW_ONLY], - reasons: { - [SecureWalletName.TREZOR]: 'This wallet can’t sign messages', - [SecureWalletName.SAFE_T]: 'This wallet can’t sign messages', - [MiscWalletName.VIEW_ONLY]: 'This wallet can’t sign messages' - } - } -}; diff --git a/common/components/WalletDecrypt/index.tsx b/common/components/WalletDecrypt/index.tsx deleted file mode 100644 index 2ca99876f..000000000 --- a/common/components/WalletDecrypt/index.tsx +++ /dev/null @@ -1,3 +0,0 @@ -export * from './disables'; - -export { default } from './WalletDecrypt'; diff --git a/common/components/index.ts b/common/components/index.ts deleted file mode 100644 index 688f845f1..000000000 --- a/common/components/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -export * from './DataField'; -export * from './GasLimitField'; -export * from './AmountField'; -export * from './SendEverything'; -export * from './UnitDropDown'; -export * from './CurrentCustomMessage'; -export * from './GenerateTransaction'; -export * from './SendButton'; -export * from './SigningStatus'; -export * from '../containers/Tabs/ScheduleTransaction/components'; -export { default as AddressField } from './AddressField'; -export { default as NonceField } from './NonceField'; -export { default as Header } from './Header'; -export { default as Footer } from './Footer'; -export { default as BalanceSidebar } from './BalanceSidebar'; -export { default as PaperWallet } from './PaperWallet'; -export { default as PrintableWallet } from './PrintableWallet'; -export { default as TXMetaDataPanel } from './TXMetaDataPanel'; -export { default as WalletDecrypt } from './WalletDecrypt'; -export { default as TogglablePassword } from './TogglablePassword'; -export { default as GenerateKeystoreModal } from './GenerateKeystoreModal'; -export { default as TransactionStatus } from './TransactionStatus'; -export { default as ParityQrSigner } from './ParityQrSigner'; -export { default as ElectronNav } from './ElectronNav'; -export { default as AddressBookTable } from './AddressBookTable'; -export { default as Errorable } from './Errorable'; diff --git a/common/components/renderCbs/FullWalletOnly.tsx b/common/components/renderCbs/FullWalletOnly.tsx deleted file mode 100644 index 511578883..000000000 --- a/common/components/renderCbs/FullWalletOnly.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import * as React from 'react'; -import { connect } from 'react-redux'; - -import { IWallet, IFullWallet } from 'libs/wallet'; -import { AppState } from 'features/reducers'; - -interface Props { - wallet: IWallet; - withFullWallet(wallet: IFullWallet): React.ReactElement; - withoutFullWallet(): React.ReactElement; -} - -class FullWalletOnly extends React.Component { - public render() { - const { wallet, withFullWallet, withoutFullWallet } = this.props; - if (!wallet || wallet.isReadOnly) { - if (withoutFullWallet) { - return withoutFullWallet(); - } - return null; - } - return withFullWallet(wallet); - } -} - -export default connect((state: AppState) => ({ - wallet: state.wallet.inst -}))(FullWalletOnly); diff --git a/common/components/renderCbs/OnlyUnlocked.tsx b/common/components/renderCbs/OnlyUnlocked.tsx deleted file mode 100644 index 7d8b39ac9..000000000 --- a/common/components/renderCbs/OnlyUnlocked.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { walletSelectors } from 'features/wallet'; - -interface OwnProps { - whenUnlocked: React.ReactElement | null; -} - -interface StateProps { - isUnlocked: boolean; -} - -function mapStateToProps(state: AppState) { - return { - isUnlocked: walletSelectors.isUnlocked(state) - }; -} - -class OnlyUnlockedClass extends Component { - public render() { - return this.props.isUnlocked ? this.props.whenUnlocked : null; - } -} - -export const OnlyUnlocked = connect(mapStateToProps)(OnlyUnlockedClass); diff --git a/common/components/renderCbs/SerializedTransaction.ts b/common/components/renderCbs/SerializedTransaction.ts deleted file mode 100644 index 9249928af..000000000 --- a/common/components/renderCbs/SerializedTransaction.ts +++ /dev/null @@ -1,37 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { makeTransaction, IHexStrTransaction } from 'libs/transaction'; -import { getTransactionFields } from 'libs/transaction/utils/ether'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; - -interface StateProps { - serializedTransaction: Buffer | null; -} - -interface Props { - withSerializedTransaction( - serializedTransaction: string, - transactionFields: IHexStrTransaction - ): React.ReactElement | null; -} - -class SerializedTransactionClass extends Component { - public render() { - const { serializedTransaction, withSerializedTransaction } = this.props; - return serializedTransaction - ? withSerializedTransaction( - serializedTransaction.toString('hex'), - getRawTxFields(serializedTransaction.toString('hex')) - ) - : null; - } -} - -const getRawTxFields = (serializedTransaction: string) => - getTransactionFields(makeTransaction(serializedTransaction)); - -export const SerializedTransaction = connect((state: AppState) => ({ - serializedTransaction: selectors.getSerializedTransaction(state) -}))(SerializedTransactionClass); diff --git a/common/components/renderCbs/index.ts b/common/components/renderCbs/index.ts deleted file mode 100644 index 3a6e32b8d..000000000 --- a/common/components/renderCbs/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './GasQuery'; -export * from './Query'; -export * from './OnlyUnlocked'; -export * from './WhenQueryExists'; -export * from './SerializedTransaction'; -export { default as FullWalletOnly } from './FullWalletOnly'; diff --git a/common/components/ui/Address.tsx b/common/components/ui/Address.tsx deleted file mode 100644 index a4ce6a03b..000000000 --- a/common/components/ui/Address.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { IWallet } from 'libs/wallet'; -import { BlockExplorerConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import NewTabLink from './NewTabLink'; - -interface BaseProps { - explorer?: BlockExplorerConfig | null; - address?: string | null; - wallet?: IWallet | null; -} - -interface StateProps { - toChecksumAddress: ReturnType; -} - -type Props = BaseProps & StateProps; - -export class Address extends React.PureComponent { - public render() { - const { wallet, address, explorer, toChecksumAddress } = this.props; - let renderAddress = ''; - if (address !== null && address !== undefined) { - renderAddress = address; - } else { - renderAddress = wallet !== null && wallet !== undefined ? wallet.getAddressString() : ''; - } - renderAddress = toChecksumAddress(renderAddress); - - if (explorer) { - return {renderAddress}; - } else { - return {renderAddress}; - } - } -} - -export default connect((state: AppState) => ({ - toChecksumAddress: configSelectors.getChecksumAddressFn(state) -}))(Address); diff --git a/common/components/ui/CodeBlock.scss b/common/components/ui/CodeBlock.scss deleted file mode 100644 index 9650cb76c..000000000 --- a/common/components/ui/CodeBlock.scss +++ /dev/null @@ -1,32 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.CodeBlock { - font-weight: 400; - font-size: 1rem; - color: color(control-color); - background-color: color(control-bg); - border: 1px solid color(control-border); - box-shadow: inset 0 1px 0 0 rgba(63, 63, 68, 0.05); - padding: 0.75rem 1rem; - margin: 0; - margin-bottom: 1rem; - font-size: 1rem; - border-radius: 2px; - overflow: auto; - & > code { - display: block; - text-align: left; - max-height: 320px; - border: none; - background-color: inherit; - font-size: 14px; - white-space: pre; - @include mono; - } - &.wrap { - & > code { - white-space: normal; - } - } -} diff --git a/common/components/ui/CodeBlock.tsx b/common/components/ui/CodeBlock.tsx deleted file mode 100644 index 115344de9..000000000 --- a/common/components/ui/CodeBlock.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; - -import './CodeBlock.scss'; - -interface Props { - children?: React.ReactNode; - className?: string; -} - -const CodeBlock = ({ children, className }: Props) => ( -
    -    {children}
    -  
    -); - -export default CodeBlock; diff --git a/common/components/ui/DateTime/CalendarContainer.tsx b/common/components/ui/DateTime/CalendarContainer.tsx deleted file mode 100644 index f9b550cbf..000000000 --- a/common/components/ui/DateTime/CalendarContainer.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React, { Component } from 'react'; -import DaysView from './DaysView'; -import MonthsView from './MonthsView'; -import YearsView from './YearsView'; -import { DatepickerCommonProps } from './DateTime'; - -interface Props { - view: string; - viewProps: DatepickerCommonProps; -} - -export default class CalendarContainer extends Component { - public render() { - switch (this.props.view) { - case 'days': - return ; - case 'months': - return ; - case 'years': - return ; - } - } -} diff --git a/common/components/ui/DateTime/ClickableWrapper.tsx b/common/components/ui/DateTime/ClickableWrapper.tsx deleted file mode 100644 index 0382992b2..000000000 --- a/common/components/ui/DateTime/ClickableWrapper.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React, { Component } from 'react'; -import onClickOutside from 'react-onclickoutside'; - -interface ClickableWrapperComponentProps { - className: any; - onClickOut(e: any): void; -} - -class ClickableWrapperComponent extends Component { - public render() { - return
    {this.props.children}
    ; - } - - public handleClickOutside(e: any) { - this.props.onClickOut(e); - } -} - -export const ClickableWrapper = onClickOutside(ClickableWrapperComponent); diff --git a/common/components/ui/DateTime/DateTime.tsx b/common/components/ui/DateTime/DateTime.tsx deleted file mode 100644 index c6a9808a9..000000000 --- a/common/components/ui/DateTime/DateTime.tsx +++ /dev/null @@ -1,660 +0,0 @@ -import React, { Component } from 'react'; -import moment from 'moment'; -import CalendarContainer from './CalendarContainer'; -import TimeView from './TimeView'; -import { ClickableWrapper } from './ClickableWrapper'; - -enum viewModes { - YEARS = 'years', - MONTHS = 'months', - DAYS = 'days' -} - -interface DatepickerFormats { - date: string; - datetime: string; - time: string; -} - -export interface DatepickerCommonProps { - addTime?: any; - dateFormat?: boolean | string; - handleClickOutside?: any; - localMoment?: any; - renderDay?: any; - renderInput?: any; - renderMonth?: any; - renderYear?: any; - selectedDate?: moment.Moment | null | undefined; - setDate?: any; - setTime?: any; - showView?: any; - subtractTime?: any; - updateSelectedDate?: any; - timeConstraints?: any; - timeFormat?: string | boolean; - value?: any; - viewDate?: any; - - isValidDate?(current: Date): boolean; -} - -interface DatepickerComponentProps { - className?: string; - date?: any; - defaultValue?: Date | string; - disableCloseOnClickOutside?: boolean; - displayTimeZone?: any; - inputProps: {}; - input?: boolean; - locale?: any; - open?: boolean; - renderInput?: any; - timeConstraints?: {}; - strictParsing?: boolean; - closeOnSelect?: boolean; - closeOnTab?: boolean; - utc?: boolean; - viewMode?: viewModes; - - onFocus?(): void; - onBlur?(e: any): void; - onChange(e: any): void; - onViewModeChange?(viewMode: viewModes): void; - onNavigateBack?(amount: any, type: any): void; - onNavigateForward?(amount: any, type: any): void; -} - -type Props = DatepickerCommonProps & DatepickerComponentProps; - -interface State { - currentView?: viewModes; - updateOn: viewModes; - inputFormat: string; - viewDate: moment.Moment; - selectedDate: moment.Moment | null | undefined; - inputValue: any; - open: any; -} - -export default class DateTime extends Component { - public static defaultProps: Props = { - className: '', - defaultValue: '', - inputProps: {}, - input: true, - onFocus() { - /**/ - }, - onBlur() { - /**/ - }, - onChange() { - /**/ - }, - onViewModeChange() { - /**/ - }, - onNavigateBack() { - /**/ - }, - onNavigateForward() { - /**/ - }, - timeFormat: true, - timeConstraints: {}, - dateFormat: true, - strictParsing: true, - closeOnSelect: false, - closeOnTab: true, - utc: false - }; - - public displayName = 'DateTime'; - public overridenEvents: any; - public tzWarning = false; - - public componentProps = { - fromProps: [ - 'value', - 'isValidDate', - 'renderDay', - 'renderMonth', - 'renderYear', - 'timeConstraints' - ], - fromState: ['viewDate', 'selectedDate', 'updateOn'], - fromThis: [ - 'setDate', - 'setTime', - 'showView', - 'addTime', - 'subtractTime', - 'updateSelectedDate', - 'localMoment', - 'handleClickOutside' - ] - }; - - public allowedSetTime = ['hours', 'minutes', 'seconds', 'milliseconds']; - - constructor(props: Props) { - super(props); - - this.overridenEvents = {}; - - this.state = this.getInitialState(); - - this.addTime = this.addTime.bind(this); - this.handleClickOutside = this.handleClickOutside.bind(this); - this.onInputChange = this.onInputChange.bind(this); - this.onInputKey = this.onInputKey.bind(this); - this.openCalendar = this.openCalendar.bind(this); - this.setDate = this.setDate.bind(this); - this.setTime = this.setTime.bind(this); - this.showView = this.showView.bind(this); - this.subtractTime = this.subtractTime.bind(this); - this.updateSelectedDate = this.updateSelectedDate.bind(this); - } - - public getInitialState() { - this.checkTZ(this.props); - - const state = this.getStateFromProps(this.props); - - if (state.open === undefined) { - state.open = !this.props.input; - } - - state.currentView = this.props.viewMode || state.updateOn || viewModes.DAYS; - - return state; - } - - public parseDate(date: any, formats: DatepickerFormats) { - let parsedDate; - - if (date && typeof date === 'string') { - parsedDate = this.localMoment(date, formats.datetime); - } else if (date) { - parsedDate = this.localMoment(date); - } - - if (parsedDate && !parsedDate.isValid()) { - parsedDate = null; - } - - return parsedDate; - } - - public getStateFromProps(props: Props): State { - const formats = this.getFormats(props); - const date = props.value || props.defaultValue; - let selectedDate; - let viewDate; - let updateOn; - let inputValue; - - selectedDate = this.parseDate(date, formats); - - viewDate = this.parseDate(props.viewDate, formats); - - viewDate = selectedDate - ? selectedDate.clone().startOf('month') - : viewDate - ? viewDate.clone().startOf('month') - : this.localMoment().startOf('month'); - - updateOn = this.getUpdateOn(formats); - - if (selectedDate) { - inputValue = selectedDate.format(formats.datetime); - } else if (date.isValid && !date.isValid()) { - inputValue = ''; - } else { - inputValue = date || ''; - } - - return { - updateOn, - inputFormat: formats.datetime, - viewDate, - selectedDate, - inputValue, - open: props.open - }; - } - - public getUpdateOn(formats: DatepickerFormats) { - if (formats.date.match(/[lLD]/)) { - return viewModes.DAYS; - } else if (formats.date.indexOf('M') !== -1) { - return viewModes.MONTHS; - } else if (formats.date.indexOf('Y') !== -1) { - return viewModes.YEARS; - } - - return viewModes.DAYS; - } - - public getFormats(props: Props): DatepickerFormats { - const formats: any = { - date: props.dateFormat || '', - time: props.timeFormat || '' - }; - - const locale = this.localMoment(props.date, null, props).localeData(); - - if (formats.date === true) { - formats.date = locale.longDateFormat('L'); - } else if (this.getUpdateOn(formats) !== viewModes.DAYS) { - formats.time = ''; - } - - if (formats.time === true) { - formats.time = locale.longDateFormat('LT'); - } - - if (typeof formats.date !== 'string' || typeof formats.time !== 'string') { - return {} as DatepickerFormats; - } - - formats.datetime = - formats.date && formats.time - ? formats.date + ' ' + formats.time - : formats.date || formats.time; - - return formats as DatepickerFormats; - } - - public componentWillReceiveProps(nextProps: Props) { - const formats = this.getFormats(nextProps); - - let updatedState: Partial = {}; - - if ( - nextProps.value !== this.props.value || - formats.datetime !== this.getFormats(this.props).datetime - ) { - updatedState = this.getStateFromProps(nextProps); - } - - if (updatedState.open === undefined) { - if (typeof nextProps.open !== 'undefined') { - updatedState.open = nextProps.open; - } else if (this.props.closeOnSelect) { - updatedState.open = false; - } else { - updatedState.open = this.state.open; - } - } - - if (nextProps.viewMode !== this.props.viewMode) { - updatedState.currentView = nextProps.viewMode; - } - - if (nextProps.locale !== this.props.locale) { - if (this.state.viewDate) { - const updatedViewDate = this.state.viewDate.clone().locale(nextProps.locale); - updatedState.viewDate = updatedViewDate; - } - if (this.state.selectedDate) { - const updatedSelectedDate = this.state.selectedDate.clone().locale(nextProps.locale); - updatedState.selectedDate = updatedSelectedDate; - updatedState.inputValue = updatedSelectedDate.format(formats.datetime); - } - } - - if ( - nextProps.utc !== this.props.utc || - nextProps.displayTimeZone !== this.props.displayTimeZone - ) { - if (nextProps.utc) { - if (this.state.viewDate) { - updatedState.viewDate = this.state.viewDate.clone().utc(); - } - if (this.state.selectedDate) { - updatedState.selectedDate = this.state.selectedDate.clone().utc(); - updatedState.inputValue = updatedState.selectedDate.format(formats.datetime); - } - } else if (nextProps.displayTimeZone) { - if (this.state.viewDate) { - updatedState.viewDate = this.state.viewDate.clone().tz(nextProps.displayTimeZone); - } - if (this.state.selectedDate) { - updatedState.selectedDate = this.state.selectedDate.clone().tz(nextProps.displayTimeZone); - updatedState.inputValue = updatedState.selectedDate - .tz(nextProps.displayTimeZone) - .format(formats.datetime); - } - } else { - if (this.state.viewDate) { - updatedState.viewDate = this.state.viewDate.clone().local(); - } - if (this.state.selectedDate) { - updatedState.selectedDate = this.state.selectedDate.clone().local(); - updatedState.inputValue = updatedState.selectedDate.format(formats.datetime); - } - } - } - - if (nextProps.viewDate !== this.props.viewDate) { - updatedState.viewDate = moment(nextProps.viewDate); - } - - this.checkTZ(nextProps); - - this.setState(updatedState as State); - } - - public onInputChange(e: any) { - const value = e.target === null ? e : e.target.value; - const localMoment = this.localMoment(value, this.state.inputFormat); - const update: any = { inputValue: value }; - - if (localMoment.isValid() && !this.props.value) { - update.selectedDate = localMoment; - update.viewDate = localMoment.clone().startOf('month'); - } else { - update.selectedDate = null; - } - - return this.setState(update, function() { - return this.props.onChange(localMoment.isValid() ? localMoment : this.state.inputValue); - }); - } - - public onInputKey(e: any) { - if (e.which === 9 && this.props.closeOnTab) { - this.closeCalendar(); - } - } - - public showView(view: viewModes) { - if (this.state.currentView !== view && this.props.onViewModeChange) { - this.props.onViewModeChange(view); - } - this.setState({ currentView: view }); - } - - public setDate(type: any) { - const me = this; - const nextViews: any = { - month: viewModes.DAYS, - year: viewModes.MONTHS - }; - - return (e: any) => { - me.setState({ - viewDate: (me.state.viewDate as any) - .clone() - [type](parseInt(e.target.getAttribute('data-value'), 10)) - .startOf(type), - currentView: nextViews[type] - }); - - if (me.props.onViewModeChange) { - me.props.onViewModeChange(nextViews[type]); - } - }; - } - - public subtractTime(amount: any, type: any, toSelected: any) { - if (this.props.onNavigateBack) { - this.props.onNavigateBack(amount, type); - } - - this.updateTime('subtract', amount, type, toSelected); - } - - public addTime(amount: any, type: any, toSelected: any) { - if (this.props.onNavigateForward) { - this.props.onNavigateForward(amount, type); - } - - this.updateTime('add', amount, type, toSelected); - } - - public updateTime(op: any, amount: any, type: any, toSelected: any) { - const update: any = {}; - const date = toSelected ? 'selectedDate' : 'viewDate'; - - update[date] = (this.state as any)[date].clone()[op](amount, type); - - this.setState(update); - } - - public setTime(type: any, value: any) { - let index = this.allowedSetTime.indexOf(type) + 1; - const state = this.state; - const date: any = (state.selectedDate || state.viewDate).clone(); - let nextType; - - // It is needed to set all the time properties - // to not to reset the time - date[type](value); - for (; index < this.allowedSetTime.length; index++) { - nextType = this.allowedSetTime[index]; - date[nextType](date[nextType]()); - } - - if (!this.props.value) { - this.setState({ - selectedDate: date, - inputValue: date.format(state.inputFormat) - }); - } - this.props.onChange(date); - } - - public updateSelectedDate(e: any, close: any) { - const target = e.currentTarget; - let modifier = 0; - const viewDate = this.state.viewDate; - const currentDate = this.state.selectedDate || viewDate; - let date: moment.Moment | null | undefined; - - if (target.className.indexOf('rdtDay') !== -1) { - if (target.className.indexOf('rdtNew') !== -1) { - modifier = 1; - } else if (target.className.indexOf('rdtOld') !== -1) { - modifier = -1; - } - - date = viewDate - .clone() - .month(viewDate.month() + modifier) - .date(parseInt(target.getAttribute('data-value'), 10)); - } else if (target.className.indexOf('rdtMonth') !== -1) { - date = viewDate - .clone() - .month(parseInt(target.getAttribute('data-value'), 10)) - .date(currentDate.date()); - } else if (target.className.indexOf('rdtYear') !== -1) { - date = viewDate - .clone() - .month(currentDate.month()) - .date(currentDate.date()) - .year(parseInt(target.getAttribute('data-value'), 10)); - } - - if (!date) { - return; - } - - date - .hours(currentDate.hours()) - .minutes(currentDate.minutes()) - .seconds(currentDate.seconds()) - .milliseconds(currentDate.milliseconds()); - - if (!this.props.value) { - const open = !(this.props.closeOnSelect && close); - if (!open && this.props.onBlur) { - this.props.onBlur(date); - } - - this.setState({ - selectedDate: date, - viewDate: date.clone().startOf('month'), - inputValue: date.format(this.state.inputFormat), - open - }); - } else { - if (this.props.closeOnSelect && close) { - this.closeCalendar(); - } - } - - this.props.onChange(date); - } - - public openCalendar(e: any) { - if (!this.state.open) { - this.setState({ open: true }, function() { - this.props.onFocus(e); - }); - } - } - - public closeCalendar() { - this.setState({ open: false }, function() { - this.props.onBlur(this.state.selectedDate || this.state.inputValue); - }); - } - - public handleClickOutside() { - if ( - this.props.input && - this.state.open && - this.props.open === undefined && - !this.props.disableCloseOnClickOutside - ) { - this.setState({ open: false }, function() { - this.props.onBlur(this.state.selectedDate || this.state.inputValue); - }); - } - } - - public localMoment(date?: any, format?: any, props?: any) { - props = props || this.props; - let m = null; - - if (props.utc) { - m = moment.utc(date, format, props.strictParsing); - } else if (props.displayTimeZone) { - m = moment.tz(date, format, props.displayTimeZone); - } else { - m = moment(date, format, props.strictParsing); - } - - if (props.locale) { - m.locale(props.locale); - } - return m; - } - - public checkTZ(props: Props) { - if (props.displayTimeZone && !this.tzWarning && !moment.tz) { - this.tzWarning = true; - console.error( - 'react-datetime: displayTimeZone prop with value "' + - props.displayTimeZone + - '" is used but moment.js timezone is not loaded.' - ); - } - } - - public getComponentProps(): DatepickerCommonProps { - const formats = this.getFormats(this.props); - const props: any = { dateFormat: formats.date, timeFormat: formats.time }; - - this.componentProps.fromProps.forEach(name => { - props[name] = (this.props as any)[name]; - }); - this.componentProps.fromState.forEach(name => { - props[name] = (this.state as any)[name]; - }); - this.componentProps.fromThis.forEach(name => { - props[name] = (this as any)[name]; - }); - - return props; - } - - public overrideEvent(handler: any, action: any) { - if (!this.overridenEvents[handler]) { - const me = this; - this.overridenEvents[handler] = (e: any) => { - let result; - if (me.props.inputProps && (me.props.inputProps as any)[handler]) { - result = (me.props.inputProps as any)[handler](e); - } - if (result !== false) { - action(e); - } - }; - } - - return this.overridenEvents[handler]; - } - - public getClassName() { - return ( - 'rdt' + - (this.props.className - ? Array.isArray(this.props.className) - ? ' ' + this.props.className.join(' ') - : ' ' + this.props.className - : '') - ); - } - - public render() { - let className = this.getClassName(); - let finalInputProps; - - if (this.props.input) { - finalInputProps = Object.assign( - { type: 'text', className: 'form-control', value: this.state.inputValue }, - this.props.inputProps, - { - onClick: this.overrideEvent('onClick', this.openCalendar), - onFocus: this.overrideEvent('onFocus', this.openCalendar), - onChange: this.overrideEvent('onChange', this.onInputChange), - onKeyDown: this.overrideEvent('onKeyDown', this.onInputKey) - } - ); - } else { - className += ' rdtStatic'; - } - - if (this.props.open || (this.props.open === undefined && this.state.open)) { - className += ' rdtOpen'; - } - - if (!this.state.currentView) { - return; - } - - const viewProps = this.getComponentProps(); - - return ( - - {this.props.input && this.props.renderInput ? ( -
    - {this.props.renderInput(finalInputProps, this.openCalendar, this.closeCalendar)} -
    - ) : ( - - )} -
    -
    - -
    - -
    -
    - ); - } -} diff --git a/common/components/ui/DateTime/DaysView.tsx b/common/components/ui/DateTime/DaysView.tsx deleted file mode 100644 index 4ad18820d..000000000 --- a/common/components/ui/DateTime/DaysView.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import React, { Component } from 'react'; -import moment from 'moment'; - -interface Props { - addTime?: any; - isValidDate?: any; - renderDay?: any; - selectedDate?: any; - showView?: any; - subtractTime?: any; - updateSelectedDate?: any; - viewDate?: any; -} - -export default class DateTimePickerDays extends Component { - public render() { - const date = this.props.viewDate; - const locale = date.localeData(); - - return ( -
    - - - - - - - - - {this.getDaysOfWeek(locale).map((day, index) => ( - - ))} - - - {this.renderDays()} -
    this.props.subtractTime(1, 'months')}> - - this.props.showView('months')} - colSpan={5} - data-value={this.props.viewDate.month()} - > - {locale.months(date) + ' ' + date.year()} - this.props.addTime(1, 'months')}> - -
    - {day} -
    -
    - ); - } - - /** - * Get a list of the days of the week - * depending on the current locale - * @return {array} A list with the shortname of the days - */ - public getDaysOfWeek(locale: any) { - const days = locale._weekdaysMin; - const first = locale.firstDayOfWeek(); - const dow: string[] = []; - - days.forEach((day: string, index: number) => { - dow[(7 + index - first) % 7] = day; - }); - - return dow; - } - - public renderDays() { - const date = this.props.viewDate; - const selected = this.props.selectedDate && this.props.selectedDate.clone(); - const prevMonth = date.clone().subtract(1, 'months'); - const currentYear = date.year(); - const currentMonth = date.month(); - const weeks = []; - let days = []; - const renderer = this.props.renderDay || this.renderDay; - const isValid = this.props.isValidDate || this.alwaysValidDate; - let classes; - let isDisabled; - let dayProps; - let currentDate; - - const endOfCurrentMonth = date.endOf('month'); - - // Go to the last week of the previous month - prevMonth.date(prevMonth.daysInMonth()).startOf('week'); - const lastDay = prevMonth.clone().add(42, 'd'); - - while (prevMonth.isBefore(lastDay)) { - classes = 'rdtDay'; - currentDate = prevMonth.clone(); - let rdtNew = false; - - if ( - (prevMonth.year() === currentYear && prevMonth.month() < currentMonth) || - prevMonth.year() < currentYear - ) { - classes += ' rdtOld'; - } else if ( - (prevMonth.year() === currentYear && prevMonth.month() > currentMonth) || - prevMonth.year() > currentYear - ) { - rdtNew = true; - } - - if (selected && prevMonth.isSame(selected, 'day')) { - classes += ' rdtActive'; - } - - if (prevMonth.isSame(moment(), 'day')) { - classes += ' rdtToday'; - } - - isDisabled = !isValid(currentDate, selected); - if (isDisabled) { - classes += ' rdtDisabled'; - } - - if (!rdtNew) { - dayProps = { - key: prevMonth.format('M_D'), - 'data-value': prevMonth.date(), - className: classes - }; - - if (!isDisabled) { - (dayProps as any).onClick = (event: any) => this.updateSelectedDate(event); - } - - days.push(renderer(dayProps, currentDate, selected)); - } - - if ( - days.length === 7 || - (prevMonth.date() === endOfCurrentMonth.date() && prevMonth.month() === currentMonth) - ) { - weeks.push({days}); - - days = []; - } - - prevMonth.add(1, 'd'); - } - - return weeks; - } - - public updateSelectedDate(event: any) { - this.props.updateSelectedDate(event, true); - } - - public renderDay(props: any[], currentDate: any) { - return {currentDate.date()}; - } - - public alwaysValidDate() { - return 1; - } -} diff --git a/common/components/ui/DateTime/MonthsView.tsx b/common/components/ui/DateTime/MonthsView.tsx deleted file mode 100644 index 0f1bf497d..000000000 --- a/common/components/ui/DateTime/MonthsView.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import React, { Component } from 'react'; - -function capitalize(str: string) { - return str.charAt(0).toUpperCase() + str.slice(1); -} - -interface Props { - addTime?: any; - isValidDate?: any; - renderMonth?: any; - selectedDate?: any; - setDate?: any; - showView?: any; - subtractTime?: any; - updateOn?: any; - updateSelectedDate?: any; - viewDate?: any; -} - -export default class DateTimePickerMonths extends Component { - constructor(props: any) { - super(props); - - this.renderMonth = this.renderMonth.bind(this); - } - - public render() { - return ( -
    - - - - - - - - -
    this.props.subtractTime(1, 'years')}> - - this.props.showView('years')} - colSpan={2} - data-value={this.props.viewDate.year()} - > - {this.props.viewDate.year()} - this.props.addTime(1, 'years')}> - -
    - - {this.renderMonths()} -
    -
    - ); - } - - private renderMonths() { - const date = this.props.selectedDate; - const month = this.props.viewDate.month(); - const year = this.props.viewDate.year(); - const rows = []; - let i = 0; - let months = []; - const renderer = this.props.renderMonth || this.renderMonth; - const isValid = this.props.isValidDate || this.alwaysValidDate; - let classes; - let props; - let isDisabled; - let noOfDaysInMonth; - let daysInMonth; - let validDay; - // Date is irrelevant because we're only interested in month - const irrelevantDate = 1; - - let currentMonth: any; - - while (i < 12) { - classes = 'rdtMonth'; - currentMonth = this.props.viewDate.clone().set({ year, month: i, date: irrelevantDate }); - - noOfDaysInMonth = currentMonth.endOf('month').format('D'); - // tslint:disable-next-line:variable-name - daysInMonth = Array.from({ length: noOfDaysInMonth }, (_e: any, j: number) => { - return j + 1; - }); - - validDay = daysInMonth.find(d => { - const day = currentMonth.clone().set('date', d); - return isValid(day); - }); - - isDisabled = validDay === undefined; - - if (isDisabled) { - classes += ' rdtDisabled'; - } - - if (date && i === date.month() && year === date.year()) { - classes += ' rdtActive'; - } - - props = { - key: i, - 'data-value': i, - className: classes - }; - - if (!isDisabled) { - (props as any).onClick = this.props.setDate('month'); - } - - months.push(renderer(props, i, year, date && date.clone())); - - if (months.length === 4) { - rows.push({months}); - months = []; - } - - i++; - } - - return rows; - } - - private renderMonth(props: any, month: any) { - const localMoment = this.props.viewDate; - const monthStr = localMoment.localeData().monthsShort(localMoment.month(month)); - const strLength = 3; - // Because some months are up to 5 characters long, we want to - // use a fixed string length for consistency - const monthStrFixedLength = monthStr.substring(0, strLength); - - return {capitalize(monthStrFixedLength)}; - } - - private alwaysValidDate() { - return 1; - } -} diff --git a/common/components/ui/DateTime/TimeView.tsx b/common/components/ui/DateTime/TimeView.tsx deleted file mode 100644 index 5e72c064c..000000000 --- a/common/components/ui/DateTime/TimeView.tsx +++ /dev/null @@ -1,295 +0,0 @@ -import React, { Component } from 'react'; -import { DatepickerCommonProps } from './DateTime'; - -interface State { - [key: string]: any; - - hours: any; - minutes: any; - seconds: any; - milliseconds: any; - daypart: string | boolean; - counters: string[]; -} - -type Props = DatepickerCommonProps; - -export default class DateTimePickerTime extends Component { - public timeConstraints: any; - public timer: NodeJS.Timer; - public increaseTimer: NodeJS.Timer; - public mouseUpListener: () => void; - public padValues = { - hours: 1, - minutes: 2, - seconds: 2, - milliseconds: 3 - }; - - constructor(props: any) { - super(props); - - this.state = this.getInitialState(); - } - - public getInitialState() { - return this.calculateState(this.props); - } - - public calculateState(props: Props): State { - const date = props.selectedDate || props.viewDate; - const counters = []; - - const { timeFormat } = this.props; - - if (!timeFormat || typeof timeFormat !== 'string') { - return {} as State; - } - - if (timeFormat.toLowerCase().indexOf('h') !== -1) { - counters.push('hours'); - if (timeFormat.indexOf('m') !== -1) { - counters.push('minutes'); - if (timeFormat.indexOf('s') !== -1) { - counters.push('seconds'); - } - } - } - - const hours = date.format('H'); - - let daypart: boolean | string = false; - if (this.state !== null && timeFormat.toLowerCase().indexOf(' a') !== -1) { - if (timeFormat.indexOf(' A') !== -1) { - daypart = hours >= 12 ? 'PM' : 'AM'; - } else { - daypart = hours >= 12 ? 'pm' : 'am'; - } - } - - return { - hours, - minutes: date.format('mm'), - seconds: date.format('ss'), - milliseconds: date.format('SSS'), - daypart, - counters - }; - } - - public renderCounter(type: string) { - const { timeFormat } = this.props; - - if (type === 'daypart') { - return ''; - } - - let value = (this.state as any)[type]; - if ( - type === 'hours' && - (timeFormat && - typeof timeFormat === 'string' && - timeFormat.toLowerCase().indexOf(' a') !== -1) - ) { - value = ((value - 1) % 12) + 1; - - if (value === 0) { - value = 12; - } - } - - return ( -
    - - ▲ - -
    {value}
    - - ▼ - -
    - ); - } - - public render() { - const { timeFormat } = this.props; - const counters: any[] = []; - - this.state.counters.forEach((c: any) => { - if (counters.length) { - counters.push( -
    - : -
    - ); - } - - counters.push(this.renderCounter(c)); - }); - - if (this.state.daypart !== false) { - counters.push( -
    - - ▲ - -
    {this.state.daypart}
    - - ▼ - -
    - ); - } - - if ( - this.state.counters.length === 3 && - timeFormat && - typeof timeFormat === 'string' && - timeFormat.indexOf('S') !== -1 - ) { - counters.push(
    , ':'); - counters.push( -
    - -
    - ); - } - - return ( -
    - - - - - - -
    -
    {counters}
    -
    -
    - ); - } - - public componentWillMount() { - this.timeConstraints = { - hours: { - min: 0, - max: 23, - step: 1 - }, - minutes: { - min: 0, - max: 59, - step: 1 - }, - seconds: { - min: 0, - max: 59, - step: 1 - }, - milliseconds: { - min: 0, - max: 999, - step: 1 - } - }; - ['hours', 'minutes', 'seconds', 'milliseconds'].forEach(type => { - Object.assign(this.timeConstraints[type], this.props.timeConstraints[type]); - }); - this.setState(this.calculateState(this.props)); - } - - public componentWillReceiveProps(nextProps: Props) { - this.setState(this.calculateState(nextProps)); - } - - public updateMilli(e: any) { - const milli = parseInt(e.target.value, 10); - if (milli === e.target.value && milli >= 0 && milli < 1000) { - this.props.setTime('milliseconds', milli); - this.setState({ milliseconds: milli }); - } - } - - public onStartClicking(action: any, type: any) { - const me = this; - - return () => { - const update: any = {}; - update[type] = (me as any)[action](type); - me.setState(update); - - me.timer = setTimeout(() => { - me.increaseTimer = setInterval(() => { - update[type] = (me as any)[action](type); - me.setState(update); - }, 70); - }, 500); - - me.mouseUpListener = () => { - clearTimeout(me.timer); - clearInterval(me.increaseTimer); - me.props.setTime(type, me.state[type]); - document.body.removeEventListener('mouseup', me.mouseUpListener); - document.body.removeEventListener('touchend', me.mouseUpListener); - }; - - document.body.addEventListener('mouseup', me.mouseUpListener); - document.body.addEventListener('touchend', me.mouseUpListener); - }; - } - - public disableContextMenu(event: any) { - event.preventDefault(); - return false; - } - - public toggleDayPart(type: string) { - // type is always 'hours' - let value = parseInt(this.state[type], 10) + 12; - if (value > this.timeConstraints[type].max) { - value = this.timeConstraints[type].min + (value - (this.timeConstraints[type].max + 1)); - } - return this.pad(type, value); - } - - public increase(type: any) { - let value = parseInt(this.state[type], 10) + this.timeConstraints[type].step; - if (value > this.timeConstraints[type].max) { - value = this.timeConstraints[type].min + (value - (this.timeConstraints[type].max + 1)); - } - return this.pad(type, value); - } - - public decrease(type: any) { - let value = parseInt(this.state[type], 10) - this.timeConstraints[type].step; - if (value < this.timeConstraints[type].min) { - value = this.timeConstraints[type].max + 1 - (this.timeConstraints[type].min - value); - } - return this.pad(type, value); - } - - public pad(type: any, value: any) { - let str = value + ''; - while (str.length < (this.padValues as any)[type]) { - str = '0' + str; - } - return str; - } -} diff --git a/common/components/ui/DateTime/YearsView.tsx b/common/components/ui/DateTime/YearsView.tsx deleted file mode 100644 index 97c6f03ae..000000000 --- a/common/components/ui/DateTime/YearsView.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { Component } from 'react'; -import { DatepickerCommonProps } from './DateTime'; - -interface OwnProps { - updateOn?: string; -} - -type Props = DatepickerCommonProps & OwnProps; - -export default class DateTimePickerYears extends Component { - public render() { - const year = this.props.viewDate.year(); - - return ( -
    - - - - - - - - -
    this.props.subtractTime(10, 'years')}> - - this.props.showView('years')} colSpan={2}> - {year + '-' + (year + 9)} - this.props.addTime(10, 'years')}> - -
    - - {this.renderYears(year)} -
    -
    - ); - } - - public renderYears(year: number) { - let years = []; - let i = -1; - const rows = []; - const renderer = this.props.renderYear || this.renderYear; - const selectedDate = this.props.selectedDate; - const isValid: any = this.props.isValidDate || this.alwaysValidDate; - let classes; - let props: any; - let currentYear: any; - let isDisabled; - let noOfDaysInYear; - let daysInYear; - let validDay; - // Month and date are irrelevant here because - // we're only interested in the year - const irrelevantMonth = 0; - const irrelevantDate = 1; - - year--; - while (i < 11) { - classes = 'rdtYear'; - currentYear = this.props.viewDate - .clone() - .set({ year, month: irrelevantMonth, date: irrelevantDate }); - - noOfDaysInYear = currentYear.endOf('year').format('DDD'); - // tslint:disable-next-line:variable-name - daysInYear = Array.from({ length: noOfDaysInYear }, (_e, j) => { - return j + 1; - }); - - validDay = daysInYear.find(d => { - const day = currentYear.clone().dayOfYear(d); - return isValid(day); - }); - - isDisabled = validDay === undefined; - - if (isDisabled) { - classes += ' rdtDisabled'; - } - - if (selectedDate && selectedDate.year() === year) { - classes += ' rdtActive'; - } - - props = { - key: year, - 'data-value': year, - className: classes - }; - - if (!isDisabled) { - props.onClick = - this.props.updateOn === 'years' ? this.updateSelectedYear : this.props.setDate('year'); - } - - years.push(renderer(props, year, selectedDate && selectedDate.clone())); - - if (years.length === 4) { - rows.push({years}); - years = []; - } - - year++; - i++; - } - - return rows; - } - - public updateSelectedYear(event: any) { - this.props.updateSelectedDate(event); - } - - public renderYear(props: Props, year: number) { - return {year}; - } - - public alwaysValidDate() { - return 1; - } -} diff --git a/common/components/ui/Dropdown.tsx b/common/components/ui/Dropdown.tsx deleted file mode 100644 index 62f614f58..000000000 --- a/common/components/ui/Dropdown.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import Select, { ReactSelectProps, Option } from 'react-select'; - -interface Props extends ReactSelectProps { - className?: string; - options: any; - onChange: any; -} - -interface State { - selectedOption: any; - hasBlurred: boolean; -} - -export default class Dropdown extends React.Component { - public state: State = { - selectedOption: this.props.value || '', - hasBlurred: false - }; - - public componentDidUpdate(_: Props, prevState: State) { - const { value } = this.props; - const { selectedOption } = prevState; - - if (selectedOption !== value) { - this.setState({ selectedOption: value }); - } - } - - public handleChange = (selectedOption: Option) => { - this.setState({ selectedOption }); - }; - - public formatOptions = (options: Option[]) => { - if (typeof options[0] === 'object') { - return options; - } - const formatted = options.map(opt => { - return { value: opt, label: opt }; - }); - return formatted; - }; - - public render() { - const { onChange } = this.props; - const { selectedOption } = this.state; - const options = this.formatOptions(this.props.options); - - return ( - -  {option} - - ))} -
    -); - -export default GroupedRadioToggle; diff --git a/common/components/ui/Help.scss b/common/components/ui/Help.scss deleted file mode 100644 index 83f5178b8..000000000 --- a/common/components/ui/Help.scss +++ /dev/null @@ -1,29 +0,0 @@ -.Help { - display: inline-block; - margin-left: 8px; - box-sizing: border-box; - line-height: inherit; - vertical-align: top; - transition: opacity 0.3s; - - & img { - display: block; - height: inherit; - width: inherit; - } - - &-x1 { - height: 1rem; - width: 1rem; - } - - &-x2 { - height: 1.5rem; - width: 1.5rem; - } - - &-x3 { - height: 2rem; - width: 2rem; - } -} diff --git a/common/components/ui/Help.tsx b/common/components/ui/Help.tsx deleted file mode 100644 index 4165a0942..000000000 --- a/common/components/ui/Help.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; - -import icon from 'assets/images/icon-help-3.svg'; -import './Help.scss'; - -type Size = 'x1' | 'x2' | 'x3'; - -interface Props { - link?: string; - size?: Size; - className?: string; -} - -const Help = ({ size = 'x1', link, className }: Props) => { - return ( - - help - - ); -}; - -export default Help; diff --git a/common/components/ui/Identicon.scss b/common/components/ui/Identicon.scss deleted file mode 100644 index af87829e4..000000000 --- a/common/components/ui/Identicon.scss +++ /dev/null @@ -1,23 +0,0 @@ -.Identicon { - position: relative; - width: 4rem; - height: 4rem; - - &-img { - display: block; - height: 100%; - width: 100%; - padding: 0px; - border-radius: 50%; - } - - &-shadow { - position: absolute; - height: 100%; - width: 100%; - top: 0; - border-radius: 50%; - pointer-events: none; - box-shadow: 0 1px 2px rgba(#000, 0.15), 0 0 3px rgba(#000, 0.15) inset; - } -} diff --git a/common/components/ui/Identicon.tsx b/common/components/ui/Identicon.tsx deleted file mode 100644 index acafaf6c5..000000000 --- a/common/components/ui/Identicon.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import makeBlockie from 'ethereum-blockies-base64'; - -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import './Identicon.scss'; - -interface OwnProps { - address: string; - className?: string; - size?: string; -} - -interface StateProps { - isValidAddress: ReturnType; -} - -type Props = OwnProps & StateProps; - -const Identicon: React.SFC = props => { - const size = props.size || '4rem'; - const { address, isValidAddress, className = '' } = props; - const identiconDataUrl = isValidAddress(address) ? makeBlockie(address) : ''; - - return ( - // Use inline styles for printable wallets -
    - {identiconDataUrl && ( - Unique Address Image - )} -
    -
    - ); -}; - -export default connect( - (state: AppState): StateProps => ({ - isValidAddress: configSelectors.getIsValidAddressFn(state) - }) -)(Identicon); diff --git a/common/components/ui/InlineSpinner.scss b/common/components/ui/InlineSpinner.scss deleted file mode 100644 index 34b39ecb9..000000000 --- a/common/components/ui/InlineSpinner.scss +++ /dev/null @@ -1,37 +0,0 @@ -@import 'common/sass/variables'; - -.InlineSpinner { - color: color(gray-light); - display: flex; - align-items: center; - font-weight: 400; - opacity: 0; - pointer-events: none; - - .Spinner { - margin-left: 8px; - } - - &--fade { - &-enter, - &-exit { - transition: opacity $transition-speed; - } - - &-enter { - opacity: 0; - - &-active { - opacity: 1; - } - } - - &-exit { - opacity: 1; - - &-active { - opacity: 0; - } - } - } -} diff --git a/common/components/ui/InlineSpinner.tsx b/common/components/ui/InlineSpinner.tsx deleted file mode 100644 index f02012c85..000000000 --- a/common/components/ui/InlineSpinner.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; -import { CSSTransition } from 'react-transition-group'; - -import { Spinner } from 'components/ui'; -import './InlineSpinner.scss'; - -interface Props { - active: boolean; - text?: string; -} - -export const InlineSpinner: React.SFC = ({ active, text }) => ( - - {/* TODO: when react-transition-group v2.3 releases, use '-done' classes instead of conditional 'active' class https://github.com/reactjs/react-transition-group/issues/274 */} -
    - {text} - -
    -
    -); diff --git a/common/components/ui/Modal/index.tsx b/common/components/ui/Modal/index.tsx deleted file mode 100644 index 26c705470..000000000 --- a/common/components/ui/Modal/index.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import React, { PureComponent } from 'react'; -import { createPortal } from 'react-dom'; -import { TransitionGroup, CSSTransition } from 'react-transition-group'; - -import ModalBody from './ModalBody'; -import './index.scss'; - -export interface IButton { - text: string | React.ReactElement; - type?: 'default' | 'primary' | 'success' | 'info' | 'warning' | 'danger' | 'link'; - disabled?: boolean; - onClick?(): void; -} -interface Props { - isOpen?: boolean; - title?: React.ReactNode; - disableButtons?: boolean; - hideButtons?: boolean; - children: React.ReactNode; - buttons?: IButton[]; - maxWidth?: number; - handleClose(): void; -} -interface ModalStyle { - width?: string; - maxWidth?: string; -} - -const Fade = ({ ...props }: any) => ( - -); - -export default class Modal extends PureComponent { - public modalParent: HTMLElement; - public modalBody: ModalBody; - - public componentDidUpdate(prevProps: Props) { - if (prevProps.isOpen !== this.props.isOpen) { - document.body.classList.toggle('no-scroll', !!this.props.isOpen); - } - } - - public componentDidMount() { - const modalEl = document.getElementById('ModalContainer'); - if (modalEl) { - this.modalParent = document.createElement('div'); - modalEl.appendChild(this.modalParent); - } - } - - public componentWillUnmount() { - document.body.classList.remove('no-scroll'); - const modalEl = document.getElementById('ModalContainer'); - if (modalEl) { - modalEl.removeChild(this.modalParent); - } - } - - public render() { - const { - isOpen, - title, - children, - buttons, - disableButtons, - hideButtons, - handleClose, - maxWidth - } = this.props; - const hasButtons = buttons && buttons.length; - const modalStyle: ModalStyle = {}; - - if (maxWidth) { - modalStyle.width = '100%'; - modalStyle.maxWidth = `${maxWidth}px`; - } - - const modalBodyProps = { - title, - children, - modalStyle, - hasButtons, - buttons, - disableButtons, - hideButtons, - handleClose - }; - - const modal = ( - - {isOpen && ( - // Trap focus in modal by focusing the first element after the animation is complete - this.modalBody.firstTabStop.focus()}> -
    -
    - (this.modalBody = div as ModalBody)} /> -
    - - )} - - ); - - if (this.modalParent) { - return createPortal(modal, this.modalParent); - } else { - return modal; - } - } -} diff --git a/common/components/ui/OldDropdown.tsx b/common/components/ui/OldDropdown.tsx deleted file mode 100644 index fd17f2167..000000000 --- a/common/components/ui/OldDropdown.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import React, { PureComponent } from 'react'; - -import classnames from 'classnames'; -import DropdownShell from './DropdownShell'; - -interface Props { - value: T | undefined; - options: T[]; - ariaLabel: string; - label?: string; - extra?: any; - size?: string; - color?: string; - menuAlign?: string; - formatTitle?(option: T): any; - onChange?(value: T): void; -} - -interface State { - search: string; -} - -export default class DropdownComponent extends PureComponent, State> { - public state = { - search: '' - }; - - private dropdownShell: DropdownShell | null; - - public render() { - const { ariaLabel, color, size } = this.props; - - return ( - (this.dropdownShell = el)} - /> - ); - } - - private renderLabel = () => { - const { value } = this.props; - const labelStr = this.props.label ? `${this.props.label}:` : ''; - return ( - - {labelStr} {this.formatTitle(value)} - - ); - }; - - private renderOptions = () => { - const { options, value, menuAlign, extra } = this.props; - const { search } = this.state; - const searchable = options.length > 20; - const menuClass = classnames({ - 'dropdown-menu': true, - [`dropdown-menu-${menuAlign || ''}`]: !!menuAlign - }); - const searchableStyle = { - maxHeight: '300px', - overflowY: 'auto' as 'auto' - }; - const searchRegex = new RegExp(search, 'gi'); - const onSearchChange = (e: React.FormEvent) => { - this.setState({ search: e.currentTarget.value }); - }; - - return ( - - ); - }; - - private formatTitle = (option: any) => { - if (this.props.formatTitle) { - return this.props.formatTitle(option); - } else { - return option; - } - }; - - private onChange = (value: any) => { - if (this.props.onChange) { - this.props.onChange(value); - } - if (this.dropdownShell) { - this.dropdownShell.close(); - } - }; -} diff --git a/common/components/ui/PrimaryToggle.scss b/common/components/ui/PrimaryToggle.scss deleted file mode 100644 index ff6100904..000000000 --- a/common/components/ui/PrimaryToggle.scss +++ /dev/null @@ -1,49 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.PrimaryToggle { - margin: 0; - margin-top: 14px; - box-sizing: border-box; - font-size: 0; - display: flex; - flex-flow: row nowrap; - justify-content: flex-start; - align-items: stretch; - - &-input { - width: 0; - height: 0; - position: absolute; - left: -9999px; - } - - &-label { - margin: 0; - padding: .75rem 1rem; - box-sizing: border-box; - position: relative; - display: inline-block; - border: solid 1px color(control-border); - background-color: color(pane-bg); - font-size: 1rem; - line-height: 140%; - font-weight: bold; - text-align: center; - cursor: pointer; - transition: border-color .15s ease-out, color .25s ease-out, background-color .15s ease-out, box-shadow .15s ease-out; - - @media screen and (min-width: $screen-lg) and (max-width: 1419px) { - padding: 0.75rem 0.5rem; - } - - &:first-of-type { border-right: none;} - &:last-of-type { border-left: none;} - } - - &-label.active { - background-color: color(brand-primary); - color: #FFF; - z-index: 1; - } -} diff --git a/common/components/ui/PrimaryToggle.tsx b/common/components/ui/PrimaryToggle.tsx deleted file mode 100644 index cdcd11ecc..000000000 --- a/common/components/ui/PrimaryToggle.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, { ChangeEvent, ReactElement } from 'react'; - -import './PrimaryToggle.scss'; - -export interface RadioOption { - label: string | ReactElement; - value: string; -} - -interface Props { - options: RadioOption[]; - selectedValue: any; - onChangeHandler(event: ChangeEvent): any; -} - -const PrimaryToggle: React.SFC = ({ onChangeHandler, options, selectedValue }) => ( -
    - {options.map((option, index) => ( - - ))} -
    -); - -export default PrimaryToggle; diff --git a/common/components/ui/SimpleButton.scss b/common/components/ui/SimpleButton.scss deleted file mode 100644 index da3187f91..000000000 --- a/common/components/ui/SimpleButton.scss +++ /dev/null @@ -1,7 +0,0 @@ -.SimpleButton { - display: flex; - align-items: center; - > .Spinner { - margin-right: 16px; - } -} diff --git a/common/components/ui/SimpleButton.tsx b/common/components/ui/SimpleButton.tsx deleted file mode 100644 index 595bfc683..000000000 --- a/common/components/ui/SimpleButton.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React, { Component } from 'react'; - -import Spinner from './Spinner'; -import './SimpleButton.scss'; - -const DEFAULT_BUTTON_TYPE = 'primary'; -const DEFAULT_BUTTON_SIZE = 'lg'; - -type ButtonType = 'default' | 'primary' | 'success' | 'info' | 'warning' | 'danger'; -type ButtonSize = 'lg' | 'sm' | 'xs'; - -interface Props { - text: string; - loading?: boolean; - disabled?: boolean; - loadingText?: string; - size?: ButtonSize; - type?: ButtonType; - onClick(): any; -} - -export default class SimpleButton extends Component { - public computedClass = () => { - return `btn btn-${this.props.size || DEFAULT_BUTTON_TYPE} btn-${this.props.type || - DEFAULT_BUTTON_SIZE}`; - }; - - public render() { - const { loading, disabled, loadingText, text, onClick } = this.props; - return ( -
    - -
    - ); - } -} diff --git a/common/components/ui/Spinner.scss b/common/components/ui/Spinner.scss deleted file mode 100644 index b4bc031ab..000000000 --- a/common/components/ui/Spinner.scss +++ /dev/null @@ -1,68 +0,0 @@ -@import 'common/sass/variables'; - -.Spinner { - animation: rotate 2s linear infinite; - - &-x1 { - height: 1em; - width: 1em; - } - - &-x2 { - height: 2em; - width: 2em; - } - - &-x3 { - height: 3em; - width: 3em; - } - - &-x4 { - height: 4em; - width: 4em; - } - - &-x5 { - height: 5em; - width: 5em; - } - - & .path { - stroke-linecap: round; - animation: dash 1.5s ease-in-out infinite; - } - - &-light { - & .path { - stroke: color(loader-light); - } - } - - &-dark { - & .path { - stroke: color(loader-dark); - } - } -} - -@keyframes rotate { - 100% { - transform: rotate(360deg); - } -} - -@keyframes dash { - 0% { - stroke-dasharray: 1, 150; - stroke-dashoffset: 0; - } - 50% { - stroke-dasharray: 90, 150; - stroke-dashoffset: -35; - } - 100% { - stroke-dasharray: 90, 150; - stroke-dashoffset: -124; - } -} diff --git a/common/components/ui/SwapDropdown.scss b/common/components/ui/SwapDropdown.scss deleted file mode 100644 index 67e27a852..000000000 --- a/common/components/ui/SwapDropdown.scss +++ /dev/null @@ -1,138 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -$menu-max-width: 540px; -$menu-padding: 10px; -$menu-triangle-size: 14px; -$menu-offset: 40px; -$option-width: ($menu-max-width - $menu-padding * 2) / 3; -$option-width-main: ($menu-max-width - $menu-padding * 2) / 2; -$option-width-small: $option-width-main; -$option-width-main-small: 100%; - -.SwapDropdown { - position: relative; - margin-left: $space-xs; - - &-button { - height: 3rem; - padding-left: $space; - padding-right: $space; - - &-logo { - height: 1.4rem; - margin: -.2rem .3rem 0 -.2rem; - width: auto; - } - - &-label { - padding-right: .75rem; - - &:after { - content: ''; - position: absolute; - top: 50%; - right: .75rem; - @include triangle(8px, color(text-color), down); - } - } - } - - &-menu { - position: absolute; - top: 100%; - right: -$menu-offset; - z-index: $zindex-popover; - - &-content { - display: flex; - flex-wrap: wrap; - flex-direction: row; - width: calc(100vw - 30px); - max-width: $menu-max-width; - padding: $menu-padding; - background: color(control-bg); - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); - border-radius: 4px; - font-size: 0.8rem; - } - - &-triangle { - position: absolute; - top: -($menu-triangle-size / 2); - right: $menu-offset + 40px; - width: $menu-triangle-size; - height: $menu-triangle-size; - background: color(control-bg); - box-shadow: -1px -1px 1px rgba(0, 0, 0, 0.1); - transform: rotate(45deg); - } - } -} - -.SwapOption { - @include reset-button; - display: flex; - flex-direction: column; - align-items: center; - width: 100%; - max-width: $option-width; - padding: $space-sm $space-md; - text-align: left; - background: transparent; - color: color(text-color); - transition: $transition; - - @media (max-width: $screen-sm) { - width: 50%; - max-width: none; - } - - &:hover { - color: color(text-color-inverted); - background: color(brand-info); - } - - &-top { - display: flex; - flex-direction: row; - margin-bottom: $space-xs; - } - - &-logo { - height: 1.2rem; - width: auto; - margin-right: $space-xs; - - .is-main > & { - height: 2.6rem; - margin-right: $space-md; - } - } - - &-ticker { - } - - &-name { - font-weight: 300; - } - - &.is-main { - flex-direction: row; - justify-content: center; - max-width: $option-width-main; - padding: $space $space-md; - font-size: 1rem; - - @media (max-width: $screen-sm) { - width: 50%; - max-width: none; - } - } - - &.is-disabled { - filter: grayscale(1); - opacity: 0.3; - pointer-events: none; - } -} diff --git a/common/components/ui/SwapDropdown.tsx b/common/components/ui/SwapDropdown.tsx deleted file mode 100644 index 758a1a333..000000000 --- a/common/components/ui/SwapDropdown.tsx +++ /dev/null @@ -1,205 +0,0 @@ -import React, { PureComponent } from 'react'; -import classnames from 'classnames'; -import { Option } from 'react-select'; - -import './SwapDropdown.scss'; - -export interface SingleCoin { - id: string; - name: string; - image: string; - status: string; -} - -interface Props { - options: SingleCoin[]; - disabledOption?: string; - value: string; - onChange(value: SingleCoin): void; -} - -interface State { - isOpen: boolean; - mainOptions: SingleCoin[]; - otherOptions: SingleCoin[]; -} - -const MAIN_OPTIONS = ['ETH', 'BTC']; - -class SwapDropdown extends PureComponent { - public state: State = { - isOpen: false, - mainOptions: [], - otherOptions: [] - }; - - public dropdown: HTMLDivElement | null; - - public UNSAFE_componentWillMount() { - this.buildOptions(this.props.options); - document.addEventListener('click', this.handleBodyClick); - } - - public componentWillUnmount() { - document.removeEventListener('click', this.handleBodyClick); - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.options !== nextProps.options) { - this.buildOptions(nextProps.options); - } - } - - public render() { - const { options, value, disabledOption } = this.props; - const { isOpen, mainOptions, otherOptions } = this.state; - - const selectedOption = options.find(opt => opt.name === value); - - return ( -
    (this.dropdown = el)}> - - - {isOpen && ( -
    - -
    - {mainOptions.map(opt => ( - - ))} - {otherOptions.map(opt => ( - - ))} -
    -
    - )} -
    - ); - } - - private toggleMenu = () => { - this.setState({ isOpen: !this.state.isOpen }); - }; - - private handleChange = (coin: SingleCoin) => { - this.props.onChange(coin); - if (this.state.isOpen) { - this.toggleMenu(); - } - }; - - private handleBodyClick = (ev: MouseEvent) => { - if (!this.state.isOpen || !this.dropdown) { - return; - } - - if ( - ev.target !== this.dropdown && - ev.target instanceof HTMLElement && - !this.dropdown.contains(ev.target) - ) { - this.toggleMenu(); - } - }; - - private buildOptions(options: Props['options']) { - const mainOptions: SingleCoin[] = []; - let otherOptions: SingleCoin[] = []; - - options.forEach(opt => { - if (MAIN_OPTIONS.includes(opt.id)) { - mainOptions.push(opt); - } else { - otherOptions.push(opt); - } - }); - - // Sort non-main coins alphabetically - otherOptions = otherOptions.sort((opt1, opt2) => - opt1.id.toLowerCase() > opt2.id.toLowerCase() ? 1 : -1 - ); - - // Sort unavailable options last - otherOptions = otherOptions.sort((opt1, opt2) => { - if (opt1.status === 'available' && opt2.status === 'unavailable') { - return -1; - } - - if (opt1.status === 'available' && opt2.status === 'available') { - return 0; - } - - if (opt1.status === 'unavailable' && opt2.status === 'available') { - return 1; - } - - return 0; - }); - - this.setState({ mainOptions, otherOptions }); - } -} - -interface SwapOptionProps { - option: SingleCoin; - isMain?: boolean; - isDisabled?: boolean; - onChange(opt: Option): void; -} - -const SwapOption: React.SFC = ({ option, isMain, isDisabled, onChange }) => { - const handleChange = (ev: React.MouseEvent) => { - ev.preventDefault(); - onChange({ - label: option.id, - value: option.name - }); - }; - - const classNames = classnames('SwapOption', isMain && 'is-main', isDisabled && 'is-disabled'); - - return ( - - ); -}; - -export default SwapDropdown; diff --git a/common/components/ui/Toggle.scss b/common/components/ui/Toggle.scss deleted file mode 100644 index 2613be4ae..000000000 --- a/common/components/ui/Toggle.scss +++ /dev/null @@ -1,71 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -$slider-radius: 26px; -$transition-time: .4s; -$toggle-color: color(brand-primary); -$travel-distance: 38px; - -.Toggle { - $root: &; - - position: relative; - display: inline-block; - width: 72px; - height: 34px; - margin: 5px 0; - - &-input { - display: none; - - &:checked + #{$root}-slider { - background-color: $toggle-color; - - &::before { - -webkit-transform: translateX($travel-distance); - -ms-transform: translateX($travel-distance); - transform: translateX($travel-distance); - } - } - - &:focus + #{$root}-slider { - box-shadow: 0 0 1px $toggle-color; - } - } - - &-slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #ccc; - -webkit-transition: $transition-time; - transition: $transition-time; - - @include theme('dark') { - background: #393f4c; - } - - &.round { - border-radius: 34px; - - &::before { - border-radius: 50%; - } - } - - &::before { - position: absolute; - content: ""; - height: $slider-radius; - width: $slider-radius; - left: 4px; - bottom: 4px; - background-color: white; - -webkit-transition: $transition-time; - transition: $transition-time; - } - } -} diff --git a/common/components/ui/Toggle.tsx b/common/components/ui/Toggle.tsx deleted file mode 100644 index af8ef6432..000000000 --- a/common/components/ui/Toggle.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React, { ChangeEvent } from 'react'; - -import './Toggle.scss'; - -interface Props { - checked: boolean; - onChangeHandler(event: ChangeEvent): any; -} - -const Toggle: React.SFC = ({ checked, onChangeHandler }) => ( - -); - -export default Toggle; diff --git a/common/components/ui/Tooltip.scss b/common/components/ui/Tooltip.scss deleted file mode 100644 index 7641b448a..000000000 --- a/common/components/ui/Tooltip.scss +++ /dev/null @@ -1,114 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.Tooltip { - display: flex; - justify-content: center; - position: absolute; - top: 0; - left: 50%; - width: 220px; - color: color(tooltip-color); - font-size: $font-size-small; - font-family: $font-family-sans-serif; - pointer-events: none; - opacity: 0; - visibility: hidden; - transform: translate(-50%, -100%) translateY(-$tooltip-start-distance); - transition-property: opacity, transform, visibility; - transition-duration: 100ms, 100ms, 0ms; - transition-delay: 0ms, 0ms, 100ms; - z-index: $zindex-tooltip; - - > span { - display: inline-block; - background: color(tooltip-bg); - border-radius: 3px; - padding: 6px 10px; - - &:after { - position: absolute; - content: ''; - bottom: 0; - left: 50%; - transform: translate(-50%, 100%); - @include triangle($tooltip-arrow-size * 2, color(tooltip-bg), down); - } - } - - // Sizing, medium is default - &.is-size-sm { - width: 200px; - font-size: $font-size-xs; - - > span { - padding: 4px 8px; - border-radius: 2px; - - &:after { - border-width: $tooltip-arrow-size - 1; - } - } - } - - &.is-size-lg { - width: 240px; - font-size: $font-size-base; - - > span { - padding: 8px 12px; - border-radius: 4px; - - &:after { - border-width: $tooltip-arrow-size + 1; - } - } - } - - // Direction, top is default - &.is-direction-left { - left: 0; - top: 50%; - justify-content: flex-end; - transform: translate(-100%, -50%) translateX(-$tooltip-start-distance); - - > span:after { - bottom: 50%; - right: 0; - left: auto; - transform: translate(100%, 50%); - border-top-color: transparent; - border-left-color: color(tooltip-bg); - } - } - - &.is-direction-right { - left: auto; - right: 0; - top: 50%; - justify-content: flex-start; - transform: translate(100%, -50%) translateX($tooltip-start-distance); - - > span:after { - bottom: 50%; - left: 0; - transform: translate(-100%, 50%); - border-top-color: transparent; - border-right-color: color(tooltip-bg); - } - } - - &.is-direction-bottom { - top: auto; - bottom: 0; - transform: translate(-50%, 100%) translateY($tooltip-start-distance); - - > span:after { - bottom: auto; - top: 0; - transform: translate(-50%, -100%); - border-top-color: transparent; - border-bottom-color: color(tooltip-bg); - } - } -} diff --git a/common/components/ui/Tooltip.tsx b/common/components/ui/Tooltip.tsx deleted file mode 100644 index 57da1a361..000000000 --- a/common/components/ui/Tooltip.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import classnames from 'classnames'; - -import './Tooltip.scss'; - -interface Props { - children: React.ReactElement | string; - size?: 'sm' | 'md' | 'lg'; - direction?: 'top' | 'bottom' | 'left' | 'right'; -} - -const Tooltip: React.SFC = ({ size, direction, children }) => ( -
    - {children} -
    -); - -export default Tooltip; diff --git a/common/components/ui/UnitDisplay.tsx b/common/components/ui/UnitDisplay.tsx deleted file mode 100644 index d3fba45c4..000000000 --- a/common/components/ui/UnitDisplay.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { fromTokenBase, getDecimalFromEtherUnit, UnitKey, Wei, TokenValue } from 'libs/units'; -import { formatNumber as format } from 'utils/formatters'; -import { AppState } from 'features/reducers'; -import { configMetaSelectors } from 'features/config'; -import Spinner from 'components/ui/Spinner'; - -interface Props { - /** - * @description base value of the token / ether, incase of waiting for API calls, we can return '???' - * @type {TokenValue | Wei} - * @memberof Props - */ - value?: TokenValue | Wei | null; - /** - * @description Symbol to display to the right of the value, such as 'ETH' - * @type {string} - * @memberof Props - */ - symbol?: string | null; - /** - * @description display the long balance, if false, trims it to 3 decimal places, if a number is specified then that number is the number of digits to be displayed. - * @type {boolean} - * @memberof Props - */ - displayShortBalance?: boolean | number; - displayTrailingZeroes?: boolean; - checkOffline?: boolean; -} - -interface EthProps extends Props { - unit: UnitKey; -} -interface TokenProps extends Props { - decimal: number; -} - -const isEthereumUnit = (param: EthProps | TokenProps): param is EthProps => - !!(param as EthProps).unit; - -const UnitDisplay: React.SFC = params => { - const { value, symbol, displayShortBalance, displayTrailingZeroes, checkOffline } = params; - let element; - - if (!value) { - element = ; - } else { - const convertedValue = isEthereumUnit(params) - ? fromTokenBase(value, getDecimalFromEtherUnit(params.unit)) - : fromTokenBase(value, params.decimal); - - let formattedValue; - - if (displayShortBalance) { - const digits = typeof displayShortBalance === 'number' ? displayShortBalance : 4; - formattedValue = format(convertedValue, digits); - // If the formatted value was too low, display something like < 0.01 - if (parseFloat(formattedValue) === 0 && parseFloat(convertedValue) !== 0) { - const padding = digits !== 0 ? `.${'0'.repeat(digits - 1)}1` : ''; - formattedValue = `< 0${padding}`; - } else if (displayTrailingZeroes) { - const [whole, deci] = formattedValue.split('.'); - formattedValue = `${whole}.${(deci || '').padEnd(digits, '0')}`; - } - } else { - formattedValue = convertedValue; - } - - element = ( - - {formattedValue} - {symbol ? <> {symbol} : ''} - - ); - } - - return checkOffline ? {element} : element; -}; - -export default UnitDisplay; - -/** - * @description Helper component for displaying alternate text when offline. - * Circumvents typescript issue with union props on connected components. - */ -interface OfflineProps { - offline: AppState['config']['meta']['offline']; - children: React.ReactElement; -} - -class OfflineDisplay extends React.Component { - public render() { - if (this.props.offline) { - return Balance isn't available offline; - } else { - return this.props.children; - } - } -} - -function mapStateToOfflineProps(state: AppState) { - return { - offline: configMetaSelectors.getOffline(state) - }; -} - -const ConnectedOfflineDisplay = connect(mapStateToOfflineProps)(OfflineDisplay); diff --git a/common/components/ui/UnlockHeader.scss b/common/components/ui/UnlockHeader.scss deleted file mode 100644 index 7da5af98a..000000000 --- a/common/components/ui/UnlockHeader.scss +++ /dev/null @@ -1,18 +0,0 @@ -@import 'common/sass/variables'; -@import 'common/sass/mixins'; - -.UnlockHeader { - position: relative; - - &-open { - position: absolute; - top: 0; - right: 0; - padding-right: none; - z-index: 30; - - &-text { - padding-right: 8px; - } - } -} diff --git a/common/components/ui/UnlockHeader.tsx b/common/components/ui/UnlockHeader.tsx deleted file mode 100644 index dffac2abf..000000000 --- a/common/components/ui/UnlockHeader.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { RouteComponentProps, withRouter } from 'react-router-dom'; - -import translate from 'translations'; -import { IWallet } from 'libs/wallet/IWallet'; -import { AppState } from 'features/reducers'; -import WalletDecrypt, { DisabledWallets } from 'components/WalletDecrypt'; -import './UnlockHeader.scss'; - -interface OwnProps { - title?: string; - wallet: IWallet; - disabledWallets?: DisabledWallets; - showGenerateLink?: boolean; -} - -interface State { - isExpanded: boolean; -} - -type Props = OwnProps & RouteComponentProps<{}>; -export class UnlockHeader extends React.PureComponent { - public state = { - isExpanded: !this.props.wallet - }; - - public componentDidUpdate(prevProps: Props) { - if (this.props.wallet !== prevProps.wallet) { - this.setState({ isExpanded: !this.props.wallet }); - } - } - - public render() { - const { title, wallet, disabledWallets, showGenerateLink, history } = this.props; - const { isExpanded } = this.state; - - return ( -
    - {title &&

    {title}

    } - {wallet && !isExpanded && ( - - )} -
    - ); - } -} - -function mapStateToProps(state: AppState) { - return { - wallet: state.wallet.inst - }; -} - -export default withRouter(connect(mapStateToProps)(UnlockHeader)); diff --git a/common/components/ui/index.ts b/common/components/ui/index.ts deleted file mode 100644 index bf891c58b..000000000 --- a/common/components/ui/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -export { default as Dropdown } from './Dropdown'; -export { default as OldDropDown } from './OldDropdown'; -export { default as DropdownShell } from './DropdownShell'; -export { default as Identicon } from './Identicon'; -export { default as Modal } from './Modal'; -export { default as UnlockHeader } from './UnlockHeader'; -export { default as QRCode } from './QRCode'; -export { default as NewTabLink } from './NewTabLink'; -export { default as UnitDisplay } from './UnitDisplay'; -export { default as Spinner } from './Spinner'; -export { default as SwapDropdown } from './SwapDropdown'; -export { default as Tooltip } from './Tooltip'; -export { default as HelpLink } from './HelpLink'; -export { default as Input } from './Input'; -export { default as TextArea } from './TextArea'; -export { default as Address } from './Address'; -export { default as CodeBlock } from './CodeBlock'; -export { default as Toggle } from './Toggle'; -export { default as Warning } from './Warning'; -export * from './InlineSpinner'; diff --git a/common/components/v2/index.ts b/common/components/v2/index.ts deleted file mode 100644 index 5ecdd1f34..000000000 --- a/common/components/v2/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './ui'; diff --git a/common/components/v2/ui/Modal/Modal.scss b/common/components/v2/ui/Modal/Modal.scss deleted file mode 100644 index 91e9e3d5a..000000000 --- a/common/components/v2/ui/Modal/Modal.scss +++ /dev/null @@ -1,12 +0,0 @@ -.Modalz { - position: fixed; - display: flex; - align-items: center; - justify-content: center; - width: 100vw; - min-height: 100vh; - z-index: 20; - background: rgba(0, 0, 0, 0.2); - border-radius: 6px; - z-index: 9999; -} diff --git a/common/components/v2/ui/Modal/Modal.tsx b/common/components/v2/ui/Modal/Modal.tsx deleted file mode 100644 index fea523934..000000000 --- a/common/components/v2/ui/Modal/Modal.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react'; - -import './Modal.scss'; - -const Modal: React.StatelessComponent<{}> = ({ children }) => { - return
    {children}
    ; -}; - -export default Modal; diff --git a/common/components/v2/ui/index.ts b/common/components/v2/ui/index.ts deleted file mode 100644 index c6b35681c..000000000 --- a/common/components/v2/ui/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as Modal } from './Modal'; diff --git a/common/config/bity.ts b/common/config/bity.ts deleted file mode 100644 index 1ff1e6e47..000000000 --- a/common/config/bity.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { BTCTxExplorer, ETHTxExplorer } from './data'; - -export type WhitelistedCoins = 'BTC' | 'REP' | 'ETH' | 'XMR'; -const serverURL = 'https://bity.myetherapi.com'; -const bityURL = 'https://bity.com/api'; -const BTCMin = 0.01; -const BTCMax = 3; - -// while Bity is supposedly OK with any order that is at least 0.01 BTC Worth, the order will fail if you send 0.01 BTC worth of ETH. -// This is a bad magic number, but will suffice for now -// value = percent higher/lower than 0.01 BTC worth -const buffers = { - ETH: 0.1, - REP: 0.2, - XMR: 0.3 -}; - -// rate must be BTC[KIND] -export function generateKindMin(BTCKINDRate: number, kind: keyof typeof buffers): number { - const kindMinVal = BTCKINDRate * BTCMin; - return kindMinVal + kindMinVal * buffers[kind]; -} - -// rate must be BTC[KIND] -export function generateKindMax(BTCKINDRate: number, kind: keyof typeof buffers): number { - const kindMax = BTCKINDRate * BTCMax; - return kindMax - kindMax * buffers[kind]; -} - -export const bityConfig = { - serverURL, - bityURL, - ETHTxExplorer, - BTCTxExplorer, - BTCMin, - BTCMax, - validStatus: ['RCVE', 'FILL', 'CONF', 'EXEC'], - invalidStatus: ['CANC'], - postConfig: { - headers: { - 'Content-Type': 'application/json; charset:UTF-8' - } - } -}; diff --git a/common/config/constants.ts b/common/config/constants.ts deleted file mode 100644 index 4ee74c8e1..000000000 --- a/common/config/constants.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Lower/upper ranges for gas limit -export const GAS_LIMIT_LOWER_BOUND = 21000; -export const GAS_LIMIT_UPPER_BOUND = 8000000; - -// Lower/upper ranges for gas price in gwei -export const GAS_PRICE_GWEI_LOWER_BOUND = 0.01; -export const GAS_PRICE_GWEI_UPPER_BOUND = 3000; -export const GAS_PRICE_GWEI_DEFAULT = 20; diff --git a/common/config/contracts/eth.json b/common/config/contracts/eth.json deleted file mode 100644 index 7c0fa4810..000000000 --- a/common/config/contracts/eth.json +++ /dev/null @@ -1,368 +0,0 @@ -[ - { - "name": "Athenian: Warrior for Battle", - "address": "0x17052d51E954592C1046320c2371AbaB6C73Ef10", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"name\":\"tokenSupply\",\"type\":\"uint256\"}],\"name\":\"SetupToken\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"adr\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Battle Of Thermopylae: Battle", - "address": "0x553B4546D26F383d4f4a056B7f50DaDFf07FB252", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"getGreeksBattlePoints\",\"outputs\":[{\"name\":\"greeksBattlePoints\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_ATHENIANS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_warriors\",\"type\":\"uint256\"}],\"name\":\"assignAtheniansToBattle\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"immortals\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecated\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BTL_IMMORTAL\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"}],\"name\":\"getImmortalsOnTheBattlefield\",\"outputs\":[{\"name\":\"immortalsOnTheBattlefield\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BTL_PERSIAN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"endTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_faction\",\"type\":\"address\"}],\"name\":\"getTotalSlaves\",\"outputs\":[{\"name\":\"slaves\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_warriors\",\"type\":\"uint256\"}],\"name\":\"assignImmortalsToBattle\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"athenians\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BATTLE_POINT_DECIMALS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getTemporaryWinningFaction\",\"outputs\":[{\"name\":\"temporaryWinningFaction\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"battles\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"}],\"name\":\"getPersiansOnTheBattlefield\",\"outputs\":[{\"name\":\"persiansOnTheBattlefield\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isInTime\",\"outputs\":[{\"name\":\"inTime\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_battleTokenAddress\",\"type\":\"address\"},{\"name\":\"_battleTokenOwner\",\"type\":\"address\"}],\"name\":\"setBattleTokenAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BTL_SPARTAN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"WAD\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isInProgress\",\"outputs\":[{\"name\":\"inProgress\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemWarriors\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"startTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BTL_ATHENIAN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isTimeExpired\",\"outputs\":[{\"name\":\"timeExpired\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BP_ATHENIAN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"avarageBlockTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"persians\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"}],\"name\":\"getAtheniansOnTheBattlefield\",\"outputs\":[{\"name\":\"atheniansOnTheBattlefield\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"warriorsOnTheBattlefield\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"}],\"name\":\"getGreeksBattlePointsBy\",\"outputs\":[{\"name\":\"playerBattlePoints\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"},{\"name\":\"_loosingMainTroops\",\"type\":\"address\"}],\"name\":\"computeSlaves\",\"outputs\":[{\"name\":\"slaves\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isEnded\",\"outputs\":[{\"name\":\"ended\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"warriorsByPlayer\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"spartans\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPersiansBattlePoints\",\"outputs\":[{\"name\":\"persiansBattlePoints\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"}],\"name\":\"getPersiansBattlePointsBy\",\"outputs\":[{\"name\":\"playerBattlePoints\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_player\",\"type\":\"address\"}],\"name\":\"getSpartansOnTheBattlefield\",\"outputs\":[{\"name\":\"spartansOnTheBattlefield\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BATTLE_CASUALTIES\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_PERSIANS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newVersion\",\"type\":\"string\"},{\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"setDeprecated\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SPARTANS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getWinningFaction\",\"outputs\":[{\"name\":\"winningFaction\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BP_PERSIAN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_IMMORTALS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"battlesOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BP_IMMORTAL\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BP_SPARTAN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_warriors\",\"type\":\"uint256\"}],\"name\":\"assignSpartansToBattle\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isDraw\",\"outputs\":[{\"name\":\"draw\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_warriors\",\"type\":\"uint256\"}],\"name\":\"assignPersiansToBattle\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_startTime\",\"type\":\"uint256\"},{\"name\":\"_life\",\"type\":\"uint256\"},{\"name\":\"_avarageBlockTime\",\"type\":\"uint8\"},{\"name\":\"_persians\",\"type\":\"address\"},{\"name\":\"_immortals\",\"type\":\"address\"},{\"name\":\"_spartans\",\"type\":\"address\"},{\"name\":\"_athenians\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_faction\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_battlePointsIncrementForecast\",\"type\":\"uint256\"}],\"name\":\"WarriorsAssignedToBattlefield\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_faction\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_survivedWarriors\",\"type\":\"uint256\"}],\"name\":\"WarriorsBackToHome\",\"type\":\"event\"}]" - }, - { - "name": "BattleDrome ICO / Crowdsale", - "address": "0xeaAf270436a0ed397ED23BBF64DF7b1DCAfF142F", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"duration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"devRatio\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingMax\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_contributor\",\"type\":\"address\"}],\"name\":\"checkTokBalance\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_contributor\",\"type\":\"address\"}],\"name\":\"checkSavedEthBalance\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isStarted\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"checkTokDev\",\"outputs\":[{\"name\":\"total\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ratio\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"savedBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingGoal\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"checkTokSold\",\"outputs\":[{\"name\":\"total\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"checkTokTotal\",\"outputs\":[{\"name\":\"total\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_contributor\",\"type\":\"address\"}],\"name\":\"checkEthBalance\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenBalance\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"creatorPaid\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minimumPurchase\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isComplete\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"Token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"contribute\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"payMe\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"payCreator\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"escrow\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"percentOfGoal\",\"outputs\":[{\"name\":\"goalPercent\",\"type\":\"uint16\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isSuccessful\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"Contribution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"PayTokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"PayEther\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"BurnTokens\",\"type\":\"event\"}]" - }, - { - "name": "BCdiploma - EvidenZ", - "address": "0x90bb0b538253d279642439d5f54f336414ec06f7", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"},{\"name\":\"_name\",\"type\":\"string\"},{\"name\":\"_legalReference\",\"type\":\"string\"},{\"name\":\"_intentDeclaration\",\"type\":\"string\"},{\"name\":\"_host\",\"type\":\"string\"},{\"name\":\"_KYB_hash\",\"type\":\"string\"}],\"name\":\"addIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_templateId\",\"type\":\"string\"},{\"name\":\"_label\",\"type\":\"string\"},{\"name\":\"_template\",\"type\":\"string\"}],\"name\":\"addTemplate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"},{\"name\":\"_name\",\"type\":\"string\"},{\"name\":\"_website\",\"type\":\"string\"},{\"name\":\"_legalReference\",\"type\":\"string\"},{\"name\":\"_KYB_hash\",\"type\":\"string\"},{\"name\":\"_logoURL\",\"type\":\"string\"}],\"name\":\"addValidator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_issuerIDToBuyBytes\",\"type\":\"uint256\"},{\"name\":\"_nbBytesToCertified\",\"type\":\"uint256\"}],\"name\":\"buyBytesToCertifiedForIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_issuerID\",\"type\":\"uint256\"},{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"cancelIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_issuerID\",\"type\":\"uint256\"}],\"name\":\"cancelIssuerNow\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_validatorID\",\"type\":\"uint256\"},{\"name\":\"_blockNumber\",\"type\":\"uint256\"}],\"name\":\"cancelValidator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_validatorID\",\"type\":\"uint256\"}],\"name\":\"cancelValidatorNow\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"},{\"name\":\"_realValidatorID\",\"type\":\"uint256\"},{\"name\":\"_nbBytesToCertified\",\"type\":\"uint256\"},{\"name\":\"_lastBlockValidity\",\"type\":\"uint256\"}],\"name\":\"migrateIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_issuer\",\"type\":\"address\"},{\"name\":\"_templateId\",\"type\":\"string\"},{\"name\":\"_label\",\"type\":\"string\"},{\"name\":\"_template\",\"type\":\"string\"}],\"name\":\"migrateTemplate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_templateid\",\"type\":\"string\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"publishData\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"toggleConctractActive\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newBurnRate\",\"type\":\"uint256\"},{\"name\":\"_newBCDRate\",\"type\":\"uint256\"},{\"name\":\"_newTributeRate\",\"type\":\"uint256\"}],\"name\":\"updateAllocations\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newBCDAddress\",\"type\":\"address\"}],\"name\":\"updateBCDAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newOracleAddress\",\"type\":\"address\"}],\"name\":\"updateBCDTETHRateOracleAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_creditDataSize\",\"type\":\"uint256\"}],\"name\":\"updateCreditDataSize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_creditPriceInEuro\",\"type\":\"uint256\"}],\"name\":\"updateCreditPriceInEuro\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_issuerID\",\"type\":\"uint256\"},{\"name\":\"_nbBytesToCertified\",\"type\":\"uint256\"},{\"name\":\"_newIssuerName\",\"type\":\"string\"},{\"name\":\"_newIntentDeclaration\",\"type\":\"string\"},{\"name\":\"_newLegalReference\",\"type\":\"string\"},{\"name\":\"_newHost\",\"type\":\"string\"},{\"name\":\"_newKYB_hash\",\"type\":\"string\"}],\"name\":\"updateIssuerParams\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newRateBCDTETH\",\"type\":\"uint256\"}],\"name\":\"updateRateBCDTETH\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newRateETHEUR\",\"type\":\"uint256\"}],\"name\":\"updateRateETHEUR\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_templateId\",\"type\":\"string\"},{\"name\":\"_template\",\"type\":\"string\"}],\"name\":\"updateTemplate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_templateId\",\"type\":\"string\"},{\"name\":\"_label\",\"type\":\"string\"}],\"name\":\"updateTemplateLabel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newTributeAddress\",\"type\":\"address\"}],\"name\":\"updateTributeAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_validatorID\",\"type\":\"uint256\"},{\"name\":\"_newName\",\"type\":\"string\"},{\"name\":\"_webSite\",\"type\":\"string\"},{\"name\":\"_newLegalReference\",\"type\":\"string\"},{\"name\":\"_newKYB_hash\",\"type\":\"string\"},{\"name\":\"_newLogoURL\",\"type\":\"string\"}],\"name\":\"updateValidatorParams\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"}],\"name\":\"UpdateIssuerParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"CancelValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"CancelIssuer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"}],\"name\":\"AddTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"}],\"name\":\"UpdateTemplateLabel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"}],\"name\":\"UpdateTemplate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"BuyBytesToCertifiedForIssuer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"PublishData\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"\",\"type\":\"bool\"}],\"name\":\"ToggleContractActive\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"BCDAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BCDRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"burnRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"burnTokenToAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_issuerAddress\",\"type\":\"address\"},{\"name\":\"_templateId\",\"type\":\"string\"}],\"name\":\"checkTemplateExistence\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"creditDataSize\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"creditPriceInEuro\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_issuerAddress\",\"type\":\"address\"},{\"name\":\"_templateId\",\"type\":\"string\"}],\"name\":\"getIssuerAsJSON\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_nbBytesToCertified\",\"type\":\"uint256\"}],\"name\":\"getNeededTokensForBytesToCertified\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_issuerAddress\",\"type\":\"address\"},{\"name\":\"_templateId\",\"type\":\"string\"}],\"name\":\"getTemplate\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_issuerAddress\",\"type\":\"address\"},{\"name\":\"_templateId\",\"type\":\"string\"}],\"name\":\"getTemplateLabel\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_issuerAddress\",\"type\":\"address\"}],\"name\":\"getTemplateList\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_issuerAddress\",\"type\":\"address\"},{\"name\":\"_templateId\",\"type\":\"string\"}],\"name\":\"getTemplateUniqueID\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_templateId\",\"type\":\"string\"}],\"name\":\"HasSenderTheRightToUseTemplate\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuerNbBytesToCertifiedBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"issuers\",\"outputs\":[{\"name\":\"validatorID\",\"type\":\"uint256\"},{\"name\":\"issuerAddress\",\"type\":\"address\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"legalReference\",\"type\":\"string\"},{\"name\":\"intentDeclaration\",\"type\":\"string\"},{\"name\":\"host\",\"type\":\"string\"},{\"name\":\"KYB_hash\",\"type\":\"string\"},{\"name\":\"issuerID\",\"type\":\"uint256\"},{\"name\":\"lastBlockValidity\",\"type\":\"uint256\"},{\"name\":\"nbBytesToCertified\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"issuersaddress\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuersCounter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"OracleAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rateBCDTETH\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rateETHEUR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tributeAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tributeRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"validatoraddress\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"validators\",\"outputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"validatorAddress\",\"type\":\"address\"},{\"name\":\"legalReference\",\"type\":\"string\"},{\"name\":\"KYB_hash\",\"type\":\"string\"},{\"name\":\"webSite\",\"type\":\"string\"},{\"name\":\"logoURL\",\"type\":\"string\"},{\"name\":\"validatorID\",\"type\":\"uint256\"},{\"name\":\"lastBlockValidity\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"validatorsCounter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" - }, - { - "name": "BitMartToken", - "address": "0x986EE2B944c42D017F52Af21c4c69B84DBeA35d8", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawEther\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"unfreeze\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"freezeOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"freeze\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"name\":\"decimalUnits\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Freeze\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Unfreeze\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]" - }, - { - "name": "BlockCAT CAT Token / Crowdsale", - "address": "0x56ba2Ee7890461f463F7be02aAC3099f6d5811A8", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"HIDDEN_CAP\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DEV_PORTION\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"RESERVE_PORTION\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"saleStartBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawFunds\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"triggerRefund\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalETHRaised\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"endSale\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"changeDeveloperCATDestinationAddress\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"reserveCATDestination\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"saleEndBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"devETHDestination\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_PER_ETH_FIRST_EARLY_BIRD_RATE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"refund\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"devCATDestination\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"saleHasEnded\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDITIONAL_PORTION\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_PER_ETH_SECOND_EARLY_BIRD_RATE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minCapReached\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"saleFirstEarlyBirdEndBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"saleSecondEarlyBirdEndBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CAT_PER_ETH_BASE_RATE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"changeReserveCATDestinationAddress\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"createTokens\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"changeDeveloperETHDestinationAddress\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"triggerMinCap\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SECURITY_ETHER_CAP\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"ETHContributed\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"allowRefund\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_devETHDestination\",\"type\":\"address\"},{\"name\":\"_devCATDestination\",\"type\":\"address\"},{\"name\":\"_reserveCATDestination\",\"type\":\"address\"},{\"name\":\"_saleStartBlock\",\"type\":\"uint256\"},{\"name\":\"_saleEndBlock\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_creator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amountOfCAT\",\"type\":\"uint256\"}],\"name\":\"CreatedCAT\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_refunder\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amountOfWei\",\"type\":\"uint256\"}],\"name\":\"CATRefundedForWei\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - }, - { - "name": "Crypto10 (Hedged)", - "address": "0x000C100050E98C91f9114fa5Dd75CE6869Bf4F53", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"entryFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxAllocationsPerTx\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingBuys\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newMaxWithdrawalsPerTx\",\"type\":\"uint256\"}],\"name\":\"setMaxWithdrawalsPerTx\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPauser\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"participantAddresses\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minTokenRedemption\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"withdrawals\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxWithdrawalsPerTx\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnForParticipant\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"exitFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newMaxAllocationsPerTx\",\"type\":\"uint256\"}],\"name\":\"setMaxAllocationsPerTx\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renouncePauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addPauser\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"whitelistContract\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newNumerator\",\"type\":\"uint256\"}],\"name\":\"updatePrice\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"removeLiquidity\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amountTokensToWithdraw\",\"type\":\"uint256\"}],\"name\":\"requestWithdrawal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price\",\"outputs\":[{\"name\":\"numerator\",\"type\":\"uint256\"},{\"name\":\"denominator\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"buy\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberWithdrawalsPending\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberBuysPending\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newMinimumWei\",\"type\":\"uint256\"}],\"name\":\"setMinimumBuyValue\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newMinTokenRedemption\",\"type\":\"uint256\"}],\"name\":\"setMinimumTokenRedemption\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newDenominator\",\"type\":\"uint256\"}],\"name\":\"updatePriceDenominator\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"}],\"name\":\"claimTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minimumWei\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"setExitFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"addLiquidity\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"setEntryFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingWithdrawals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"priceNumeratorInput\",\"type\":\"uint256\"},{\"name\":\"whitelistContractInput\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"numerator\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"denominator\",\"type\":\"uint256\"}],\"name\":\"PriceUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"AddLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"RemoveLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"DepositReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"etherAmount\",\"type\":\"uint256\"}],\"name\":\"TokensIssued\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountTokens\",\"type\":\"uint256\"}],\"name\":\"WithdrawRequest\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"etherAmount\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountTokens\",\"type\":\"uint256\"}],\"name\":\"WithdrawInvalidAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountTokens\",\"type\":\"uint256\"}],\"name\":\"WithdrawFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"TokensClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MinterAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MinterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"PauserRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Crypto20", - "address": "0x26E75307Fc0C021472fEb8F727839531F112f317", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeEth\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newFundWallet\",\"type\":\"address\"}],\"name\":\"changeFundWallet2\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundWallet2\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundWallet1\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vestingContract\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participants\",\"type\":\"address[]\"},{\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"batchAllocate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseApproval\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"vestingContractInput\",\"type\":\"address\"}],\"name\":\"setVestingContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"enableTrading\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingEndBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newFundWallet\",\"type\":\"address\"}],\"name\":\"changeFundWallet1\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseApproval\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"claimTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newFundingEndBlock\",\"type\":\"uint256\"}],\"name\":\"updateFundingEndBlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"adjustBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tradeable\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"backupFundWallet\",\"type\":\"address\"},{\"name\":\"endBlockInput\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - }, - { - "name": "Consensys Multisig", - "address": "0x1010101010101010101010101010101010101010", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"owners\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"revokeConfirmation\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"confirmations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"isConfirmed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmationCount\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"transactions\",\"outputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getOwners\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"from\",\"type\":\"uint256\"},{\"name\":\"to\",\"type\":\"uint256\"},{\"name\":\"pending\",\"type\":\"bool\"},{\"name\":\"executed\",\"type\":\"bool\"}],\"name\":\"getTransactionIds\",\"outputs\":[{\"name\":\"_transactionIds\",\"type\":\"uint256[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"getConfirmations\",\"outputs\":[{\"name\":\"_confirmations\",\"type\":\"address[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"transactionCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"changeRequirement\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"confirmTransaction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"destination\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"submitTransaction\",\"outputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_OWNER_COUNT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"required\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"replaceOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"transactionId\",\"type\":\"uint256\"}],\"name\":\"executeTransaction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\"},{\"name\":\"_required\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_transactionId\",\"type\":\"uint256\"}],\"name\":\"Confirmation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_transactionId\",\"type\":\"uint256\"}],\"name\":\"Revocation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_transactionId\",\"type\":\"uint256\"}],\"name\":\"Submission\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_transactionId\",\"type\":\"uint256\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_transactionId\",\"type\":\"uint256\"}],\"name\":\"ExecutionFailure\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"OwnerAddition\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"OwnerRemoval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_required\",\"type\":\"uint256\"}],\"name\":\"RequirementChange\",\"type\":\"event\"}]" - }, - { - "name": "CryptoKitties", - "address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"_interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cfoAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_preferredTransport\",\"type\":\"string\"}],\"name\":\"tokenMetadata\",\"outputs\":[{\"name\":\"infoUrl\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"promoCreatedCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ceoAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"GEN0_STARTING_PRICE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSiringAuctionAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"pregnantKitties\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_kittyId\",\"type\":\"uint256\"}],\"name\":\"isPregnant\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"GEN0_AUCTION_DURATION\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"siringAuction\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setGeneScienceAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newCEO\",\"type\":\"address\"}],\"name\":\"setCEO\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newCOO\",\"type\":\"address\"}],\"name\":\"setCOO\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_kittyId\",\"type\":\"uint256\"},{\"name\":\"_startingPrice\",\"type\":\"uint256\"},{\"name\":\"_endingPrice\",\"type\":\"uint256\"},{\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"createSaleAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sireAllowedToAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_matronId\",\"type\":\"uint256\"},{\"name\":\"_sireId\",\"type\":\"uint256\"}],\"name\":\"canBreedWith\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"kittyIndexToApproved\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_kittyId\",\"type\":\"uint256\"},{\"name\":\"_startingPrice\",\"type\":\"uint256\"},{\"name\":\"_endingPrice\",\"type\":\"uint256\"},{\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"createSiringAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"setAutoBirthFee\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_addr\",\"type\":\"address\"},{\"name\":\"_sireId\",\"type\":\"uint256\"}],\"name\":\"approveSiring\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newCFO\",\"type\":\"address\"}],\"name\":\"setCFO\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_genes\",\"type\":\"uint256\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"createPromoKitty\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"secs\",\"type\":\"uint256\"}],\"name\":\"setSecondsPerBlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"GEN0_CREATION_LIMIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newContractAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setSaleAuctionAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_v2Address\",\"type\":\"address\"}],\"name\":\"setNewAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secondsPerBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"tokensOfOwner\",\"outputs\":[{\"name\":\"ownerTokens\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_matronId\",\"type\":\"uint256\"}],\"name\":\"giveBirth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawAuctionBalances\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"cooldowns\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"kittyIndexToOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cooAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"autoBirthFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"erc721Metadata\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_genes\",\"type\":\"uint256\"}],\"name\":\"createGen0Auction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_kittyId\",\"type\":\"uint256\"}],\"name\":\"isReadyToBreed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"PROMO_CREATION_LIMIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_contractAddress\",\"type\":\"address\"}],\"name\":\"setMetadataAddress\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"saleAuction\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getKitty\",\"outputs\":[{\"name\":\"isGestating\",\"type\":\"bool\"},{\"name\":\"isReady\",\"type\":\"bool\"},{\"name\":\"cooldownIndex\",\"type\":\"uint256\"},{\"name\":\"nextActionAt\",\"type\":\"uint256\"},{\"name\":\"siringWithId\",\"type\":\"uint256\"},{\"name\":\"birthTime\",\"type\":\"uint256\"},{\"name\":\"matronId\",\"type\":\"uint256\"},{\"name\":\"sireId\",\"type\":\"uint256\"},{\"name\":\"generation\",\"type\":\"uint256\"},{\"name\":\"genes\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_sireId\",\"type\":\"uint256\"},{\"name\":\"_matronId\",\"type\":\"uint256\"}],\"name\":\"bidOnSiringAuction\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"gen0CreatedCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"geneScience\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_matronId\",\"type\":\"uint256\"},{\"name\":\"_sireId\",\"type\":\"uint256\"}],\"name\":\"breedWithAuto\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"matronId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"sireId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"cooldownEndBlock\",\"type\":\"uint256\"}],\"name\":\"Pregnant\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"kittyId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"matronId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"sireId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"genes\",\"type\":\"uint256\"}],\"name\":\"Birth\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"ContractUpgrade\",\"type\":\"event\"}]" - }, - { - "name": "CryptoKitties Sales Auction", - "address": "0xb1690c08e213a35ed9bab7b318de14420fb57d8c", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_startingPrice\",\"type\":\"uint256\"},{\"name\":\"_endingPrice\",\"type\":\"uint256\"},{\"name\":\"_duration\",\"type\":\"uint256\"},{\"name\":\"_seller\",\"type\":\"address\"}],\"name\":\"createAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"bid\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"lastGen0SalePrices\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getAuction\",\"outputs\":[{\"name\":\"seller\",\"type\":\"address\"},{\"name\":\"startingPrice\",\"type\":\"uint256\"},{\"name\":\"endingPrice\",\"type\":\"uint256\"},{\"name\":\"duration\",\"type\":\"uint256\"},{\"name\":\"startedAt\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isSaleClockAuction\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"cancelAuctionWhenPaused\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"gen0SaleCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"cancelAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getCurrentPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nonFungibleContract\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"averageGen0SalePrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_nftAddr\",\"type\":\"address\"},{\"name\":\"_cut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"startingPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"endingPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"AuctionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"winner\",\"type\":\"address\"}],\"name\":\"AuctionSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"AuctionCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Pause\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpause\",\"type\":\"event\"}]" - }, - { - "name": "CryptoKitties Siring Auction", - "address": "0xc7af99fe5513eb6710e6d5f44f9989da40f27f26", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"name\":\"_startingPrice\",\"type\":\"uint256\"},{\"name\":\"_endingPrice\",\"type\":\"uint256\"},{\"name\":\"_duration\",\"type\":\"uint256\"},{\"name\":\"_seller\",\"type\":\"address\"}],\"name\":\"createAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unpause\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"bid\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isSiringClockAuction\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getAuction\",\"outputs\":[{\"name\":\"seller\",\"type\":\"address\"},{\"name\":\"startingPrice\",\"type\":\"uint256\"},{\"name\":\"endingPrice\",\"type\":\"uint256\"},{\"name\":\"duration\",\"type\":\"uint256\"},{\"name\":\"startedAt\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ownerCut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"cancelAuctionWhenPaused\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"cancelAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenId\",\"type\":\"uint256\"}],\"name\":\"getCurrentPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nonFungibleContract\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_nftAddr\",\"type\":\"address\"},{\"name\":\"_cut\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"startingPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"endingPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"AuctionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"totalPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"winner\",\"type\":\"address\"}],\"name\":\"AuctionSuccessful\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"AuctionCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Pause\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"Unpause\",\"type\":\"event\"}]" - }, - { - "name": "CryptoPunks", - "address": "0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"punksOfferedForSale\",\"outputs\":[{\"name\":\"isForSale\",\"type\":\"bool\"},{\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"name\":\"seller\",\"type\":\"address\"},{\"name\":\"minValue\",\"type\":\"uint256\"},{\"name\":\"onlySellTo\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"enterBidForPunk\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"name\":\"minPrice\",\"type\":\"uint256\"}],\"name\":\"acceptBidForPunk\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"addresses\",\"type\":\"address[]\"},{\"name\":\"indices\",\"type\":\"uint256[]\"}],\"name\":\"setInitialOwners\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"imageHash\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nextPunkIndexToAssign\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"punkIndexToAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"standard\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"punkBids\",\"outputs\":[{\"name\":\"hasBid\",\"type\":\"bool\"},{\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"name\":\"bidder\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"allInitialOwnersAssigned\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"allPunksAssigned\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"buyPunk\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"transferPunk\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"withdrawBidForPunk\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"setInitialOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"name\":\"minSalePriceInWei\",\"type\":\"uint256\"},{\"name\":\"toAddress\",\"type\":\"address\"}],\"name\":\"offerPunkForSaleToAddress\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"punksRemainingToAssign\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"name\":\"minSalePriceInWei\",\"type\":\"uint256\"}],\"name\":\"offerPunkForSale\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"getPunk\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"pendingWithdrawals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"punkNoLongerForSale\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":true,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"Assign\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"PunkTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"minValue\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"toAddress\",\"type\":\"address\"}],\"name\":\"PunkOffered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"fromAddress\",\"type\":\"address\"}],\"name\":\"PunkBidEntered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"fromAddress\",\"type\":\"address\"}],\"name\":\"PunkBidWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"punkIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"fromAddress\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"toAddress\",\"type\":\"address\"}],\"name\":\"PunkBought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"punkIndex\",\"type\":\"uint256\"}],\"name\":\"PunkNoLongerForSale\",\"type\":\"event\"}]" - }, - { - "name": "DGD Crowdsale / Claim", - "address": "0xF0160428a8552AC9bB7E050D90eEADE4DDD52843", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_eth\",\"type\":\"uint256\"}],\"name\":\"setEthToCents\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"startDate\",\"outputs\":[{\"name\":\"date\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claimFounders\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"userInfo\",\"outputs\":[{\"name\":\"centstotal\",\"type\":\"uint256\"},{\"name\":\"weitotal\",\"type\":\"uint256\"},{\"name\":\"share\",\"type\":\"uint256\"},{\"name\":\"badges\",\"type\":\"uint256\"},{\"name\":\"claimed\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getPeriod\",\"outputs\":[{\"name\":\"saleperiod\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodTwo\",\"outputs\":[{\"name\":\"date\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"proxyPurchase\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"BILLION\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claim\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ethToCents\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_wei\",\"type\":\"uint256\"}],\"name\":\"weiToCents\",\"outputs\":[{\"name\":\"centsvalue\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalWei\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"WEI_PER_ETH\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"goalReached\",\"outputs\":[{\"name\":\"reached\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"getPayout\",\"outputs\":[{\"name\":\"payout\",\"type\":\"address\"},{\"name\":\"isproxy\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"myInfo\",\"outputs\":[{\"name\":\"centstotal\",\"type\":\"uint256\"},{\"name\":\"weitotal\",\"type\":\"uint256\"},{\"name\":\"share\",\"type\":\"uint256\"},{\"name\":\"badges\",\"type\":\"uint256\"},{\"name\":\"claimed\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_payout\",\"type\":\"address\"}],\"name\":\"regProxy\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSaleStatus\",\"outputs\":[{\"name\":\"fclaim\",\"type\":\"bool\"},{\"name\":\"reltokens\",\"type\":\"uint256\"},{\"name\":\"relbadges\",\"type\":\"uint256\"},{\"name\":\"claimers\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"sendFunds\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isEnded\",\"outputs\":[{\"name\":\"ended\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unlock\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_contrib\",\"type\":\"uint256\"},{\"name\":\"_total\",\"type\":\"uint256\"}],\"name\":\"calcShare\",\"outputs\":[{\"name\":\"share\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_payout\",\"type\":\"address\"}],\"name\":\"getProxy\",\"outputs\":[{\"name\":\"proxy\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"periodThree\",\"outputs\":[{\"name\":\"date\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalCents\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"endDate\",\"outputs\":[{\"name\":\"date\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSaleConfig\",\"outputs\":[{\"name\":\"start\",\"type\":\"uint256\"},{\"name\":\"two\",\"type\":\"uint256\"},{\"name\":\"three\",\"type\":\"uint256\"},{\"name\":\"end\",\"type\":\"uint256\"},{\"name\":\"goal\",\"type\":\"uint256\"},{\"name\":\"cap\",\"type\":\"uint256\"},{\"name\":\"badgecost\",\"type\":\"uint256\"},{\"name\":\"famount\",\"type\":\"uint256\"},{\"name\":\"fwallet\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getSaleInfo\",\"outputs\":[{\"name\":\"weiamount\",\"type\":\"uint256\"},{\"name\":\"cents\",\"type\":\"uint256\"},{\"name\":\"realcents\",\"type\":\"uint256\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"claimFor\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CENTS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_a\",\"type\":\"uint256\"},{\"name\":\"_c\",\"type\":\"uint256\"}],\"name\":\"ppb\",\"outputs\":[{\"name\":\"b\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"inputs\":[{\"name\":\"_config\",\"type\":\"address\"}],\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_exchange\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_rate\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_cents\",\"type\":\"uint256\"}],\"name\":\"Purchase\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_user\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"_badges\",\"type\":\"uint256\"}],\"name\":\"Claim\",\"type\":\"event\"}]" - }, - { - "name": "DGX 1.0", - "address": "0x55b9a11c2e8351b4ffc7b11561148bfac9977855", - "abi": - "[{\"constant\":false,\"inputs\":[],\"name\":\"vendorRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"getFeeDays\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_addr\",\"type\":\"address\"},{\"name\":\"_val\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"userExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_ownr\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"actualBalanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_acct\",\"type\":\"address\"}],\"name\":\"isAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"custodianRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_cust\",\"type\":\"address\"}],\"name\":\"isCustodian\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"calculateDemurrage\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getConfigAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redemptionFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"goldTokenLedger\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_adtr\",\"type\":\"address\"}],\"name\":\"isAuditor\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"txFeeWallet\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"accountingWallet\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"auditRelease\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_gold\",\"type\":\"address\"},{\"name\":\"_user\",\"type\":\"address\"},{\"name\":\"_tokens\",\"type\":\"uint256\"},{\"name\":\"_fees\",\"type\":\"uint256\"}],\"name\":\"ledgerMint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"storageRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"recastContract\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"billingPeriod\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"config\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"goldRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"requiredConfirmations\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"deductFees\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"minterContract\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_balance\",\"type\":\"uint256\"},{\"name\":\"_feedays\",\"type\":\"uint256\"}],\"name\":\"demurrageCalc\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"recastFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"auditorRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"txFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getBase\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"txFeeMax\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_gold\",\"type\":\"address\"},{\"name\":\"_user\",\"type\":\"address\"},{\"name\":\"_tokens\",\"type\":\"uint256\"},{\"name\":\"_recastfee\",\"type\":\"uint256\"}],\"name\":\"recastCall\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_greg\",\"type\":\"address\"}],\"name\":\"isGoldRegistry\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_vndr\",\"type\":\"address\"}],\"name\":\"isVendor\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_user\",\"type\":\"address\"}],\"name\":\"calculateTxFee\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_gold\",\"type\":\"address\"}],\"name\":\"payStorageFee\",\"outputs\":[],\"type\":\"function\"},{\"inputs\":[{\"name\":\"_conf\",\"type\":\"address\"}],\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"user\",\"type\":\"address\"}],\"name\":\"NewAccount\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "DAO Original", - "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"votingDeadline\",\"type\":\"uint256\"},{\"name\":\"open\",\"type\":\"bool\"},{\"name\":\"proposalPassed\",\"type\":\"bool\"},{\"name\":\"proposalHash\",\"type\":\"bytes32\"},{\"name\":\"proposalDeposit\",\"type\":\"uint256\"},{\"name\":\"newCurator\",\"type\":\"bool\"},{\"name\":\"yea\",\"type\":\"uint256\"},{\"name\":\"nay\",\"type\":\"uint256\"},{\"name\":\"creator\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minTokensToCreate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rewardAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"daoCreator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"divisor\",\"outputs\":[{\"name\":\"divisor\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"extraBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unblockMe\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalRewardToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"actualBalance\",\"outputs\":[{\"name\":\"_actualBalance\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"closingTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRecipients\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferWithoutReward\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"refund\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_description\",\"type\":\"string\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"},{\"name\":\"_debatingPeriod\",\"type\":\"uint256\"},{\"name\":\"_newCurator\",\"type\":\"bool\"}],\"name\":\"newProposal\",\"outputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"DAOpaidOut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minQuorumDivisor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newContract\",\"type\":\"address\"}],\"name\":\"newContract\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"changeAllowedRecipients\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"halveMinQuorum\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"paidOut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_newCurator\",\"type\":\"address\"}],\"name\":\"splitDAO\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DAOrewardAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberOfProposals\",\"outputs\":[{\"name\":\"_numberOfProposals\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastTimeMinQuorumMet\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_toMembers\",\"type\":\"bool\"}],\"name\":\"retrieveDAOReward\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"receiveEther\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isFueled\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenHolder\",\"type\":\"address\"}],\"name\":\"createTokenProxy\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"}],\"name\":\"getNewDAOAddress\",\"outputs\":[{\"name\":\"_newDAO\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_supportsProposal\",\"type\":\"bool\"}],\"name\":\"vote\",\"outputs\":[{\"name\":\"_voteID\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getMyReward\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFromWithoutReward\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalDeposit\",\"type\":\"uint256\"}],\"name\":\"changeProposalDeposit\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"blocked\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"curator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"}],\"name\":\"checkProposalCode\",\"outputs\":[{\"name\":\"_codeChecksOut\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"privateCreation\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"inputs\":[{\"name\":\"_curator\",\"type\":\"address\"},{\"name\":\"_daoCreator\",\"type\":\"address\"},{\"name\":\"_proposalDeposit\",\"type\":\"uint256\"},{\"name\":\"_minTokensToCreate\",\"type\":\"uint256\"},{\"name\":\"_closingTime\",\"type\":\"uint256\"},{\"name\":\"_privateCreation\",\"type\":\"address\"}],\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FuelingToDate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreatedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Refund\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newCurator\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"description\",\"type\":\"string\"}],\"name\":\"ProposalAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"position\",\"type\":\"bool\"},{\"indexed\":true,\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"quorum\",\"type\":\"uint256\"}],\"name\":\"ProposalTallied\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_newCurator\",\"type\":\"address\"}],\"name\":\"NewCurator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"AllowedRecipientChanged\",\"type\":\"event\"}]" - }, - { - "name": "DIVX Token", - "address": "0x13f11C9905A08ca76e3e853bE63D4f0944326C72", - "abi": - "[{\"constant\":false,\"inputs\":[],\"name\":\"resume\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"withdrawWei\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"privateExchangeRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"thirdExchangeRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"refund\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"firstXRChangeBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"receivedWeiMin\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"firstExchangeRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingEndBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secondExchangeRate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"thirdXRChangeBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isRedeeming\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"createTokens\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stopRedeeming\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingStartBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secondXRChangeBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startRedeeming\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalReceivedWei\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"diviAddress\",\"type\":\"bytes32\"}],\"name\":\"redeem\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"receivedWeiCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_fundDeposit\",\"type\":\"address\"},{\"name\":\"_fundingStartBlock\",\"type\":\"uint256\"},{\"name\":\"_firstXRChangeBlock\",\"type\":\"uint256\"},{\"name\":\"_secondXRChangeBlock\",\"type\":\"uint256\"},{\"name\":\"_thirdXRChangeBlock\",\"type\":\"uint256\"},{\"name\":\"_fundingEndBlock\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokenValue\",\"type\":\"uint256\"}],\"name\":\"LogCreate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokenValue\",\"type\":\"uint256\"}],\"name\":\"LogRefund\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_diviAddress\",\"type\":\"bytes32\"}],\"name\":\"LogRedeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Ethereum Lottery", - "address": "0xc0ADF1CCc703A0a3393892600883A1A91a4E38de", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"lastInitTimestamp\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"poissonData\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"name\":\"lotteries\",\"outputs\":[{\"name\":\"jackpot\",\"type\":\"uint256\"},{\"name\":\"decidingBlock\",\"type\":\"int256\"},{\"name\":\"numTickets\",\"type\":\"uint256\"},{\"name\":\"numTicketsSold\",\"type\":\"uint256\"},{\"name\":\"ticketPrice\",\"type\":\"uint256\"},{\"name\":\"cutoffTimestamp\",\"type\":\"uint256\"},{\"name\":\"winningTicket\",\"type\":\"int256\"},{\"name\":\"winner\",\"type\":\"address\"},{\"name\":\"finalizationBlock\",\"type\":\"uint256\"},{\"name\":\"finalizer\",\"type\":\"address\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"nearestKnownBlock\",\"type\":\"int256\"},{\"name\":\"nearestKnownBlockHash\",\"type\":\"int256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"recentActivity\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"destruct\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_id\",\"type\":\"int256\"},{\"name\":\"_offset\",\"type\":\"uint256\"},{\"name\":\"_n\",\"type\":\"uint256\"},{\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"getTicketDetails\",\"outputs\":[{\"name\":\"details\",\"type\":\"uint8[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_message\",\"type\":\"string\"}],\"name\":\"getMessageLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"setAdmin\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_id\",\"type\":\"int256\"}],\"name\":\"getLotteryDetailsB\",\"outputs\":[{\"name\":\"_actualId\",\"type\":\"int256\"},{\"name\":\"_winningTicket\",\"type\":\"int256\"},{\"name\":\"_winner\",\"type\":\"address\"},{\"name\":\"_finalizationBlock\",\"type\":\"uint256\"},{\"name\":\"_finalizer\",\"type\":\"address\"},{\"name\":\"_message\",\"type\":\"string\"},{\"name\":\"_prevLottery\",\"type\":\"int256\"},{\"name\":\"_nextLottery\",\"type\":\"int256\"},{\"name\":\"_blockHeight\",\"type\":\"int256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getRecentActivity\",\"outputs\":[{\"name\":\"_id\",\"type\":\"int256\"},{\"name\":\"_idx\",\"type\":\"uint256\"},{\"name\":\"_recentActivity\",\"type\":\"uint256[1000]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"recentActivityIdx\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"id\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_jackpot\",\"type\":\"uint256\"},{\"name\":\"_numTickets\",\"type\":\"uint256\"},{\"name\":\"_ticketPrice\",\"type\":\"uint256\"},{\"name\":\"_durationInBlocks\",\"type\":\"int256\"}],\"name\":\"initLottery\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_id\",\"type\":\"int256\"},{\"name\":\"_message\",\"type\":\"string\"}],\"name\":\"setMessage\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"proposeOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"needsInitialization\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"needsFinalization\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tickets\",\"type\":\"uint256[]\"}],\"name\":\"buyTickets\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposedOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"btcRelay\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_id\",\"type\":\"int256\"}],\"name\":\"getLotteryDetailsA\",\"outputs\":[{\"name\":\"_actualId\",\"type\":\"int256\"},{\"name\":\"_jackpot\",\"type\":\"uint256\"},{\"name\":\"_decidingBlock\",\"type\":\"int256\"},{\"name\":\"_numTickets\",\"type\":\"uint256\"},{\"name\":\"_numTicketsSold\",\"type\":\"uint256\"},{\"name\":\"_lastSaleTimestamp\",\"type\":\"uint256\"},{\"name\":\"_ticketPrice\",\"type\":\"uint256\"},{\"name\":\"_cutoffTimestamp\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"escrow\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_id\",\"type\":\"int256\"},{\"name\":\"_ticket\",\"type\":\"uint256\"}],\"name\":\"getTicketOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_steps\",\"type\":\"uint256\"}],\"name\":\"finalizeLottery\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastSaleTimestamp\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_btcRelay\",\"type\":\"address\"},{\"name\":\"_poissonData\",\"type\":\"address\"},{\"name\":\"_escrow\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"}]" - }, - { - "name": "EagleCoin [EAGLE] Contract Address", - "address": "0x994f0dffdbae0bbf09b652d6f11a493fd33f42b9", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"mint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"coinAge\",\"outputs\":[{\"name\":\"myCoinAge\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ownerSetStakeStartTime\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxTotalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipients\",\"type\":\"address[]\"},{\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"batchTransfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"ownerBurnToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalInitialSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"annualInterest\",\"outputs\":[{\"name\":\"interest\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeMinAge\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainStartBlockNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeMaxAge\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxMintProofOfStake\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"burner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_reward\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - }, - { - "name": "Etherisc Flight Delay", - "address": "0xc0f29798c57e890cac82a79dadbebfb3d3fa67b9", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_carrierFlightNumber\",\"type\":\"bytes32\"},{\"name\":\"_departureYearMonthDay\",\"type\":\"bytes32\"},{\"name\":\"_departureTime\",\"type\":\"uint256\"},{\"name\":\"_arrivalTime\",\"type\":\"uint256\"},{\"name\":\"_currency\",\"type\":\"uint8\"},{\"name\":\"_customerExternalId\",\"type\":\"bytes32\"}],\"name\":\"newPolicy\",\"outputs\":[],\"payable\":true,\"type\":\"function\"}]" - }, - { - "name": "Etheroll Rewards", - "address": "0xa4463f9Ff0d87531232c8c4819B536c332DA6EAc", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"_tokenHolder\",\"type\":\"address\"}],\"name\":\"getTokensHeldByAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"ownerUpdateCurrentEpoch\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"payoutsPaused\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newTreasury\",\"type\":\"address\"}],\"name\":\"ownerSetTreasury\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalRewardsForEpoch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newPayoutStatus\",\"type\":\"bool\"}],\"name\":\"ownerPausePayouts\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"ownerChangeOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"treasury\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentEpoch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_sendTo\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"ownerTransferEther\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"theTokenAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenHolder\",\"type\":\"address\"}],\"name\":\"getExpectedPayout\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_tokenHolder\",\"type\":\"address\"}],\"name\":\"getAddressLastPaidOutEpoch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getMyReward\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"ownerkill\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newTotalRewardsForEpochInWei\",\"type\":\"uint256\"}],\"name\":\"ownerUpdateTotalRewardsForEpoch\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"tokenAddress\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"SentToAddress\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"AmountTransferred\",\"type\":\"uint256\"}],\"name\":\"LogOwnerTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"SentToAddress\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"AmountTransferred\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"NumberOfTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"TotalRewardsForEpoch\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"Epoch\",\"type\":\"uint256\"}],\"name\":\"LogPaidOut\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"NewCurrentEpoch\",\"type\":\"uint256\"}],\"name\":\"LogEpochUpdated\",\"type\":\"event\"}]" - }, - { - "name": "EOS: Contribution", - "address": "0xd0a6E6C54DbC68Db5db3A091B171A77407Ff7ccf", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"claimed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"time\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"foundersAllocation\",\"outputs\":[{\"name\":\"\",\"type\":\"uint128\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"day\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"foundersKey\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"userBuys\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"day\",\"type\":\"uint256\"}],\"name\":\"createOnDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"freeze\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"keys\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"startTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"authority_\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"dailyTotals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"buy\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"openTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"EOS\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"today\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"eos\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"createFirstDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claimAll\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"dayFor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"day\",\"type\":\"uint256\"},{\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"buyWithLimit\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"collect\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberOfDays\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"createPerDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_numberOfDays\",\"type\":\"uint256\"},{\"name\":\"_totalSupply\",\"type\":\"uint128\"},{\"name\":\"_openTime\",\"type\":\"uint256\"},{\"name\":\"_startTime\",\"type\":\"uint256\"},{\"name\":\"_foundersAllocation\",\"type\":\"uint128\"},{\"name\":\"_foundersKey\",\"type\":\"string\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"window\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogBuy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"window\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"LogRegister\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LogCollect\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogFreeze\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"authority\",\"type\":\"address\"}],\"name\":\"LogSetAuthority\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"LogSetOwner\",\"type\":\"event\"}]" - }, - { - "name": "ENS: Eth Registrar (Auction)", - "address": "0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"releaseDeed\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getAllowedTime\",\"outputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"unhashedName\",\"type\":\"string\"}],\"name\":\"invalidateName\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"shaBid\",\"outputs\":[{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bidder\",\"type\":\"address\"},{\"name\":\"seal\",\"type\":\"bytes32\"}],\"name\":\"cancelBid\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"entries\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"unsealBid\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"transferRegistrars\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sealedBids\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"state\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"isAllowed\",\"outputs\":[{\"name\":\"allowed\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"finalizeAuction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"registryStarted\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"launchLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"name\":\"newBid\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"labels\",\"type\":\"bytes32[]\"}],\"name\":\"eraseNode\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hashes\",\"type\":\"bytes32[]\"}],\"name\":\"startAuctions\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"deed\",\"type\":\"address\"},{\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"acceptRegistrarTransfer\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"startAuction\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rootNode\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"hashes\",\"type\":\"bytes32[]\"},{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"name\":\"startAuctionsAndBid\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_ens\",\"type\":\"address\"},{\"name\":\"_rootNode\",\"type\":\"bytes32\"},{\"name\":\"_startDate\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"AuctionStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"deposit\",\"type\":\"uint256\"}],\"name\":\"NewBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"BidRevealed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"HashRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"HashReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"HashInvalidated\",\"type\":\"event\"}]" - }, - { - "name": "ENS: Registry", - "address": "0x314159265dD8dbb310642f98f50C066173C1259b", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"}]" - }, - { - "name": "ENS: Reverse Registrar", - "address": "0x9062C0A6Dbd6108336BcBe4593a3D1cE05512069", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"defaultResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"name\":\"ret\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"resolverAddr\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"}]" - }, - { - "name": "ENS: Public Resolver", - "address": "0x5FfC014343cd971B7eb70732021E26C35B744cc4", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"content\",\"outputs\":[{\"name\":\"ret\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"ret\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"ret\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"setContent\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"ContentChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"}]" - }, - { - "name": "EtherDelta (02/09/2017)", - "address": "0x8d12A197cB00D4747a1fe03395095ce2A5CC6819", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"tokenGet\",\"type\":\"address\"},{\"name\":\"amountGet\",\"type\":\"uint256\"},{\"name\":\"tokenGive\",\"type\":\"address\"},{\"name\":\"amountGive\",\"type\":\"uint256\"},{\"name\":\"expires\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"v\",\"type\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"trade\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"tokenGet\",\"type\":\"address\"},{\"name\":\"amountGet\",\"type\":\"uint256\"},{\"name\":\"tokenGive\",\"type\":\"address\"},{\"name\":\"amountGive\",\"type\":\"uint256\"},{\"name\":\"expires\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"order\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"orderFills\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"tokenGet\",\"type\":\"address\"},{\"name\":\"amountGet\",\"type\":\"uint256\"},{\"name\":\"tokenGive\",\"type\":\"address\"},{\"name\":\"amountGive\",\"type\":\"uint256\"},{\"name\":\"expires\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"v\",\"type\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"cancelOrder\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"depositToken\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenGet\",\"type\":\"address\"},{\"name\":\"amountGet\",\"type\":\"uint256\"},{\"name\":\"tokenGive\",\"type\":\"address\"},{\"name\":\"amountGive\",\"type\":\"uint256\"},{\"name\":\"expires\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"v\",\"type\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"amountFilled\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"feeMake_\",\"type\":\"uint256\"}],\"name\":\"changeFeeMake\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeMake\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"feeRebate_\",\"type\":\"uint256\"}],\"name\":\"changeFeeRebate\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenGet\",\"type\":\"address\"},{\"name\":\"amountGet\",\"type\":\"uint256\"},{\"name\":\"tokenGive\",\"type\":\"address\"},{\"name\":\"amountGive\",\"type\":\"uint256\"},{\"name\":\"expires\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"v\",\"type\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"testTrade\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"feeAccount_\",\"type\":\"address\"}],\"name\":\"changeFeeAccount\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeRebate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"feeTake_\",\"type\":\"uint256\"}],\"name\":\"changeFeeTake\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"admin_\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawToken\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"orders\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feeTake\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"accountLevelsAddr_\",\"type\":\"address\"}],\"name\":\"changeAccountLevelsAddr\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"accountLevelsAddr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"token\",\"type\":\"address\"},{\"name\":\"user\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"tokenGet\",\"type\":\"address\"},{\"name\":\"amountGet\",\"type\":\"uint256\"},{\"name\":\"tokenGive\",\"type\":\"address\"},{\"name\":\"amountGive\",\"type\":\"uint256\"},{\"name\":\"expires\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"user\",\"type\":\"address\"},{\"name\":\"v\",\"type\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"availableVolume\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"admin_\",\"type\":\"address\"},{\"name\":\"feeAccount_\",\"type\":\"address\"},{\"name\":\"accountLevelsAddr_\",\"type\":\"address\"},{\"name\":\"feeMake_\",\"type\":\"uint256\"},{\"name\":\"feeTake_\",\"type\":\"uint256\"},{\"name\":\"feeRebate_\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":false,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenGet\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountGet\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tokenGive\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountGive\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"expires\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"}],\"name\":\"Order\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenGet\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountGet\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tokenGive\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountGive\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"expires\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"v\",\"type\":\"uint8\"},{\"indexed\":false,\"name\":\"r\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokenGet\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountGet\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tokenGive\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountGive\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"get\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"give\",\"type\":\"address\"}],\"name\":\"Trade\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"}]" - }, - { - "name": "Global Academy Place (GAP)", - "address": "0xC86414354c06dC8bA428A08BCc589C72c2805959", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_deposits\",\"type\":\"uint256\"},{\"name\":\"actualSellPriceInWei\",\"type\":\"uint256\"},{\"name\":\"_actualPriceInCents\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maximumBuyBackPriceInCents\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secondLevelPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"Killer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"_totalSupply\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deadline\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"depositsTillNow\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"checkActualPrice\",\"outputs\":[{\"name\":\"_sellPrice\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"beneficiary\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_thirdLevelEth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"amountRaisedEth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"sellPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maximumBuyBackAmountInWEI\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"actualPriceInCents\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maximumBuyBack\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"thirdLevelPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingGoal\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_secondLevelEth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_NewPrice\",\"type\":\"uint256\"}],\"name\":\"manualBuyPrice\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"buyPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"contrubutedAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_firstLevelEth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maximumBuyBackAmountInCents\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amountInWei\",\"type\":\"uint256\"},{\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"ownerWithdrawal\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"KilledTillNow\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CapLevelPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"actualSellPriceInWei\",\"type\":\"uint256\"},{\"name\":\"_mustToSellCourses\",\"type\":\"uint256\"},{\"name\":\"maxBuyBackPriceCents\",\"type\":\"uint256\"}],\"name\":\"BuyBackStart\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"buyTokens\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[{\"name\":\"revenue\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"firstLevelPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mustToSellCourses\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_capLevelEth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"safeWithdrawal\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"KilledTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"backer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"isContribution\",\"type\":\"bool\"}],\"name\":\"FundTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amountRaised\",\"type\":\"uint256\"}],\"name\":\"GoalReached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Global Invest Crypto Fund (GCF)", - "address": "0xb8c07c219202aFd165b7ECfD5800B7e941338193", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferEther\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"buyTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"Register\",\"outputs\":[{\"name\":\"_userWallet\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"claimEthers\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"marketCap\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isReg\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"myUserWallet\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"kill\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claimTax\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Reederem\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_period\",\"type\":\"uint256\"}],\"name\":\"claimTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"taxTillNow\",\"outputs\":[{\"name\":\"_ethTax\",\"type\":\"uint256\"},{\"name\":\"_tokenTax\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"},{\"name\":\"_marketCap\",\"type\":\"uint256\"},{\"name\":\"_ethForReederem\",\"type\":\"uint256\"}],\"name\":\"closePeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"gcf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"numAccounts\",\"outputs\":[{\"name\":\"_numAccounts\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contractVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getActualPeriod\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getPrices\",\"outputs\":[{\"name\":\"_Price\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"sellTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"buy\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"periods\",\"outputs\":[{\"name\":\"ethAtThePeriod\",\"type\":\"uint256\"},{\"name\":\"tokensAtThePeriod\",\"type\":\"uint256\"},{\"name\":\"price\",\"type\":\"uint256\"},{\"name\":\"ethForReederem\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentPeriodPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"accounts\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_ethTx\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokenTx\",\"type\":\"uint256\"}],\"name\":\"TaxTillNow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_person\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_userWallet\",\"type\":\"address\"}],\"name\":\"RegisterEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"price\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_marketCap\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_ethForReederem\",\"type\":\"uint256\"}],\"name\":\"ClosePeriodEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"DepositEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_amountEthers\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_ethAtThePeriod\",\"type\":\"uint256\"}],\"name\":\"BuyEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_amountTokens\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokensAtThePeriod\",\"type\":\"uint256\"}],\"name\":\"ReederemEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_taxPayment\",\"type\":\"uint256\"}],\"name\":\"Tax\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokensValue\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokensPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_ethersAmount\",\"type\":\"uint256\"}],\"name\":\"ClaimTokensEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"period\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_ethValue\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokensPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokensAmount\",\"type\":\"uint256\"}],\"name\":\"ClaimEthersEvent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_eth\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_tokens\",\"type\":\"uint256\"}],\"name\":\"claimTaxex\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]" - }, - { - "name": "IIC - Ibiscoin ERC20 Token Contract", - "address": "0x16662F73dF3e79e54c6c5938b4313f92C524C120", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"newSellPrice\",\"type\":\"uint256\"},{\"name\":\"newBuyPrice\",\"type\":\"uint256\"}],\"name\":\"setPrices\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"sellPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"target\",\"type\":\"address\"},{\"name\":\"mintedAmount\",\"type\":\"uint256\"}],\"name\":\"mintToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"buyPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"buy\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"frozenAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sell\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"target\",\"type\":\"address\"},{\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"freezeAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"frozen\",\"type\":\"bool\"}],\"name\":\"FrozenFunds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"}]" - }, - { - "name": "Immortal - Warrior for Battle Contract", - "address": "0x22E5F62D0FA19974749faa194e3d3eF6d89c08d7", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"redeemEther\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenAssigned\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_immortals\",\"type\":\"uint256\"}],\"name\":\"Assigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "LookRev Crowdsale", - "address": "0x21ae23b882a340a22282162086bc98d3e2b73018", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKENS_TOTAL\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokensPerKEther\",\"type\":\"uint256\"}],\"name\":\"setTokensPerKEther\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"_required\",\"type\":\"bool\"}],\"name\":\"kycVerify\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"finalised\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"KYC_THRESHOLD\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CONTRIBUTIONS_MIN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"START_DATE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initialSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"addPrecommitment\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKENS_SOFT_CAP\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"END_DATE\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKENS_HARD_CAP\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DECIMALSFACTOR\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"CONTRIBUTIONS_MAX\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"finalise\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokensPerKEther\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"kycRequired\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"tokenAddress\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferAnyERC20Token\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"setWallet\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"}],\"name\":\"proxyPayment\",\"outputs\":[],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newWallet\",\"type\":\"address\"}],\"name\":\"WalletUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"tokensPerKEther\",\"type\":\"uint256\"}],\"name\":\"TokensPerKEtherUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"buyer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"ethers\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participantTokenBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tokens\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newTotalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"tokensPerKEther\",\"type\":\"uint256\"}],\"name\":\"TokensBought\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"balance\",\"type\":\"uint256\"}],\"name\":\"PrecommitmentAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"required\",\"type\":\"bool\"}],\"name\":\"KycVerified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Global Messaging Token (GMT)", - "address": "0xb3Bd49E28f8F832b8d1E246106991e546c323502", - "abi": - "[{\"constant\": true, \"inputs\": [], \"name\": \"name\", \"outputs\": [{\"name\": \"\", \"type\": \"string\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"endBlock\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [{\"name\": \"spender\", \"type\": \"address\"}, {\"name\": \"value\", \"type\": \"uint256\"}], \"name\": \"approve\", \"outputs\": [{\"name\": \"\", \"type\": \"bool\"}], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"totalSupply\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [{\"name\": \"from\", \"type\": \"address\"}, {\"name\": \"to\", \"type\": \"address\"}, {\"name\": \"value\", \"type\": \"uint256\"}], \"name\": \"transferFrom\", \"outputs\": [{\"name\": \"\", \"type\": \"bool\"}], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"ethFundAddress\", \"outputs\": [{\"name\": \"\", \"type\": \"address\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"secondCapEndingBlock\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"decimals\", \"outputs\": [{\"name\": \"\", \"type\": \"uint8\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"isStopped\", \"outputs\": [{\"name\": \"\", \"type\": \"bool\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"minCap\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"tokenExchangeRate\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [], \"name\": \"claimTokens\", \"outputs\": [], \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"startBlock\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"baseTokenCapPerAddress\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [], \"name\": \"finalize\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [], \"name\": \"refund\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"blocksInSecondCapPeriod\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [{\"name\": \"owner\", \"type\": \"address\"}], \"name\": \"balanceOf\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [], \"name\": \"restartSale\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [{\"name\": \"targets\", \"type\": \"address[]\"}, {\"name\": \"isRegistered\", \"type\": \"bool\"}], \"name\": \"changeRegistrationStatuses\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [{\"name\": \"\", \"type\": \"address\"}], \"name\": \"purchases\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"isFinalized\", \"outputs\": [{\"name\": \"\", \"type\": \"bool\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"owner\", \"outputs\": [{\"name\": \"\", \"type\": \"address\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"symbol\", \"outputs\": [{\"name\": \"\", \"type\": \"string\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [{\"name\": \"_newOwner\", \"type\": \"address\"}], \"name\": \"changeOwner\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [{\"name\": \"to\", \"type\": \"address\"}, {\"name\": \"value\", \"type\": \"uint256\"}], \"name\": \"transfer\", \"outputs\": [{\"name\": \"\", \"type\": \"bool\"}], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"assignedSupply\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [{\"name\": \"\", \"type\": \"address\"}], \"name\": \"registered\", \"outputs\": [{\"name\": \"\", \"type\": \"bool\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"blocksInFirstCapPeriod\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"gmtFundAddress\", \"outputs\": [{\"name\": \"\", \"type\": \"address\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"gmtFund\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [{\"name\": \"owner\", \"type\": \"address\"}, {\"name\": \"spender\", \"type\": \"address\"}], \"name\": \"allowance\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"baseEthCapPerAddress\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"firstCapEndingBlock\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [], \"name\": \"stopSale\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"tokenUnit\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"constant\": false, \"inputs\": [{\"name\": \"target\", \"type\": \"address\"}, {\"name\": \"isRegistered\", \"type\": \"bool\"}], \"name\": \"changeRegistrationStatus\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\"}, {\"constant\": true, \"inputs\": [], \"name\": \"gasLimitInWei\", \"outputs\": [{\"name\": \"\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\"}, {\"inputs\": [{\"name\": \"_ethFundAddress\", \"type\": \"address\"}, {\"name\": \"_gmtFundAddress\", \"type\": \"address\"}, {\"name\": \"_startBlock\", \"type\": \"uint256\"}, {\"name\": \"_endBlock\", \"type\": \"uint256\"}, {\"name\": \"_tokenExchangeRate\", \"type\": \"uint256\"}], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\"}, {\"payable\": true, \"stateMutability\": \"payable\", \"type\": \"fallback\"}, {\"anonymous\": false, \"inputs\": [{\"indexed\": true, \"name\": \"_to\", \"type\": \"address\"}, {\"indexed\": false, \"name\": \"_value\", \"type\": \"uint256\"}], \"name\": \"RefundSent\", \"type\": \"event\"}, {\"anonymous\": false, \"inputs\": [{\"indexed\": true, \"name\": \"_to\", \"type\": \"address\"}, {\"indexed\": false, \"name\": \"_value\", \"type\": \"uint256\"}], \"name\": \"ClaimGMT\", \"type\": \"event\"}, {\"anonymous\": false, \"inputs\": [{\"indexed\": true, \"name\": \"from\", \"type\": \"address\"}, {\"indexed\": true, \"name\": \"to\", \"type\": \"address\"}, {\"indexed\": false, \"name\": \"value\", \"type\": \"uint256\"}], \"name\": \"Transfer\", \"type\": \"event\"}, {\"anonymous\": false, \"inputs\": [{\"indexed\": true, \"name\": \"owner\", \"type\": \"address\"}, {\"indexed\": true, \"name\": \"spender\", \"type\": \"address\"}, {\"indexed\": false, \"name\": \"value\", \"type\": \"uint256\"}], \"name\": \"Approval\", \"type\": \"event\"}]" - }, - { - "name": "Havven (HAV)", - "address": "0xD989a04AD891528B571eF73dAcaEFeB0402a65b3", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"setFeePeriodDuration\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_issuanceRatio\",\"type\":\"uint256\"}],\"name\":\"setIssuanceRatio\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"spender\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalIssuanceData\",\"outputs\":[{\"name\":\"currentBalanceSum\",\"type\":\"uint256\"},{\"name\":\"lastAverageBalance\",\"type\":\"uint256\"},{\"name\":\"lastModified\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"unlockedCollateral\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"nominateNewOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"initiationTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueNomins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"setSelfDestructBeneficiary\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceStalePeriod\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feePeriodDuration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hasWithdrawnFees\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"issuanceDraft\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"time\",\"type\":\"uint256\"}],\"name\":\"setPriceStalePeriod\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnNomins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"terminateSelfDestruct\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawFees\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setIssuer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastPriceUpdateTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nominatedOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_nomin\",\"type\":\"address\"}],\"name\":\"setNomin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"recomputeLastAverageBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"nominsIssued\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"issuanceLastAverageBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"feePeriodStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_oracle\",\"type\":\"address\"}],\"name\":\"setOracle\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"oracle\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"issuer\",\"type\":\"address\"}],\"name\":\"maxIssuableNomins\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newPrice\",\"type\":\"uint256\"},{\"name\":\"timeSent\",\"type\":\"uint256\"}],\"name\":\"updatePrice\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"isIssuer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"issuanceData\",\"outputs\":[{\"name\":\"currentBalanceSum\",\"type\":\"uint256\"},{\"name\":\"lastAverageBalance\",\"type\":\"uint256\"},{\"name\":\"lastModified\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"lockedCollateral\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"rolloverFeePeriodIfElapsed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalIssuanceLastModified\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proxy\",\"type\":\"address\"}],\"name\":\"setProxy\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"selfDestruct\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"UNIT\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenState\",\"type\":\"address\"}],\"name\":\"setTokenState\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"price\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"usd_dec\",\"type\":\"uint256\"}],\"name\":\"USDtoHAV\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"SELFDESTRUCT_DELAY\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"collateral\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"issuanceRatio\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"selfDestructInitiated\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"setMessageSender\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"initiateSelfDestruct\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastFeesCollected\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_escrow\",\"type\":\"address\"}],\"name\":\"setEscrow\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalIssuanceLastAverageBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"issuanceCurrentBalanceSum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"selfDestructBeneficiary\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"issuer\",\"type\":\"address\"}],\"name\":\"remainingIssuableNomins\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastFeePeriodStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalIssuanceCurrentBalanceSum\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"issueMaxNomins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"hav_dec\",\"type\":\"uint256\"}],\"name\":\"HAVtoUSD\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"transferableHavvens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"escrow\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"nomin\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenState\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proxy\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"issuanceLastModified\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceIsStale\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_proxy\",\"type\":\"address\"},{\"name\":\"_tokenState\",\"type\":\"address\"},{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_oracle\",\"type\":\"address\"},{\"name\":\"_price\",\"type\":\"uint256\"},{\"name\":\"_issuers\",\"type\":\"address[]\"},{\"name\":\"_oldHavven\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newPrice\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"PriceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newRatio\",\"type\":\"uint256\"}],\"name\":\"IssuanceRatioUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"FeePeriodRollover\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"FeePeriodDurationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newOracle\",\"type\":\"address\"}],\"name\":\"OracleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newNomin\",\"type\":\"address\"}],\"name\":\"NominUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newEscrow\",\"type\":\"address\"}],\"name\":\"EscrowUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"IssuersUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newTokenState\",\"type\":\"address\"}],\"name\":\"TokenStateUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"proxyAddress\",\"type\":\"address\"}],\"name\":\"ProxyUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"SelfDestructTerminated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"beneficiary\",\"type\":\"address\"}],\"name\":\"SelfDestructed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"selfDestructDelay\",\"type\":\"uint256\"}],\"name\":\"SelfDestructInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newBeneficiary\",\"type\":\"address\"}],\"name\":\"SelfDestructBeneficiaryUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerNominated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerChanged\",\"type\":\"event\"}]" - }, - { - "name": "Havven Mintr", - "address": "0xC011A72400E58ecD99Ee497CF89E3775d4bd732F", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"nominsIssued\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"issuer\",\"type\":\"address\"}],\"name\":\"remainingIssuableNomins\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"issuer\",\"type\":\"address\"}],\"name\":\"maxIssuableNomins\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"issueNomins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"issueMaxNomins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnNomins\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawFees\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastFeesCollected\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}]" - }, - { - "name": "Milestone Tracker", - "address": "0x3C01ddC7aF41E6888cBD8d0398Fe34a81C3c7f36", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"proposedMilestones\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"changingMilestones\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"campaignCanceled\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_idMilestone\",\"type\":\"uint256\"}],\"name\":\"collectMilestonePayment\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unproposeMilestones\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"donor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_idMilestone\",\"type\":\"uint256\"}],\"name\":\"milestoneCompleted\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hashProposals\",\"type\":\"bytes32\"}],\"name\":\"acceptProposedMilestones\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_idMilestone\",\"type\":\"uint256\"}],\"name\":\"approveCompletedMilestone\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"recipient\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newMilestones\",\"type\":\"bytes\"}],\"name\":\"proposeMilestones\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"arbitrator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"arbitrateCancelCampaign\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newRecipient\",\"type\":\"address\"}],\"name\":\"changeRecipient\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberOfMilestones\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_idMilestone\",\"type\":\"uint256\"}],\"name\":\"rejectMilestone\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newDonor\",\"type\":\"address\"}],\"name\":\"changeDonor\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"milestones\",\"outputs\":[{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"minCompletionDate\",\"type\":\"uint256\"},{\"name\":\"maxCompletionDate\",\"type\":\"uint256\"},{\"name\":\"reviewer\",\"type\":\"address\"},{\"name\":\"reviewTime\",\"type\":\"uint256\"},{\"name\":\"paymentSource\",\"type\":\"address\"},{\"name\":\"payData\",\"type\":\"bytes\"},{\"name\":\"status\",\"type\":\"uint8\"},{\"name\":\"doneTime\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_idMilestone\",\"type\":\"uint256\"}],\"name\":\"arbitrateApproveMilestone\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_idMilestone\",\"type\":\"uint256\"}],\"name\":\"cancelMilestone\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newArbitrator\",\"type\":\"address\"}],\"name\":\"changeArbitrator\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_arbitrator\",\"type\":\"address\"},{\"name\":\"_donor\",\"type\":\"address\"},{\"name\":\"_recipient\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"NewMilestoneListProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"NewMilestoneListUnproposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"NewMilestoneListAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"idProposal\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newProposal\",\"type\":\"uint8\"}],\"name\":\"ProposalStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CampaignCalncelled\",\"type\":\"event\"}]" - }, - { - "name": "Mist's Multisig Contract", - "address": "0x0101010101010101010101010101010101010101", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"removeOwner\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"m_numOwners\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"m_lastDay\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"resetSpentToday\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"m_spentToday\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"addOwner\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"m_required\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_h\",\"type\":\"bytes32\"}],\"name\":\"confirm\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newLimit\",\"type\":\"uint256\"}],\"name\":\"setDailyLimit\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[{\"name\":\"_r\",\"type\":\"bytes32\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_operation\",\"type\":\"bytes32\"}],\"name\":\"revoke\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newRequired\",\"type\":\"uint256\"}],\"name\":\"changeRequirement\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_operation\",\"type\":\"bytes32\"},{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"hasConfirmed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"kill\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"changeOwner\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"m_dailyLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"inputs\":[{\"name\":\"_owners\",\"type\":\"address[]\"},{\"name\":\"_required\",\"type\":\"uint256\"},{\"name\":\"_daylimit\",\"type\":\"uint256\"}],\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"operation\",\"type\":\"bytes32\"}],\"name\":\"Confirmation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"operation\",\"type\":\"bytes32\"}],\"name\":\"Revoke\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"oldOwner\",\"type\":\"address\"}],\"name\":\"OwnerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newRequirement\",\"type\":\"uint256\"}],\"name\":\"RequirementChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"SingleTransact\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"operation\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"MultiTransact\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"operation\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"initiator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfirmationNeeded\",\"type\":\"event\"}]" - }, - { - "name": "Modum Token", - "address": "0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e", - "abi": - "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_addr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"weiPerToken\",\"type\":\"uint256\"}],\"name\":\"Payout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_addr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"option\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"votes\",\"type\":\"uint256\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"accounts\",\"outputs\":[{\"name\":\"lastProposalStartTime\",\"type\":\"uint256\"},{\"name\":\"lastAirdropWei\",\"type\":\"uint256\"},{\"name\":\"lastAirdropClaimTime\",\"type\":\"uint256\"},{\"name\":\"bonusWei\",\"type\":\"uint256\"},{\"name\":\"valueModVote\",\"type\":\"uint256\"},{\"name\":\"valueMod\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowed\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"blockingDuration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claimBonus\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claimVotingProposal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"currentProposal\",\"outputs\":[{\"name\":\"addr\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"valueMod\",\"type\":\"uint256\"},{\"name\":\"startTime\",\"type\":\"uint256\"},{\"name\":\"yay\",\"type\":\"uint256\"},{\"name\":\"nay\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseApproval\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseApproval\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isProposalActive\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isVoteOngoing\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isVotingPhaseOver\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastNegativeVoting\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lockedTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxTokens\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address[]\"},{\"name\":\"_value\",\"type\":\"uint256[]\"}],\"name\":\"mint\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"mintDone\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_addr\",\"type\":\"address[]\"}],\"name\":\"payBonus\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"redistributionTimeout\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rounding\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"setMintDone\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"showBonus\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_addr\",\"type\":\"address\"}],\"name\":\"showVotes\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalDropPerUnlockedToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_vote\",\"type\":\"bool\"}],\"name\":\"vote\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"votingDuration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_addr\",\"type\":\"string\"},{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"votingProposal\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]" - }, - { - "name": "NVC Fund", - "address": "0x53b60A7c2F6d95E12c5e5A3cCaAcFE35620AeFf6", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"standard\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimal\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"name\":\"decimalUnits\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - }, - { - "name": "OpenWeb Network", - "address": "0x68fcb1f0d07000a84b569ccb647dd8fe320cddaa", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_git\",\"type\":\"string\"},{\"name\":\"_filesHash\",\"type\":\"bytes32\"},{\"name\":\"_file_name\",\"type\":\"bytes32[]\"},{\"name\":\"_file_hash\",\"type\":\"bytes32[]\"}],\"name\":\"publishWebsite\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"websiteSizeLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"_priceFetchingCost\",\"outputs\":[{\"name\":\"_getprice\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"__response\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"hostConnectionDB\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_year\",\"type\":\"uint256\"},{\"name\":\"_month\",\"type\":\"uint256\"}],\"name\":\"claimHostTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_file_name\",\"type\":\"bytes32\"},{\"name\":\"_file_hash\",\"type\":\"bytes32\"}],\"name\":\"verifyDomainFileHash\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ow_owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"}],\"name\":\"buyDomain\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolBalanceClaimed\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeLockTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"websiteUpdatesCounter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"addDomainAdmin\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"internalTransfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"}],\"name\":\"getDomainMeta\",\"outputs\":[{\"name\":\"_name\",\"type\":\"string\"},{\"name\":\"_git\",\"type\":\"string\"},{\"name\":\"_domain_bytes\",\"type\":\"bytes32\"},{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_total_admins\",\"type\":\"uint256\"},{\"name\":\"_adminIndex\",\"type\":\"uint256\"},{\"name\":\"_total_files\",\"type\":\"uint256\"},{\"name\":\"_version\",\"type\":\"uint256\"},{\"name\":\"_ttl\",\"type\":\"uint256\"},{\"name\":\"_time\",\"type\":\"uint256\"},{\"name\":\"_expity_time\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"notifyBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"userSurfingCost\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_connection\",\"type\":\"string\"}],\"name\":\"registerHost\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakesLockups\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_ttl\",\"type\":\"uint256\"}],\"name\":\"updateDomainTTL\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"domain_sale\",\"outputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"time\",\"type\":\"uint256\"},{\"name\":\"expity_time\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_year\",\"type\":\"uint256\"},{\"name\":\"_month\",\"type\":\"uint256\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"poolDonate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"},{\"name\":\"_year\",\"type\":\"uint256\"},{\"name\":\"_month\",\"type\":\"uint256\"}],\"name\":\"getHostTokens\",\"outputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakeBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"poolBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"hostUpdatesCounter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"hostAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastPriceUpdate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"hostConnection\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"stakeTmpBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hostAddress\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"stakeTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"totalStakes\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_expiry\",\"type\":\"uint256\"}],\"name\":\"sellDomain\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_connection\",\"type\":\"string\"}],\"name\":\"updateHost\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_file_name\",\"type\":\"bytes32\"}],\"name\":\"getDomainFileHash\",\"outputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setOwOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_ttl\",\"type\":\"uint256\"}],\"name\":\"registerDomain\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hostStakes\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"publishCost\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_year\",\"type\":\"uint256\"},{\"name\":\"_month\",\"type\":\"uint256\"}],\"name\":\"claimStakeTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"users\",\"outputs\":[{\"name\":\"active\",\"type\":\"bool\"},{\"name\":\"start_time\",\"type\":\"uint256\"},{\"name\":\"expiry_time\",\"type\":\"uint256\"},{\"name\":\"time\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"websiteUpdates\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"hostUpdates\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"hosts\",\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\"},{\"name\":\"hostAddress\",\"type\":\"address\"},{\"name\":\"connection\",\"type\":\"bytes32\"},{\"name\":\"active\",\"type\":\"bool\"},{\"name\":\"start_time\",\"type\":\"uint256\"},{\"name\":\"time\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"fetchTokenPrice\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSubscriber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"domains\",\"outputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"admin_index\",\"type\":\"uint256\"},{\"name\":\"total_admins\",\"type\":\"uint256\"},{\"name\":\"git\",\"type\":\"string\"},{\"name\":\"domain_bytes\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"total_files\",\"type\":\"uint256\"},{\"name\":\"version\",\"type\":\"uint256\"},{\"name\":\"ttl\",\"type\":\"uint256\"},{\"name\":\"time\",\"type\":\"uint256\"},{\"name\":\"expity_time\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_year\",\"type\":\"uint256\"},{\"name\":\"_month\",\"type\":\"uint256\"}],\"name\":\"burnPoolTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalDomains\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"cmcAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"registryDuration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"},{\"name\":\"_admin\",\"type\":\"address\"}],\"name\":\"removeDomainAdmin\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"}],\"name\":\"cancelSellDomain\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"domainCost\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_duration\",\"type\":\"uint256\"}],\"name\":\"userSubscribe\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"},{\"name\":\"_year\",\"type\":\"uint256\"},{\"name\":\"_month\",\"type\":\"uint256\"}],\"name\":\"getStakeTokens\",\"outputs\":[{\"name\":\"_amount\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"hostRegistryCost\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"websiteFilesLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_domain\",\"type\":\"string\"}],\"name\":\"renewDomain\",\"outputs\":[{\"name\":\"_status\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalHosts\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"_currentPrice\",\"outputs\":[{\"name\":\"_getprice\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"},{\"name\":\"_cmc\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"}]" - }, - { - "name": "Pass DAO: Committees Contract", - "address": "0x6A3DCd2Ad3C693aA8CBc3e5bCB075b674209A033", - "abi": - "[{ \"constant\": false, \"inputs\": [ { \"name\": \"_committeeID\", \"type\": \"uint256\" }, { \"name\": \"_supportsProposal\", \"type\": \"bool\" } ], \"name\": \"vote\", \"outputs\": [], \"payable\": false, \"type\": \"function\" },{ \"constant\": false, \"inputs\": [ { \"name\": \"_proposalID\", \"type\": \"uint256\" } ], \"name\": \"buySharesForProposal\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [], \"name\": \"withdrawPendingAmounts\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"type\": \"function\"}, { \"constant\": false, \"inputs\": [ { \"name\": \"_contractorCreator\", \"type\": \"address\" }, { \"name\": \"_recipient\", \"type\": \"address\" }, { \"name\": \"_metaProject\", \"type\": \"bool\" }, { \"name\": \"_passProject\", \"type\": \"address\" }, { \"name\": \"_projectName\", \"type\": \"string\" }, { \"name\": \"_projectDescription\", \"type\": \"string\" } ], \"name\": \"createContractor\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_amount\", \"type\": \"uint256\" }, { \"name\": \"_contractor\", \"type\": \"address\" }, { \"name\": \"_contractorProposalID\", \"type\": \"uint256\" }, { \"name\": \"_proposalDescription\", \"type\": \"string\" }, { \"name\": \"_hashOfTheContractorProposalDocument\", \"type\": \"bytes32\" }, { \"name\": \"_moderator\", \"typPassDe\": \"address\" }, { \"name\": \"_initialSharePriceMultiplier\", \"type\": \"uint256\" }, { \"name\": \"_minutesFundingPeriod\", \"type\": \"uint256\" }, { \"name\": \"_minutesDebatingPeriod\", \"type\": \"uint256\" } ], \"name\": \"contractorProposal\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_name\", \"type\": \"string\" }, { \"name\": \"_description\", \"type\": \"string\" }, { \"name\": \"_project\", \"type\": \"address\" }, { \"name\": \"_minutesDebatingPeriod\", \"type\": \"uint256\" } ], \"name\": \"resolutionProposal\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_minQuorumDivisor\", \"type\": \"uint256\" }, { \"name\": \"_minCommitteeFees\", \"type\": \"uint256\" }, { \"name\": \"_minPercentageOfLikes\", \"type\": \"uint256\" }, { \"name\": \"_minutesSetProposalPeriod\", \"type\": \"uint256\" }, { \"name\": \"_minMinutesDebatePeriod\", \"type\": \"uint256\" }, { \"name\": \"_feesRewardInflationRate\", \"type\": \"uint256\" }, { \"name\": \"_defaultMinutesFundingPeriod\", \"type\": \"uint256\" }, { \"name\": \"_tokenPriceInflationRate\", \"type\": \"uint256\" } ], \"name\": \"rulesProposal\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_newCommitteeRoom\", \"type\": \"address\" }, { \"name\": \"_newShareManager\", \"type\": \"address\" }, { \"name\": \"_newTokenManager\", \"type\": \"address\" }, { \"name\": \"_minutesDebatingPeriod\", \"type\": \"uint256\" } ], \"name\": \"upgradeProposal\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_committeeID\", \"type\": \"uint256\" } ], \"name\": \"executeDecision\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_proposalID\", \"type\": \"uint256\" } ], \"name\": \"orderToContractor\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"type\": \"function\" }]" - }, - { - "name": "Pass DAO: Tokens Contract", - "address": "0x85bC00724203D53536072b000C44A2cc16CD12C5", - "abi": - "[{ \"constant\": false, \"inputs\": [ { \"name\": \"_proposalID\", \"type\": \"uint256\" }, { \"name\": \"_buyer\", \"type\": \"address\" } ], \"name\": \"buyTokensForProposal\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [], \"name\": \"withdrawPendingAmounts\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [], \"name\": \"buyTokens\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": true, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"uint256\" }, { \"name\": \"_to\", \"type\": \"uint256\" } ], \"name\": \"removeOrders\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_tokenAmount\", \"type\": \"uint256\" }, { \"name\": \"_from\", \"type\": \"uint256\" }, { \"name\": \"_to\", \"type\": \"uint256\" } ], \"name\": \"sellTokens\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"type\": \"function\" }]" - }, - { - "name": "Persian: Warrior for Battle Contract", - "address": "0x163733bcc28dbf26B41a8CfA83e369b5B3af741b", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"icoStartBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxTotalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalContributions\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"contributions\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"claimToken\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"icoEndBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"estimateBalanceOf\",\"outputs\":[{\"name\":\"estimatedTokens\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isICOOpen\",\"outputs\":[{\"name\":\"_open\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isICOEnded\",\"outputs\":[{\"name\":\"_ended\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"contribute\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":true,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemEther\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_icoStartBlock\",\"type\":\"uint256\"},{\"name\":\"_icoEndBlock\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_estimatedTotalTokenBalance\",\"type\":\"uint256\"}],\"name\":\"Contributed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_contributor\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "☼Plasma Token & Token Wallet", - "address": "0x59416A25628A76b4730eC51486114c32E0B582A1", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"message\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ViewerStatus\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ViewerValue\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenRateEther\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Login\",\"type\":\"string\"}],\"name\":\"registrationFromLogin\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"MainAccount\",\"type\":\"address\"},{\"name\":\"ActiveAliasAccount\",\"type\":\"bool\"},{\"name\":\"ActiveMainAccount\",\"type\":\"bool\"},{\"name\":\"PromilleDeposit\",\"type\":\"uint256\"},{\"name\":\"DeleteMainAccount\",\"type\":\"bool\"}],\"name\":\"setupAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"NewPIN\",\"type\":\"uint256\"}],\"name\":\"setupAccountPIN\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"deleteLogin\",\"type\":\"string\"},{\"name\":\"newLogin\",\"type\":\"string\"}],\"name\":\"setupLoginVipAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"MainAccount\",\"type\":\"address\"}],\"name\":\"setupAliasAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Account\",\"type\":\"address\"},{\"name\":\"Freezen\",\"type\":\"bool\"}],\"name\":\"frozenSubAccount\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Account\",\"type\":\"address\"}],\"name\":\"buyVipStatusPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"buyTokenPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"toTransferETHER\",\"type\":\"address\"},{\"name\":\"microToken\",\"type\":\"uint256\"},{\"name\":\"SellDeposit\",\"type\":\"bool\"}],\"name\":\"sellToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"login\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"name\":\"depositaryPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Account\",\"type\":\"address\"},{\"name\":\"microToken\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Login\",\"type\":\"string\"},{\"name\":\"PIN\",\"type\":\"uint256\"}],\"name\":\"transferFromLoginPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Login\",\"type\":\"string\"}],\"name\":\"transferToLoginPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"microToken\",\"type\":\"uint256\"}],\"name\":\"returnDepositToBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"SubAccount\",\"type\":\"address\"},{\"name\":\"PIN\",\"type\":\"uint256\"}],\"name\":\"transferProtectPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"PIN\",\"type\":\"uint256\"}],\"name\":\"unblockTransferProtectPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"SubAccount\",\"type\":\"address\"},{\"name\":\"pinSubAccount\",\"type\":\"uint256\"},{\"name\":\"promilleRefund\",\"type\":\"uint256\"}],\"name\":\"transferRefundSubAccountPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"MainAccount\",\"type\":\"address\"},{\"name\":\"pinMainAccount\",\"type\":\"uint256\"},{\"name\":\"SubAccount\",\"type\":\"address\"},{\"name\":\"pinSubAccount\",\"type\":\"uint256\"},{\"name\":\"promilleReferee\",\"type\":\"uint256\"}],\"name\":\"refereeTransferProtect\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"VipAccount\",\"type\":\"bool\"},{\"name\":\"ActiveAliasAccount\",\"type\":\"bool\"},{\"name\":\"ActiveMainAccount\",\"type\":\"bool\"},{\"name\":\"MainAccount\",\"type\":\"address\"},{\"name\":\"MyReferralAccount\",\"type\":\"address\"}],\"name\":\"MyAccountStatus\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"Deposit\",\"type\":\"bool\"},{\"name\":\"PromilleDeposit\",\"type\":\"bool\"},{\"name\":\"ZoneToken\",\"type\":\"bool\"}],\"name\":\"MyAccountValue\",\"outputs\":[{\"name\":\"value\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"myMessage\",\"type\":\"string\"}],\"name\":\"advertisingPay\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"burnToken\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"microToken\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"Message\",\"type\":\"string\"}],\"name\":\"Advertising\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"microToken\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"PriceVipAccountMicroEther\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"TransferTokensFeeInPromille\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"BonusForZone1InPromille\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"BonusForZone2InPromille\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"BonusForZone3InPromille\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"BonusForZone4InPromille\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"BonusForZone5InPromille\",\"type\":\"uint256\"}],\"name\":\"OptionsContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"microETHER\",\"type\":\"uint256\"}],\"name\":\"TokenSellingRate\",\"type\":\"event\"}]" - }, - { - "name": "Rebellious", - "address": "0x5f53f7a8075614b699baad0bc2c899f4bad8fbbf", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"mint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"coinAge\",\"outputs\":[{\"name\":\"myCoinAge\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ownerSetStakeStartTime\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxTotalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipients\",\"type\":\"address[]\"},{\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"batchTransfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"ownerBurnToken\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalInitialSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"annualInterest\",\"outputs\":[{\"name\":\"interest\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeMinAge\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chainStartBlockNumber\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stakeMaxAge\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"maxMintProofOfStake\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"burner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_reward\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - }, - { - "name": "Replay Safe Split", - "address": "0xAA1A6e3e6EF20068f7F8d8C835d2D22fd5116444", - "abi": - "[{\"constant\":false,\"inputs\":[{\"name\":\"targetFork\",\"type\":\"address\"},{\"name\":\"targetNoFork\",\"type\":\"address\"}],\"name\":\"split\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"}]" - }, - { - "name": "RiderToken", - "address": "0x54b293226000ccBFC04DF902eEC567CB4C35a903", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"},{\"name\":\"tokenSupply\",\"type\":\"uint256\"}],\"name\":\"SetupToken\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"adr\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "SingularDTV Fund", - "address": "0xe736091FC36f1ad476f5E4e03e4425940822D3BA", - "abi": - "[{\"inputs\": [{\"type\": \"address\", \"name\": \"singularDTVCrowdfundingAddress\"}, {\"type\": \"address\", \"name\": \"singularDTVTokenAddress\"}], \"constant\": false, \"type\": \"function\", \"name\": \"setup\", \"outputs\": [{\"type\": \"bool\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": false, \"type\": \"function\", \"name\": \"depositRevenue\", \"outputs\": [{\"type\": \"bool\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": false, \"type\": \"function\", \"name\": \"withdrawRevenue\", \"outputs\": [{\"type\": \"uint256\", \"name\": \"\"}]}, {\"inputs\": [{\"type\": \"address\", \"name\": \"forAddress\"}], \"constant\": false, \"type\": \"function\", \"name\": \"softWithdrawRevenueFor\", \"outputs\": [{\"type\": \"uint256\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": true, \"type\": \"function\", \"name\": \"workshop\", \"outputs\": [{\"type\": \"address\", \"name\": \"\"}]}, {\"inputs\": [{\"type\": \"address\", \"name\": \"\"}], \"constant\": true, \"type\": \"function\", \"name\": \"revenueAtTimeOfWithdraw\", \"outputs\": [{\"type\": \"uint256\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": true, \"type\": \"function\", \"name\": \"singularDTVToken\", \"outputs\": [{\"type\": \"address\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": true, \"type\": \"function\", \"name\": \"owner\", \"outputs\": [{\"type\": \"address\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": true, \"type\": \"function\", \"name\": \"singularDTVCrowdfunding\", \"outputs\": [{\"type\": \"address\", \"name\": \"\"}]}, {\"inputs\": [], \"constant\": true, \"type\": \"function\", \"name\": \"totalRevenue\", \"outputs\": [{\"type\": \"uint256\", \"name\": \"\"}]}, {\"inputs\": [{\"type\": \"address\", \"name\": \"\"}], \"constant\": true, \"type\": \"function\", \"name\": \"owed\", \"outputs\": [{\"type\": \"uint256\", \"name\": \"\"}]}, {\"inputs\": [], \"type\": \"constructor\"}]" - }, - { - "name": "SIFT Vote SVP002", - "address": "0x7f39f3a01701bbb3b637597ab3267c213c8a11df", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"vote02YesCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vote02NoCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voteStartTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vote03YesCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vote01YesCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"vote\",\"type\":\"bool\"}],\"name\":\"voteSvp01\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vote03NoCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"voteCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"vote01NoCount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"voteEndTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"setVoterCount\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voterAddresses\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"vote\",\"type\":\"bool\"}],\"name\":\"voteSvp02\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"vote\",\"type\":\"bool\"}],\"name\":\"voteSvp03\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_position\",\"type\":\"uint256\"},{\"name\":\"_voter\",\"type\":\"address\"},{\"name\":\"_voteCount\",\"type\":\"uint256\"}],\"name\":\"setVoter\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_authenticationManagerAddress\",\"type\":\"address\"},{\"name\":\"_voteStartTime\",\"type\":\"uint256\"},{\"name\":\"_voteEndTime\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"}]" - }, - { - "name": "SIFT Dividends", - "address": "0x9599954b6ade1f00f36a95cdf3a1b773ba3be19a", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"dividends\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdrawDividend\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contractVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_siftContractAddress\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PaymentAvailable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"paymentPerShare\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"DividendPayment\",\"type\":\"event\"}]" - }, - { - "name": "SIFT Transparency", - "address": "0x27c8566bfb73280606e58f60cb3374788a43d850", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"accountBalanceCount\",\"outputs\":[{\"name\":\"_count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_accountType\",\"type\":\"string\"},{\"name\":\"_accountIssuer\",\"type\":\"string\"},{\"name\":\"_balance\",\"type\":\"uint256\"},{\"name\":\"_accountReference\",\"type\":\"string\"},{\"name\":\"_validationUrl\",\"type\":\"string\"},{\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"accountBalancePublish\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundValueCount\",\"outputs\":[{\"name\":\"_count\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_usdTotalFund\",\"type\":\"uint256\"},{\"name\":\"_etherTotalFund\",\"type\":\"uint256\"},{\"name\":\"_definedTimestamp\",\"type\":\"uint256\"}],\"name\":\"fundValuePublish\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"fundValues\",\"outputs\":[{\"name\":\"usdValue\",\"type\":\"uint256\"},{\"name\":\"etherEquivalent\",\"type\":\"uint256\"},{\"name\":\"suppliedTimestamp\",\"type\":\"uint256\"},{\"name\":\"blockTimestamp\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"accountBalances\",\"outputs\":[{\"name\":\"accountType\",\"type\":\"string\"},{\"name\":\"accountIssuer\",\"type\":\"string\"},{\"name\":\"balance\",\"type\":\"uint256\"},{\"name\":\"accountReference\",\"type\":\"string\"},{\"name\":\"validationUrl\",\"type\":\"string\"},{\"name\":\"suppliedTimestamp\",\"type\":\"uint256\"},{\"name\":\"blockTimestamp\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contractVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_authenticationManagerAddress\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"usdValue\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"etherEquivalent\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"suppliedTimestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"blockTimestamp\",\"type\":\"uint256\"}],\"name\":\"FundValue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"accountType\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"accountIssuer\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"balance\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"accountReference\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"validationUrl\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"timestamp\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"blockTimestamp\",\"type\":\"uint256\"}],\"name\":\"AccountBalance\",\"type\":\"event\"}]" - }, - { - "name": "SIFT Authentication", - "address": "0xc6a3746aa3fec176559f0865fd5240159402a81f", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isCurrentOrPastAccountReader\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeAdmin\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"removeAccountReader\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"addAdmin\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"contractVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"addAccountReader\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isCurrentAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isCurrentOrPastAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isCurrentAccountReader\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"addedBy\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AdminAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"removedBy\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"AdminRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"addedBy\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AccountReaderAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"removedBy\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AccountReaderRemoved\",\"type\":\"event\"}]" - }, - { - "name": "Skrilla Token", - "address": "0x4c382F8E09615AC86E08CE58266CC227e7d4D913", - "abi": - "[{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"tokenSaleBalanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"withdraw\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_buyer\",\"type\":\"address\"}],\"name\":\"getCurrentPrice\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Telcoin Redeem", - "address": "0x6D9FE564C9B1C81C305e066346dF73de6cF9295f", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"mintingFinished\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"finishMinting\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"vestedBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"redeemableBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_beneficiaries\",\"type\":\"address[]\"}],\"name\":\"redeemMany\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalRedeemed\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_telcoin\",\"type\":\"address\"},{\"name\":\"_vestingStart\",\"type\":\"uint256\"},{\"name\":\"_vestingDuration\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"MintFinished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"sacrificedValue\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"grantedValue\",\"type\":\"uint256\"}],\"name\":\"Redeem\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - }, - { - "name": "StashPay", - "address": "0xecd570bBf74761b960Fa04Cc10fe2c4e86FfDA36", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stop\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"distributionComplete\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"publicKeySize\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getData\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"distributeAdviserBounty\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"publicKey\",\"type\":\"string\"}],\"name\":\"registerKey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"timeTransferbleUntil\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"sale\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"stopped\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_data\",\"type\":\"string\"}],\"name\":\"burn\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"uint256[]\"},{\"name\":\"freeze\",\"type\":\"bool\"}],\"name\":\"multiDistributeAdviserBounty\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"publicKeys\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_publicKeySize\",\"type\":\"uint8\"}],\"name\":\"modifyPublicKeySize\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"frozenAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"setSymbol\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"data\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"adviserAndBounty\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_target\",\"type\":\"address\"}],\"name\":\"isFrozen\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"uint256[]\"}],\"name\":\"multiDistribute\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_publicKey\",\"type\":\"string\"}],\"name\":\"RegisterKey\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_size\",\"type\":\"uint8\"}],\"name\":\"ModifyPublicKeySize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"string\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"LogStop\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "TRV", - "address": "0xA671f2914Ba0e73979FFc47cD350801d1714b18f", - "abi": - "[{\"constant\":false,\"inputs\":[],\"name\":\"checkGoalReached\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"creator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingMinimumTargetInUsd\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_source\",\"type\":\"address\"}],\"name\":\"addToSyncList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenRaised\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_price\",\"type\":\"uint256\"}],\"name\":\"setEtherPrice\",\"outputs\":[{\"name\":\"result\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalUsdRaised\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"beneficiary\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"icoState\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"priceInUsd\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenAllocation\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"userRefund\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenReward\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"stopIco\",\"outputs\":[{\"name\":\"result\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"amountRaised\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startIco\",\"outputs\":[{\"name\":\"result\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingMaximumTargetInUsd\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"drain\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"syncList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"safeDiv\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"AutorizeRefund\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"etherPriceInUsd\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"safeMul\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"fundingGoalReached\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_priceInUsd\",\"type\":\"uint256\"},{\"name\":\"_tokenHolder\",\"type\":\"address\"},{\"name\":\"_tokenAllocation\",\"type\":\"uint256\"},{\"name\":\"_fundingMinimumTargetInUsd\",\"type\":\"uint256\"},{\"name\":\"_fundingMaximumTargetInUsd\",\"type\":\"uint256\"}],\"name\":\"settingsIco\",\"outputs\":[{\"name\":\"result\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"safeWithdrawal\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"removeContract\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"ifSuccessfulSendTo\",\"type\":\"address\"},{\"name\":\"_fundingMinimumTargetInUsd\",\"type\":\"uint256\"},{\"name\":\"_fundingMaximumTargetInUsd\",\"type\":\"uint256\"},{\"name\":\"tokenPriceInUSD\",\"type\":\"uint256\"},{\"name\":\"addressOfTokenUsedAsReward\",\"type\":\"address\"},{\"name\":\"_tokenHolder\",\"type\":\"address\"},{\"name\":\"_tokenAllocation\",\"type\":\"uint256\"},{\"name\":\"_etherPriceInUsd\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amountRaised\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_totalUsdRaised\",\"type\":\"uint256\"}],\"name\":\"GoalMinimumReached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_beneficiary\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amountRaised\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_totalUsdRaised\",\"type\":\"uint256\"}],\"name\":\"GoalMaximumReached\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_backer\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_isContribution\",\"type\":\"bool\"}],\"name\":\"FundTransfer\",\"type\":\"event\"}]" - }, - { - "name": "Q - TiiQu Network", - "address": "0x2C3C1F05187dBa7A5f2Dd47Dca57281C4d4F183F", - "abi": - "[{\"constant\":false,\"inputs\":[],\"name\":\"killPay\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"isAuthorised\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"authorise\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_toReplace\",\"type\":\"address\"},{\"name\":\"_new\",\"type\":\"address\"}],\"name\":\"replaceAuthorised\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"unauthorise\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_address\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"pay\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_message\",\"type\":\"bytes16\"},{\"indexed\":true,\"name\":\"_actioner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_actionee\",\"type\":\"address\"}],\"name\":\"Authorise\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "VIBEX", - "address": "0x882448f83d90b2bf477af2ea79327fdea1335d93", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"startDate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ETH_RECEIVED_MIN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"proceed\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"finalize\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenExchange\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalReceivedEth\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MIN_ETH_TRANS\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ethFundDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"deadlines\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenAccountAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"prices\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"state\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"endDate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ETH_RECEIVED_CAP\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"startRedeeming\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"TOKEN_MIN\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"redeemTokens\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"tokenExchangeAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"LogCreateVIBEX\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_value2\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_value3\",\"type\":\"uint256\"}],\"name\":\"LogRedeemVIBE\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "Who The Eth?", - "address": "0x842D6dA3097B5efdE5a81535144f947Ab482b6eE", - "abi": - "[{\"constant\": true,\"inputs\": [],\"name\": \"numberOfNames\",\"outputs\": [{\"name\": \"\",\"type\": \"uint256\"}],\"payable\": false,\"stateMutability\": \"view\",\"type\": \"function\"},{\"constant\": true,\"inputs\": [{\"name\": \"\",\"type\": \"address\"}],\"name\": \"names\",\"outputs\": [{\"name\": \"\",\"type\": \"string\"}],\"payable\": false,\"stateMutability\": \"view\",\"type\": \"function\"},{\"constant\": true,\"inputs\": [{\"name\": \"\",\"type\": \"address\"}],\"name\": \"bank\",\"outputs\": [{\"name\": \"\",\"type\": \"uint256\"}],\"payable\": false,\"stateMutability\": \"view\",\"type\": \"function\"},{\"anonymous\": false,\"inputs\": [{\"indexed\": true,\"name\": \"_address\",\"type\": \"address\"},{\"indexed\": false,\"name\": \"_name\",\"type\": \"string\"},{\"indexed\": false,\"name\": \"_time\",\"type\": \"uint256\"},{\"indexed\": true,\"name\": \"_referrer\",\"type\": \"address\"},{\"indexed\": false,\"name\": \"_value\",\"type\": \"uint256\"}],\"name\": \"AddedName\",\"type\": \"event\"},{\"constant\": false,\"inputs\": [],\"name\": \"pullFunds\",\"outputs\": [],\"payable\": false,\"stateMutability\": \"nonpayable\",\"type\": \"function\"},{\"constant\": false,\"inputs\": [{\"name\": \"newName\",\"type\": \"string\"}],\"name\": \"setName\",\"outputs\": [],\"payable\": true,\"stateMutability\": \"payable\",\"type\": \"function\"},{\"constant\": false,\"inputs\": [{\"name\": \"newName\",\"type\": \"string\"},{\"name\": \"ref\",\"type\": \"address\"}],\"name\": \"setNameRefer\",\"outputs\": [],\"payable\": true,\"stateMutability\": \"payable\",\"type\": \"function\"},{\"inputs\": [],\"payable\": false,\"stateMutability\": \"nonpayable\",\"type\": \"constructor\"}]" - }, - { - "name": "X8X", - "address": "0x910Dfc18D6EA3D6a7124A6F8B5458F281060fa4c", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"standard\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenAddress\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"salvageTokensFromContract\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_untilBlock\",\"type\":\"uint256\"},{\"name\":\"_reason\",\"type\":\"string\"}],\"name\":\"lockUntil\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupplyLimit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lockedUntilBlock\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintTokens\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_untilBlock\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"_reason\",\"type\":\"string\"}],\"name\":\"ContractLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"}]" - }, - { - "name": "XSC", - "address": "0x0F513fFb4926ff82D7F60A05069047AcA295C413", - "abi": - "[{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\"}],\"name\":\"approveAndCall\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"initialSupply\",\"type\":\"uint256\"},{\"name\":\"tokenName\",\"type\":\"string\"},{\"name\":\"tokenSymbol\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}]" - } -] diff --git a/common/config/contracts/index.ts b/common/config/contracts/index.ts deleted file mode 100644 index 8b72ee1f8..000000000 --- a/common/config/contracts/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ETC from './etc.json'; -import ETH from './eth.json'; -import EXP from './exp.json'; -import Rinkeby from './rinkeby.json'; -import Ropsten from './ropsten.json'; -import Goerli from './goerli.json'; -import RSK from './rsk.json'; -import RSK_TESTNET from './rsk_testnet.json'; -import UBQ from './ubq.json'; -import ESN from './esn.json'; -import ARTIS_SIGMA1 from './artis_sigma1.json'; -import ARTIS_TAU1 from './artis_tau1.json'; -import PIRL from './pirl.json'; - -export default { - ETC, - ETH, - EXP, - Rinkeby, - Ropsten, - Goerli, - RSK, - RSK_TESTNET, - UBQ, - ESN, - ARTIS_SIGMA1, - ARTIS_TAU1, - PIRL -}; diff --git a/common/config/contracts/rsk_testnet.json b/common/config/contracts/rsk_testnet.json deleted file mode 100644 index a270cb25a..000000000 --- a/common/config/contracts/rsk_testnet.json +++ /dev/null @@ -1,52 +0,0 @@ -[ - { - "name": "Bridge", - "address": "0x0000000000000000000000000000000001000006", - "abi": "[ { \"name\": \"getFederationAddress\", \"type\": \"function\", \"constant\": true, \"inputs\": [], \"outputs\": [ { \"name\": \"\", \"type\": \"string\" } ] } ]" - }, - { - "name": "tRIF", - "address": "0x19f64674d8a5b4e652319f5e239efd3bc969a1fe", - "abi": "[ { \"constant\": true, \"inputs\": [], \"name\": \"name\", \"outputs\": [ { \"name\": \"\", \"type\": \"string\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"name\": \"isOriginalOrRedeemedContributor\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"totalSupply\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"decimals\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"distributionTime\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"enableManagerContract\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_owner\", \"type\": \"address\" } ], \"name\": \"balanceOf\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"owner\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"symbol\", \"outputs\": [ { \"name\": \"\", \"type\": \"string\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"name\": \"isRedeemed\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"name\": \"isInitialContributor\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"name\": \"redirect\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"authorizedManagerContract\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_owner\", \"type\": \"address\" }, { \"name\": \"_spender\", \"type\": \"address\" } ], \"name\": \"allowance\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"name\": \"minimumLeftFromSale\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"inputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"from\", \"type\": \"address\" }, { \"indexed\": true, \"name\": \"to\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"data\", \"type\": \"bytes\" } ], \"name\": \"Transfer\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"previousOwner\", \"type\": \"address\" } ], \"name\": \"OwnershipRenounced\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"previousOwner\", \"type\": \"address\" }, { \"indexed\": true, \"name\": \"newOwner\", \"type\": \"address\" } ], \"name\": \"OwnershipTransferred\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": true, \"name\": \"spender\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" } ], \"name\": \"Approval\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"from\", \"type\": \"address\" }, { \"indexed\": true, \"name\": \"to\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" } ], \"name\": \"Transfer\", \"type\": \"event\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"a\", \"type\": \"address\" } ], \"name\": \"getMinimumLeftFromSale\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"redeemIsAllowed\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [], \"name\": \"redeemToSameAddress\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"contributorAddress\", \"type\": \"address\" }, { \"name\": \"chainId\", \"type\": \"uint256\" }, { \"name\": \"redeemAddressAsString\", \"type\": \"string\" }, { \"name\": \"sig_v\", \"type\": \"uint8\" }, { \"name\": \"sig_r\", \"type\": \"bytes32\" }, { \"name\": \"sig_s\", \"type\": \"bytes32\" } ], \"name\": \"redeem\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"a\", \"type\": \"address\" } ], \"name\": \"getRedirectedAddress\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"a\", \"type\": \"address\" } ], \"name\": \"validAddress\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"a\", \"type\": \"address\" } ], \"name\": \"wasRedirected\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_to\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" } ], \"name\": \"transfer\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_to\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_data\", \"type\": \"bytes\" } ], \"name\": \"transferAndCall\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_to\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" } ], \"name\": \"transferFrom\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_spender\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" } ], \"name\": \"approve\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_spender\", \"type\": \"address\" }, { \"name\": \"_addedValue\", \"type\": \"uint256\" } ], \"name\": \"increaseApproval\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_spender\", \"type\": \"address\" }, { \"name\": \"_subtractedValue\", \"type\": \"uint256\" } ], \"name\": \"decreaseApproval\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Registry - Auction variant", - "address": "0xe0ba8a9ff14a7dfeab227a4f685b08a1084f4ad1", - "abi": "[ { \"inputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"label\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"NewOwner\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"Transfer\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"resolverAddress\", \"type\": \"address\" } ], \"name\": \"NewResolver\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"ttlValue\", \"type\": \"uint64\" } ], \"name\": \"NewTTL\", \"type\": \"event\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"owner\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"resolver\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"ttl\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint64\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"setOwner\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"label\", \"type\": \"bytes32\" }, { \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"setSubnodeOwner\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"resolverAddress\", \"type\": \"address\" } ], \"name\": \"setResolver\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"ttlValue\", \"type\": \"uint64\" } ], \"name\": \"setTTL\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"resolver\", \"type\": \"address\" } ], \"name\": \"setDefaultResolver\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Registrar - Auction variant", - "address": "0x8cd41103edcf309714e771cd0c01f1e2b09f4842", - "abi": "[ { \"constant\": true, \"inputs\": [], \"name\": \"tokenContract\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"bytes32\" } ], \"name\": \"sealedBids\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rns\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rootNode\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"inputs\": [ { \"name\": \"_rns\", \"type\": \"address\" }, { \"name\": \"_rootNode\", \"type\": \"bytes32\" }, { \"name\": \"_tokenAddr\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"AuctionStarted\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"bidder\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"deposit\", \"type\": \"uint256\" } ], \"name\": \"NewBid\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"status\", \"type\": \"uint8\" } ], \"name\": \"BidRevealed\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"HashRegistered\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" } ], \"name\": \"HashReleased\", \"type\": \"event\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"startAuction\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hashes\", \"type\": \"bytes32[]\" } ], \"name\": \"startAuctions\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_sealedBid\", \"type\": \"bytes32\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" } ], \"name\": \"newBid\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" }, { \"name\": \"_sealedBid\", \"type\": \"bytes32\" } ], \"name\": \"newBidWithToken\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hashes\", \"type\": \"bytes32[]\" }, { \"name\": \"_sealedBid\", \"type\": \"bytes32\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" } ], \"name\": \"startAuctionsAndBid\", \"outputs\": [], \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_salt\", \"type\": \"bytes32\" } ], \"name\": \"unsealBid\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"finalizeAuction\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_newOwner\", \"type\": \"address\" } ], \"name\": \"transfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"releaseDeed\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_labels\", \"type\": \"bytes32[]\" } ], \"name\": \"eraseNode\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"transferRegistrars\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"payRent\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" }, { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"payRentWithToken\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_deed\", \"type\": \"address\" }, { \"name\": \"_registrationDate\", \"type\": \"uint256\" } ], \"name\": \"acceptRegistrarTransfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"state\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"entries\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" }, { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_owner\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_salt\", \"type\": \"bytes32\" } ], \"name\": \"shaBid\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_data\", \"type\": \"bytes\" } ], \"name\": \"tokenFallback\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Public Resolver - Auction variant", - "address": "0x480fee7506db34dde84cfec85057a6bd96b38e1b", - "abi": "[ { \"constant\": true, \"inputs\": [], \"name\": \"tokenContract\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"bytes32\" } ], \"name\": \"sealedBids\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rns\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rootNode\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"inputs\": [ { \"name\": \"_rns\", \"type\": \"address\" }, { \"name\": \"_rootNode\", \"type\": \"bytes32\" }, { \"name\": \"_tokenAddr\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"AuctionStarted\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"bidder\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"deposit\", \"type\": \"uint256\" } ], \"name\": \"NewBid\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"status\", \"type\": \"uint8\" } ], \"name\": \"BidRevealed\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"HashRegistered\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" } ], \"name\": \"HashReleased\", \"type\": \"event\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"startAuction\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hashes\", \"type\": \"bytes32[]\" } ], \"name\": \"startAuctions\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_sealedBid\", \"type\": \"bytes32\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" } ], \"name\": \"newBid\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" }, { \"name\": \"_sealedBid\", \"type\": \"bytes32\" } ], \"name\": \"newBidWithToken\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hashes\", \"type\": \"bytes32[]\" }, { \"name\": \"_sealedBid\", \"type\": \"bytes32\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" } ], \"name\": \"startAuctionsAndBid\", \"outputs\": [], \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_salt\", \"type\": \"bytes32\" } ], \"name\": \"unsealBid\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"finalizeAuction\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_newOwner\", \"type\": \"address\" } ], \"name\": \"transfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"releaseDeed\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_labels\", \"type\": \"bytes32[]\" } ], \"name\": \"eraseNode\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"transferRegistrars\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"payRent\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" }, { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"payRentWithToken\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_deed\", \"type\": \"address\" }, { \"name\": \"_registrationDate\", \"type\": \"uint256\" } ], \"name\": \"acceptRegistrarTransfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"state\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"entries\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" }, { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_owner\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_salt\", \"type\": \"bytes32\" } ], \"name\": \"shaBid\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_data\", \"type\": \"bytes\" } ], \"name\": \"tokenFallback\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Multi-chain Resolver - Auction variant", - "address": "0x4e88e8253d4a4f023103d2941458ccb2333db62f", - "abi": "[ { \"inputs\": [ { \"name\": \"_rns\", \"type\": \"address\" }, { \"name\": \"_publicResolver\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\", \"signature\": \"constructor\" }, { \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"fallback\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": false, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"content\", \"type\": \"bytes32\" } ], \"name\": \"ContentChanged\", \"type\": \"event\", \"signature\": \"0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": false, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"chain\", \"type\": \"bytes4\" }, { \"indexed\": false, \"name\": \"metadata\", \"type\": \"bytes32\" } ], \"name\": \"ChainMetadataChanged\", \"type\": \"event\", \"signature\": \"0x92c52f77ad49286096555eb922ca7a09249e8dd525cf58cd162fb1165686fad4\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"chain\", \"type\": \"bytes4\" }, { \"indexed\": false, \"name\": \"addr\", \"type\": \"string\" } ], \"name\": \"ChainAddrChanged\", \"type\": \"event\", \"signature\": \"0x6a3e28813f2e2e5bcd0436779f8c5cb179ceadf0379291a818b9078e772b178d\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"addr\", \"type\": \"address\" } ], \"name\": \"AddrChanged\", \"type\": \"event\", \"signature\": \"0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"interfaceId\", \"type\": \"bytes4\" } ], \"name\": \"supportsInterface\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\", \"signature\": \"0x01ffc9a7\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"addr\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x3b3b57de\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"addrValue\", \"type\": \"address\" } ], \"name\": \"setAddr\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xd5fa2b00\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"content\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x2dff6941\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"contentValue\", \"type\": \"bytes32\" } ], \"name\": \"setContent\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xc3d014d6\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" } ], \"name\": \"chainAddr\", \"outputs\": [ { \"name\": \"\", \"type\": \"string\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x8be4b5f6\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" }, { \"name\": \"addrValue\", \"type\": \"string\" } ], \"name\": \"setChainAddr\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xd278b400\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" } ], \"name\": \"chainMetadata\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0xb34e8cd6\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" }, { \"name\": \"metadataValue\", \"type\": \"bytes32\" } ], \"name\": \"setChainMetadata\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0x245d4d9a\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" } ], \"name\": \"chainAddrAndMetadata\", \"outputs\": [ { \"name\": \"\", \"type\": \"string\" }, { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x82e3bee6\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" }, { \"name\": \"addrValue\", \"type\": \"string\" }, { \"name\": \"metadataValue\", \"type\": \"bytes32\" } ], \"name\": \"setChainAddrWithMetadata\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xe335bee4\" } ]" - }, - { - "name": "RNS Registry - FIFS variant", - "address": "0xeff983147ae97758c04f65ac7dee7c7cacf48ba2", - "abi": "[ { \"inputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"label\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"NewOwner\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"Transfer\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"resolverAddress\", \"type\": \"address\" } ], \"name\": \"NewResolver\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"ttlValue\", \"type\": \"uint64\" } ], \"name\": \"NewTTL\", \"type\": \"event\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"owner\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"resolver\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"ttl\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint64\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"setOwner\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"label\", \"type\": \"bytes32\" }, { \"name\": \"ownerAddress\", \"type\": \"address\" } ], \"name\": \"setSubnodeOwner\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"resolverAddress\", \"type\": \"address\" } ], \"name\": \"setResolver\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"ttlValue\", \"type\": \"uint64\" } ], \"name\": \"setTTL\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"resolver\", \"type\": \"address\" } ], \"name\": \"setDefaultResolver\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Registrar - FIFS variant", - "address": "0x92e0e035fbc120f268c1438051fb5b8c24d43641", - "abi": "[ { \"constant\": true, \"inputs\": [], \"name\": \"registerFeeValue\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"tokenContract\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rns\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"resourcePool\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"renewFeeValue\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rootNode\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"inputs\": [ { \"name\": \"_rns\", \"type\": \"address\" }, { \"name\": \"_rootNode\", \"type\": \"bytes32\" }, { \"name\": \"_registerFeeValue\", \"type\": \"uint256\" }, { \"name\": \"_renewFeeValue\", \"type\": \"uint256\" }, { \"name\": \"_tokenContract\", \"type\": \"address\" }, { \"name\": \"_resourcePool\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"HashRegistered\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" } ], \"name\": \"HashRenewed\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"oldOwner\", \"type\": \"address\" }, { \"indexed\": true, \"name\": \"newOwner\", \"type\": \"address\" } ], \"name\": \"HashTransfered\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" } ], \"name\": \"HashReleased\", \"type\": \"event\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"register\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"renew\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_newOwner\", \"type\": \"address\" } ], \"name\": \"transfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"release\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"transferRegistrar\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_owner\", \"type\": \"address\" }, { \"name\": \"_registrationDate\", \"type\": \"uint256\" }, { \"name\": \"_expirationDate\", \"type\": \"uint256\" } ], \"name\": \"acceptRegistrarTransfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"state\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"entry\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" }, { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_data\", \"type\": \"bytes\" } ], \"name\": \"tokenFallback\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Public Resolver - FIFS variant", - "address": "0xa1190a76aea568300c512f3ee6e05e504da1797f", - "abi": "[ { \"constant\": true, \"inputs\": [], \"name\": \"tokenContract\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"bytes32\" } ], \"name\": \"sealedBids\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rns\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [], \"name\": \"rootNode\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"inputs\": [ { \"name\": \"_rns\", \"type\": \"address\" }, { \"name\": \"_rootNode\", \"type\": \"bytes32\" }, { \"name\": \"_tokenAddr\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"AuctionStarted\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"bidder\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"deposit\", \"type\": \"uint256\" } ], \"name\": \"NewBid\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"status\", \"type\": \"uint8\" } ], \"name\": \"BidRevealed\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": true, \"name\": \"owner\", \"type\": \"address\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" }, { \"indexed\": false, \"name\": \"registrationDate\", \"type\": \"uint256\" } ], \"name\": \"HashRegistered\", \"type\": \"event\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"hash\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"value\", \"type\": \"uint256\" } ], \"name\": \"HashReleased\", \"type\": \"event\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"startAuction\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hashes\", \"type\": \"bytes32[]\" } ], \"name\": \"startAuctions\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_sealedBid\", \"type\": \"bytes32\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" } ], \"name\": \"newBid\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" }, { \"name\": \"_sealedBid\", \"type\": \"bytes32\" } ], \"name\": \"newBidWithToken\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hashes\", \"type\": \"bytes32[]\" }, { \"name\": \"_sealedBid\", \"type\": \"bytes32\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" } ], \"name\": \"startAuctionsAndBid\", \"outputs\": [], \"payable\": true, \"stateMutability\": \"payable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_salt\", \"type\": \"bytes32\" } ], \"name\": \"unsealBid\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"finalizeAuction\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_newOwner\", \"type\": \"address\" } ], \"name\": \"transfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"releaseDeed\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_labels\", \"type\": \"bytes32[]\" } ], \"name\": \"eraseNode\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"transferRegistrars\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"payRent\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_tokenQuantity\", \"type\": \"uint256\" }, { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"payRentWithToken\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_deed\", \"type\": \"address\" }, { \"name\": \"_registrationDate\", \"type\": \"uint256\" } ], \"name\": \"acceptRegistrarTransfer\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"state\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" } ], \"name\": \"entries\", \"outputs\": [ { \"name\": \"\", \"type\": \"uint8\" }, { \"name\": \"\", \"type\": \"address\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" }, { \"name\": \"\", \"type\": \"uint256\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"_hash\", \"type\": \"bytes32\" }, { \"name\": \"_owner\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_salt\", \"type\": \"bytes32\" } ], \"name\": \"shaBid\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"_from\", \"type\": \"address\" }, { \"name\": \"_value\", \"type\": \"uint256\" }, { \"name\": \"_data\", \"type\": \"bytes\" } ], \"name\": \"tokenFallback\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\" } ]" - }, - { - "name": "RNS Multi-chain Resolver - FIFS variant", - "address": "0xc52dde9af11185e13ecc516dc337a29b6f16d821", - "abi": "[ { \"inputs\": [ { \"name\": \"_rns\", \"type\": \"address\" }, { \"name\": \"_publicResolver\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"constructor\", \"signature\": \"constructor\" }, { \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"fallback\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": false, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"content\", \"type\": \"bytes32\" } ], \"name\": \"ContentChanged\", \"type\": \"event\", \"signature\": \"0x0424b6fe0d9c3bdbece0e7879dc241bb0c22e900be8b6c168b4ee08bd9bf83bc\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": false, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"chain\", \"type\": \"bytes4\" }, { \"indexed\": false, \"name\": \"metadata\", \"type\": \"bytes32\" } ], \"name\": \"ChainMetadataChanged\", \"type\": \"event\", \"signature\": \"0x92c52f77ad49286096555eb922ca7a09249e8dd525cf58cd162fb1165686fad4\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"chain\", \"type\": \"bytes4\" }, { \"indexed\": false, \"name\": \"addr\", \"type\": \"string\" } ], \"name\": \"ChainAddrChanged\", \"type\": \"event\", \"signature\": \"0x6a3e28813f2e2e5bcd0436779f8c5cb179ceadf0379291a818b9078e772b178d\" }, { \"anonymous\": false, \"inputs\": [ { \"indexed\": true, \"name\": \"node\", \"type\": \"bytes32\" }, { \"indexed\": false, \"name\": \"addr\", \"type\": \"address\" } ], \"name\": \"AddrChanged\", \"type\": \"event\", \"signature\": \"0x52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"interfaceId\", \"type\": \"bytes4\" } ], \"name\": \"supportsInterface\", \"outputs\": [ { \"name\": \"\", \"type\": \"bool\" } ], \"payable\": false, \"stateMutability\": \"pure\", \"type\": \"function\", \"signature\": \"0x01ffc9a7\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"addr\", \"outputs\": [ { \"name\": \"\", \"type\": \"address\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x3b3b57de\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"addrValue\", \"type\": \"address\" } ], \"name\": \"setAddr\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xd5fa2b00\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" } ], \"name\": \"content\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x2dff6941\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"contentValue\", \"type\": \"bytes32\" } ], \"name\": \"setContent\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xc3d014d6\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" } ], \"name\": \"chainAddr\", \"outputs\": [ { \"name\": \"\", \"type\": \"string\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x8be4b5f6\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" }, { \"name\": \"addrValue\", \"type\": \"string\" } ], \"name\": \"setChainAddr\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xd278b400\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" } ], \"name\": \"chainMetadata\", \"outputs\": [ { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0xb34e8cd6\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" }, { \"name\": \"metadataValue\", \"type\": \"bytes32\" } ], \"name\": \"setChainMetadata\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0x245d4d9a\" }, { \"constant\": true, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" } ], \"name\": \"chainAddrAndMetadata\", \"outputs\": [ { \"name\": \"\", \"type\": \"string\" }, { \"name\": \"\", \"type\": \"bytes32\" } ], \"payable\": false, \"stateMutability\": \"view\", \"type\": \"function\", \"signature\": \"0x82e3bee6\" }, { \"constant\": false, \"inputs\": [ { \"name\": \"node\", \"type\": \"bytes32\" }, { \"name\": \"chain\", \"type\": \"bytes4\" }, { \"name\": \"addrValue\", \"type\": \"string\" }, { \"name\": \"metadataValue\", \"type\": \"bytes32\" } ], \"name\": \"setChainAddrWithMetadata\", \"outputs\": [], \"payable\": false, \"stateMutability\": \"nonpayable\", \"type\": \"function\", \"signature\": \"0xe335bee4\" } ]" - } -] diff --git a/common/config/data.tsx b/common/config/data.tsx deleted file mode 100644 index 5bb37d91b..000000000 --- a/common/config/data.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import React from 'react'; // For ANNOUNCEMENT_MESSAGE jsx -import { getValues } from '../utils/helpers'; -import packageJson from '../../package.json'; -import { GasPriceSetting } from 'types/network'; -import { makeExplorer } from 'utils/helpers'; -import translate from 'translations'; - -export const languages = require('./languages.json'); -export const discordURL = 'https://discord.gg/VSaTXEA'; - -// Displays in the footer -export const VERSION = packageJson.version; -export const N_FACTOR = 8192; - -// Displays at the top of the site, make message empty string to remove. -// Type can be primary, warning, danger, success, info, or blank for grey. -// Message must be a JSX element if you want to use HTML. -export const ANNOUNCEMENT_TYPE = ''; -export const ANNOUNCEMENT_MESSAGE = ( - {translate('ANNOUNCEMENT_MESSAGE')} -); - -const etherScan = 'https://etherscan.io'; -const blockChainInfo = 'https://blockchain.info'; -export const ethPlorer = 'https://ethplorer.io'; - -export const ETHTxExplorer = (txHash: string): string => `${etherScan}/tx/${txHash}`; -export const BTCTxExplorer = (txHash: string): string => `${blockChainInfo}/tx/${txHash}`; -export const ETHAddressExplorer = (address: string): string => `${etherScan}/address/${address}`; -export const ETHTokenExplorer = (address: string): string => `${ethPlorer}/address/${address}`; - -export const etherChainExplorerInst = makeExplorer({ - name: 'Etherchain', - origin: 'https://www.etherchain.org', - addressPath: 'account' -}); - -export const donationAddressMap = { - BTC: '32oirLEzZRhi33RCXDF9WHJjEb8RsrSss3', - ETH: '0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520', - REP: '0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520', - XMR: - '4GdoN7NCTi8a5gZug7PrwZNKjvHFmKeV11L6pNJPgj5QNEHsN6eeX3DaAQFwZ1ufD4LYCZKArktt113W7QjWvQ7CW7F7tDFvS511SNfZV7' -}; - -export const gasEstimateCacheTime = 60000; -export const gasPriceDefaults: GasPriceSetting = { - min: 1, - max: 60, - initial: 20 -}; - -export const MINIMUM_PASSWORD_LENGTH = 12; - -export const knowledgeBaseURL = 'https://support.mycrypto.com'; -export const ledgerReferralURL = 'https://www.ledgerwallet.com/r/1985?path=/products/'; -export const trezorReferralURL = 'https://shop.trezor.io/?offer_id=10&aff_id=1735'; -// TODO - Update url -export const safeTReferralURL = - 'https://www.archos.com/fr/products/crypto/archos_safetmini/index.html'; -export const bitboxReferralURL = 'https://digitalbitbox.com/?ref=mycrypto'; -// TODO - Update url, this is MEW's -export const bityReferralURL = 'https://bity.com/af/jshkb37v'; -// TODO - add the real referral url once you know it -export const shapeshiftReferralURL = 'https://shapeshift.io'; -export const ethercardReferralURL = - 'https://ether.cards/?utm_source=mycrypto&utm_medium=cpm&utm_campaign=site'; -export const keepkeyReferralURL = 'https://keepkey.go2cloud.org/aff_c?offer_id=1&aff_id=4086'; -export const steelyReferralURL = 'https://stee.ly/2Hcl4RE'; - -export enum SecureWalletName { - WEB3 = 'web3', - LEDGER_NANO_S = 'ledgerNanoS', - TREZOR = 'trezor', - SAFE_T = 'safeTmini', - PARITY_SIGNER = 'paritySigner' -} - -export enum HardwareWalletName { - LEDGER_NANO_S = 'ledgerNanoS', - TREZOR = 'trezor', - SAFE_T = 'safeTmini' -} - -export enum InsecureWalletName { - PRIVATE_KEY = 'privateKey', - KEYSTORE_FILE = 'keystoreFile', - MNEMONIC_PHRASE = 'mnemonicPhrase' -} - -export enum MiscWalletName { - VIEW_ONLY = 'viewOnly' -} - -export const walletNames = getValues( - SecureWalletName, - HardwareWalletName, - InsecureWalletName, - MiscWalletName -); - -export type WalletName = SecureWalletName | InsecureWalletName | MiscWalletName; - -export enum Theme { - DARK = 'dark', - LIGHT = 'light' -} diff --git a/common/config/dpaths.ts b/common/config/dpaths.ts deleted file mode 100644 index ef4348964..000000000 --- a/common/config/dpaths.ts +++ /dev/null @@ -1,257 +0,0 @@ -export const ETH_DEFAULT: DPath = { - label: 'Default (ETH)', - value: "m/44'/60'/0'/0" -}; - -export const ETH_TREZOR: DPath = { - label: 'TREZOR (ETH)', - value: "m/44'/60'/0'/0" -}; - -export const ETH_SAFE_T: DPath = { - label: 'Safe-T (ETH)', - value: "m/44'/60'/0'/0" -}; - -export const ETH_LEDGER: DPath = { - label: 'Ledger (ETH)', - value: "m/44'/60'/0'" -}; - -export const ETC_LEDGER: DPath = { - label: 'Ledger (ETC)', - value: "m/44'/60'/160720'/0'" -}; - -export const ETC_TREZOR: DPath = { - label: 'TREZOR (ETC)', - value: "m/44'/61'/0'/0" -}; - -export const ETC_SAFE_T: DPath = { - label: 'Safe-T (ETC)', - value: "m/44'/61'/0'/0" -}; - -export const ETH_TESTNET: DPath = { - label: 'Testnet (ETH)', - value: "m/44'/1'/0'/0" -}; - -export const EXP_DEFAULT: DPath = { - label: 'Default (EXP)', - value: "m/44'/40'/0'/0" -}; - -export const UBQ_DEFAULT: DPath = { - label: 'Default (UBQ)', - value: "m/44'/108'/0'/0" -}; - -export const POA_DEFAULT: DPath = { - label: 'Default (POA)', - value: "m/44'/60'/0'/0" -}; - -export const TOMO_DEFAULT: DPath = { - label: 'Default (TOMO)', - value: "m/44'/889'/0'/0" -}; - -export const ELLA_DEFAULT: DPath = { - label: 'Default (ELLA)', - value: "m/44'/163'/0'/0" -}; - -export const MUSIC_DEFAULT: DPath = { - label: 'Default (MUSIC)', - value: "m/44'/184'/0'/0" -}; - -export const ETSC_DEFAULT: DPath = { - label: 'Default (ETSC)', - value: "m/44'/1128'/0'/0" -}; - -export const EGEM_DEFAULT: DPath = { - label: 'Default (EGEM)', - value: "m/44'/1987'/0'/0" -}; - -export const CLO_DEFAULT: DPath = { - label: 'Default (CLO)', - value: "m/44'/820'/0'/0" -}; - -export const ETH_SINGULAR: DPath = { - label: 'SingularDTV', - value: "m/0'/0'/0'" -}; - -export const RSK_TESTNET: DPath = { - label: 'Testnet (RSK)', - value: "m/44'/37310'/0'/0" -}; - -export const RSK_MAINNET: DPath = { - label: 'Mainnet (RSK)', - value: "m/44'/137'/0'/0" -}; - -export const GO_DEFAULT: DPath = { - label: 'Default (GO)', - value: "m/44'/6060'/0'/0" -}; - -export const EOSC_DEFAULT: DPath = { - label: 'Default (EOSC)', - value: "m/44'/2018'/0'/0" -}; - -export const ESN_DEFAULT: DPath = { - label: 'Default (ESN)', - value: "m/44'/31102'/0'/0" -}; - -export const AKA_DEFAULT: DPath = { - label: 'Default (AKA)', - value: "m/44'/200625'/0'/0" -}; - -export const PIRL_DEFAULT: DPath = { - label: 'Default (PIRL)', - value: "m/44'/164'/0'/0" -}; - -export const ATH_DEFAULT: DPath = { - label: 'Default (ATH)', - value: "m/44'/1620'/0'/0" -}; - -export const ETHO_DEFAULT: DPath = { - label: 'Default (ETHO)', - value: "m/44'/1313114'/0'/0" -}; - -export const MIX_DEFAULT: DPath = { - label: 'Default (MIX)', - value: "m/44'/76'/0'/0" -}; - -export const REOSC_DEFAULT: DPath = { - label: 'Default (REOSC)', - value: "m/44'/2894'/0'/0" -}; - -export const ARTIS_SIGMA1: DPath = { - label: 'Sigma1 (ATS)', - value: "m/44'/60'/0'/0" -}; - -export const ARTIS_TAU1: DPath = { - label: 'Tau1 (ATS)', - value: "m/44'/60'/0'/0" -}; - -export const THUNDERCORE_DEFAULT: DPath = { - label: 'Default (THUNDERCORE)', - value: "m/44'/1001'/0'/0" -}; - -export const ETI_DEFAULT: DPath = { - label: 'Default (ETI)', - value: "m/44'/464'/0'/0" -}; -export const WEB_DEFAULT: DPath = { - label: 'Default (WEB)', - value: "m/44'/227'/0'/0" -}; - -export const METADIUM_DEFAULT: DPath = { - label: 'Default (METADIUM)', - value: "m/44'/916'/0'/0" -}; - -export const SOLIDUM_DEFAULT: DPath = { - label: 'Default (SOLIDUM)', - value: "m/44'/997'/0'/0" -}; - -export const DEXON_DEFAULT: DPath = { - label: 'Default (DEXON)', - value: "m/44'/237'/0'/0" -}; - -export const ASK_DEFAULT: DPath = { - label: 'Default (ASK)', - value: "m/44'/2221'/0'/0" -}; - -export const ASK_TREZOR: DPath = { - label: 'TREZOR (ASK)', - value: "m/44'/2221'/0'/0" -}; - -export const AUX_DEFAULT: DPath = { - label: 'Default (AUX)', - value: "m/44'/344'/0'/0" -}; - -export const DPaths: DPath[] = [ - ETH_DEFAULT, - ETH_TREZOR, - ETH_SAFE_T, - ETH_LEDGER, - ETC_LEDGER, - ETC_TREZOR, - ETC_SAFE_T, - ETH_TESTNET, - EXP_DEFAULT, - UBQ_DEFAULT, - POA_DEFAULT, - TOMO_DEFAULT, - ELLA_DEFAULT, - MUSIC_DEFAULT, - ETSC_DEFAULT, - EGEM_DEFAULT, - CLO_DEFAULT, - RSK_MAINNET, - RSK_TESTNET, - GO_DEFAULT, - EOSC_DEFAULT, - ESN_DEFAULT, - AKA_DEFAULT, - PIRL_DEFAULT, - ATH_DEFAULT, - ETHO_DEFAULT, - MIX_DEFAULT, - REOSC_DEFAULT, - ARTIS_SIGMA1, - ARTIS_TAU1, - THUNDERCORE_DEFAULT, - ETI_DEFAULT, - WEB_DEFAULT, - METADIUM_DEFAULT, - SOLIDUM_DEFAULT, - DEXON_DEFAULT, - ASK_DEFAULT, - ASK_TREZOR, - AUX_DEFAULT -]; - -// PATHS TO BE INCLUDED REGARDLESS OF WALLET FORMAT -export const EXTRA_PATHS = [ETH_SINGULAR]; - -// Full length deterministic wallet paths from BIP44 -// https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki -// normal path length is 4, ledger is the exception at 3 - -// m / purpose' / coin_type' / account' / change / address_index -// | | | | | -// | constant | index | index | 0 or 1 | -// |__________|____________|__________|________| - -// whitespace strings are evaluated the same way as nospace strings, except they allow optional spaces between each portion of the string -// ie. "m / 44' / 0' / 0'" is valid, "m / 4 4' / 0' / 0'" is invalid -export const dPathRegex = /m\/4[4,9]'\/[0-9]+\'\/[0-9]+(\'+$|\'+(\/[0-1]+$))/; -// export const whitespaceDPathRegex = /m\s*\/\s*44'\s*\/\s*[0-9]+\'\s*\/\s*[0-9]+(\'+$|\'+\s*(\/\s*[0-1]+$))/; diff --git a/common/config/index.ts b/common/config/index.ts deleted file mode 100644 index d53061e14..000000000 --- a/common/config/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './data'; -export * from './bity'; -export * from './addressMessages'; -export * from './helpArticles'; -export * from './dpaths'; -export * from './navigation'; -export * from './links'; diff --git a/common/config/links.ts b/common/config/links.ts deleted file mode 100644 index 0b35dda9a..000000000 --- a/common/config/links.ts +++ /dev/null @@ -1,123 +0,0 @@ -import { translateRaw } from 'translations'; -import { - discordURL, - ledgerReferralURL, - trezorReferralURL, - safeTReferralURL, - ethercardReferralURL, - keepkeyReferralURL, - steelyReferralURL -} from './data'; - -interface Link { - link: string; - text: string; -} - -export const DOWNLOAD_MYCRYPTO_LINK = 'https://download.mycrypto.com/'; - -export const socialMediaLinks: Link[] = [ - { - link: 'https://twitter.com/mycrypto', - text: 'twitter' - }, - { - link: 'https://www.facebook.com/mycryptoHQ/', - text: 'facebook' - }, - { - link: 'https://medium.com/@mycrypto', - text: 'medium' - }, - { - link: 'https://www.linkedin.com/company/mycrypto', - text: 'linkedin' - }, - { - link: 'https://github.com/MyCryptoHQ', - text: 'github' - }, - { - link: 'https://www.reddit.com/r/mycrypto/', - text: 'reddit' - }, - { - link: discordURL, - text: 'discord' - } -]; - -export const productLinks: Link[] = [ - { - link: 'https://legacy.mycrypto.com/', - text: translateRaw('OLD_MYCRYPTO') - }, - { - link: - 'https://chrome.google.com/webstore/detail/etheraddresslookup/pdknmigbbbhmllnmgdfalmedcmcefdfn', - text: translateRaw('ETHER_ADDRESS_LOOKUP') - }, - { - link: - 'https://chrome.google.com/webstore/detail/ethersecuritylookup/bhhfhgpgmifehjdghlbbijjaimhmcgnf', - text: translateRaw('ETHER_SECURITY_LOOKUP') - }, - { - link: 'https://etherscamdb.info/', - text: translateRaw('ETHERSCAMDB') - }, - { - link: 'https://legacy.mycrypto.com/helpers.html', - text: translateRaw('FOOTER_HELP_AND_DEBUGGING') - }, - { - link: 'https://hackerone.com/mycrypto', - text: translateRaw('FOOTER_HACKERONE') - } -]; - -export const affiliateLinks: Link[] = [ - { - link: ledgerReferralURL, - text: translateRaw('LEDGER_REFERRAL_1') - }, - { - link: trezorReferralURL, - text: translateRaw('TREZOR_REFERAL') - }, - { - link: safeTReferralURL, - text: translateRaw('SAFE_T_REFERAL') - }, - { - link: keepkeyReferralURL, - text: translateRaw('KEEPKEY_REFERRAL') - }, - { - link: steelyReferralURL, - text: translateRaw('STEELY_REFERRAL') - }, - { - link: ethercardReferralURL, - text: translateRaw('ETHERCARD_REFERAL') - } -]; - -export const partnerLinks: Link[] = [ - { - link: 'https://metamask.io/', - text: 'MetaMask' - }, - { - link: 'https://infura.io/', - text: 'Infura' - }, - { - link: 'https://etherscan.io/', - text: 'Etherscan' - }, - { - link: 'https://etherchain.org/', - text: 'Etherchain' - } -]; diff --git a/common/config/navigation.ts b/common/config/navigation.ts deleted file mode 100644 index e7a7edd42..000000000 --- a/common/config/navigation.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { knowledgeBaseURL } from './data'; - -export interface NavigationLink { - name: string; - to: string; - external?: boolean; - disabled?: boolean; -} - -export const navigationLinks: NavigationLink[] = [ - { - name: 'NAV_VIEW', - to: '/account' - }, - { - name: 'NAV_GENERATEWALLET', - to: '/generate' - }, - { - name: 'NAV_SWAP', - to: '/swap' - }, - { - name: 'NAV_CONTRACTS', - to: '/contracts' - }, - { - name: 'NAV_ENS', - to: '/ens' - }, - { - name: 'NAV_SIGN', - to: '/sign-and-verify-message' - }, - { - name: 'NAV_TXSTATUS', - to: '/tx-status' - }, - { - name: 'NAV_BROADCAST', - to: '/pushTx' - }, - { - name: 'NAV_SUPPORT_US', - to: '/support-us', - disabled: !process.env.BUILD_ELECTRON - }, - { - name: 'NAV_HELP', - to: knowledgeBaseURL, - external: true - } -].filter(link => !link.disabled); diff --git a/common/config/tokens/ella.json b/common/config/tokens/ella.json deleted file mode 100644 index e76995955..000000000 --- a/common/config/tokens/ella.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "address": "0x991e7Fe4b05f2b3db1D788e705963f5D647b0044", - "symbol": "MINING", - "decimal": 18 - } -] \ No newline at end of file diff --git a/common/config/tokens/esn.json b/common/config/tokens/esn.json deleted file mode 100644 index 38bc8a22b..000000000 --- a/common/config/tokens/esn.json +++ /dev/null @@ -1,12 +0,0 @@ -[ - { - "address": "0x72ea3508D9d817A91465aBb59bE10FEF9857A055", - "symbol": "DGT", - "decimal": 0 - }, - { - "address": "0x0146B9dCd9FB2ABC1b5B136C28D20d0037526961", - "symbol": "TOPM", - "decimal": 18 - } -] \ No newline at end of file diff --git a/common/config/tokens/etc.json b/common/config/tokens/etc.json deleted file mode 100644 index b0140b879..000000000 --- a/common/config/tokens/etc.json +++ /dev/null @@ -1,17 +0,0 @@ -[ - { - "address": "0x085fb4f24031EAedbC2B611AA528f22343eB52Db", - "symbol": "BEC", - "decimal": 8 - }, - { - "address": "0x5acE17f87c7391E5792a7683069A8025B83bbd85", - "symbol": "PLAY", - "decimal": 0 - }, - { - "address": "0x6ADa6F48C815689502C43eC1a59F1b5DD3C04E1F", - "symbol": "UNV", - "decimal": 18 - } -] \ No newline at end of file diff --git a/common/config/tokens/eth.json b/common/config/tokens/eth.json deleted file mode 100644 index 6d7bf3b60..000000000 --- a/common/config/tokens/eth.json +++ /dev/null @@ -1,6727 +0,0 @@ -[ - { - "address": "0x4E84E9e5fb0A972628Cf4568c403167EF1D40431", - "symbol": "$FFC", - "decimal": 18 - }, - { - "address": "0xA024E8057EEC474a9b2356833707Dd0579E26eF3", - "symbol": "$FXY", - "decimal": 18 - }, - { - "address": "0xCDB7eCFd3403Eef3882c65B761ef9B5054890a47", - "symbol": "$HUR", - "decimal": 18 - }, - { - "address": "0x7DD7F56D697Cc0f2b52bD55C057f378F1fE6Ab4b", - "symbol": "$TEAK", - "decimal": 18 - }, - { - "address": "0xB6eD7644C69416d67B522e20bC294A9a9B405B31", - "symbol": "0xBTC", - "decimal": 8 - }, - { - "address": "0x0F72714B35a366285Df85886A2eE174601292A17", - "symbol": "1SG", - "decimal": 18 - }, - { - "address": "0xAf30D2a7E90d7DC361c8C4585e9BB7D2F6f15bc7", - "symbol": "1ST", - "decimal": 18 - }, - { - "address": "0xfDBc1aDc26F0F8f8606a5d63b7D3a3CD21c22B23", - "symbol": "1WO", - "decimal": 8 - }, - { - "address": "0x0073e5E52E2B4fE218D75d994eE2B3c82f9C87EA", - "symbol": "22x", - "decimal": 8 - }, - { - "address": "0x9fC0583220eB44fAeE9e2dc1E63F39204DDD9090", - "symbol": "2DC", - "decimal": 18 - }, - { - "address": "0xaEc98A708810414878c3BCDF46Aad31dEd4a4557", - "symbol": "300", - "decimal": 18 - }, - { - "address": "0x430241368c1D293fdA21DBa8Bb7aF32007c59109", - "symbol": "3LT", - "decimal": 8 - }, - { - "address": "0x5D9776472483eE2c2B204775547BFf6db5A30Fed", - "symbol": "599GTO1", - "decimal": 8 - }, - { - "address": "0xBDe8f7820b5544a49D34F9dDeaCAbEDC7C0B5adc", - "symbol": "A18", - "decimal": 0 - }, - { - "address": "0xBa7DCBa2Ade319Bc772DB4df75A76BA00dFb31b0", - "symbol": "A18 (1)", - "decimal": 0 - }, - { - "address": "0xcc7d26D8eA6281BB363C8448515F2C61F7BC19F0", - "symbol": "ABCH", - "decimal": 18 - }, - { - "address": "0xcb03bec536843D338ac138205a6689d4cDc11046", - "symbol": "ABPT", - "decimal": 18 - }, - { - "address": "0xB98d4C97425d9908E66E53A6fDf673ACcA0BE986", - "symbol": "ABT", - "decimal": 18 - }, - { - "address": "0x0E8d6b471e332F140e7d9dbB99E5E3822F728DA6", - "symbol": "ABYSS", - "decimal": 18 - }, - { - "address": "0x13F1b7FDFbE1fc66676D56483e21B1ecb40b58E2", - "symbol": "ACC", - "decimal": 18 - }, - { - "address": "0x06147110022B768BA8F99A8f385df11a151A9cc8", - "symbol": "ACE", - "decimal": 0 - }, - { - "address": "0x2baac9330Cf9aC479D819195794d79AD0c7616e3", - "symbol": "ADB", - "decimal": 18 - }, - { - "address": "0x827Fe1736CEe36F7737Be6cF502434aF294Cf137", - "symbol": "ADC$", - "decimal": 18 - }, - { - "address": "0xE69a353b3152Dd7b706ff7dD40fe1d18b7802d31", - "symbol": "ADH", - "decimal": 18 - }, - { - "address": "0x8810C63470d38639954c6B41AaC545848C46484a", - "symbol": "ADI", - "decimal": 18 - }, - { - "address": "0x660e71483785f66133548B10f6926dC332b06e61", - "symbol": "ADL", - "decimal": 18 - }, - { - "address": "0x422866a8F0b032c5cf1DfBDEf31A20F4509562b0", - "symbol": "ADST", - "decimal": 0 - }, - { - "address": "0xD0D6D6C5Fe4a677D343cC433536BB717bAe167dD", - "symbol": "ADT", - "decimal": 9 - }, - { - "address": "0x4470BB87d77b963A013DB939BE332f927f2b992e", - "symbol": "ADX", - "decimal": 4 - }, - { - "address": "0x5CA9a71B1d01849C0a95490Cc00559717fCF0D1d", - "symbol": "AE", - "decimal": 18 - }, - { - "address": "0xc994a2dEb02543Db1f48688438b9903c4b305ce3", - "symbol": "AEUR", - "decimal": 2 - }, - { - "address": "0xfB48E0DEa837f9438309a7e9F0cFe7EE3353A84e", - "symbol": "AFA", - "decimal": 2 - }, - { - "address": "0x8eB24319393716668D768dCEC29356ae9CfFe285", - "symbol": "AGI", - "decimal": 8 - }, - { - "address": "0x5121E348e897dAEf1Eef23959Ab290e5557CF274", - "symbol": "AI", - "decimal": 18 - }, - { - "address": "0x37E8789bB9996CaC9156cD5F5Fd32599E6b91289", - "symbol": "AID", - "decimal": 18 - }, - { - "address": "0x4CEdA7906a5Ed2179785Cd3A40A69ee8bc99C466", - "symbol": "AION", - "decimal": 8 - }, - { - "address": "0x27Dce1eC4d3f72C3E457Cc50354f1F975dDEf488", - "symbol": "AIR", - "decimal": 8 - }, - { - "address": "0x1063ce524265d5a3A624f4914acd573dD89ce988", - "symbol": "AIX", - "decimal": 18 - }, - { - "address": "0x1Ca43a170BaD619322e6f54d46b57e504dB663aA", - "symbol": "AKC", - "decimal": 18 - }, - { - "address": "0x181a63746d3Adcf356CBc73aCE22832FFBB1EE5A", - "symbol": "ALCO", - "decimal": 8 - }, - { - "address": "0x4289c043A12392F1027307fB58272D8EBd853912", - "symbol": "ALI", - "decimal": 18 - }, - { - "address": "0xEA610B1153477720748DC13ED378003941d84fAB", - "symbol": "ALIS", - "decimal": 18 - }, - { - "address": "0x638AC149eA8EF9a1286C41B977017AA7359E6Cfa", - "symbol": "ALTS", - "decimal": 18 - }, - { - "address": "0x49b127Bc33ce7E1586EC28CEC6a65b112596C822", - "symbol": "ALX", - "decimal": 18 - }, - { - "address": "0x4DC3643DbC642b72C158E7F3d2ff232df61cb6CE", - "symbol": "AMB", - "decimal": 18 - }, - { - "address": "0x949bEd886c739f1A3273629b3320db0C5024c719", - "symbol": "AMIS", - "decimal": 9 - }, - { - "address": "0xCA0e7269600d353F70b14Ad118A49575455C0f2f", - "symbol": "AMLT", - "decimal": 18 - }, - { - "address": "0x737F98AC8cA59f2C68aD658E3C3d8C8963E40a4c", - "symbol": "AMN", - "decimal": 18 - }, - { - "address": "0x38c87AA89B2B8cD9B95b736e1Fa7b612EA972169", - "symbol": "AMO", - "decimal": 18 - }, - { - "address": "0xD46bA6D942050d489DBd938a2C909A5d5039A161", - "symbol": "AMPL", - "decimal": 9 - }, - { - "address": "0x84936cF7630AA3e27Dd9AfF968b140d5AEE49F5a", - "symbol": "AMTC", - "decimal": 8 - }, - { - "address": "0x960b236A07cf122663c4303350609A66A7B288C0", - "symbol": "ANT", - "decimal": 18 - }, - { - "address": "0x9ab165D795019b6d8B3e971DdA91071421305e5a", - "symbol": "AOA", - "decimal": 18 - }, - { - "address": "0x4C0fBE1BB46612915E7967d2C3213cd4d87257AD", - "symbol": "APIS", - "decimal": 18 - }, - { - "address": "0x1a7a8BD9106F2B8D977E08582DC7d24c723ab0DB", - "symbol": "APPC", - "decimal": 18 - }, - { - "address": "0x23aE3C5B39B12f0693e05435EeaA1e51d8c61530", - "symbol": "APT", - "decimal": 18 - }, - { - "address": "0xaFBeC4D65BC7b116d85107FD05d912491029Bf46", - "symbol": "ARB", - "decimal": 18 - }, - { - "address": "0xAc709FcB44a43c35F0DA4e3163b117A17F3770f5", - "symbol": "ARC", - "decimal": 18 - }, - { - "address": "0x1245ef80F4d9e02ED9425375e8F649B9221b31D8", - "symbol": "ARCT", - "decimal": 8 - }, - { - "address": "0x75Aa7B0d02532f3833b66c7f0Ad35376d373ddF8", - "symbol": "ARD", - "decimal": 18 - }, - { - "address": "0xBA5F11b16B155792Cf3B2E6880E8706859A8AEB6", - "symbol": "ARN", - "decimal": 8 - }, - { - "address": "0xfec0cF7fE078a500abf15F1284958F22049c2C7e", - "symbol": "ART", - "decimal": 18 - }, - { - "address": "0x7705FaA34B16EB6d77Dfc7812be2367ba6B0248e", - "symbol": "ARX", - "decimal": 8 - }, - { - "address": "0xb0D926c1BC3d78064F3e1075D5bD9A24F35Ae6C5", - "symbol": "ARXT", - "decimal": 18 - }, - { - "address": "0xa5F8fC0921880Cb7342368BD128eb8050442B1a1", - "symbol": "ARY", - "decimal": 18 - }, - { - "address": "0x27054b13b1B798B345b591a4d22e6562d47eA75a", - "symbol": "AST", - "decimal": 4 - }, - { - "address": "0x7B22938ca841aA392C93dBB7f4c42178E3d65E88", - "symbol": "ASTRO", - "decimal": 4 - }, - { - "address": "0x017B584AcFD16D767541aE9e80cdc702F4527B0b", - "symbol": "ASY", - "decimal": 18 - }, - { - "address": "0x17052d51E954592C1046320c2371AbaB6C73Ef10", - "symbol": "ATH", - "decimal": 18 - }, - { - "address": "0x1543d0F83489e82A1344DF6827B23d541F235A50", - "symbol": "ATH (AIgatha Token)", - "decimal": 18 - }, - { - "address": "0x78B7FADA55A64dD895D8c8c35779DD8b67fA8a05", - "symbol": "ATL", - "decimal": 18 - }, - { - "address": "0x9B11EFcAAA1890f6eE52C6bB7CF8153aC5d74139", - "symbol": "ATM", - "decimal": 8 - }, - { - "address": "0x97AEB5066E1A590e868b511457BEb6FE99d329F5", - "symbol": "ATMI", - "decimal": 18 - }, - { - "address": "0x2dAEE1AA61D60A252DC80564499A69802853583A", - "symbol": "ATS", - "decimal": 4 - }, - { - "address": "0x887834D3b8D450B6bAB109c252Df3DA286d73CE4", - "symbol": "ATT", - "decimal": 18 - }, - { - "address": "0x6339784d9478dA43106A429196772A029C2f177d", - "symbol": "ATTN", - "decimal": 18 - }, - { - "address": "0x1A0F2aB46EC630F9FD638029027b552aFA64b94c", - "symbol": "ATX", - "decimal": 18 - }, - { - "address": "0xc12d099be31567add4e4e4d0D45691C3F58f5663", - "symbol": "AUC", - "decimal": 18 - }, - { - "address": "0xCdCFc0f66c522Fd086A1b725ea3c0Eeb9F9e8814", - "symbol": "AURA", - "decimal": 18 - }, - { - "address": "0x622dFfCc4e83C64ba959530A5a5580687a57581b", - "symbol": "AUTO", - "decimal": 18 - }, - { - "address": "0xeD247980396B10169BB1d36f6e278eD16700a60f", - "symbol": "AVA", - "decimal": 4 - }, - { - "address": "0x0d88eD6E74bbFD96B831231638b66C05571e824F", - "symbol": "AVT", - "decimal": 18 - }, - { - "address": "0xCd4b4b0F3284a33AC49C67961EC6e111708318Cf", - "symbol": "AX1", - "decimal": 5 - }, - { - "address": "0x9af2c6B1A28D3d6BC084bd267F70e90d49741D5B", - "symbol": "AXP", - "decimal": 8 - }, - { - "address": "0xC39E626A04C5971D770e319760D7926502975e47", - "symbol": "AXPR", - "decimal": 18 - }, - { - "address": "0x5d51FCceD3114A8bb5E90cDD0f9d682bCbCC5393", - "symbol": "B2BX", - "decimal": 18 - }, - { - "address": "0x062e3Be6a7C56A395b1881A0cD69A4923Ade4fa2", - "symbol": "BAC", - "decimal": 18 - }, - { - "address": "0x998b3B82bC9dBA173990Be7afb772788B5aCB8Bd", - "symbol": "BANCA", - "decimal": 18 - }, - { - "address": "0xF87F0D9153fea549c728Ad61cb801595a68b73de", - "symbol": "BANX", - "decimal": 18 - }, - { - "address": "0xc73f2474001aD1D6aEd615aF53631148CF98dE6b", - "symbol": "BAR", - "decimal": 18 - }, - { - "address": "0x2A05d22DB079BC40C2f77a1d1fF703a56E631cc1", - "symbol": "BAS", - "decimal": 8 - }, - { - "address": "0x0D8775F648430679A709E98d2b0Cb6250d2887EF", - "symbol": "BAT", - "decimal": 18 - }, - { - "address": "0x9a0242b7a33DAcbe40eDb927834F96eB39f8fBCB", - "symbol": "BAX", - "decimal": 18 - }, - { - "address": "0xe7D3e4413E29ae35B0893140F4500965c74365e5", - "symbol": "BBC", - "decimal": 18 - }, - { - "address": "0x37D40510a2F5Bc98AA7a0f7BF4b3453Bcfb90Ac1", - "symbol": "BBI", - "decimal": 18 - }, - { - "address": "0x4a6058666cf1057eaC3CD3A5a614620547559fc9", - "symbol": "BBK", - "decimal": 18 - }, - { - "address": "0x35a69642857083BA2F30bfaB735dacC7F0bac969", - "symbol": "BBN", - "decimal": 18 - }, - { - "address": "0x84F7c44B6Fed1080f647E354D552595be2Cc602F", - "symbol": "BBO", - "decimal": 18 - }, - { - "address": "0x2ecB13A8c458c379c4d9a7259e202De03c8F3D19", - "symbol": "BC", - "decimal": 18 - }, - { - "address": "0x1f41E42D0a9e3c0Dd3BA15B527342783B43200A9", - "symbol": "BCAP", - "decimal": 0 - }, - { - "address": "0xFf3519eeeEA3e76F1F699CCcE5E23ee0bdDa41aC", - "symbol": "BCAP (1)", - "decimal": 0 - }, - { - "address": "0xb5BB48567BfD0bFE9e4B08EF8b7f91556CC2a112", - "symbol": "BCASH", - "decimal": 18 - }, - { - "address": "0x7367A68039d4704f30BfBF6d948020C3B07DFC59", - "symbol": "BCBC", - "decimal": 18 - }, - { - "address": "0x1e797Ce986C3CFF4472F7D38d5C4aba55DfEFE40", - "symbol": "BCDN", - "decimal": 15 - }, - { - "address": "0xAcfa209Fb73bF3Dd5bBfb1101B9Bc999C49062a5", - "symbol": "BCDT", - "decimal": 18 - }, - { - "address": "0xbc1234552EBea32B5121190356bBa6D3Bb225bb5", - "symbol": "BCL", - "decimal": 18 - }, - { - "address": "0x1c4481750daa5Ff521A2a7490d9981eD46465Dbd", - "symbol": "BCPT", - "decimal": 18 - }, - { - "address": "0x1014613E2B3CBc4d575054D4982E580d9b99d7B1", - "symbol": "BCV", - "decimal": 8 - }, - { - "address": "0x1961B3331969eD52770751fC718ef530838b6dEE", - "symbol": "BDG", - "decimal": 18 - }, - { - "address": "0x4D8fc1453a0F359e99c9675954e656D80d996FbF", - "symbol": "BEE", - "decimal": 18 - }, - { - "address": "0x74C1E4b8caE59269ec1D85D3D4F324396048F4ac", - "symbol": "BeerCoin", - "decimal": 0 - }, - { - "address": "0xB91C2a2b953D72f3EF890490669a0A41B0ADD5f7", - "symbol": "BEFX", - "decimal": 8 - }, - { - "address": "0x6aEB95F06CDA84cA345c2dE0F3B7f96923a44f4c", - "symbol": "BERRY", - "decimal": 14 - }, - { - "address": "0x8aA33A7899FCC8eA5fBe6A608A109c3893A1B8b2", - "symbol": "BET", - "decimal": 18 - }, - { - "address": "0x14C926F2290044B647e1Bf2072e67B495eff1905", - "symbol": "BETHER", - "decimal": 18 - }, - { - "address": "0x763186eB8d4856D536eD4478302971214FEbc6A9", - "symbol": "BETR", - "decimal": 18 - }, - { - "address": "0x3839d8ba312751Aa0248fEd6a8bACB84308E20Ed", - "symbol": "BEZ", - "decimal": 18 - }, - { - "address": "0x01fF50f8b7f74E4f00580d9596cd3D0d6d6E326f", - "symbol": "BFT", - "decimal": 18 - }, - { - "address": "0xEE74110fB5A1007b06282e0DE5d73A61bf41d9Cd", - "symbol": "BHPC", - "decimal": 18 - }, - { - "address": "0xfe5D908c9Ad85f651185dAa6a4770726E2b27d09", - "symbol": "BHR", - "decimal": 18 - }, - { - "address": "0x089B85FA15f72c1088CBbef23a49DB80B91DD521", - "symbol": "BIT", - "decimal": 8 - }, - { - "address": "0x08b4c866aE9D1bE56a06e0C302054B4FFe067b43", - "symbol": "BITCAR", - "decimal": 8 - }, - { - "address": "0xF3d29Fb98D2DC5E78c87198DEEF99377345fD6F1", - "symbol": "BITPARK", - "decimal": 8 - }, - { - "address": "0xb3104b4B9Da82025E8b9F8Fb28b3553ce2f67069", - "symbol": "BIX", - "decimal": 18 - }, - { - "address": "0x5c39bC68e58a242A624E4FC96be77A383C52002D", - "symbol": "BKB", - "decimal": 18 - }, - { - "address": "0xB2Bfeb70B903F1BAaC7f2ba2c62934C7e5B974C4", - "symbol": "BKB (1)", - "decimal": 8 - }, - { - "address": "0xc88Be04c809856B75E3DfE19eB4dCf0a3B15317a", - "symbol": "BKC", - "decimal": 8 - }, - { - "address": "0x3cf9E0c385a5ABEC9FD2a71790AA344C4e8E3570", - "symbol": "BKRx", - "decimal": 18 - }, - { - "address": "0x45245bc59219eeaAF6cD3f382e078A461FF9De7B", - "symbol": "BKX", - "decimal": 18 - }, - { - "address": "0xCA29db4221c111888a7e80b12eAc8a266Da3Ee0d", - "symbol": "BLN", - "decimal": 18 - }, - { - "address": "0x1C3BB10dE15C31D5DBE48fbB7B87735d1B7d8c32", - "symbol": "BLO", - "decimal": 18 - }, - { - "address": "0x107c4504cd79C5d2696Ea0030a8dD4e92601B82e", - "symbol": "BLT", - "decimal": 18 - }, - { - "address": "0x539EfE69bCDd21a83eFD9122571a64CC25e0282b", - "symbol": "BLUE", - "decimal": 8 - }, - { - "address": "0xcE59d29b09aAE565fEEEf8E52f47c3CD5368C663", - "symbol": "BLX (Bullion)", - "decimal": 18 - }, - { - "address": "0xE5a7c12972f3bbFe70ed29521C8949b8Af6a0970", - "symbol": "BLX (Iconomi)", - "decimal": 18 - }, - { - "address": "0x5732046A883704404F284Ce41FfADd5b007FD668", - "symbol": "BLZ", - "decimal": 18 - }, - { - "address": "0xDf6Ef343350780BF8C3410BF062e0C015B1DD671", - "symbol": "BMC", - "decimal": 8 - }, - { - "address": "0xf028ADEe51533b1B47BEaa890fEb54a457f51E89", - "symbol": "BMT", - "decimal": 18 - }, - { - "address": "0x986EE2B944c42D017F52Af21c4c69B84DBeA35d8", - "symbol": "BMX", - "decimal": 18 - }, - { - "address": "0xB8c77482e45F1F44dE1745F52C74426C631bDD52", - "symbol": "BNB", - "decimal": 18 - }, - { - "address": "0xEf51c9377FeB29856E61625cAf9390bD0B67eA18", - "symbol": "BNC", - "decimal": 8 - }, - { - "address": "0xdD6Bf56CA2ada24c683FAC50E37783e55B57AF9F", - "symbol": "BNC (1)", - "decimal": 12 - }, - { - "address": "0xdA2C424Fc98c741c2d4ef2f42897CEfed897CA75", - "symbol": "BNFT", - "decimal": 9 - }, - { - "address": "0xDA80B20038BDF968C7307BB5907A469482CF6251", - "symbol": "BNN", - "decimal": 8 - }, - { - "address": "0x1F573D6Fb3F13d689FF844B4cE37794d79a7FF1C", - "symbol": "BNT", - "decimal": 18 - }, - { - "address": "0xd2d6158683aeE4Cc838067727209a0aAF4359de3", - "symbol": "BNTY", - "decimal": 18 - }, - { - "address": "0x746DdA2ea243400D5a63e0700F190aB79f06489e", - "symbol": "BOA", - "decimal": 7 - }, - { - "address": "0xfb6bEcd99282d7CA14D0890F3e4F073D9Dd522e9", - "symbol": "BOA (1)", - "decimal": 8 - }, - { - "address": "0xDF347911910b6c9A4286bA8E2EE5ea4a39eB2134", - "symbol": "BOB", - "decimal": 18 - }, - { - "address": "0x27C743954bCe1Bfaef8bcbD685527531001D88D7", - "symbol": "BOK", - "decimal": 18 - }, - { - "address": "0x9F235D23354857EfE6c541dB92a9eF1877689BCB", - "symbol": "BOLT", - "decimal": 18 - }, - { - "address": "0xCc34366E3842cA1BD36c1f324d15257960fCC801", - "symbol": "BON", - "decimal": 18 - }, - { - "address": "0x7F1E2C7d6A69bf34824D72C53B4550E895C0D8C2", - "symbol": "BOP", - "decimal": 8 - }, - { - "address": "0xC2C63F23ec5E97efbD7565dF9Ec764FDc7d4e91d", - "symbol": "BOU", - "decimal": 18 - }, - { - "address": "0x139d9397274bb9E2C29A9aa8Aa0b5874d30D62E3", - "symbol": "BOUTS", - "decimal": 18 - }, - { - "address": "0x63f584FA56E60e4D0fE8802b27C7e6E3b33E007f", - "symbol": "BOX", - "decimal": 18 - }, - { - "address": "0xe1A178B681BD05964d3e3Ed33AE731577d9d96dD", - "symbol": "BOX (1)", - "decimal": 18 - }, - { - "address": "0x780116D91E5592E58a3b3c76A351571b39abCEc6", - "symbol": "BOXX", - "decimal": 15 - }, - { - "address": "0x327682779bAB2BF4d1337e8974ab9dE8275A7Ca8", - "symbol": "BPT", - "decimal": 18 - }, - { - "address": "0x5Af2Be193a6ABCa9c8817001F45744777Db30756", - "symbol": "BQX", - "decimal": 8 - }, - { - "address": "0x9E77D5a1251b6F7D456722A6eaC6D2d5980bd891", - "symbol": "BRAT", - "decimal": 8 - }, - { - "address": "0x558EC3152e2eb2174905cd19AeA4e34A23DE9aD6", - "symbol": "BRD", - "decimal": 18 - }, - { - "address": "0x80046305aaab08F6033b56a360c184391165dc2d", - "symbol": "BRLN", - "decimal": 18 - }, - { - "address": "0xB22c2786a549B008517B67625f5296E8fAf9589e", - "symbol": "BRP", - "decimal": 18 - }, - { - "address": "0xF26ef5E0545384b7Dcc0f297F2674189586830DF", - "symbol": "BSDC", - "decimal": 18 - }, - { - "address": "0x509A38b7a1cC0dcd83Aa9d06214663D9eC7c7F4a", - "symbol": "BST", - "decimal": 18 - }, - { - "address": "0x02725836ebF3eCDb1cDf1c7b02FcbBfaa2736AF8", - "symbol": "BTCA", - "decimal": 8 - }, - { - "address": "0x0886949c1b8C412860c4264Ceb8083d1365e86CF", - "symbol": "BTCE", - "decimal": 8 - }, - { - "address": "0x5acD19b9c91e596b1f062f18e3D02da7eD8D1e50", - "symbol": "BTCL", - "decimal": 8 - }, - { - "address": "0x87f5E8c3425218837f3CB67dB941aF0C01323E56", - "symbol": "BTCONE", - "decimal": 18 - }, - { - "address": "0x6Aac8CB9861E42bf8259F5AbDC6aE3Ae89909E11", - "symbol": "BTCR", - "decimal": 8 - }, - { - "address": "0x73dD069c299A5d691E9836243BcaeC9c8C1D8734", - "symbol": "BTE", - "decimal": 8 - }, - { - "address": "0xFAd572db566E5234AC9Fc3d570c4EdC0050eAA92", - "symbol": "BTH", - "decimal": 18 - }, - { - "address": "0xa02e3bB9cEbc03952601B3724B4940e0845BeBcf", - "symbol": "BTHR", - "decimal": 18 - }, - { - "address": "0xdb8646F5b487B5Dd979FAC618350e85018F557d4", - "symbol": "BTK", - "decimal": 18 - }, - { - "address": "0x2accaB9cb7a48c3E82286F0b2f8798D201F4eC3f", - "symbol": "BTL (Battle)", - "decimal": 18 - }, - { - "address": "0x92685E93956537c25Bb75D5d47fca4266dd628B8", - "symbol": "BTL (Bitlle)", - "decimal": 4 - }, - { - "address": "0xcB97e65F07DA24D46BcDD078EBebd7C6E6E3d750", - "symbol": "BTM", - "decimal": 8 - }, - { - "address": "0xD6b107D3E45B959B6d13FAF1bb2a2CF8fC7025e6", - "symbol": "BTNG", - "decimal": 18 - }, - { - "address": "0x36905Fc93280f52362A1CBAB151F25DC46742Fb5", - "symbol": "BTO", - "decimal": 18 - }, - { - "address": "0x20900587e569E3D0B2609BCa6Fb3469765ed0920", - "symbol": "BTP", - "decimal": 18 - }, - { - "address": "0x16B0E62aC13a2fAeD36D18bce2356d25Ab3CfAD3", - "symbol": "BTQ", - "decimal": 18 - }, - { - "address": "0x499A6B77bc25C26bCf8265E2102B1B3dd1617024", - "symbol": "BTR", - "decimal": 18 - }, - { - "address": "0xcbf15FB8246F679F9Df0135881CB29a3746f734b", - "symbol": "BTR (1)", - "decimal": 18 - }, - { - "address": "0x03C780cD554598592B97b7256dDAad759945b125", - "symbol": "BTRN", - "decimal": 18 - }, - { - "address": "0x080aa07E2C7185150d7e4DA98838A8d2feac3dfC", - "symbol": "BTT", - "decimal": 0 - }, - { - "address": "0xFA456Cf55250A839088b27EE32A424d7DAcB54Ff", - "symbol": "BTTX", - "decimal": 18 - }, - { - "address": "0xb683D83a532e2Cb7DFa5275eED3698436371cc9f", - "symbol": "BTU", - "decimal": 18 - }, - { - "address": "0x9eecec130fb665d03a37289ee34C818Ee7F79926", - "symbol": "BTY", - "decimal": 18 - }, - { - "address": "0xE5f867dE1EA81346df5181b8b48DD6B0BB3357B0", - "symbol": "BTZ", - "decimal": 18 - }, - { - "address": "0xCa3c18a65b802eC267f8f4802545e7F53D24C75e", - "symbol": "BUC", - "decimal": 18 - }, - { - "address": "0x51a4F65463597CA4609C9a90eA3D5ab219Fbc85D", - "symbol": "BWN", - "decimal": 18 - }, - { - "address": "0xbD168CbF9d3a375B38dC51A202B5E8a4E52069Ed", - "symbol": "BWX", - "decimal": 18 - }, - { - "address": "0x4375E7aD8A01B8eC3Ed041399f62D9Cd120e0063", - "symbol": "BZ", - "decimal": 18 - }, - { - "address": "0xE1Aee98495365fc179699C1bB3E761FA716beE62", - "symbol": "BZNT", - "decimal": 18 - }, - { - "address": "0x26E75307Fc0C021472fEb8F727839531F112f317", - "symbol": "C20", - "decimal": 18 - }, - { - "address": "0xd42debE4eDc92Bd5a3FBb4243e1ecCf6d63A4A5d", - "symbol": "C8", - "decimal": 18 - }, - { - "address": "0x7d4b8Cce0591C9044a22ee543533b72E976E36C3", - "symbol": "CAG", - "decimal": 18 - }, - { - "address": "0x1d462414fe14cf489c7A21CaC78509f4bF8CD7c0", - "symbol": "CAN", - "decimal": 6 - }, - { - "address": "0x04F2E7221fdb1B52A68169B25793E51478fF0329", - "symbol": "CAPP", - "decimal": 2 - }, - { - "address": "0x423e4322CDDa29156b49a17dfbd2aCC4b280600D", - "symbol": "CAR", - "decimal": 9 - }, - { - "address": "0x4D9e23a3842fE7Eb7682B9725cF6c507C424A41B", - "symbol": "CAR (CarBlock)", - "decimal": 18 - }, - { - "address": "0xA517a46Baad6B054A76bD19c46844f717fe69fea", - "symbol": "CARB", - "decimal": 8 - }, - { - "address": "0x2108E62D335Bbdc89eC3E9d8582F18DCFB0cDFf4", - "symbol": "CARCO", - "decimal": 8 - }, - { - "address": "0x1ed2B1eaEd8e968bc36EB90a914660A71827A5E9", - "symbol": "CARD", - "decimal": 0 - }, - { - "address": "0x954b890704693af242613edEf1B603825afcD708", - "symbol": "CARD (1)", - "decimal": 18 - }, - { - "address": "0xB07ec2c28834B889b1CE527Ca0F19364cD38935c", - "symbol": "CARD (2)", - "decimal": 0 - }, - { - "address": "0xbF18F246B9301F231e9561B35A3879769BB46375", - "symbol": "CARE", - "decimal": 18 - }, - { - "address": "0x779492d3644dDF4495Aa2d80C468E1B7be6AF1d2", - "symbol": "CAS", - "decimal": 2 - }, - { - "address": "0xe8780B48bdb05F928697A5e8155f672ED91462F7", - "symbol": "CAS (1)", - "decimal": 18 - }, - { - "address": "0x1234567461d3f8Db7496581774Bd869C83D51c93", - "symbol": "CAT (BitClave)", - "decimal": 18 - }, - { - "address": "0x56ba2Ee7890461f463F7be02aAC3099f6d5811A8", - "symbol": "CAT (BlockCAT)", - "decimal": 18 - }, - { - "address": "0x8293bBd92C42608B20af588620a76128A33e4De9", - "symbol": "CATS", - "decimal": 6 - }, - { - "address": "0x68e14bb5A45B9681327E16E528084B9d962C1a39", - "symbol": "CATs (BitClave)_Old", - "decimal": 18 - }, - { - "address": "0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E", - "symbol": "cBAT", - "decimal": 8 - }, - { - "address": "0x26DB5439F651CAF491A87d48799dA81F191bDB6b", - "symbol": "CBC", - "decimal": 8 - }, - { - "address": "0x05C3617cBf1304b9260AA61ec960F115D67beCEA", - "symbol": "CBIX", - "decimal": 18 - }, - { - "address": "0x95eFD1Fe6099F65a7ED524DEF487483221094947", - "symbol": "CBM", - "decimal": 18 - }, - { - "address": "0x076C97e1c869072eE22f8c91978C99B4bcB02591", - "symbol": "CBT", - "decimal": 18 - }, - { - "address": "0xc166038705FFBAb3794185b3a9D925632A1DF37D", - "symbol": "CC3", - "decimal": 18 - }, - { - "address": "0x28577A6d31559bd265Ce3ADB62d0458550F7b8a7", - "symbol": "CCC (CryptoCrashCourse)", - "decimal": 18 - }, - { - "address": "0xBE11eEb186e624b8f26A5045575a1340E4054552", - "symbol": "CCC (ICONOMI)", - "decimal": 18 - }, - { - "address": "0x378903a03FB2C3AC76BB52773e3CE11340377A32", - "symbol": "CCCX", - "decimal": 18 - }, - { - "address": "0xd348e07A2806505B856123045d27aeeD90924b50", - "symbol": "CCLC", - "decimal": 8 - }, - { - "address": "0x679BADc551626e01B23CeecEFBc9B877EA18fc46", - "symbol": "CCO", - "decimal": 18 - }, - { - "address": "0x315cE59FAFd3A8d562b7Ec1C8542382d2710b06c", - "symbol": "CCS", - "decimal": 18 - }, - { - "address": "0x336F646F87D9f6bC6Ed42Dd46E8b3fD9DbD15C22", - "symbol": "CCT", - "decimal": 18 - }, - { - "address": "0xF5DCe57282A584D2746FaF1593d3121Fcac444dC", - "symbol": "cDai", - "decimal": 8 - }, - { - "address": "0x8a95ca448A52C0ADf0054bB3402dC5e09CD6B232", - "symbol": "CDL", - "decimal": 18 - }, - { - "address": "0x177d39AC676ED1C67A2b268AD7F1E58826E5B0af", - "symbol": "CDT", - "decimal": 18 - }, - { - "address": "0x2cb101d7dA0ebaA57D3F2fEf46D7FFB7BB64592B", - "symbol": "CDX", - "decimal": 0 - }, - { - "address": "0x6fFF3806Bbac52A20e0d79BC538d527f6a22c96b", - "symbol": "CDX (1)", - "decimal": 18 - }, - { - "address": "0xb056c38f6b7Dc4064367403E26424CD2c60655e1", - "symbol": "CEEK", - "decimal": 18 - }, - { - "address": "0x0bC61DdED5F6710c637cf8288Eb6058766ce1921", - "symbol": "CEN", - "decimal": 18 - }, - { - "address": "0x1122B6a0E00DCe0563082b6e2953f3A943855c1F", - "symbol": "CENNZ", - "decimal": 18 - }, - { - "address": "0xF660cA1e228e7BE1fA8B4f5583145E31147FB577", - "symbol": "CET", - "decimal": 18 - }, - { - "address": "0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5", - "symbol": "cETH", - "decimal": 8 - }, - { - "address": "0x5Dff89a2caa4D76bc286F74D67Bd718eb834da61", - "symbol": "CFC", - "decimal": 18 - }, - { - "address": "0x12FEF5e57bF45873Cd9B62E9DBd7BFb99e32D73e", - "symbol": "CFI", - "decimal": 18 - }, - { - "address": "0x6956983F8B3Ce173B4AB84361AA0ad52f38D936f", - "symbol": "CFTY", - "decimal": 8 - }, - { - "address": "0xf3db7560E820834658B590C96234c333Cd3D5E5e", - "symbol": "CHP", - "decimal": 18 - }, - { - "address": "0xba9d4199faB4f26eFE3551D490E3821486f135Ba", - "symbol": "CHSB", - "decimal": 8 - }, - { - "address": "0x1460a58096d80a50a2F1f956DDA497611Fa4f165", - "symbol": "CHX", - "decimal": 18 - }, - { - "address": "0xf75fBfa2f681860B9A6D19FC3FF3D34CB322E2D6", - "symbol": "CIYA", - "decimal": 18 - }, - { - "address": "0x3abdfF32F76b42E7635bdb7e425f0231A5F3aB17", - "symbol": "CJT", - "decimal": 18 - }, - { - "address": "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d", - "symbol": "CK", - "decimal": 0 - }, - { - "address": "0xe81D72D14B1516e68ac3190a46C93302Cc8eD60f", - "symbol": "CL", - "decimal": 18 - }, - { - "address": "0xb1c1Cb8C7c1992dba24e628bF7d38E71daD46aeB", - "symbol": "CLB", - "decimal": 18 - }, - { - "address": "0x3dC9a42fa7Afe57BE03c58fD7F4411b1E466C508", - "symbol": "CLL", - "decimal": 18 - }, - { - "address": "0x4162178B78D6985480A308B2190EE5517460406D", - "symbol": "CLN", - "decimal": 18 - }, - { - "address": "0x7FCE2856899a6806eeEf70807985fc7554C66340", - "symbol": "CLP", - "decimal": 9 - }, - { - "address": "0x3EDD235C3E840C1F29286B2e39370a255C7B6fdb", - "symbol": "CMBT", - "decimal": 8 - }, - { - "address": "0x7e667525521cF61352e2E01b50FaaaE7Df39749a", - "symbol": "CMC", - "decimal": 18 - }, - { - "address": "0x47bc01597798DCD7506DCCA36ac4302fc93a8cFb", - "symbol": "CMCT", - "decimal": 8 - }, - { - "address": "0xf85fEea2FdD81d51177F6b8F35F0e6734Ce45F5F", - "symbol": "CMT", - "decimal": 18 - }, - { - "address": "0xEBf2F9E8De960f64ec0fDCDa6Cb282423133347B", - "symbol": "CNB", - "decimal": 8 - }, - { - "address": "0xd4c435F5B09F855C3317c8524Cb1F586E42795fa", - "symbol": "CND", - "decimal": 18 - }, - { - "address": "0x8713d26637CF49e1b6B4a7Ce57106AaBc9325343", - "symbol": "CNN", - "decimal": 18 - }, - { - "address": "0xB4b1D2C217EC0776584CE08D3DD98F90EDedA44b", - "symbol": "CO2", - "decimal": 18 - }, - { - "address": "0x574B36BceD443338875d171CC377E691f7d4F887", - "symbol": "CO2Bit", - "decimal": 18 - }, - { - "address": "0xb2F7EB1f2c37645bE61d73953035360e768D81E6", - "symbol": "COB", - "decimal": 18 - }, - { - "address": "0x933DFC5622792b41245aB8313416cAF0ba885aE7", - "symbol": "COBR", - "decimal": 18 - }, - { - "address": "0x3136eF851592aCf49CA4C825131E364170FA32b3", - "symbol": "COFI", - "decimal": 18 - }, - { - "address": "0x0C91B015AbA6f7B4738dcD36E7410138b29ADC29", - "symbol": "COIL", - "decimal": 8 - }, - { - "address": "0x5e8F855966D638135a968861E80DdA722291B06d", - "symbol": "COIN", - "decimal": 18 - }, - { - "address": "0xeb547ed1D8A3Ff1461aBAa7F0022FED4836E00A4", - "symbol": "COIN (1)", - "decimal": 18 - }, - { - "address": "0x725B190Bc077FFde17Cf549AA8ba25e298550B18", - "symbol": "CORI", - "decimal": 2 - }, - { - "address": "0xC4Bcd64CB216D49fD3C643A32762F34626b45a1a", - "symbol": "COSM", - "decimal": 18 - }, - { - "address": "0x65292EeadF1426Cd2dF1C4793a3d7519f253913b", - "symbol": "COSS", - "decimal": 18 - }, - { - "address": "0x9e96604445Ec19fFed9a5e8dd7B50a29C899A10C", - "symbol": "COSS (1)", - "decimal": 18 - }, - { - "address": "0xE2FB6529EF566a080e6d23dE0bd351311087D567", - "symbol": "COV", - "decimal": 18 - }, - { - "address": "0x31910AFF5545784755970aE1fBE7fE65d5F0eEa2", - "symbol": "CPAL", - "decimal": 8 - }, - { - "address": "0x0Ebb614204E47c09B6C3FeB9AAeCad8EE060E23E", - "symbol": "CPAY", - "decimal": 0 - }, - { - "address": "0xfAE4Ee59CDd86e3Be9e8b90b53AA866327D7c090", - "symbol": "CPC", - "decimal": 18 - }, - { - "address": "0xb787d4eAc8899730bb8C57fc3c998c49c5244ec0", - "symbol": "CPEX", - "decimal": 8 - }, - { - "address": "0x7064aAb39A0Fcf7221c3396719D0917a65E35515", - "symbol": "CPLO", - "decimal": 18 - }, - { - "address": "0x88d50B466BE55222019D71F9E8fAe17f5f45FCA1", - "symbol": "CPT", - "decimal": 8 - }, - { - "address": "0x9B62513c8a27290CF6A7A9e29386e600245EA819", - "symbol": "CPT (1)", - "decimal": 18 - }, - { - "address": "0xf44745fBd41F6A1ba151df190db0564c5fCc4410", - "symbol": "CPY", - "decimal": 18 - }, - { - "address": "0x7F585B9130c64e9e9F470b618A7badD03D79cA7E", - "symbol": "CR7", - "decimal": 18 - }, - { - "address": "0xAef38fBFBF932D1AeF3B808Bc8fBd8Cd8E1f8BC5", - "symbol": "CRB", - "decimal": 8 - }, - { - "address": "0x2cF618c19041D9Db330d8222B860A624021F30fb", - "symbol": "CRBT", - "decimal": 18 - }, - { - "address": "0xF41e5Fbc2F6Aac200Dd8619E121CE1f05D150077", - "symbol": "CRC", - "decimal": 18 - }, - { - "address": "0x672a1AD4f667FB18A333Af13667aa0Af1F5b5bDD", - "symbol": "CRED", - "decimal": 18 - }, - { - "address": "0x4E0603e2A27A30480E5e3a4Fe548e29EF12F64bE", - "symbol": "CREDO", - "decimal": 18 - }, - { - "address": "0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1", - "symbol": "cREP", - "decimal": 8 - }, - { - "address": "0xf49CDD50aD408d387d611F88A647179C3de3492b", - "symbol": "CRGO", - "decimal": 18 - }, - { - "address": "0x9238bfB781A55eACC3Cf05F7DF94038c198CD9B9", - "symbol": "CRMT", - "decimal": 8 - }, - { - "address": "0x80A7E048F37A50500351C204Cb407766fA3baE7f", - "symbol": "CRPT", - "decimal": 18 - }, - { - "address": "0xF0da1186a4977226b9135d0613ee72e229EC3F4d", - "symbol": "CRT", - "decimal": 18 - }, - { - "address": "0xE4c94d45f7Aef7018a5D66f44aF780ec6023378e", - "symbol": "CryptoCarbon", - "decimal": 6 - }, - { - "address": "0x46b9Ad944d1059450Da1163511069C718F699D31", - "symbol": "CS", - "decimal": 6 - }, - { - "address": "0x29D75277aC7F0335b2165D0895E8725cbF658d73", - "symbol": "CSNO", - "decimal": 8 - }, - { - "address": "0xBB49A51Ee5a66ca3a8CbE529379bA44Ba67E6771", - "symbol": "CST", - "decimal": 18 - }, - { - "address": "0x4545750F39aF6Be4F237B6869D4EccA928Fd5A85", - "symbol": "CTF", - "decimal": 18 - }, - { - "address": "0xC87c5dD86A3d567fF28701886fB0745aaa898da4", - "symbol": "CTG", - "decimal": 18 - }, - { - "address": "0x9E7D29bd499B6c7da2a5B2EaFCF4A39d3BD845D1", - "symbol": "CTGC", - "decimal": 18 - }, - { - "address": "0xBf4cFD7d1eDeeEA5f6600827411B41A21eB08abd", - "symbol": "CTL", - "decimal": 2 - }, - { - "address": "0x96A65609a7B84E8842732DEB08f56C3E21aC6f8a", - "symbol": "CTR", - "decimal": 18 - }, - { - "address": "0xE3Fa177AcecfB86721Cf6f9f4206bd3Bd672D7d5", - "symbol": "CTT", - "decimal": 18 - }, - { - "address": "0x662aBcAd0b7f345AB7FfB1b1fbb9Df7894f18e66", - "symbol": "CTX", - "decimal": 18 - }, - { - "address": "0xEa11755Ae41D889CeEc39A63E6FF75a02Bc1C00d", - "symbol": "CTXC", - "decimal": 18 - }, - { - "address": "0x490DBf7884B8e13c2161448b83Dd2d8909dB48eD", - "symbol": "CUR8", - "decimal": 8 - }, - { - "address": "0x1dABF6Ab0eB8E4208E7E9302CeC7A014068952e4", - "symbol": "CURA", - "decimal": 8 - }, - { - "address": "0x39AA39c021dfbaE8faC545936693aC917d5E7563", - "symbol": "cUSDC", - "decimal": 8 - }, - { - "address": "0xdA6cb58A0D0C01610a29c5A65c303e13e885887C", - "symbol": "cV", - "decimal": 18 - }, - { - "address": "0x41e5560054824eA6B0732E656E3Ad64E20e94E45", - "symbol": "CVC", - "decimal": 8 - }, - { - "address": "0xBe428c3867F05deA2A89Fc76a102b544eaC7f772", - "symbol": "CVT", - "decimal": 18 - }, - { - "address": "0x2134057C0b461F898D375Cead652Acae62b59541", - "symbol": "CXC", - "decimal": 18 - }, - { - "address": "0xb6EE9668771a79be7967ee29a63D4184F8097143", - "symbol": "CXO", - "decimal": 18 - }, - { - "address": "0xfE831929098B5FF5d736105bD68BA9460EF07207", - "symbol": "CYCLE", - "decimal": 18 - }, - { - "address": "0x3f06B5D78406cD97bdf10f5C420B241D32759c80", - "symbol": "CYFM", - "decimal": 18 - }, - { - "address": "0x78c292D1445E6b9558bf42e8BC369271DeD062eA", - "symbol": "CYMT", - "decimal": 8 - }, - { - "address": "0x0223fc70574214F65813fE336D870Ac47E147fAe", - "symbol": "CZR", - "decimal": 18 - }, - { - "address": "0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407", - "symbol": "cZRX", - "decimal": 8 - }, - { - "address": "0xdab0C31BF34C897Fb0Fe90D12EC9401caf5c36Ec", - "symbol": "DAB", - "decimal": 0 - }, - { - "address": "0xA31108E5BAB5494560Db34c95492658AF239357C", - "symbol": "DACS", - "decimal": 18 - }, - { - "address": "0xFb2f26F266Fb2805a387230f2aa0a331b4d96Fba", - "symbol": "DADI", - "decimal": 18 - }, - { - "address": "0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359", - "symbol": "DAI", - "decimal": 18 - }, - { - "address": "0x07D9e49Ea402194bf48A8276dAfB16E4eD633317", - "symbol": "DALC", - "decimal": 8 - }, - { - "address": "0x9B70740e708a083C6fF38Df52297020f5DfAa5EE", - "symbol": "DAN", - "decimal": 10 - }, - { - "address": "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413", - "symbol": "DAO", - "decimal": 16 - }, - { - "address": "0x81c9151de0C8bafCd325a57E3dB5a5dF1CEBf79c", - "symbol": "DAT", - "decimal": 18 - }, - { - "address": "0x0Cf0Ee63788A0849fE5297F3407f701E122cC023", - "symbol": "DATA", - "decimal": 18 - }, - { - "address": "0x1B5f21ee98eed48d292e8e2d3Ed82b40a9728A22", - "symbol": "DATABroker", - "decimal": 18 - }, - { - "address": "0xaBbBB6447B68ffD6141DA77C18c7B5876eD6c5ab", - "symbol": "DATX", - "decimal": 18 - }, - { - "address": "0xd82Df0ABD3f51425Eb15ef7580fDA55727875f14", - "symbol": "DAV", - "decimal": 18 - }, - { - "address": "0x0B4BdC478791897274652DC15eF5C135cae61E60", - "symbol": "DAX", - "decimal": 18 - }, - { - "address": "0x61725f3db4004AFE014745B21DAb1E1677CC328b", - "symbol": "DAXT", - "decimal": 18 - }, - { - "address": "0xE814aeE960a85208C3dB542C53E7D4a6C8D5f60F", - "symbol": "DAY", - "decimal": 18 - }, - { - "address": "0x9b68bFaE21DF5A510931A262CECf63f41338F264", - "symbol": "DBET", - "decimal": 18 - }, - { - "address": "0x386Faa4703a34a7Fdb19Bec2e14Fd427C9638416", - "symbol": "DCA", - "decimal": 18 - }, - { - "address": "0xFFa93Aacf49297D51E211817452839052FDFB961", - "symbol": "DCC", - "decimal": 18 - }, - { - "address": "0x399A0e6FbEb3d74c85357439f4c8AeD9678a5cbF", - "symbol": "DCL", - "decimal": 3 - }, - { - "address": "0x08d32b0da63e2C3bcF8019c9c5d849d7a9d791e6", - "symbol": "DCN", - "decimal": 0 - }, - { - "address": "0xcC4eF9EEAF656aC1a2Ab886743E98e97E090ed38", - "symbol": "DDF", - "decimal": 18 - }, - { - "address": "0x151202C9c18e495656f372281F493EB7698961D5", - "symbol": "DEB", - "decimal": 18 - }, - { - "address": "0x075c60EE2cD308ff47873b38Bd9A0Fa5853382c4", - "symbol": "DEEZ", - "decimal": 18 - }, - { - "address": "0xDE1E0AE6101b46520cF66fDC0B1059c5cC3d106c", - "symbol": "DELTA", - "decimal": 8 - }, - { - "address": "0x3597bfD533a99c9aa083587B074434E61Eb0A258", - "symbol": "DENT", - "decimal": 8 - }, - { - "address": "0x7cF271966F36343Bf0150F25E5364f7961c58201", - "symbol": "DEPO", - "decimal": 0 - }, - { - "address": "0x89cbeAC5E8A13F0Ebb4C74fAdFC69bE81A501106", - "symbol": "DEPO (Depository Network)", - "decimal": 18 - }, - { - "address": "0xdd94De9cFE063577051A5eb7465D08317d8808B6", - "symbol": "Devcon2 Token", - "decimal": 0 - }, - { - "address": "0x20E94867794dBA030Ee287F1406E100d03C84Cd3", - "symbol": "DEW", - "decimal": 18 - }, - { - "address": "0x497bAEF294c11a5f0f5Bea3f2AdB3073DB448B56", - "symbol": "DEX", - "decimal": 18 - }, - { - "address": "0xE0B7927c4aF23765Cb51314A0E0521A9645F0E2A", - "symbol": "DGD", - "decimal": 9 - }, - { - "address": "0xf6cFe53d6FEbaEEA051f400ff5fc14F0cBBDacA1", - "symbol": "DGPT", - "decimal": 18 - }, - { - "address": "0x6aEDbF8dFF31437220dF351950Ba2a3362168d1b", - "symbol": "DGS", - "decimal": 8 - }, - { - "address": "0x1C83501478f1320977047008496DACBD60Bb15ef", - "symbol": "DGTX", - "decimal": 18 - }, - { - "address": "0x4f3AfEC4E5a3F2A6a1A411DEF7D7dFe50eE057bF", - "symbol": "DGX", - "decimal": 9 - }, - { - "address": "0x55b9a11c2e8351b4Ffc7b11561148bfaC9977855", - "symbol": "DGX1", - "decimal": 9 - }, - { - "address": "0x2e071D2966Aa7D8dECB1005885bA1977D6038A65", - "symbol": "DICE", - "decimal": 16 - }, - { - "address": "0xc719d010B63E5bbF2C0551872CD5316ED26AcD83", - "symbol": "DIP", - "decimal": 18 - }, - { - "address": "0xf14922001A2FB8541a433905437ae954419C2439", - "symbol": "DIT", - "decimal": 8 - }, - { - "address": "0x13f11C9905A08ca76e3e853bE63D4f0944326C72", - "symbol": "DIVX", - "decimal": 18 - }, - { - "address": "0xBA187B09fFA8DDdc80d2571eD3cbC4Be0Af69E0c", - "symbol": "DKP", - "decimal": 18 - }, - { - "address": "0x07e3c70653548B04f0A75970C1F81B4CBbFB606f", - "symbol": "DLT", - "decimal": 18 - }, - { - "address": "0x2ccbFF3A042c68716Ed2a2Cb0c544A9f1d1935E1", - "symbol": "DMT", - "decimal": 8 - }, - { - "address": "0x82b0E50478eeaFde392D45D1259Ed1071B6fDa81", - "symbol": "DNA", - "decimal": 18 - }, - { - "address": "0x0AbdAce70D3790235af448C88547603b945604ea", - "symbol": "DNT", - "decimal": 18 - }, - { - "address": "0xE43E2041dc3786e166961eD9484a5539033d10fB", - "symbol": "DNX", - "decimal": 18 - }, - { - "address": "0xE5Dada80Aa6477e85d09747f2842f7993D0Df71C", - "symbol": "DOCK", - "decimal": 18 - }, - { - "address": "0x906b3f8b7845840188Eab53c3f5AD348A787752f", - "symbol": "DOR", - "decimal": 15 - }, - { - "address": "0xac3211a5025414Af2866FF09c23FC18bc97e79b1", - "symbol": "DOV", - "decimal": 18 - }, - { - "address": "0x76974C7B79dC8a6a109Fd71fd7cEb9E40eff5382", - "symbol": "DOW", - "decimal": 18 - }, - { - "address": "0xEEF6E90034eEa89E31Eb4B8eaCd323F28A92eaE4", - "symbol": "DOW (1)", - "decimal": 18 - }, - { - "address": "0x01b3Ec4aAe1B8729529BEB4965F27d008788B0EB", - "symbol": "DPP", - "decimal": 18 - }, - { - "address": "0xC2e3ED7F61D338755BF7b6fB4bAA0ffFadA4AC28", - "symbol": "DRC", - "decimal": 18 - }, - { - "address": "0x82f4dED9Cec9B5750FBFf5C2185AEe35AfC16587", - "symbol": "DREAM", - "decimal": 6 - }, - { - "address": "0x419c4dB4B9e25d6Db2AD9691ccb832C8D9fDA05E", - "symbol": "DRGN", - "decimal": 18 - }, - { - "address": "0x3c75226555FC496168d48B88DF83B95F16771F37", - "symbol": "DROP", - "decimal": 0 - }, - { - "address": "0x4672bAD527107471cB5067a887f4656D585a8A31", - "symbol": "DROP (dropil)", - "decimal": 18 - }, - { - "address": "0x2799D90C6d44Cb9Aa5fBC377177F16C33E056b82", - "symbol": "DRP", - "decimal": 0 - }, - { - "address": "0x621d78f2EF2fd937BFca696CabaF9A779F59B3Ed", - "symbol": "DRP (1)", - "decimal": 2 - }, - { - "address": "0xe30e02f049957e2A5907589e06Ba646fB2c321bA", - "symbol": "DRPU", - "decimal": 8 - }, - { - "address": "0x9AF4f26941677C706cfEcf6D3379FF01bB85D5Ab", - "symbol": "DRT", - "decimal": 8 - }, - { - "address": "0x62D4c04644314F35868Ba4c65cc27a77681dE7a9", - "symbol": "DRVH", - "decimal": 18 - }, - { - "address": "0x1e09BD8Cadb441632e441Db3e1D79909EE0A2256", - "symbol": "DSC", - "decimal": 1 - }, - { - "address": "0x03e3f0c25965f13DbbC58246738C183E27b26a56", - "symbol": "DSCP", - "decimal": 18 - }, - { - "address": "0x68d53441c0e253f76c500e551bdeA3D102206C9a", - "symbol": "DST", - "decimal": 18 - }, - { - "address": "0x5adc961D6AC3f7062D2eA45FEFB8D8167d44b190", - "symbol": "DTH", - "decimal": 18 - }, - { - "address": "0xd234BF2410a0009dF9c3C63b610c09738f18ccD7", - "symbol": "DTR", - "decimal": 8 - }, - { - "address": "0xc20464e0C373486d2B3335576e83a218b1618A5E", - "symbol": "DTRC", - "decimal": 18 - }, - { - "address": "0xf9F7c29CFdf19FCf1f2AA6B84aA367Bcf1bD1676", - "symbol": "DTT", - "decimal": 18 - }, - { - "address": "0x82fdedfB7635441aA5A92791D001fA7388da8025", - "symbol": "DTx", - "decimal": 18 - }, - { - "address": "0x765f0C16D1Ddc279295c1a7C24B0883F62d33F75", - "symbol": "DTX", - "decimal": 18 - }, - { - "address": "0x9c6Fa42209169bCeA032e401188a6fc3e9C9f59c", - "symbol": "DUBI", - "decimal": 18 - }, - { - "address": "0xD4CffeeF10F60eCA581b5E1146B5Aca4194a4C3b", - "symbol": "DUBI (1)", - "decimal": 18 - }, - { - "address": "0xEd7fEA78C393cF7B17B152A8c2D0CD97aC31790B", - "symbol": "DUBI (2)", - "decimal": 18 - }, - { - "address": "0x8dB54ca569D3019A2ba126D03C37c44b5eF81EF6", - "symbol": "DXT", - "decimal": 8 - }, - { - "address": "0xb67734521eAbBE9C773729dB73E16CC2dfb20A58", - "symbol": "E₹", - "decimal": 2 - }, - { - "address": "0xCe5c603C78d047Ef43032E96b5B785324f753a4F", - "symbol": "E4ROW", - "decimal": 2 - }, - { - "address": "0x994f0DffdbaE0BbF09b652D6f11A493fd33F42B9", - "symbol": "EAGLE", - "decimal": 18 - }, - { - "address": "0x900b4449236a7bb26b286601dD14d2bDe7a6aC6c", - "symbol": "EARTH", - "decimal": 8 - }, - { - "address": "0x31f3D9D1BeCE0c033fF78fA6DA60a6048F3E13c5", - "symbol": "EBC", - "decimal": 18 - }, - { - "address": "0xaFC39788c51f0c1Ff7B55317f3e70299e521Fff6", - "symbol": "eBCH", - "decimal": 8 - }, - { - "address": "0xeB7C20027172E5d143fB030d50f91Cece2D1485D", - "symbol": "EBTC", - "decimal": 8 - }, - { - "address": "0xa578aCc0cB7875781b7880903F4594D13cFa8B98", - "symbol": "ECN", - "decimal": 2 - }, - { - "address": "0x17F93475d2A978f527c3f7c44aBf44AdfBa60D5C", - "symbol": "ECO2", - "decimal": 2 - }, - { - "address": "0x171D750d42d661B62C277a6B486ADb82348c3Eca", - "symbol": "ECOM", - "decimal": 18 - }, - { - "address": "0x8869b1F9bC8B246a4D7220F834E56ddfdd8255E7", - "symbol": "ECP", - "decimal": 18 - }, - { - "address": "0xAEA1C18A992984831002D0cf90E291FB52d72649", - "symbol": "ECP (1)", - "decimal": 18 - }, - { - "address": "0xFA1DE2Ee97e4c10C94C91Cb2b5062b89Fb140b82", - "symbol": "EDC", - "decimal": 6 - }, - { - "address": "0x08711D3B02C8758F2FB3ab4e80228418a7F8e39c", - "symbol": "EDG", - "decimal": 0 - }, - { - "address": "0xCeD4E93198734dDaFf8492d525Bd258D49eb388E", - "symbol": "EDO", - "decimal": 18 - }, - { - "address": "0xc528c28FEC0A90C083328BC45f587eE215760A0F", - "symbol": "EDR", - "decimal": 18 - }, - { - "address": "0x2A22e5cCA00a3D63308fa39f29202eB1b39eEf52", - "symbol": "EDU", - "decimal": 18 - }, - { - "address": "0xb53A96bcBdD9CF78dfF20BAB6C2be7bAec8f00f8", - "symbol": "eGAS", - "decimal": 8 - }, - { - "address": "0x8e1b448EC7aDFc7Fa35FC2e885678bD323176E34", - "symbol": "EGT", - "decimal": 18 - }, - { - "address": "0xf9F0FC7167c311Dd2F1e21E9204F87EBA9012fB2", - "symbol": "EHT", - "decimal": 8 - }, - { - "address": "0xa6a840E50bCaa50dA017b91A0D86B8b2d41156EE", - "symbol": "EKO", - "decimal": 18 - }, - { - "address": "0xBAb165dF9455AA0F2AeD1f2565520B91DDadB4c8", - "symbol": "EKT", - "decimal": 8 - }, - { - "address": "0xD49ff13661451313cA1553fd6954BD1d9b6E02b9", - "symbol": "ELEC", - "decimal": 18 - }, - { - "address": "0xbf2179859fc6D5BEE9Bf9158632Dc51678a4100e", - "symbol": "ELF", - "decimal": 18 - }, - { - "address": "0xc8C6A31A4A806d3710A7B38b7B296D2fABCCDBA8", - "symbol": "ELIX", - "decimal": 18 - }, - { - "address": "0x44197A4c44D6A059297cAf6be4F7e172BD56Caaf", - "symbol": "ELTCOIN", - "decimal": 8 - }, - { - "address": "0xa95592DCFfA3C080B4B40E459c5f5692F67DB7F8", - "symbol": "ELY", - "decimal": 18 - }, - { - "address": "0x28B94F58B11aC945341329dBf2e5EF7F8Bd44225", - "symbol": "EMB", - "decimal": 8 - }, - { - "address": "0xb67b88a25708a35AE7c2d736D398D268CE4f7F83", - "symbol": "EMON", - "decimal": 8 - }, - { - "address": "0x95dAaaB98046846bF4B2853e23cba236fa394A31", - "symbol": "EMONT", - "decimal": 8 - }, - { - "address": "0x9501BFc48897DCEEadf73113EF635d2fF7ee4B97", - "symbol": "EMT", - "decimal": 18 - }, - { - "address": "0xB802b24E0637c2B87D2E8b7784C055BBE921011a", - "symbol": "EMV", - "decimal": 2 - }, - { - "address": "0x039F5050dE4908f9b5ddF40A4F3Aa3f329086387", - "symbol": "ENC", - "decimal": 18 - }, - { - "address": "0xf0Ee6b27b759C9893Ce4f094b49ad28fd15A23e4", - "symbol": "ENG", - "decimal": 8 - }, - { - "address": "0x5DBAC24e98E2a4f43ADC0DC82Af403fca063Ce2c", - "symbol": "ENGT", - "decimal": 18 - }, - { - "address": "0xF629cBd94d3791C9250152BD8dfBDF380E2a3B9c", - "symbol": "ENJ", - "decimal": 18 - }, - { - "address": "0x5BC7e5f0Ab8b2E10D2D0a3F21739FCe62459aeF3", - "symbol": "ENTRP", - "decimal": 18 - }, - { - "address": "0x86Fa049857E0209aa7D9e616F7eb3b3B78ECfdb0", - "symbol": "EOS", - "decimal": 18 - }, - { - "address": "0x7e9e431a0B8c4D532C745B1043c7FA29a48D4fBa", - "symbol": "eosDAC", - "decimal": 18 - }, - { - "address": "0x875089A734213cA39f0d93c2BbB8209827ec5e9f", - "symbol": "EPH", - "decimal": 8 - }, - { - "address": "0x35BAA72038F127f9f8C8f9B491049f64f377914d", - "symbol": "EPX", - "decimal": 4 - }, - { - "address": "0x50Ee674689d75C0f88E8f83cfE8c4B69E8fd590D", - "symbol": "EPY", - "decimal": 8 - }, - { - "address": "0x47dD62D4D075DeAd71d0e00299fc56a2d747beBb", - "symbol": "EQL", - "decimal": 18 - }, - { - "address": "0x74CEDa77281b339142A36817Fa5F9E29412bAb85", - "symbol": "ERO", - "decimal": 8 - }, - { - "address": "0x92A5B04D0ED5D94D7a193d1d334D3D16996f4E13", - "symbol": "ERT", - "decimal": 18 - }, - { - "address": "0xe8A1Df958bE379045E2B46a31A98B93A2eCDfDeD", - "symbol": "ESZ", - "decimal": 18 - }, - { - "address": "0x1B9743f556D65e757c4c650B4555bAF354cB8bd3", - "symbol": "ETBS", - "decimal": 12 - }, - { - "address": "0xDd74a7A3769fA72561B3A69e65968F49748c690c", - "symbol": "ETCH", - "decimal": 18 - }, - { - "address": "0x28c8d01FF633eA9Cd8fc6a451D7457889E698de6", - "symbol": "ETG", - "decimal": 0 - }, - { - "address": "0x3a26746Ddb79B1B8e4450e3F4FFE3285A307387E", - "symbol": "ETHB", - "decimal": 8 - }, - { - "address": "0xdbFb423E9bBF16294388e07696A5120E4CeBA0C5", - "symbol": "ETHD", - "decimal": 18 - }, - { - "address": "0xE52e75e8a97546f40991b489E92c68eBb386dc97", - "symbol": "ETHPAY", - "decimal": 18 - }, - { - "address": "0x3c4a3ffd813a107febd57B2f01BC344264D90FdE", - "symbol": "ETK", - "decimal": 2 - }, - { - "address": "0x6927C69fb4daf2043fbB1Cb7b86c5661416bea29", - "symbol": "ETR", - "decimal": 18 - }, - { - "address": "0xd99298985902C9A69bf4C8a0895fA10721204ECC", - "symbol": "EUCX", - "decimal": 18 - }, - { - "address": "0xdB25f211AB05b1c97D595516F45794528a807ad8", - "symbol": "EURS", - "decimal": 2 - }, - { - "address": "0xAbdf147870235FcFC34153828c769A70B3FAe01F", - "symbol": "EURT", - "decimal": 6 - }, - { - "address": "0x523630976eB6147621B5c31c781eBe2Ec2a806E0", - "symbol": "eUSD", - "decimal": 18 - }, - { - "address": "0xb62d18DeA74045E822352CE4B3EE77319DC5ff2F", - "symbol": "EVC", - "decimal": 18 - }, - { - "address": "0x923108a439C4e8C2315c4f6521E5cE95B44e9B4c", - "symbol": "EVE", - "decimal": 18 - }, - { - "address": "0x5aaEFe84E0fB3DD1f0fCfF6fA7468124986B91bd", - "symbol": "EVED", - "decimal": 18 - }, - { - "address": "0x68909e586eeAC8F47315e84B4c9788DD54Ef65Bb", - "symbol": "EVN", - "decimal": 18 - }, - { - "address": "0xd780Ae2Bf04cD96E577D3D014762f831d97129d0", - "symbol": "EVN (1)", - "decimal": 18 - }, - { - "address": "0xf3Db5Fa2C66B7aF3Eb0C0b782510816cbe4813b8", - "symbol": "EVX", - "decimal": 4 - }, - { - "address": "0x444997b7e7fC830E20089afea3078cd518fCF2A2", - "symbol": "EWO", - "decimal": 18 - }, - { - "address": "0x00c4B398500645eb5dA00a1a379a88B11683ba01", - "symbol": "EXC", - "decimal": 18 - }, - { - "address": "0x9e4C143Bfe35f855624B3F84465AB7401A17A120", - "symbol": "EXC (1)", - "decimal": 18 - }, - { - "address": "0xc98e0639c6d2EC037A615341c369666B110e80E5", - "symbol": "EXMR", - "decimal": 8 - }, - { - "address": "0xe469c4473af82217B30CF17b10BcDb6C8c796e75", - "symbol": "EXRN", - "decimal": 0 - }, - { - "address": "0xe06Af951086EC3c488b50E31BE29c07F8a260cA3", - "symbol": "EXU", - "decimal": 16 - }, - { - "address": "0x5c743a35E903F6c584514ec617ACEe0611Cf44f3", - "symbol": "EXY", - "decimal": 18 - }, - { - "address": "0x5e6016Ae7d7C49d347dcF834860B9f3Ee282812b", - "symbol": "EZT", - "decimal": 8 - }, - { - "address": "0x0a1D2fF7156a48131553CF381F220bbedB4eFa37", - "symbol": "FABA", - "decimal": 18 - }, - { - "address": "0x1CCAA0F2a7210d76E1fDec740d5F323E2E1b1672", - "symbol": "FACE", - "decimal": 18 - }, - { - "address": "0x190e569bE071F40c704e15825F285481CB74B6cC", - "symbol": "FAM", - "decimal": 12 - }, - { - "address": "0x90162f41886c0946D09999736f1C15c8a105A421", - "symbol": "FAN", - "decimal": 18 - }, - { - "address": "0x7dCB3B2356C822d3577D4d060D0D5D78C860488C", - "symbol": "FANX", - "decimal": 18 - }, - { - "address": "0x7f6715c3FC4740A02F70De85B9FD50ac6001fEd9", - "symbol": "FANX (1)", - "decimal": 18 - }, - { - "address": "0x7cf6dC769482AbEe2FF75795d000F381A8062DEC", - "symbol": "FAR", - "decimal": 18 - }, - { - "address": "0x41f723448433367BE140D528D35EFECd3e023DB6", - "symbol": "FARM", - "decimal": 18 - }, - { - "address": "0x23352036E911A22Cfc692B5E2E196692658ADED9", - "symbol": "FDZ", - "decimal": 18 - }, - { - "address": "0x4E594479Fa417a1e9C5790a413575802D393010F", - "symbol": "FER", - "decimal": 8 - }, - { - "address": "0xd9A8cfe21C232D485065cb62a96866799d4645f7", - "symbol": "FGP", - "decimal": 18 - }, - { - "address": "0x52fb36C83ad33C1824912FC81071cA5eEB8AB390", - "symbol": "FID", - "decimal": 18 - }, - { - "address": "0xdfC3e857c8cCEA7657E0ed98AB92e048e38deE0f", - "symbol": "FIH", - "decimal": 18 - }, - { - "address": "0x009e864923b49263c7F10D19B7f8Ab7a9A5AAd33", - "symbol": "FKX", - "decimal": 18 - }, - { - "address": "0xf04a8ac553FceDB5BA99A64799155826C136b0Be", - "symbol": "FLIXX", - "decimal": 18 - }, - { - "address": "0x04cC783b450b8D11F3C7d00DD03fDF7FB51fE9F2", - "symbol": "FLMC", - "decimal": 18 - }, - { - "address": "0x5976F7dac1525eF3277836043bA474a35E6B4272", - "symbol": "FLMC (1)", - "decimal": 0 - }, - { - "address": "0x049399a6B048D52971F7D122aE21A1532722285F", - "symbol": "FLOT", - "decimal": 18 - }, - { - "address": "0x3a1Bda28AdB5B0a812a7CF10A1950c920F79BcD3", - "symbol": "FLP", - "decimal": 18 - }, - { - "address": "0x9aeFBE0b3C3ba9Eab262CB9856E8157AB7648e09", - "symbol": "FLR", - "decimal": 18 - }, - { - "address": "0x954b5De09A55e59755aCBda29e1Eb74A45D30175", - "symbol": "FLUZ", - "decimal": 18 - }, - { - "address": "0x70b147E01E9285E7cE68B9BA437Fe3a9190E756a", - "symbol": "FLX", - "decimal": 18 - }, - { - "address": "0xb4d0FDFC8497AEF97d3c2892AE682eE06064A2BC", - "symbol": "FMF", - "decimal": 18 - }, - { - "address": "0x4DF47B4969B2911C966506E3592c41389493953b", - "symbol": "FND", - "decimal": 18 - }, - { - "address": "0x0707681F344dEB24184037fC0228856F2137B02E", - "symbol": "FNKOS", - "decimal": 18 - }, - { - "address": "0xbD4B60a138b3fce3584EA01f50c0908c18f9677A", - "symbol": "FNTB", - "decimal": 8 - }, - { - "address": "0x4946Fcea7C692606e8908002e55A582af44AC121", - "symbol": "FOAM", - "decimal": 18 - }, - { - "address": "0x2a093BcF0C98Ef744Bb6F69D74f2F85605324290", - "symbol": "FOOD", - "decimal": 8 - }, - { - "address": "0x5bB1632fA0023e1AA76a1AE92B4635C8DBa49Fa2", - "symbol": "FORK", - "decimal": 18 - }, - { - "address": "0x4270bb238f6DD8B1c3ca01f96CA65b2647c06D3C", - "symbol": "FOTA", - "decimal": 18 - }, - { - "address": "0x8c39afDf7B17F12c553208555E51ab86E69C35aA", - "symbol": "FR8", - "decimal": 8 - }, - { - "address": "0x0ABeFb7611Cb3A01EA3FaD85f33C3C934F8e2cF4", - "symbol": "FRD", - "decimal": 18 - }, - { - "address": "0x17e67d1CB4e349B9CA4Bc3e17C7DF2a397A7BB64", - "symbol": "FREC", - "decimal": 18 - }, - { - "address": "0xd8B8E1Eca89dA014E67fDbc2014eaA8E171079bF", - "symbol": "FRECNX", - "decimal": 18 - }, - { - "address": "0x48DF4E0296f908CEAb0428A5182D19B31fC037d6", - "symbol": "FRV", - "decimal": 8 - }, - { - "address": "0x36a73557f5BDE5195EC39eCA82d28b8A36D21141", - "symbol": "FRX", - "decimal": 18 - }, - { - "address": "0xD0352a019e9AB9d757776F532377aAEbd36Fd541", - "symbol": "FSN", - "decimal": 18 - }, - { - "address": "0x78a73B6CBc5D183CE56e786f6e905CaDEC63547B", - "symbol": "FT", - "decimal": 18 - }, - { - "address": "0xe6f74dcfa0E20883008d8C16b6d9a329189D0C30", - "symbol": "FTC", - "decimal": 2 - }, - { - "address": "0x26aC29dC25806199373cb4884AA9E077a0587c5b", - "symbol": "ftchain", - "decimal": 18 - }, - { - "address": "0x943ED852DadB5C3938ECdC6883718df8142DE4C8", - "symbol": "FTI", - "decimal": 18 - }, - { - "address": "0x2023DCf7c438c8C8C0B0F28dBaE15520B4f3Ee20", - "symbol": "FTR", - "decimal": 18 - }, - { - "address": "0x2AEC18c5500f21359CE1BEA5Dc1777344dF4C0Dc", - "symbol": "FTT", - "decimal": 18 - }, - { - "address": "0xd559f20296FF4895da39b5bd9ADd54b442596a61", - "symbol": "FTX", - "decimal": 18 - }, - { - "address": "0x41875C2332B0877cDFAA699B641402b7D4642c32", - "symbol": "FTXT", - "decimal": 8 - }, - { - "address": "0x65Be44C747988fBF606207698c944Df4442efE19", - "symbol": "FUCK", - "decimal": 4 - }, - { - "address": "0xAb16E0d25c06CB376259cc18C1de4ACA57605589", - "symbol": "FUCK (1)", - "decimal": 4 - }, - { - "address": "0xEA38eAa3C86c8F9B751533Ba2E562deb9acDED40", - "symbol": "FUEL", - "decimal": 18 - }, - { - "address": "0x419D0d8BdD9aF5e606Ae2232ed285Aff190E711b", - "symbol": "FUN", - "decimal": 8 - }, - { - "address": "0x4a57E687b9126435a9B19E4A802113e266AdeBde", - "symbol": "FXC", - "decimal": 18 - }, - { - "address": "0xc92D6E3E64302C59d734f3292E2A13A13D7E1817", - "symbol": "FXC (1)", - "decimal": 8 - }, - { - "address": "0x1829aA045E21E0D59580024A951DB48096e01782", - "symbol": "FXT", - "decimal": 18 - }, - { - "address": "0x88FCFBc22C6d3dBaa25aF478C578978339BDe77a", - "symbol": "FYN", - "decimal": 18 - }, - { - "address": "0x8F0921f30555624143d427b340b1156914882C10", - "symbol": "FYP", - "decimal": 18 - }, - { - "address": "0xE5aeE163513119F4F750376C718766B40fA37A5F", - "symbol": "Fzcoin", - "decimal": 18 - }, - { - "address": "0xa3EE21C306A700E682AbCdfe9BaA6A08F3820419", - "symbol": "G-CRE", - "decimal": 18 - }, - { - "address": "0xF67451Dc8421F0e0afEB52faa8101034ed081Ed9", - "symbol": "GAM", - "decimal": 8 - }, - { - "address": "0x6754e21b9EAa053c62d7854dD6561ae451B0cBCf", - "symbol": "GANA", - "decimal": 18 - }, - { - "address": "0xc0EA6306F6360FE7dCAB65D16Bf1a3AF92C79Aa2", - "symbol": "GANA (1)", - "decimal": 18 - }, - { - "address": "0x687174f8C49ceb7729D925C3A961507ea4Ac7b28", - "symbol": "GAT", - "decimal": 18 - }, - { - "address": "0x708876f486e448Ee89eB332bFbC8E593553058b9", - "symbol": "GAVEL", - "decimal": 18 - }, - { - "address": "0xCc2a74b28E786Fac86bE3CA354B1941c25aB3EaB", - "symbol": "GBO", - "decimal": 18 - }, - { - "address": "0x7585F835ae2d522722d2684323a0ba83401f32f5", - "symbol": "GBT", - "decimal": 18 - }, - { - "address": "0x12fCd6463E66974cF7bBC24FFC4d40d6bE458283", - "symbol": "GBX", - "decimal": 18 - }, - { - "address": "0x8Eb38715604b938812DEC25A0A1bc05B4becB9ca", - "symbol": "GC", - "decimal": 18 - }, - { - "address": "0xdb0F69306FF8F949f258E83f6b87ee5D052d0b23", - "symbol": "GCP", - "decimal": 18 - }, - { - "address": "0xa4ec83c8907888d006A37debF755ee39766f38ae", - "symbol": "GCU", - "decimal": 18 - }, - { - "address": "0x44A67C8570a61A28bAfd0035042f2F0A73a64428", - "symbol": "GCX", - "decimal": 6 - }, - { - "address": "0x4F4f0Db4de903B88f2B1a2847971E231D54F8fd3", - "symbol": "GEE", - "decimal": 8 - }, - { - "address": "0x24083Bb30072643C3bB90B44B7285860a755e687", - "symbol": "GELD", - "decimal": 18 - }, - { - "address": "0xc7BbA5b765581eFb2Cdd2679DB5Bea9eE79b201f", - "symbol": "GEM", - "decimal": 18 - }, - { - "address": "0x543Ff227F64Aa17eA132Bf9886cAb5DB55DCAddf", - "symbol": "GEN", - "decimal": 18 - }, - { - "address": "0x6DD4e4Aad29A40eDd6A409b9c1625186C9855b4D", - "symbol": "GENE", - "decimal": 8 - }, - { - "address": "0x8a854288a5976036A725879164Ca3e91d30c6A1B", - "symbol": "GET", - "decimal": 18 - }, - { - "address": "0x7F969C4D388Ca0AE39A4FdDB1A6f89878CA2fBf8", - "symbol": "GGC", - "decimal": 18 - }, - { - "address": "0xFcD862985628b254061F7A918035B80340D045d3", - "symbol": "GIF", - "decimal": 18 - }, - { - "address": "0xaE4f56F072c34C0a65B3ae3E4DB797D831439D93", - "symbol": "GIM", - "decimal": 8 - }, - { - "address": "0x9Aa7d119bdf77F65A7284581A211D8c44ffb04b4", - "symbol": "GIRL", - "decimal": 18 - }, - { - "address": "0x71D01dB8d6a2fBEa7f8d434599C237980C234e4C", - "symbol": "GLA", - "decimal": 8 - }, - { - "address": "0xb3Bd49E28f8F832b8d1E246106991e546c323502", - "symbol": "GMT", - "decimal": 18 - }, - { - "address": "0x6810e776880C02933D47DB1b9fc05908e5386b96", - "symbol": "GNO", - "decimal": 18 - }, - { - "address": "0xa74476443119A942dE498590Fe1f2454d7D4aC0d", - "symbol": "GNT", - "decimal": 18 - }, - { - "address": "0x6EC8a24CaBdc339A06a172F8223ea557055aDAa5", - "symbol": "GNX", - "decimal": 9 - }, - { - "address": "0x247551F2EB3362E222c742E9c788B8957D9BC87e", - "symbol": "GNY", - "decimal": 18 - }, - { - "address": "0xeAb43193CF0623073Ca89DB9B712796356FA7414", - "symbol": "GOLDX", - "decimal": 18 - }, - { - "address": "0x423b5F62b328D0D6D44870F4Eee316befA0b2dF5", - "symbol": "GOT", - "decimal": 18 - }, - { - "address": "0x12B19D3e2ccc14Da04FAe33e63652ce469b3F2FD", - "symbol": "GRID", - "decimal": 12 - }, - { - "address": "0xb444208cB0516C150178fCf9a52604BC04A1aCEa", - "symbol": "GRMD", - "decimal": 18 - }, - { - "address": "0xC17195bde49D70CefCF8A9F2ee1759FFC27BF0B1", - "symbol": "GROO", - "decimal": 18 - }, - { - "address": "0x0a9A9ce600D08BF9b76F49FA4e7b38A67EBEB1E6", - "symbol": "GROW", - "decimal": 8 - }, - { - "address": "0x228ba514309FFDF03A81a205a6D040E429d6E80C", - "symbol": "GSC", - "decimal": 18 - }, - { - "address": "0xe530441f4f73bDB6DC2fA5aF7c3fC5fD551Ec838", - "symbol": "GSE", - "decimal": 4 - }, - { - "address": "0xB70835D7822eBB9426B56543E391846C107bd32C", - "symbol": "GTC", - "decimal": 18 - }, - { - "address": "0x025abAD9e518516fdaAFBDcdB9701b37fb7eF0FA", - "symbol": "GTKT", - "decimal": 0 - }, - { - "address": "0xC5bBaE50781Be1669306b9e001EFF57a2957b09d", - "symbol": "GTO", - "decimal": 5 - }, - { - "address": "0xBDCFbf5C4D91Abc0bC9709C7286d00063c0e6F22", - "symbol": "GUESS", - "decimal": 2 - }, - { - "address": "0x9847345de8b614c956146bbea549336d9C8d26b6", - "symbol": "GULD", - "decimal": 8 - }, - { - "address": "0xf7B098298f7C69Fc14610bf71d5e02c60792894C", - "symbol": "GUP", - "decimal": 3 - }, - { - "address": "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd", - "symbol": "GUSD", - "decimal": 2 - }, - { - "address": "0x103c3A209da59d3E7C4A89307e66521e081CFDF0", - "symbol": "GVT", - "decimal": 18 - }, - { - "address": "0x58ca3065C0F24C7c96Aee8d6056b5B5deCf9c2f8", - "symbol": "GXC", - "decimal": 10 - }, - { - "address": "0x22F0AF8D78851b72EE799e05F54A77001586B18A", - "symbol": "GXVC", - "decimal": 10 - }, - { - "address": "0x9DAe8b7F6D37ea8e5d32C6c3E856a6d8a1d3B363", - "symbol": "GZB", - "decimal": 18 - }, - { - "address": "0x8C65e992297d5f092A756dEf24F4781a280198Ff", - "symbol": "GZE", - "decimal": 18 - }, - { - "address": "0xE638dc39b6aDBEE8526b5C22380b4b45dAf46d8e", - "symbol": "GZR", - "decimal": 6 - }, - { - "address": "0x5bfc1FF7f9e087C64fEfb34F2e7cF24e5570919F", - "symbol": "HABS", - "decimal": 18 - }, - { - "address": "0x93a7174dafd31d13400cD9fa01f4e5B5BAa00D39", - "symbol": "HAK", - "decimal": 18 - }, - { - "address": "0x48C1B2f3eFA85fbafb2ab951bF4Ba860a08cdBB7", - "symbol": "HAND", - "decimal": 0 - }, - { - "address": "0x5A567e28dbFa2bBD3ef13C0a01be114745349657", - "symbol": "HAPPY", - "decimal": 2 - }, - { - "address": "0x9002D4485b7594e3E850F0a206713B305113f69e", - "symbol": "HAT", - "decimal": 18 - }, - { - "address": "0xE2492F8D2A2618d8709Ca99b1d8d75713Bd84089", - "symbol": "HB", - "decimal": 18 - }, - { - "address": "0xDd6C68bb32462e01705011a4e2Ad1a60740f217F", - "symbol": "HBT", - "decimal": 15 - }, - { - "address": "0xE34e1944E776f39B9252790a0527eBDa647aE668", - "symbol": "HBZ", - "decimal": 18 - }, - { - "address": "0xfFe8196bc259E8dEDc544d935786Aa4709eC3E64", - "symbol": "HDG", - "decimal": 18 - }, - { - "address": "0x95C4be8534d69C248C0623c4C9a7A2a001c17337", - "symbol": "HDL", - "decimal": 18 - }, - { - "address": "0x86a63063b3a60652FB070F23Cbb4A9833FDBBFF8", - "symbol": "HDLRE", - "decimal": 18 - }, - { - "address": "0xE9fF07809CCff05daE74990e25831d0Bc5cbe575", - "symbol": "Hdp", - "decimal": 18 - }, - { - "address": "0x84543F868eC1b1FAC510d49d13C069f64cD2d5f9", - "symbol": "Hdp.ф", - "decimal": 18 - }, - { - "address": "0x491C9A23DB85623EEd455a8EfDd6AbA9b911C5dF", - "symbol": "HER", - "decimal": 18 - }, - { - "address": "0xe9C9e7E1DaBea830C958C39D6b25964a6F52143A", - "symbol": "HEY", - "decimal": 18 - }, - { - "address": "0xba2184520A1cC49a6159c57e61E1844E085615B6", - "symbol": "HGT", - "decimal": 8 - }, - { - "address": "0x9bb1Db1445b83213a56d90d331894b3f26218e4e", - "symbol": "HIBT", - "decimal": 18 - }, - { - "address": "0xa9240fBCAC1F0b9A6aDfB04a53c8E3B0cC1D1444", - "symbol": "HIG", - "decimal": 18 - }, - { - "address": "0x7FCcaDee21660425FDEc86029b6362845ffC052C", - "symbol": "HIN", - "decimal": 8 - }, - { - "address": "0x14F37B574242D366558dB61f3335289a5035c506", - "symbol": "HKG", - "decimal": 3 - }, - { - "address": "0x9e6B2B11542f2BC52f3029077acE37E8fD838D7F", - "symbol": "HKN", - "decimal": 8 - }, - { - "address": "0x88aC94D5d175130347Fc95E109d77AC09dbF5ab7", - "symbol": "HKY", - "decimal": 18 - }, - { - "address": "0x66eb65D7Ab8e9567ba0fa6E37c305956c5341574", - "symbol": "HLX", - "decimal": 5 - }, - { - "address": "0xAa0bb10CEc1fa372eb3Abc17C933FC6ba863DD9E", - "symbol": "HMC", - "decimal": 18 - }, - { - "address": "0xcbCC0F036ED4788F63FC0fEE32873d6A7487b908", - "symbol": "HMQ", - "decimal": 8 - }, - { - "address": "0x9C9Fe3bD60b22A9735908B9589011E78F2025C11", - "symbol": "HNST", - "decimal": 18 - }, - { - "address": "0xb45d7Bc4cEBcAB98aD09BABDF8C818B2292B672c", - "symbol": "HODL", - "decimal": 18 - }, - { - "address": "0x5B0751713b2527d7f002c0c4e2a37e1219610A6B", - "symbol": "HORSE", - "decimal": 18 - }, - { - "address": "0x6c6EE5e31d828De241282B9606C8e98Ea48526E2", - "symbol": "HOT (Holo)", - "decimal": 18 - }, - { - "address": "0x9AF839687F6C94542ac5ece2e317dAAE355493A1", - "symbol": "HOT (Hydro)", - "decimal": 18 - }, - { - "address": "0x38c6A68304cdEfb9BEc48BbFaABA5C5B47818bb2", - "symbol": "HPB", - "decimal": 18 - }, - { - "address": "0x554C20B7c486beeE439277b4540A434566dC4C02", - "symbol": "HST", - "decimal": 18 - }, - { - "address": "0x6f259637dcD74C767781E37Bc6133cd6A68aa161", - "symbol": "HT", - "decimal": 18 - }, - { - "address": "0x001Fc4a7f2f586596308091c7B296D4535A25a90", - "symbol": "HUBS", - "decimal": 18 - }, - { - "address": "0x141ABB03F001dEDED9A0223d4ff26d929117B72e", - "symbol": "HV", - "decimal": 18 - }, - { - "address": "0xC0Eb85285d83217CD7c891702bcbC0FC401E2D9D", - "symbol": "HVN", - "decimal": 8 - }, - { - "address": "0xEBBdf302c940c6bfd49C6b165f457fdb324649bc", - "symbol": "HYDRO", - "decimal": 18 - }, - { - "address": "0xC1E2097d788d33701BA3Cc2773BF67155ec93FC4", - "symbol": "IAD", - "decimal": 18 - }, - { - "address": "0x3c20d67b6B1aE0985F913aBb7397babc2fBb1A1F", - "symbol": "ICD", - "decimal": 18 - }, - { - "address": "0x5a84969bb663fb64F6d015DcF9F622Aedc796750", - "symbol": "ICE", - "decimal": 18 - }, - { - "address": "0x888666CA69E0f178DED6D75b5726Cee99A87D698", - "symbol": "ICN", - "decimal": 18 - }, - { - "address": "0xa33e729bf4fdeb868B534e1f20523463D9C46bEe", - "symbol": "ICO", - "decimal": 10 - }, - { - "address": "0x014B50466590340D41307Cc54DCee990c8D58aa8", - "symbol": "ICOS", - "decimal": 6 - }, - { - "address": "0xb5A5F22694352C15B00323844aD545ABb2B11028", - "symbol": "ICX", - "decimal": 18 - }, - { - "address": "0x814CAfd4782d2e728170FDA68257983F03321c58", - "symbol": "IDEA", - "decimal": 0 - }, - { - "address": "0x5136C98A80811C3f46bDda8B5c4555CFd9f812F0", - "symbol": "IDH", - "decimal": 6 - }, - { - "address": "0xCc13Fc627EFfd6E35D2D2706Ea3C4D7396c610ea", - "symbol": "IDXM", - "decimal": 8 - }, - { - "address": "0x859a9C0b44cb7066D956a958B0b82e54C9e44b4B", - "symbol": "IETH", - "decimal": 8 - }, - { - "address": "0x7654915A1b82D6D2D0AFc37c52Af556eA8983c7E", - "symbol": "IFT", - "decimal": 18 - }, - { - "address": "0x8a88f04e0c905054D2F33b26BB3A46D7091A039A", - "symbol": "IG", - "decimal": 18 - }, - { - "address": "0x449c640B6C7fce4f8aD2e3Dcd900D13be40174Af", - "symbol": "IGI", - "decimal": 18 - }, - { - "address": "0xEda8B016efA8b1161208Cf041cD86972eeE0F31E", - "symbol": "IHT", - "decimal": 18 - }, - { - "address": "0x16662F73dF3e79e54c6c5938b4313f92C524C120", - "symbol": "IIC", - "decimal": 18 - }, - { - "address": "0x88AE96845e157558ef59e9Ff90E766E22E480390", - "symbol": "IKB", - "decimal": 0 - }, - { - "address": "0xe3831c5A982B279A198456D577cfb90424cb6340", - "symbol": "IMC", - "decimal": 6 - }, - { - "address": "0x13119E34E140097a507B07a5564bDe1bC375D9e6", - "symbol": "IMT", - "decimal": 18 - }, - { - "address": "0x22E5F62D0FA19974749faa194e3d3eF6d89c08d7", - "symbol": "IMT (1)", - "decimal": 0 - }, - { - "address": "0xf8e386EDa857484f5a12e4B5DAa9984E06E73705", - "symbol": "IND", - "decimal": 18 - }, - { - "address": "0x24dDFf6D8B8a42d835af3b440De91f3386554Aa4", - "symbol": "ING", - "decimal": 18 - }, - { - "address": "0x48e5413b73add2434e47504E2a22d14940dBFe78", - "symbol": "INRM", - "decimal": 3 - }, - { - "address": "0x5B2e4a700dfBc560061e957edec8F6EeEb74a320", - "symbol": "INS", - "decimal": 10 - }, - { - "address": "0xc72fe8e3Dd5BeF0F9f31f259399F301272eF2a2D", - "symbol": "INSTAR", - "decimal": 18 - }, - { - "address": "0x0b76544F6C413a555F309Bf76260d1E02377c02A", - "symbol": "INT", - "decimal": 6 - }, - { - "address": "0xEcE83617Db208Ad255Ad4f45Daf81E25137535bb", - "symbol": "INV", - "decimal": 8 - }, - { - "address": "0xa8006C4ca56F24d6836727D106349320dB7fEF82", - "symbol": "INXT", - "decimal": 8 - }, - { - "address": "0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab", - "symbol": "IOST", - "decimal": 18 - }, - { - "address": "0xC34B21f6F8e51cC965c2393B3ccFa3b82BEb2403", - "symbol": "IoT", - "decimal": 6 - }, - { - "address": "0x6fB3e0A217407EFFf7Ca062D46c26E5d60a14d69", - "symbol": "IOTX", - "decimal": 18 - }, - { - "address": "0x64CdF819d3E75Ac8eC217B3496d7cE167Be42e80", - "symbol": "IPL", - "decimal": 18 - }, - { - "address": "0x001F0aA5dA15585e5b2305DbaB2bac425ea71007", - "symbol": "IPSX", - "decimal": 18 - }, - { - "address": "0x0DB8D8b76BC361bAcbB72E2C491E06085A97Ab31", - "symbol": "IQN", - "decimal": 18 - }, - { - "address": "0x1969442391737025812C2215E77E676d7fA84847", - "symbol": "ISL", - "decimal": 18 - }, - { - "address": "0x0cF713b11C9b986EC40D65bD4F7fbd50F6ff2d64", - "symbol": "IST34", - "decimal": 18 - }, - { - "address": "0x5E6b6d9aBAd9093fdc861Ea1600eBa1b355Cd940", - "symbol": "ITC", - "decimal": 18 - }, - { - "address": "0x0aeF06DcCCC531e581f0440059E6FfCC206039EE", - "symbol": "ITT", - "decimal": 8 - }, - { - "address": "0xA4eA687A2A7F29cF2dc66B39c68e4411C0D00C49", - "symbol": "IVY", - "decimal": 18 - }, - { - "address": "0xfcA47962D45ADFdfd1Ab2D972315dB4ce7CCf094", - "symbol": "IXT", - "decimal": 8 - }, - { - "address": "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4", - "symbol": "J8T", - "decimal": 8 - }, - { - "address": "0x0Aaf561eFF5BD9c8F911616933F84166A17cfE0C", - "symbol": "JBX", - "decimal": 0 - }, - { - "address": "0x884e3902C4d5cFA86de4aCE7A96AA91EbC25C0Ff", - "symbol": "JBX (1)", - "decimal": 18 - }, - { - "address": "0xE2D82Dc7dA0E6f882E96846451F4faBcc8f90528", - "symbol": "JC", - "decimal": 18 - }, - { - "address": "0x8727c112C712c4a03371AC87a74dD6aB104Af768", - "symbol": "JET", - "decimal": 18 - }, - { - "address": "0x773450335eD4ec3DB45aF74f34F2c85348645D39", - "symbol": "JetCoins", - "decimal": 18 - }, - { - "address": "0xa5Fd1A791C4dfcaacC963D4F73c6Ae5824149eA7", - "symbol": "JNT", - "decimal": 18 - }, - { - "address": "0x17280DA053596E097604839C61A2eF5efb7d493f", - "symbol": "JOB", - "decimal": 8 - }, - { - "address": "0xdb455c71C1bC2de4e80cA451184041Ef32054001", - "symbol": "JOT", - "decimal": 18 - }, - { - "address": "0xDDe12a12A6f67156e0DA672be05c374e1B0a3e57", - "symbol": "JOY", - "decimal": 6 - }, - { - "address": "0x1410434b0346f5bE678d0FB554E5c7ab620f8f4a", - "symbol": "KAN", - "decimal": 18 - }, - { - "address": "0xe15254a13D34F9700320330abcb7c7F857aF2Fb7", - "symbol": "KAPA", - "decimal": 2 - }, - { - "address": "0x0D6DD9f68d24EC1d5fE2174f3EC8DAB52B52BaF5", - "symbol": "KC", - "decimal": 18 - }, - { - "address": "0x039B5649A59967e3e936D7471f9c3700100Ee1ab", - "symbol": "KCS", - "decimal": 6 - }, - { - "address": "0x72D32ac1c5E66BfC5b08806271f8eEF915545164", - "symbol": "KEE", - "decimal": 0 - }, - { - "address": "0x4CC19356f2D37338b9802aa8E8fc58B0373296E7", - "symbol": "KEY", - "decimal": 18 - }, - { - "address": "0x4Cd988AfBad37289BAAf53C13e98E2BD46aAEa8c", - "symbol": "KEY (1)", - "decimal": 18 - }, - { - "address": "0x27695E09149AdC738A978e9A678F99E4c39e9eb9", - "symbol": "KICK", - "decimal": 8 - }, - { - "address": "0x818Fc6C2Ec5986bc6E2CBf00939d90556aB12ce5", - "symbol": "KIN", - "decimal": 18 - }, - { - "address": "0x4618519de4C304F3444ffa7f812dddC2971cc688", - "symbol": "KIND", - "decimal": 8 - }, - { - "address": "0xc97A5cdF41BAfD51c8dBE82270097e704d748b92", - "symbol": "KLOWN", - "decimal": 7 - }, - { - "address": "0x2BDD6c9bf1bf396a37501AAE53751B9946B503Da", - "symbol": "KMTBA", - "decimal": 18 - }, - { - "address": "0xdd974D5C2e2928deA5F71b9825b8b646686BD200", - "symbol": "KNC", - "decimal": 18 - }, - { - "address": "0x8E5610ab5E39d26828167640EA29823fe1dD5843", - "symbol": "KNDC", - "decimal": 8 - }, - { - "address": "0xfF5c25D2F40B47C4a37f989DE933E26562Ef0Ac0", - "symbol": "KNT", - "decimal": 16 - }, - { - "address": "0xb5C33F965C8899D255c34CDD2A3efA8AbCbB3DeA", - "symbol": "KPR", - "decimal": 18 - }, - { - "address": "0xeef8102A0D46D508f171d7323BcEffc592835F13", - "symbol": "KRI", - "decimal": 18 - }, - { - "address": "0x464eBE77c293E473B48cFe96dDCf88fcF7bFDAC0", - "symbol": "KRL", - "decimal": 18 - }, - { - "address": "0xbD4AB8b9C26c4888e2792cAC6d5793Efea9eBb20", - "symbol": "KRTY", - "decimal": 18 - }, - { - "address": "0xdf1338FbAfe7aF1789151627B886781ba556eF9a", - "symbol": "KUE", - "decimal": 18 - }, - { - "address": "0x241bA672574A78a3A604CDd0a94429A73a84a324", - "symbol": "KWATT", - "decimal": 18 - }, - { - "address": "0x9541FD8B9b5FA97381783783CeBF2F5fA793C262", - "symbol": "KZN", - "decimal": 8 - }, - { - "address": "0xE50365f5D679CB98a1dd62D6F6e58e59321BcdDf", - "symbol": "LA", - "decimal": 18 - }, - { - "address": "0xfD107B473AB90e8Fbd89872144a3DC92C40Fa8C9", - "symbol": "LALA", - "decimal": 18 - }, - { - "address": "0x2f85E502a988AF76f7ee6D83b7db8d6c0A823bf9", - "symbol": "LATX", - "decimal": 8 - }, - { - "address": "0xfe5F141Bf94fE84bC28deD0AB966c16B17490657", - "symbol": "LBA", - "decimal": 18 - }, - { - "address": "0xAA19961b6B858D9F18a115f25aa1D98ABc1fdBA8", - "symbol": "LCS", - "decimal": 18 - }, - { - "address": "0x05C7065d644096a4E4C3FE24AF86e36dE021074b", - "symbol": "LCT", - "decimal": 18 - }, - { - "address": "0x4A37A91eec4C97F9090CE66d21D3B3Aadf1aE5aD", - "symbol": "LCT (1)", - "decimal": 18 - }, - { - "address": "0x5102791cA02FC3595398400BFE0e33d7B6C82267", - "symbol": "LDC", - "decimal": 18 - }, - { - "address": "0x9eFa0e2387E4CBA02a6E4E6594b8f4Dd209a0b93", - "symbol": "LDX", - "decimal": 0 - }, - { - "address": "0x5b26C5D0772E5bbaC8b3182AE9a13f9BB2D03765", - "symbol": "LEDU", - "decimal": 8 - }, - { - "address": "0x60C24407d01782C2175D32fe7C8921ed732371D1", - "symbol": "LEMO", - "decimal": 18 - }, - { - "address": "0xB5AE848EdB296C21259b7467331467d2647eEcDf", - "symbol": "LEMO (1)", - "decimal": 18 - }, - { - "address": "0xd6e354F07319e2474491D8c7c712137bEe6862a2", - "symbol": "LEMO (2)", - "decimal": 0 - }, - { - "address": "0x80fB784B7eD66730e8b1DBd9820aFD29931aab03", - "symbol": "LEND", - "decimal": 18 - }, - { - "address": "0xf97b5d65Da6b0468b90D531ddae2a69843e6797d", - "symbol": "LEO", - "decimal": 18 - }, - { - "address": "0x0F4CA92660Efad97a9a70CB0fe969c755439772C", - "symbol": "LEV", - "decimal": 9 - }, - { - "address": "0xc798cd1c49db0E297312E4c682752668CE1dB2AD", - "symbol": "LFR", - "decimal": 5 - }, - { - "address": "0xc520F3Ac303a107D8F4B08b326B6ea66A4f961cd", - "symbol": "LG", - "decimal": 18 - }, - { - "address": "0x123aB195DD38B1b40510d467a6a359b201af056f", - "symbol": "LGO", - "decimal": 8 - }, - { - "address": "0x2eb86e8fC520E0F6Bb5D9Af08F924fe70558Ab89", - "symbol": "LGR", - "decimal": 8 - }, - { - "address": "0xE6DfBF1FAcA95036B8E76e1Fb28933D025B76Cc0", - "symbol": "LIBER", - "decimal": 18 - }, - { - "address": "0xEB9951021698B42e4399f9cBb6267Aa35F82D59D", - "symbol": "LIF", - "decimal": 18 - }, - { - "address": "0xfF18DBc487b4c2E3222d115952bABfDa8BA52F5F", - "symbol": "LIFE", - "decimal": 18 - }, - { - "address": "0x02F61Fd266DA6E8B102D4121f5CE7b992640CF98", - "symbol": "LIKE", - "decimal": 18 - }, - { - "address": "0x514910771AF9Ca656af840dff83E8264EcF986CA", - "symbol": "LINK (Chainlink)", - "decimal": 18 - }, - { - "address": "0xE2E6D4BE086c6938B53B22144855eef674281639", - "symbol": "LINK Platform", - "decimal": 18 - }, - { - "address": "0x24A77c1F17C547105E14813e517be06b0040aa76", - "symbol": "LIVE", - "decimal": 18 - }, - { - "address": "0x49bD2DA75b1F7AF1E4dFd6b1125FEcDe59dBec58", - "symbol": "LKY", - "decimal": 18 - }, - { - "address": "0x25B6325f5BB1c1E03cfbC3e53F470E1F1ca022E3", - "symbol": "LML", - "decimal": 18 - }, - { - "address": "0x63e634330A20150DbB61B15648bC73855d6CCF07", - "symbol": "LNC", - "decimal": 18 - }, - { - "address": "0x6BEB418Fc6E1958204aC8baddCf109B8E9694966", - "symbol": "LNC (Linker Coin)", - "decimal": 18 - }, - { - "address": "0x0947b0e6D821378805c9598291385CE7c791A6B2", - "symbol": "LND", - "decimal": 18 - }, - { - "address": "0x5e3346444010135322268a4630d2ED5F8D09446c", - "symbol": "LOC", - "decimal": 18 - }, - { - "address": "0x9c23D67AEA7B95D80942e3836BCDF7E708A747C2", - "symbol": "LOCI", - "decimal": 18 - }, - { - "address": "0xC64500DD7B0f1794807e67802F8Abbf5F8Ffb054", - "symbol": "LOCUS", - "decimal": 18 - }, - { - "address": "0x21aE23B882A340A22282162086bC98D3E2B73018", - "symbol": "LOK", - "decimal": 18 - }, - { - "address": "0x253C7dd074f4BaCb305387F922225A4f737C08bd", - "symbol": "LOOK", - "decimal": 18 - }, - { - "address": "0xA4e8C3Ec456107eA67d3075bF9e3DF3A75823DB0", - "symbol": "LOOM", - "decimal": 18 - }, - { - "address": "0x58b6A8A3302369DAEc383334672404Ee733aB239", - "symbol": "LPT", - "decimal": 18 - }, - { - "address": "0xBBbbCA6A901c926F240b89EacB641d8Aec7AEafD", - "symbol": "LRC", - "decimal": 18 - }, - { - "address": "0xEF68e7C694F40c8202821eDF525dE3782458639f", - "symbol": "LRC (old)", - "decimal": 18 - }, - { - "address": "0x5dbe296F97B23C4A6AA6183D73e574D02bA5c719", - "symbol": "LUC", - "decimal": 18 - }, - { - "address": "0xFB12e3CcA983B9f59D90912Fd17F8D745A8B2953", - "symbol": "LUCK", - "decimal": 0 - }, - { - "address": "0xA89b5934863447f6E4Fc53B315a93e873bdA69a3", - "symbol": "LUM", - "decimal": 18 - }, - { - "address": "0xfa05A73FfE78ef8f1a739473e462c54bae6567D9", - "symbol": "LUN", - "decimal": 18 - }, - { - "address": "0xc8Cac7672f4669685817cF332a33Eb249F085475", - "symbol": "LVN", - "decimal": 18 - }, - { - "address": "0x57aD67aCf9bF015E4820Fbd66EA1A21BED8852eC", - "symbol": "LYM", - "decimal": 18 - }, - { - "address": "0xc690F7C7FcfFA6a82b79faB7508c466FEfdfc8c5", - "symbol": "LYM (1)", - "decimal": 18 - }, - { - "address": "0xdD41fBd1Ae95C5D9B198174A28e04Be6b3d1aa27", - "symbol": "LYS", - "decimal": 8 - }, - { - "address": "0x3f4B726668da46f5e0E75aA5D478ACEc9f38210F", - "symbol": "M-ETH", - "decimal": 18 - }, - { - "address": "0x5B09A0371C1DA44A8E24D36Bf5DEb1141a84d875", - "symbol": "MAD", - "decimal": 18 - }, - { - "address": "0xe25bCec5D3801cE3a794079BF94adF1B8cCD802D", - "symbol": "MAN", - "decimal": 18 - }, - { - "address": "0x0F5D2fB29fb7d3CFeE444a200298f468908cC942", - "symbol": "MANA", - "decimal": 18 - }, - { - "address": "0xfdcc07Ab60660de533b5Ad26e1457b565a9D59Bd", - "symbol": "MART", - "decimal": 18 - }, - { - "address": "0x23Ccc43365D9dD3882eab88F43d515208f832430", - "symbol": "MAS", - "decimal": 18 - }, - { - "address": "0xB63ffE88c2903080cCf9AB14EfA56A11E3e01273", - "symbol": "MBC", - "decimal": 18 - }, - { - "address": "0xEfbB3F1058fd8E0C9d7204f532E17d7572AFfc3e", - "symbol": "MBCASH", - "decimal": 18 - }, - { - "address": "0x386467F1f3ddbE832448650418311a479EECFC57", - "symbol": "MBRS", - "decimal": 0 - }, - { - "address": "0x93E682107d1E9defB0b5ee701C71707a4B2E46Bc", - "symbol": "MCAP", - "decimal": 8 - }, - { - "address": "0x138A8752093F4f9a79AaeDF48d4B9248fab93c9C", - "symbol": "MCI", - "decimal": 18 - }, - { - "address": "0xB63B606Ac810a52cCa15e44bB630fd42D8d1d83d", - "symbol": "MCO", - "decimal": 8 - }, - { - "address": "0x51DB5Ad35C671a87207d88fC11d593AC0C8415bd", - "symbol": "MDA", - "decimal": 18 - }, - { - "address": "0x66186008C1050627F979d464eABb258860563dbE", - "symbol": "MDS", - "decimal": 18 - }, - { - "address": "0x814e0908b12A99FeCf5BC101bB5d0b8B5cDf7d26", - "symbol": "MDT", - "decimal": 18 - }, - { - "address": "0xfd1e80508F243E64CE234eA88A5Fd2827c71D4b7", - "symbol": "MEDX", - "decimal": 8 - }, - { - "address": "0x420167D87d35c3A249b32Ef6225872fBD9aB85D2", - "symbol": "MESG", - "decimal": 18 - }, - { - "address": "0x01F2AcF2914860331C1Cb1a9AcecDa7475e06Af8", - "symbol": "MESH", - "decimal": 18 - }, - { - "address": "0xF03045a4C8077e38f3B8e2Ed33b8aEE69edF869F", - "symbol": "MESH (1)", - "decimal": 18 - }, - { - "address": "0x5B8D43FfdE4a2982B9A5387cDF21D54Ead64Ac8d", - "symbol": "MEST", - "decimal": 18 - }, - { - "address": "0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e", - "symbol": "MET", - "decimal": 18 - }, - { - "address": "0xFEF3884b603C33EF8eD4183346E093A173C94da6", - "symbol": "METM", - "decimal": 18 - }, - { - "address": "0x6710c63432A2De02954fc0f851db07146a6c0312", - "symbol": "MFG", - "decimal": 18 - }, - { - "address": "0xDF2C7238198Ad8B389666574f2d8bc411A4b7428", - "symbol": "MFT", - "decimal": 18 - }, - { - "address": "0x05D412CE18F24040bB3Fa45CF2C69e506586D8e8", - "symbol": "MFTU", - "decimal": 18 - }, - { - "address": "0x40395044Ac3c0C57051906dA938B54BD6557F212", - "symbol": "MGO", - "decimal": 8 - }, - { - "address": "0x3A1237D38D0Fb94513f85D61679cAd7F38507242", - "symbol": "MIC", - "decimal": 18 - }, - { - "address": "0xD717B75404022fb1C8582ADf1c66B9A553811754", - "symbol": "MILC", - "decimal": 18 - }, - { - "address": "0xe23cd160761f63FC3a1cF78Aa034b6cdF97d3E0C", - "symbol": "MIT", - "decimal": 18 - }, - { - "address": "0xAd8DD4c725dE1D31b9E8F8D146089e9DC6882093", - "symbol": "MIT (Mychatcoin)", - "decimal": 6 - }, - { - "address": "0x3893b9422Cd5D70a81eDeFfe3d5A1c6A978310BB", - "symbol": "MITH", - "decimal": 18 - }, - { - "address": "0x4a527d8fc13C5203AB24BA0944F4Cb14658D1Db6", - "symbol": "MITX", - "decimal": 18 - }, - { - "address": "0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2", - "symbol": "MKR", - "decimal": 18 - }, - { - "address": "0x7939882b54fcf0bCAe6b53dEc39Ad6e806176442", - "symbol": "MKT", - "decimal": 8 - }, - { - "address": "0xec67005c4E498Ec7f55E092bd1d35cbC47C91892", - "symbol": "MLN (new)", - "decimal": 18 - }, - { - "address": "0xBEB9eF514a379B997e0798FDcC901Ee474B6D9A1", - "symbol": "MLN (old)", - "decimal": 18 - }, - { - "address": "0x1a95B271B0535D15fa49932Daba31BA612b52946", - "symbol": "MNE", - "decimal": 8 - }, - { - "address": "0xA9877b1e05D035899131DBd1e403825166D09f92", - "symbol": "MNT", - "decimal": 18 - }, - { - "address": "0x83cee9e086A77e492eE0bB93C2B0437aD6fdECCc", - "symbol": "MNTP", - "decimal": 18 - }, - { - "address": "0x865ec58b06bF6305B886793AA20A2da31D034E68", - "symbol": "MOC", - "decimal": 18 - }, - { - "address": "0x957c30aB0426e0C93CD8241E2c60392d08c6aC8e", - "symbol": "MOD", - "decimal": 0 - }, - { - "address": "0x501262281B2Ba043e2fbf14904980689CDDB0C78", - "symbol": "MORE", - "decimal": 2 - }, - { - "address": "0x59061b6f26BB4A9cE5828A19d35CFD5A4B80F056", - "symbol": "MORE (1)", - "decimal": 8 - }, - { - "address": "0x263c618480DBe35C300D8d5EcDA19bbB986AcaeD", - "symbol": "MOT", - "decimal": 18 - }, - { - "address": "0x44bf22949F9cc84b61B9328a9d885d1b5C806b41", - "symbol": "MOZO", - "decimal": 2 - }, - { - "address": "0xf453B5B9d4E0B5c62ffB256BB2378cc2BC8e8a89", - "symbol": "MRK", - "decimal": 8 - }, - { - "address": "0x82125AFe01819Dff1535D0D6276d57045291B6c0", - "symbol": "MRL", - "decimal": 18 - }, - { - "address": "0x21f0F0fD3141Ee9E11B3d7f13a1028CD515f459c", - "symbol": "MRP", - "decimal": 18 - }, - { - "address": "0xAB6CF87a50F17d7F5E1FEaf81B6fE9FfBe8EBF84", - "symbol": "MRV", - "decimal": 18 - }, - { - "address": "0x68AA3F232dA9bdC2343465545794ef3eEa5209BD", - "symbol": "MSP", - "decimal": 18 - }, - { - "address": "0x905E337c6c8645263D3521205Aa37bf4d034e745", - "symbol": "MTC", - "decimal": 18 - }, - { - "address": "0xdfdc0D82d96F8fd40ca0CFB4A288955bECEc2088", - "symbol": "MTC (1)", - "decimal": 18 - }, - { - "address": "0xaF4DcE16Da2877f8c9e00544c93B62Ac40631F16", - "symbol": "MTH", - "decimal": 5 - }, - { - "address": "0xF433089366899D83a9f26A773D59ec7eCF30355e", - "symbol": "MTL", - "decimal": 8 - }, - { - "address": "0x41dBECc1cdC5517C6f76f6a6E836aDbEe2754DE3", - "symbol": "MTN", - "decimal": 18 - }, - { - "address": "0x7FC408011165760eE31bE2BF20dAf450356692Af", - "symbol": "MTR", - "decimal": 8 - }, - { - "address": "0x1e49fF77c355A3e38D6651ce8404AF0E48c5395f", - "symbol": "MTRc", - "decimal": 18 - }, - { - "address": "0x0AF44e2784637218dD1D32A322D44e603A8f0c6A", - "symbol": "MTX", - "decimal": 18 - }, - { - "address": "0xA52383B665b91DCe42dD4b6d1E0Fb37d3EFFe489", - "symbol": "MUSD", - "decimal": 18 - }, - { - "address": "0x515669d308f887Fd83a471C7764F5d084886D34D", - "symbol": "MUXE", - "decimal": 18 - }, - { - "address": "0x71396a6410249725C5609646c4e449C6c4d41E27", - "symbol": "MVG", - "decimal": 0 - }, - { - "address": "0xA849EaaE994fb86Afa73382e9Bd88c2B6b18Dc71", - "symbol": "MVL", - "decimal": 18 - }, - { - "address": "0x8a77e40936BbC27e80E9a3F526368C967869c86D", - "symbol": "MVP", - "decimal": 18 - }, - { - "address": "0x6425c6BE902d692AE2db752B3c268AFAdb099D3b", - "symbol": "MWAT", - "decimal": 18 - }, - { - "address": "0xf7e983781609012307f2514f63D526D83D24F466", - "symbol": "MYD", - "decimal": 16 - }, - { - "address": "0xa645264C5603E96c3b0B078cdab68733794B0A71", - "symbol": "MYST", - "decimal": 8 - }, - { - "address": "0x8d80de8A78198396329dfA769aD54d24bF90E7aa", - "symbol": "NAC", - "decimal": 18 - }, - { - "address": "0xFFE02ee4C69eDf1b340fCaD64fbd6b37a7b9e265", - "symbol": "NANJ", - "decimal": 8 - }, - { - "address": "0x5d65D971895Edc438f465c17DB6992698a52318D", - "symbol": "NAS", - "decimal": 18 - }, - { - "address": "0x588047365dF5BA589F923604AAC23d673555c623", - "symbol": "NAVI", - "decimal": 18 - }, - { - "address": "0x17f8aFB63DfcDcC90ebE6e84F060Cc306A98257D", - "symbol": "NBAI", - "decimal": 18 - }, - { - "address": "0x9F195617fA8fbAD9540C5D113A99A0a0172aaEDC", - "symbol": "NBC", - "decimal": 18 - }, - { - "address": "0x809826cceAb68c387726af962713b64Cb5Cb3CCA", - "symbol": "NCASH", - "decimal": 18 - }, - { - "address": "0x5d48F293BaED247A2D0189058bA37aa238bD4725", - "symbol": "NCC", - "decimal": 18 - }, - { - "address": "0x9344b383b1D59b5ce3468B234DAB43C7190ba735", - "symbol": "NCC (1)", - "decimal": 18 - }, - { - "address": "0x9E46A38F5DaaBe8683E10793b06749EEF7D733d1", - "symbol": "NCT", - "decimal": 18 - }, - { - "address": "0xA54ddC7B3CcE7FC8b1E3Fa0256D0DB80D2c10970", - "symbol": "NDC", - "decimal": 18 - }, - { - "address": "0x1966d718A565566e8E202792658D7b5Ff4ECe469", - "symbol": "NDX", - "decimal": 18 - }, - { - "address": "0xCc80C051057B774cD75067Dc48f8987C4Eb97A5e", - "symbol": "NEC", - "decimal": 18 - }, - { - "address": "0xd8446236FA95b9b5f9fd0f8E7Df1a944823c683d", - "symbol": "NEEO", - "decimal": 18 - }, - { - "address": "0xcfb98637bcae43C13323EAa1731cED2B716962fD", - "symbol": "NET", - "decimal": 18 - }, - { - "address": "0xA823E6722006afe99E91c30FF5295052fe6b8E32", - "symbol": "NEU", - "decimal": 18 - }, - { - "address": "0x814964b1bceAf24e26296D031EaDf134a2Ca4105", - "symbol": "NEWB", - "decimal": 0 - }, - { - "address": "0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206", - "symbol": "NEXO", - "decimal": 18 - }, - { - "address": "0x72dD4b6bd852A3AA172Be4d6C5a6dbEc588cf131", - "symbol": "NGC", - "decimal": 18 - }, - { - "address": "0xe26517A9967299453d3F1B48Aa005E6127e67210", - "symbol": "NIMFA", - "decimal": 18 - }, - { - "address": "0x5554e04e76533E1d14c52f05beEF6c9d329E1E30", - "symbol": "NIO", - "decimal": 0 - }, - { - "address": "0xCc2AD789f459Bc73e5Fb33364964B658a62C1Ee7", - "symbol": "NIO (1)", - "decimal": 8 - }, - { - "address": "0xCeE4019Fd41ECDc8bae9EFDd20510f4b6FAA6197", - "symbol": "NLYA", - "decimal": 18 - }, - { - "address": "0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671", - "symbol": "NMR", - "decimal": 18 - }, - { - "address": "0x58a4884182d9E835597f405e5F258290E46ae7C2", - "symbol": "NOAH", - "decimal": 18 - }, - { - "address": "0xF4FaEa455575354d2699BC209B0a65CA99F69982", - "symbol": "NOBS", - "decimal": 18 - }, - { - "address": "0x643B6870beabee941B9260a0A878bcF4A61Fb0f1", - "symbol": "NONE", - "decimal": 0 - }, - { - "address": "0xeC46f8207D766012454c408De210BCBc2243E71c", - "symbol": "NOX", - "decimal": 18 - }, - { - "address": "0x4cE6B362Bc77A24966Dda9078f9cEF81b3B886a7", - "symbol": "NPER", - "decimal": 18 - }, - { - "address": "0x28b5E12CcE51f15594B0b91d5b5AdaA70F684a02", - "symbol": "NPX", - "decimal": 2 - }, - { - "address": "0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3", - "symbol": "NPXS", - "decimal": 18 - }, - { - "address": "0x000000085824F23a070c2474442ED014c0e46B58", - "symbol": "NRM", - "decimal": 18 - }, - { - "address": "0x5D4d57cd06Fa7fe99e26fdc481b468f77f05073C", - "symbol": "NTK", - "decimal": 18 - }, - { - "address": "0x69BEaB403438253f13b6e92Db91F7FB849258263", - "symbol": "NTK (1)", - "decimal": 18 - }, - { - "address": "0x8A99ED8a1b204903Ee46e733f2c1286F6d20b177", - "symbol": "NTO", - "decimal": 18 - }, - { - "address": "0x2233799Ee2683d75dfefAcbCd2A26c78D34b470d", - "symbol": "NTWK", - "decimal": 18 - }, - { - "address": "0x245ef47D4d0505ECF3Ac463F4d81f41ADE8f1fd1", - "symbol": "NUG", - "decimal": 18 - }, - { - "address": "0xB91318F35Bdb262E9423Bc7c7c2A3A93DD93C92C", - "symbol": "NULS", - "decimal": 18 - }, - { - "address": "0x0C6144c16af288948C8fdB37fD8fEc94bfF3d1d9", - "symbol": "NUSD", - "decimal": 6 - }, - { - "address": "0x45e42D659D9f9466cD5DF622506033145a9b89Bc", - "symbol": "NxC", - "decimal": 3 - }, - { - "address": "0x7627de4B93263a6a7570b8dAfa64bae812e5c394", - "symbol": "NXX", - "decimal": 8 - }, - { - "address": "0x5c6183d10A00CD747a6Dbb5F658aD514383e9419", - "symbol": "NXX OLD", - "decimal": 8 - }, - { - "address": "0x5e888B83B7287EED4fB7DA7b7d0A0D4c735d94b3", - "symbol": "OAK", - "decimal": 18 - }, - { - "address": "0x701C244b988a513c945973dEFA05de933b23Fe1D", - "symbol": "OAX", - "decimal": 18 - }, - { - "address": "0x0235fE624e044A05eeD7A43E16E3083bc8A4287A", - "symbol": "OCC", - "decimal": 18 - }, - { - "address": "0x4092678e4E78230F46A1534C0fbc8fA39780892B", - "symbol": "OCN", - "decimal": 18 - }, - { - "address": "0xbf52F2ab39e26E0951d2a02b49B7702aBe30406a", - "symbol": "ODE", - "decimal": 18 - }, - { - "address": "0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26", - "symbol": "OGN", - "decimal": 18 - }, - { - "address": "0x6f539a9456A5BCb6334A1A41207c3788f5825207", - "symbol": "OHNI", - "decimal": 18 - }, - { - "address": "0x7F2176cEB16dcb648dc924eff617c3dC2BEfd30d", - "symbol": "OHNI (1)", - "decimal": 0 - }, - { - "address": "0x21E13cB3F3F26f92A62ac7Adab4093e8997D1fb1", - "symbol": "OIKOS", - "decimal": 2 - }, - { - "address": "0xBeef546ac8a4e0a80DC1E2d696968Ef54138f1d4", - "symbol": "OJX", - "decimal": 18 - }, - { - "address": "0xC66eA802717bFb9833400264Dd12c2bCeAa34a6d", - "symbol": "OLD_MKR", - "decimal": 18 - }, - { - "address": "0x3618516F45CD3c913F81F9987AF41077932Bc40d", - "symbol": "OLDPCL", - "decimal": 8 - }, - { - "address": "0x9d9223436dDD466FC247e9dbbD20207e640fEf58", - "symbol": "OLE", - "decimal": 18 - }, - { - "address": "0x64A60493D888728Cf42616e034a0dfEAe38EFCF0", - "symbol": "OLT", - "decimal": 18 - }, - { - "address": "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07", - "symbol": "OMG", - "decimal": 18 - }, - { - "address": "0x047187e53477be70DBe8Ea5B799318f2e165052F", - "symbol": "OMT", - "decimal": 18 - }, - { - "address": "0xB5DBC6D3cf380079dF3b27135664b6BCF45D1869", - "symbol": "OMX", - "decimal": 8 - }, - { - "address": "0x4D807509aECe24C0fa5A102b6a3B059Ec6E14392", - "symbol": "ONE", - "decimal": 18 - }, - { - "address": "0xB23be73573bC7E03DB6e5dfc62405368716d28a8", - "symbol": "ONEK", - "decimal": 18 - }, - { - "address": "0xd341d1680Eeee3255b8C4c75bCCE7EB57f144dAe", - "symbol": "ONG", - "decimal": 18 - }, - { - "address": "0x6863bE0e7CF7ce860A574760e9020D519a8bDC47", - "symbol": "ONL", - "decimal": 18 - }, - { - "address": "0xB31C219959E06f9aFBeB36b388a4BaD13E802725", - "symbol": "ONOT", - "decimal": 18 - }, - { - "address": "0x69c4BB240cF05D51eeab6985Bab35527d04a8C64", - "symbol": "OPEN", - "decimal": 8 - }, - { - "address": "0xe9dE1C630753A15d7021Cc563429c21d4887506F", - "symbol": "OPEN (1)", - "decimal": 8 - }, - { - "address": "0x77599D2C6DB170224243e255e6669280F11F1473", - "symbol": "OPQ", - "decimal": 18 - }, - { - "address": "0x4355fC160f74328f9b383dF2EC589bB3dFd82Ba0", - "symbol": "OPT", - "decimal": 18 - }, - { - "address": "0x832904863978b94802123106e6eB491BDF0Df928", - "symbol": "OPTI", - "decimal": 18 - }, - { - "address": "0xff56Cc6b1E6dEd347aA0B7676C85AB0B3D08B0FA", - "symbol": "ORBS", - "decimal": 18 - }, - { - "address": "0x6F59e0461Ae5E2799F1fB3847f05a63B16d0DbF8", - "symbol": "ORCA", - "decimal": 18 - }, - { - "address": "0xd2Fa8f92Ea72AbB35dBD6DECa57173d22db2BA49", - "symbol": "ORI", - "decimal": 18 - }, - { - "address": "0x516E5436bAfdc11083654DE7Bb9b95382d08d5DE", - "symbol": "ORME", - "decimal": 8 - }, - { - "address": "0xc96DF921009B790dfFcA412375251ed1A2b75c60", - "symbol": "ORME (1)", - "decimal": 8 - }, - { - "address": "0xEB9A4B185816C354dB92DB09cC3B50bE60b901b6", - "symbol": "ORS", - "decimal": 18 - }, - { - "address": "0x4e84A65B5664D33B67750771F8bEAeC458bD6729", - "symbol": "ORX", - "decimal": 18 - }, - { - "address": "0x2C4e8f2D746113d0696cE89B35F0d8bF88E0AEcA", - "symbol": "OST", - "decimal": 18 - }, - { - "address": "0x881Ef48211982D01E2CB7092C915E647Cd40D85C", - "symbol": "OTN", - "decimal": 18 - }, - { - "address": "0x170b275CEd089FffAEBFe927F445a350ED9160DC", - "symbol": "OWN", - "decimal": 8 - }, - { - "address": "0xC2494604e9DcEfa2A70dCEbf81e6D7BE064a334e", - "symbol": "OWT", - "decimal": 18 - }, - { - "address": "0x65A15014964F2102Ff58647e16a16a6B9E14bCF6", - "symbol": "Ox Fina", - "decimal": 3 - }, - { - "address": "0x4527a3B4A8A150403090a99b87efFC96F2195047", - "symbol": "P2PS", - "decimal": 8 - }, - { - "address": "0xB9bb08AB7E9Fa0A1356bd4A39eC0ca267E03b0b3", - "symbol": "PAI", - "decimal": 18 - }, - { - "address": "0xfeDAE5642668f8636A11987Ff386bfd215F942EE", - "symbol": "PAL", - "decimal": 18 - }, - { - "address": "0xea5f88E54d982Cbb0c441cde4E79bC305e5b43Bc", - "symbol": "PARETO", - "decimal": 18 - }, - { - "address": "0x77761e63C05aeE6648FDaeaa9B94248351AF9bCd", - "symbol": "PASS", - "decimal": 18 - }, - { - "address": "0xeE4458e052B533b1aABD493B5f8c4d85D7B263Dc", - "symbol": "PASS (1)", - "decimal": 6 - }, - { - "address": "0xF3b3Cad094B89392fcE5faFD40bC03b80F2Bc624", - "symbol": "PAT", - "decimal": 18 - }, - { - "address": "0x694404595e3075A942397F466AAcD462FF1a7BD0", - "symbol": "PATENTS", - "decimal": 18 - }, - { - "address": "0xF813F3902bBc00A6DCe378634d3B79D84F9803d7", - "symbol": "PATH", - "decimal": 18 - }, - { - "address": "0x9FbA684D77D2d6A1408C24b60A1f5534e71f5b75", - "symbol": "PATR", - "decimal": 18 - }, - { - "address": "0x8E870D67F660D95d5be530380D0eC0bd388289E1", - "symbol": "PAX", - "decimal": 18 - }, - { - "address": "0xB97048628DB6B661D4C2aA833e95Dbe1A905B280", - "symbol": "PAY", - "decimal": 18 - }, - { - "address": "0x55648De19836338549130B1af587F16beA46F66B", - "symbol": "PBL", - "decimal": 18 - }, - { - "address": "0xF4c07b1865bC326A3c01339492Ca7538FD038Cc0", - "symbol": "PBT", - "decimal": 4 - }, - { - "address": "0xE3F4b4A5d91e5cB9435B947F090A319737036312", - "symbol": "PCH", - "decimal": 18 - }, - { - "address": "0xfcAC7A7515e9A9d7619fA77A1fa738111f66727e", - "symbol": "PCH (1)", - "decimal": 18 - }, - { - "address": "0x0F02e27745e3b6e9e1310d19469e2b5D7B5eC99A", - "symbol": "PCL", - "decimal": 8 - }, - { - "address": "0x53148Bb4551707edF51a1e8d7A93698d18931225", - "symbol": "PCLOLD", - "decimal": 8 - }, - { - "address": "0x0db03B6CDe0B2d427C64a04FeAfd825938368f1F", - "symbol": "PDATA", - "decimal": 18 - }, - { - "address": "0x8Ae56a6850a7cbeaC3c3Ab2cB311e7620167eAC8", - "symbol": "PEG", - "decimal": 18 - }, - { - "address": "0xBb0eF9e617FADdf54B8D16e29046F72B4D3ec77F", - "symbol": "PEP", - "decimal": 18 - }, - { - "address": "0x30FEF258d2728F9d1eDF038059c725FAf785697E", - "symbol": "PESO", - "decimal": 2 - }, - { - "address": "0x5884969Ec0480556E11d119980136a4C17eDDEd1", - "symbol": "PET", - "decimal": 18 - }, - { - "address": "0xf53AD2c6851052A81B42133467480961B2321C09", - "symbol": "PETH", - "decimal": 18 - }, - { - "address": "0xeC18f898B4076A3E18f1089D33376CC380BDe61D", - "symbol": "PETRO", - "decimal": 18 - }, - { - "address": "0x55c2A0C171D920843560594dE3d6EEcC09eFc098", - "symbol": "PEXT", - "decimal": 4 - }, - { - "address": "0x2FA32a39fc1c399E0Cc7B2935868f5165De7cE97", - "symbol": "PFR", - "decimal": 8 - }, - { - "address": "0x13C2fab6354d3790D8ece4f0f1a3280b4A25aD96", - "symbol": "PHI", - "decimal": 18 - }, - { - "address": "0xE64509F0bf07ce2d29A7eF19A8A9bc065477C1B4", - "symbol": "PIPL", - "decimal": 8 - }, - { - "address": "0x0fF161071e627A0E6de138105C73970F86ca7922", - "symbol": "PIT", - "decimal": 18 - }, - { - "address": "0x8eFFd494eB698cc399AF6231fCcd39E08fd20B15", - "symbol": "PIX", - "decimal": 0 - }, - { - "address": "0x02F2D4a04E6E01aCE88bD2Cd632875543b2eF577", - "symbol": "PKG", - "decimal": 18 - }, - { - "address": "0x2604FA406Be957E542BEb89E6754fCdE6815e83f", - "symbol": "PKT", - "decimal": 18 - }, - { - "address": "0x59416A25628A76b4730eC51486114c32E0B582A1", - "symbol": "PLASMA", - "decimal": 6 - }, - { - "address": "0xE477292f1B3268687A29376116B0ED27A9c76170", - "symbol": "PLAY", - "decimal": 18 - }, - { - "address": "0x0AfFa06e7Fbe5bC9a764C979aA66E8256A631f02", - "symbol": "PLBT", - "decimal": 6 - }, - { - "address": "0xe3818504c1B32bF1557b16C238B2E01Fd3149C17", - "symbol": "PLR", - "decimal": 18 - }, - { - "address": "0xe43ac1714F7394173b15E7CfF31A63d523Ce4fB9", - "symbol": "PLS", - "decimal": 18 - }, - { - "address": "0xD8912C10681D8B21Fd3742244f44658dBA12264E", - "symbol": "PLU", - "decimal": 18 - }, - { - "address": "0x846C66cf71C43f80403B51fE3906B3599D63336f", - "symbol": "PMA", - "decimal": 18 - }, - { - "address": "0x81b4D08645DA11374a03749AB170836E4e539767", - "symbol": "PMNT", - "decimal": 9 - }, - { - "address": "0x93ED3FBe21207Ec2E8f2d3c3de6e058Cb73Bc04d", - "symbol": "PNK", - "decimal": 18 - }, - { - "address": "0x6758B7d441a9739b98552B373703d8d3d14f9e62", - "symbol": "POA20", - "decimal": 18 - }, - { - "address": "0x0e0989b1f9B8A38983c2BA8053269Ca62Ec9B195", - "symbol": "POE", - "decimal": 8 - }, - { - "address": "0x43F6a1BE992deE408721748490772B15143CE0a7", - "symbol": "POIN", - "decimal": 0 - }, - { - "address": "0x705EE96c1c160842C92c1aeCfCFfccc9C412e3D9", - "symbol": "POLL", - "decimal": 18 - }, - { - "address": "0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC", - "symbol": "POLY", - "decimal": 18 - }, - { - "address": "0x779B7b713C86e3E6774f5040D9cCC2D43ad375F8", - "symbol": "POOL", - "decimal": 8 - }, - { - "address": "0x5D858bcd53E085920620549214a8b27CE2f04670", - "symbol": "POP", - "decimal": 18 - }, - { - "address": "0xEe609fE292128Cad03b786DBb9Bc2634Ccdbe7fC", - "symbol": "POS", - "decimal": 18 - }, - { - "address": "0x595832F8FC6BF59c85C527fEC3740A1b7a361269", - "symbol": "POWR", - "decimal": 6 - }, - { - "address": "0xc42209aCcC14029c1012fB5680D95fBd6036E2a0", - "symbol": "PPP", - "decimal": 18 - }, - { - "address": "0xd4fa1460F537bb9085d22C7bcCB5DD450Ef28e3a", - "symbol": "PPT", - "decimal": 8 - }, - { - "address": "0x88A3E4F35D64aAD41A6d4030ac9AFE4356cB84fA", - "symbol": "PRE", - "decimal": 18 - }, - { - "address": "0x7728dFEF5aBd468669EB7f9b48A7f70a501eD29D", - "symbol": "PRG", - "decimal": 6 - }, - { - "address": "0x3ADfc4999F77D04c8341BAC5F3A76f58DfF5B37A", - "symbol": "PRIX", - "decimal": 8 - }, - { - "address": "0x1844b21593262668B7248d0f57a220CaaBA46ab9", - "symbol": "PRL", - "decimal": 18 - }, - { - "address": "0x226bb599a12C826476e3A771454697EA52E9E220", - "symbol": "PRO", - "decimal": 8 - }, - { - "address": "0x9041Fe5B3FDEA0f5e4afDC17e75180738D877A01", - "symbol": "PRO (1)", - "decimal": 18 - }, - { - "address": "0xA3149E0fA0061A9007fAf307074cdCd290f0e2Fd", - "symbol": "PRON", - "decimal": 8 - }, - { - "address": "0x6fe56C0bcdD471359019FcBC48863d6c3e9d4F41", - "symbol": "PROPS", - "decimal": 18 - }, - { - "address": "0x7641b2Ca9DDD58adDf6e3381c1F994Aac5f1A32f", - "symbol": "PRPS", - "decimal": 18 - }, - { - "address": "0xE40C374d8805b1dD58CDcEFf998A2F6920Cb52FD", - "symbol": "PRPS (1)", - "decimal": 18 - }, - { - "address": "0xd94F2778e2B3913C53637Ae60647598bE588c570", - "symbol": "PRPS (2)", - "decimal": 18 - }, - { - "address": "0x163733bcc28dbf26B41a8CfA83e369b5B3af741b", - "symbol": "PRS", - "decimal": 18 - }, - { - "address": "0x0C04d4f331DA8dF75f9E2e271E3f3F1494C66C36", - "symbol": "PRSP", - "decimal": 9 - }, - { - "address": "0x5d4ABC77B8405aD177d8ac6682D584ecbFd46CEc", - "symbol": "PST", - "decimal": 18 - }, - { - "address": "0x66497A283E0a007bA3974e837784C6AE323447de", - "symbol": "PT", - "decimal": 18 - }, - { - "address": "0x2a8E98e256f32259b5E5Cb55Dd63C8e891950666", - "symbol": "PTC", - "decimal": 18 - }, - { - "address": "0x4946583c5b86E01cCD30c71a05617D06E3E73060", - "symbol": "PTON", - "decimal": 18 - }, - { - "address": "0x8Ae4BF2C33a8e667de34B54938B0ccD03Eb8CC06", - "symbol": "PTOY", - "decimal": 8 - }, - { - "address": "0x4689a4e169eB39cC9078C0940e21ff1Aa8A39B9C", - "symbol": "PTT", - "decimal": 18 - }, - { - "address": "0x5512e1D6A7BE424b4323126B4f9E86D023F95764", - "symbol": "PTWO", - "decimal": 18 - }, - { - "address": "0xEf6B4cE8C9Bc83744fbcdE2657b32eC18790458A", - "symbol": "PUC", - "decimal": 0 - }, - { - "address": "0xe25ff6Eb959BCE67975778e46A47750C243B6B99", - "symbol": "PURC", - "decimal": 18 - }, - { - "address": "0x47e67BA66b0699500f18A53F94E2b9dB3D47437e", - "symbol": "PXG", - "decimal": 18 - }, - { - "address": "0xc14830E53aA344E8c14603A91229A0b925b0B262", - "symbol": "PXT", - "decimal": 8 - }, - { - "address": "0x7703C35CfFdC5CDa8D27aa3df2F9ba6964544b6e", - "symbol": "PYLNT", - "decimal": 18 - }, - { - "address": "0x618E75Ac90b12c6049Ba3b27f5d5F8651b0037F6", - "symbol": "QASH", - "decimal": 6 - }, - { - "address": "0x671AbBe5CE652491985342e85428EB1b07bC6c64", - "symbol": "QAU", - "decimal": 8 - }, - { - "address": "0x1602af2C782cC03F9241992E243290Fccf73Bb13", - "symbol": "QBIT", - "decimal": 18 - }, - { - "address": "0xCb5ea3c190d8f82DEADF7ce5Af855dDbf33e3962", - "symbol": "QBIT (1)", - "decimal": 6 - }, - { - "address": "0x2467AA6B5A2351416fD4C3DeF8462d841feeecEC", - "symbol": "QBX", - "decimal": 18 - }, - { - "address": "0xEA26c4aC16D4a5A106820BC8AEE85fd0b7b2b664", - "symbol": "QKC", - "decimal": 18 - }, - { - "address": "0x4a220E6096B25EADb88358cb44068A3248254675", - "symbol": "QNT", - "decimal": 18 - }, - { - "address": "0xFFAA5ffc455d9131f8A2713A741fD1960330508B", - "symbol": "QRG", - "decimal": 18 - }, - { - "address": "0x697beac28B09E122C4332D163985e8a73121b97F", - "symbol": "QRL", - "decimal": 8 - }, - { - "address": "0x99ea4dB9EE77ACD40B119BD1dC4E33e1C070b80d", - "symbol": "QSP", - "decimal": 18 - }, - { - "address": "0x2C3C1F05187dBa7A5f2Dd47Dca57281C4d4F183F", - "symbol": "QTQ", - "decimal": 18 - }, - { - "address": "0x9a642d6b3368ddc662CA244bAdf32cDA716005BC", - "symbol": "QTUM", - "decimal": 18 - }, - { - "address": "0x264Dc2DedCdcbb897561A57CBa5085CA416fb7b4", - "symbol": "QUN", - "decimal": 18 - }, - { - "address": "0x1183F92A5624D68e85FFB9170F16BF0443B4c242", - "symbol": "QVT", - "decimal": 18 - }, - { - "address": "0x48f775EFBE4F5EcE6e0DF2f7b5932dF56823B990", - "symbol": "R", - "decimal": 0 - }, - { - "address": "0xE5a3229CCb22b6484594973A03a3851dCd948756", - "symbol": "RAE", - "decimal": 18 - }, - { - "address": "0x45eDb535942a8C84D9f4b5D37e1b25F91Ea4804c", - "symbol": "RAO", - "decimal": 18 - }, - { - "address": "0xE8663A64A96169ff4d95b4299E7ae9a76b905B31", - "symbol": "RATING", - "decimal": 8 - }, - { - "address": "0xFc2C4D8f95002C14eD0a7aA65102Cac9e5953b5E", - "symbol": "RBLX", - "decimal": 18 - }, - { - "address": "0xF970b8E36e23F7fC3FD752EeA86f8Be8D83375A6", - "symbol": "RCN", - "decimal": 18 - }, - { - "address": "0x13f25cd52b21650caa8225C9942337d914C9B030", - "symbol": "RCT", - "decimal": 18 - }, - { - "address": "0x2a3Aa9ECA41E720Ed46B5A70D6C37EfA47f768Ac", - "symbol": "RCT (1)", - "decimal": 18 - }, - { - "address": "0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6", - "symbol": "RDN", - "decimal": 18 - }, - { - "address": "0x767bA2915EC344015a7938E3eEDfeC2785195D05", - "symbol": "REA", - "decimal": 18 - }, - { - "address": "0x9214eC02CB71CbA0ADA6896b8dA260736a67ab10", - "symbol": "REAL", - "decimal": 18 - }, - { - "address": "0x5F53f7A8075614b699Baad0bC2c899f4bAd8FBBF", - "symbol": "REBL", - "decimal": 18 - }, - { - "address": "0x76960Dccd5a1fe799F7c29bE9F19ceB4627aEb2f", - "symbol": "RED", - "decimal": 18 - }, - { - "address": "0xB563300A3BAc79FC09B93b6F84CE0d4465A2AC27", - "symbol": "REDC", - "decimal": 18 - }, - { - "address": "0x89303500a7Abfb178B274FD89F2469C264951e1f", - "symbol": "REF", - "decimal": 8 - }, - { - "address": "0x83984d6142934bb535793A82ADB0a46EF0F66B6d", - "symbol": "REM", - "decimal": 4 - }, - { - "address": "0x13cb85823f78Cff38f0B0E90D3e975b8CB3AAd64", - "symbol": "REMI", - "decimal": 18 - }, - { - "address": "0x408e41876cCCDC0F92210600ef50372656052a38", - "symbol": "REN", - "decimal": 18 - }, - { - "address": "0x1985365e9f78359a9B6AD760e32412f4a445E862", - "symbol": "REP", - "decimal": 18 - }, - { - "address": "0x8f8221aFbB33998d8584A2B05749bA73c37a938a", - "symbol": "REQ", - "decimal": 18 - }, - { - "address": "0xf05a9382A4C3F29E2784502754293D88b835109C", - "symbol": "REX", - "decimal": 18 - }, - { - "address": "0xd0929d411954c47438dc1d871dd6081F5C5e149c", - "symbol": "RFR", - "decimal": 4 - }, - { - "address": "0xf4c571fb6DD704E58561Cdd275fa4B80cFe82f76", - "symbol": "RFX", - "decimal": 8 - }, - { - "address": "0x4c383bDCae52a6e1cb810C76C70d6f31A249eC9B", - "symbol": "RGS", - "decimal": 8 - }, - { - "address": "0x168296bb09e24A88805CB9c33356536B980D3fC5", - "symbol": "RHOC", - "decimal": 8 - }, - { - "address": "0x86E56f3c89a14528858e58B3De48c074538BAf2c", - "symbol": "RING", - "decimal": 18 - }, - { - "address": "0x9469D013805bFfB7D3DEBe5E7839237e535ec483", - "symbol": "RING (1)", - "decimal": 18 - }, - { - "address": "0xdd007278B667F6bef52fD0a4c23604aA1f96039a", - "symbol": "RIPT", - "decimal": 8 - }, - { - "address": "0x0b1724cc9FDA0186911EF6a75949e9c0d3F0f2F3", - "symbol": "RIYA", - "decimal": 8 - }, - { - "address": "0x106Aa49295B525fcf959aA75eC3f7dCbF5352f1C", - "symbol": "RKT", - "decimal": 18 - }, - { - "address": "0x607F4C5BB672230e8672085532f7e901544a7375", - "symbol": "RLC", - "decimal": 9 - }, - { - "address": "0xcCeD5B8288086BE8c38E23567e684C3740be4D48", - "symbol": "RLT", - "decimal": 10 - }, - { - "address": "0xbe99B09709fc753b09BCf557A992F6605D5997B0", - "symbol": "RLTY", - "decimal": 8 - }, - { - "address": "0x4A42d2c580f83dcE404aCad18dab26Db11a1750E", - "symbol": "RLX", - "decimal": 18 - }, - { - "address": "0x7Dc4f41294697a7903C4027f6Ac528C5d14cd7eB", - "symbol": "RMC", - "decimal": 8 - }, - { - "address": "0x8D5682941cE456900b12d47ac06a88b47C764CE1", - "symbol": "RMESH", - "decimal": 18 - }, - { - "address": "0x0996bFb5D057faa237640E2506BE7B4f9C46de0B", - "symbol": "RNDR", - "decimal": 18 - }, - { - "address": "0xFF603F43946A3A28DF5E6A73172555D8C8b02386", - "symbol": "RNT", - "decimal": 18 - }, - { - "address": "0x1FE70bE734e473e5721ea57C8B5B01e6Caa52686", - "symbol": "RNTB", - "decimal": 18 - }, - { - "address": "0x1BcBc54166F6bA149934870b60506199b6C9dB6D", - "symbol": "ROC", - "decimal": 10 - }, - { - "address": "0xA40106134c5bF4c41411554e6db99B95A15ed9d8", - "symbol": "ROCK", - "decimal": 18 - }, - { - "address": "0xC16b542ff490e01fcc0DC58a60e1EFdc3e357cA6", - "symbol": "ROCK2", - "decimal": 0 - }, - { - "address": "0x0E3de3B0E3D617FD8D1D8088639bA877feb4d742", - "symbol": "ROCK2PAY", - "decimal": 18 - }, - { - "address": "0xc9De4B7F0C3d991e967158E4D4bFA4b51Ec0b114", - "symbol": "ROK", - "decimal": 18 - }, - { - "address": "0x4993CB95c7443bdC06155c5f5688Be9D8f6999a5", - "symbol": "ROUND", - "decimal": 18 - }, - { - "address": "0xCcc85AA8999505d6f886A32da4a107BBe0D1dE9E", - "symbol": "RPE", - "decimal": 18 - }, - { - "address": "0xB4EFd85c19999D84251304bDA99E90B92300Bd93", - "symbol": "RPL", - "decimal": 18 - }, - { - "address": "0xEC491c1088Eae992B7A214efB0a266AD0927A72A", - "symbol": "RTB", - "decimal": 18 - }, - { - "address": "0x7A5599B97E8c4abB5dd06EBA0E9d1F75AF818DB9", - "symbol": "RTC", - "decimal": 18 - }, - { - "address": "0x3FD8f39A962eFDA04956981C31AB89FAB5FB8bC8", - "symbol": "RTH", - "decimal": 18 - }, - { - "address": "0x54b293226000ccBFC04DF902eEC567CB4C35a903", - "symbol": "RTN", - "decimal": 18 - }, - { - "address": "0xf278c1CA969095ffddDED020290cf8B5C424AcE2", - "symbol": "RUFF", - "decimal": 18 - }, - { - "address": "0xdEE02D94be4929d26f67B64Ada7aCf1914007F10", - "symbol": "RUNE", - "decimal": 18 - }, - { - "address": "0x41f615E24fAbd2b097a320E9E6c1f448cb40521c", - "symbol": "RVL", - "decimal": 18 - }, - { - "address": "0x3d1BA9be9f66B8ee101911bC36D3fB562eaC2244", - "symbol": "RVT", - "decimal": 18 - }, - { - "address": "0xd30a2e9347Ad48Ea208ee563a9CdfD80E962a727", - "symbol": "RYLT", - "decimal": 18 - }, - { - "address": "0x1EC8fE51a9B6A3a6C427D17d9ECC3060fbc4a45c", - "symbol": "S-A-PAT", - "decimal": 18 - }, - { - "address": "0x3eb91D237e491E0DEE8582c402D85CB440fb6b54", - "symbol": "S-ETH", - "decimal": 18 - }, - { - "address": "0xabC1280A0187a2020cC675437aed400185F86Db6", - "symbol": "SAC", - "decimal": 18 - }, - { - "address": "0x4156D3342D5c385a87D264F90653733592000581", - "symbol": "SALT", - "decimal": 8 - }, - { - "address": "0x7C5A0CE9267ED19B22F8cae653F198e3E8daf098", - "symbol": "SAN", - "decimal": 18 - }, - { - "address": "0x78fE18e41f436e1981a3a60D1557c8a7a9370461", - "symbol": "SCANDI", - "decimal": 2 - }, - { - "address": "0xd7631787B4dCc87b1254cfd1e5cE48e96823dEe8", - "symbol": "SCL", - "decimal": 8 - }, - { - "address": "0x24DCc881E7Dd730546834452F21872D5cb4b5293", - "symbol": "SCRL", - "decimal": 18 - }, - { - "address": "0xB1eeF147028E9f480DbC5ccaA3277D417D1b85F0", - "symbol": "SEELE", - "decimal": 18 - }, - { - "address": "0x67ab11058eF23D0a19178f61A050D3c38F81Ae21", - "symbol": "SELF", - "decimal": 18 - }, - { - "address": "0xA13f0743951B4f6E3e3AA039f682E17279f52bc3", - "symbol": "SENC", - "decimal": 18 - }, - { - "address": "0x4cA74185532DC1789527194e5B9c866dD33F4E82", - "symbol": "SenSatorI", - "decimal": 18 - }, - { - "address": "0x6745fAB6801e376cD24F03572B9C9B0D4EdDDCcf", - "symbol": "SENSE", - "decimal": 8 - }, - { - "address": "0xa44E5137293E855B1b7bC7E2C6f8cD796fFCB037", - "symbol": "SENT", - "decimal": 8 - }, - { - "address": "0xe06eda7435bA749b047380CEd49121ddE93334Ae", - "symbol": "SET", - "decimal": 0 - }, - { - "address": "0x98F5e9b7F0e33956C0443E81bF7deB8B5b1ed545", - "symbol": "SEXY", - "decimal": 18 - }, - { - "address": "0xa1ccc166faf0E998b3E33225A1A0301B1C86119D", - "symbol": "SGEL", - "decimal": 18 - }, - { - "address": "0xB2135AB9695a7678Dd590B1A996CB0f37BCB0718", - "symbol": "SGN", - "decimal": 9 - }, - { - "address": "0x33C623a2BAAfEb8D15DfaF3cE44095efec83D72C", - "symbol": "SGP", - "decimal": 18 - }, - { - "address": "0xCB5A05beF3257613E984C17DbcF039952B6d883F", - "symbol": "SGR", - "decimal": 8 - }, - { - "address": "0x37427576324fE1f3625c9102674772d7CF71377d", - "symbol": "SGT", - "decimal": 18 - }, - { - "address": "0xd248B0D48E44aaF9c49aea0312be7E13a6dc1468", - "symbol": "SGT (1)", - "decimal": 1 - }, - { - "address": "0xe25b0BBA01Dc5630312B6A21927E578061A13f55", - "symbol": "SHIP", - "decimal": 18 - }, - { - "address": "0xEF2E9966eb61BB494E5375d5Df8d67B7dB8A780D", - "symbol": "SHIT", - "decimal": 0 - }, - { - "address": "0x8542325B72C6D9fC0aD2Ca965A78435413a915A0", - "symbol": "SHL", - "decimal": 18 - }, - { - "address": "0xEF2463099360a085f1f10b076Ed72Ef625497a06", - "symbol": "SHP", - "decimal": 18 - }, - { - "address": "0x980E45AB37c6bcAF93Fe911b3e207e08a3a60B5E", - "symbol": "SIBU", - "decimal": 2 - }, - { - "address": "0x8a187D5285d316bcBC9ADafc08b51d70a0d8e000", - "symbol": "SIFT", - "decimal": 0 - }, - { - "address": "0x6888a16eA9792c15A4DCF2f6C623D055c8eDe792", - "symbol": "SIG", - "decimal": 18 - }, - { - "address": "0x4aF328C52921706dCB739F25786210499169AFe6", - "symbol": "SKB", - "decimal": 8 - }, - { - "address": "0x13DB74B3cf512F65C4b91683940B4f3955E05085", - "symbol": "SKE", - "decimal": 8 - }, - { - "address": "0x2bDC0D42996017fCe214b21607a515DA41A9E0C5", - "symbol": "SKIN", - "decimal": 6 - }, - { - "address": "0x048Fe49BE32adfC9ED68C37D32B5ec9Df17b3603", - "symbol": "SKM", - "decimal": 18 - }, - { - "address": "0xd99b8A7fA48E25Cce83B81812220A3E03Bf64e5f", - "symbol": "SKM (1)", - "decimal": 18 - }, - { - "address": "0x4994e81897a920c0FEA235eb8CEdEEd3c6fFF697", - "symbol": "SKO1", - "decimal": 18 - }, - { - "address": "0x4c382F8E09615AC86E08CE58266CC227e7d4D913", - "symbol": "SKR", - "decimal": 6 - }, - { - "address": "0x324A48eBCbB46e61993931eF9D35F6697CD2901b", - "symbol": "SKRP", - "decimal": 18 - }, - { - "address": "0x6E34d8d84764D40f6D7b39cd569Fd017bF53177D", - "symbol": "SKRP (1)", - "decimal": 18 - }, - { - "address": "0xfdFE8b7aB6CF1bD1E3d14538Ef40686296C42052", - "symbol": "SKRP (2)", - "decimal": 18 - }, - { - "address": "0x7297862B9670fF015192799cc849726c88bf1d77", - "symbol": "SKYM", - "decimal": 18 - }, - { - "address": "0x7A5fF295Dc8239d5C2374E4D894202aAF029Cab6", - "symbol": "SLT", - "decimal": 3 - }, - { - "address": "0x7928c8aBF1F74eF9F96D4D0a44e3b4209d360785", - "symbol": "SLY", - "decimal": 18 - }, - { - "address": "0x6F6DEb5db0C4994A8283A01D6CFeEB27Fc3bBe9C", - "symbol": "SMART", - "decimal": 0 - }, - { - "address": "0x39013F961c378f02C2b82A6E1d31E9812786FD9D", - "symbol": "SMS", - "decimal": 3 - }, - { - "address": "0x2dCFAAc11c9EebD8C6C42103Fe9e2a6AD237aF27", - "symbol": "SMT", - "decimal": 18 - }, - { - "address": "0x55F93985431Fc9304077687a35A1BA103dC1e081", - "symbol": "SMT (1)", - "decimal": 18 - }, - { - "address": "0x78Eb8DC641077F049f910659b6d580E80dC4d237", - "symbol": "SMT (2)", - "decimal": 8 - }, - { - "address": "0x198A87b3114143913d4229Fb0f6D4BCb44aa8AFF", - "symbol": "SNBL", - "decimal": 8 - }, - { - "address": "0xF4134146AF2d511Dd5EA8cDB1C4AC88C57D60404", - "symbol": "SNC", - "decimal": 18 - }, - { - "address": "0xf333b2Ace992ac2bBD8798bF57Bc65a06184afBa", - "symbol": "SND", - "decimal": 0 - }, - { - "address": "0xcFD6Ae8BF13f42DE14867351eAff7A8A3b9FbBe7", - "symbol": "SNG", - "decimal": 8 - }, - { - "address": "0xaeC2E87E0A235266D9C5ADc9DEb4b2E29b54D009", - "symbol": "SNGLS", - "decimal": 0 - }, - { - "address": "0x44F588aEeB8C44471439D1270B3603c66a9262F1", - "symbol": "SNIP", - "decimal": 18 - }, - { - "address": "0x983F6d60db79ea8cA4eB9968C6aFf8cfA04B3c63", - "symbol": "SNM", - "decimal": 18 - }, - { - "address": "0xBDC5bAC39Dbe132B1E030e898aE3830017D7d969", - "symbol": "SNOV", - "decimal": 18 - }, - { - "address": "0x744d70FDBE2Ba4CF95131626614a1763DF805B9E", - "symbol": "SNT", - "decimal": 18 - }, - { - "address": "0x2859021eE7F2Cb10162E67F33Af2D22764B31aFf", - "symbol": "SNTR", - "decimal": 4 - }, - { - "address": "0xC011A72400E58ecD99Ee497CF89E3775d4bd732F", - "symbol": "SNX", - "decimal": 18 - }, - { - "address": "0xD65960FAcb8E4a2dFcb2C2212cb2e44a02e2a57E", - "symbol": "SOAR", - "decimal": 6 - }, - { - "address": "0x2d0E95bd4795D7aCe0da3C0Ff7b706a5970eb9D3", - "symbol": "SOC", - "decimal": 18 - }, - { - "address": "0x1F54638b7737193FFd86c19Ec51907A7c41755D8", - "symbol": "SOL", - "decimal": 6 - }, - { - "address": "0x1C62aCa2b7605Db3606eAcdA7Bc67A1857DDb8FF", - "symbol": "SONIQ", - "decimal": 18 - }, - { - "address": "0xBb1f24C0c1554b9990222f036b0AaD6Ee4CAec29", - "symbol": "SOUL", - "decimal": 18 - }, - { - "address": "0x42d6622deCe394b54999Fbd73D108123806f6a18", - "symbol": "SPANK", - "decimal": 18 - }, - { - "address": "0x58bf7df57d9DA7113c4cCb49d8463D4908C735cb", - "symbol": "SPARC", - "decimal": 18 - }, - { - "address": "0x24AEF3BF1A47561500f9430D74Ed4097C47F51F2", - "symbol": "SPARTA", - "decimal": 4 - }, - { - "address": "0x8069080a922834460C3A092FB2c1510224dc066b", - "symbol": "SPC", - "decimal": 18 - }, - { - "address": "0x1dEa979ae76f26071870F824088dA78979eb91C8", - "symbol": "SPD", - "decimal": 18 - }, - { - "address": "0x85089389C14Bd9c77FC2b8F0c3d1dC3363Bf06Ef", - "symbol": "SPF", - "decimal": 18 - }, - { - "address": "0x3833ddA0AEB6947b98cE454d89366cBA8Cc55528", - "symbol": "SPHTX", - "decimal": 18 - }, - { - "address": "0x0324dd195D0Cd53F9F07bEe6a48eE7a20bad738f", - "symbol": "SPICE", - "decimal": 8 - }, - { - "address": "0x92d7A89405Ea3cC605A467E834236e09DF60bf16", - "symbol": "SPIRIT", - "decimal": 18 - }, - { - "address": "0x20F7A3DdF244dc9299975b4Da1C39F8D5D75f05A", - "symbol": "SPN", - "decimal": 6 - }, - { - "address": "0x05aAaA829Afa407D83315cDED1d45EB16025910c", - "symbol": "SPX", - "decimal": 18 - }, - { - "address": "0x68d57c9a1C35f63E2c83eE8e49A64e9d70528D25", - "symbol": "SRN", - "decimal": 18 - }, - { - "address": "0x32F3b8A00B6912D0314be212fe9538B7B9430c12", - "symbol": "SRX", - "decimal": 8 - }, - { - "address": "0xB15fE5a123e647ba594CEa7A1E648646f95EB4AA", - "symbol": "SS", - "decimal": 18 - }, - { - "address": "0xbbFF862d906E348E9946Bfb2132ecB157Da3D4b4", - "symbol": "SS (1)", - "decimal": 18 - }, - { - "address": "0x6e2050CBFB3eD8A4d39b64cC9f47E711a03a5a89", - "symbol": "SSH", - "decimal": 18 - }, - { - "address": "0x624d520BAB2E4aD83935Fa503fB130614374E850", - "symbol": "SSP", - "decimal": 4 - }, - { - "address": "0x4A89cD486fA996ad50c0a63C35c78702f5422a50", - "symbol": "STABIT", - "decimal": 3 - }, - { - "address": "0x9a005c9a89BD72a4Bd27721E7a09A3c11D2b03C4", - "symbol": "STAC", - "decimal": 18 - }, - { - "address": "0x286708f069225905194673755F12359e6afF6FE1", - "symbol": "STACS", - "decimal": 18 - }, - { - "address": "0xF70a642bD387F94380fFb90451C2c81d4Eb82CBc", - "symbol": "STAR", - "decimal": 18 - }, - { - "address": "0x09BcA6eBAb05Ee2ae945BE4edA51393d94Bf7b99", - "symbol": "STB", - "decimal": 4 - }, - { - "address": "0x629aEe55ed49581C33ab27f9403F7992A289ffd5", - "symbol": "STC", - "decimal": 18 - }, - { - "address": "0xaE73B38d1c9A8b274127ec30160a4927C4d71824", - "symbol": "STK", - "decimal": 18 - }, - { - "address": "0xC1Ad68c43508dD5AdDb8d0ac0927dbE752d149D6", - "symbol": "STL", - "decimal": 18 - }, - { - "address": "0x302ce6674A16b54bA1B8A49FED64C471EdE6C174", - "symbol": "STM", - "decimal": 0 - }, - { - "address": "0x599346779e90fc3F5F997b5ea715349820F91571", - "symbol": "STN", - "decimal": 4 - }, - { - "address": "0xB64ef51C888972c908CFacf59B47C1AfBC0Ab8aC", - "symbol": "STORJ", - "decimal": 8 - }, - { - "address": "0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433", - "symbol": "STORM", - "decimal": 18 - }, - { - "address": "0xecd570bBf74761b960Fa04Cc10fe2c4e86FfDA36", - "symbol": "STP", - "decimal": 8 - }, - { - "address": "0x5c3a228510D246b78a3765C20221Cbf3082b44a4", - "symbol": "STQ", - "decimal": 18 - }, - { - "address": "0xBAE235823D7255D9D48635cEd4735227244Cd583", - "symbol": "STR", - "decimal": 18 - }, - { - "address": "0x46492473755e8dF960F8034877F61732D718CE96", - "symbol": "STRC", - "decimal": 8 - }, - { - "address": "0x0371A82e4A9d0A4312f3ee2Ac9c6958512891372", - "symbol": "STU", - "decimal": 18 - }, - { - "address": "0x006BeA43Baa3f7A6f765F14f10A1a1b08334EF45", - "symbol": "STX", - "decimal": 18 - }, - { - "address": "0x8D75959f1E61EC2571aa72798237101F084DE63a", - "symbol": "SUB", - "decimal": 18 - }, - { - "address": "0x12480E24eb5bec1a9D4369CaB6a80caD3c0A377A", - "symbol": "SUB (old)", - "decimal": 2 - }, - { - "address": "0xe120c1ECBfdFeA7F0A8f0Ee30063491E8c26fedf", - "symbol": "SUR", - "decimal": 8 - }, - { - "address": "0x57Ab1E02fEE23774580C119740129eAC7081e9D3", - "symbol": "sUSD", - "decimal": 18 - }, - { - "address": "0xbdEB4b83251Fb146687fa19D1C660F99411eefe3", - "symbol": "SVD", - "decimal": 18 - }, - { - "address": "0x0bb217E40F8a5Cb79Adf04E1aAb60E5abd0dfC1e", - "symbol": "SWFTC", - "decimal": 8 - }, - { - "address": "0x9e88613418cF03dCa54D6a2cf6Ad934A78C7A17A", - "symbol": "SWM", - "decimal": 18 - }, - { - "address": "0xB9e7F8568e08d5659f5D29C4997173d84CdF2607", - "symbol": "SWT", - "decimal": 18 - }, - { - "address": "0x12B306fA98F4CbB8d4457FdFf3a0A0a56f07cCdf", - "symbol": "SXDT", - "decimal": 18 - }, - { - "address": "0x2C82c73d5B34AA015989462b2948cd616a37641F", - "symbol": "SXUT", - "decimal": 18 - }, - { - "address": "0x10B123FdDde003243199aaD03522065dC05827A0", - "symbol": "SYN", - "decimal": 18 - }, - { - "address": "0xE7775A6e9Bcf904eb39DA2b68c5efb4F9360e08C", - "symbol": "TaaS", - "decimal": 6 - }, - { - "address": "0x1D4cCC31dAB6EA20f461d329a0562C1c58412515", - "symbol": "TALAO", - "decimal": 18 - }, - { - "address": "0x2C36204a0712A2a50E54A62F7c4F01867e78cB53", - "symbol": "TAN", - "decimal": 18 - }, - { - "address": "0xc27A2F05fa577a83BA0fDb4c38443c0718356501", - "symbol": "TAU", - "decimal": 18 - }, - { - "address": "0x64786063A352b399d44de2875909D1229F120eBE", - "symbol": "TAUR", - "decimal": 18 - }, - { - "address": "0x627974847450C45b60B3Fe3598f4e6E4cf945B9a", - "symbol": "TBC", - "decimal": 18 - }, - { - "address": "0xFACCD5Fc83c3E4C3c1AC1EF35D15adf06bCF209C", - "symbol": "TBC2", - "decimal": 8 - }, - { - "address": "0xAFe60511341a37488de25Bef351952562E31fCc1", - "symbol": "TBT", - "decimal": 8 - }, - { - "address": "0x3A92bD396aEf82af98EbC0Aa9030D25a23B11C6b", - "symbol": "TBX", - "decimal": 18 - }, - { - "address": "0xfA0eF5E034CaE1AE752d59bdb8aDcDe37Ed7aB97", - "symbol": "TCA", - "decimal": 18 - }, - { - "address": "0x9972A0F24194447E73a7e8b6CD26a52e02DDfAD5", - "symbol": "TCH", - "decimal": 0 - }, - { - "address": "0x28d7F432d24ba6020d1cbD4f28BEDc5a82F24320", - "symbol": "TCNX", - "decimal": 18 - }, - { - "address": "0x9910f4AeD4A7550A4120ad7da8dF8b56E91197Fa", - "symbol": "TCST", - "decimal": 0 - }, - { - "address": "0xED82730312babb41367E060911F798002FFA445F", - "symbol": "TCT", - "decimal": 18 - }, - { - "address": "0x2a1dbabe65c595B0022e75208C34014139d5d357", - "symbol": "TDH", - "decimal": 18 - }, - { - "address": "0x1c79ab32C66aCAa1e9E81952B8AAa581B43e54E7", - "symbol": "TEAM", - "decimal": 4 - }, - { - "address": "0x85e076361cc813A908Ff672F9BAd1541474402b2", - "symbol": "TEL", - "decimal": 2 - }, - { - "address": "0xEc32A9725C59855d841ba7d8D9c99c84ff754688", - "symbol": "TEL (1)", - "decimal": 18 - }, - { - "address": "0xDD16eC0F66E54d453e6756713E533355989040E4", - "symbol": "TEN", - "decimal": 18 - }, - { - "address": "0x515bA0a2E286AF10115284F151cF398688A69170", - "symbol": "TENX", - "decimal": 18 - }, - { - "address": "0xE5F166c0D8872B68790061317BB6CcA04582C912", - "symbol": "TFD", - "decimal": 18 - }, - { - "address": "0xa7f976C360ebBeD4465c2855684D1AAE5271eFa9", - "symbol": "TFL", - "decimal": 8 - }, - { - "address": "0xF8e06E4e4A80287FDCa5b02dcCecAa9D0954840F", - "symbol": "TGAME", - "decimal": 18 - }, - { - "address": "0xAc3Da587eac229C9896D919aBC235CA4Fd7f72c1", - "symbol": "TGT", - "decimal": 1 - }, - { - "address": "0xf96AA656eC0E0Ac163590DB372B430Cf3C0d61cA", - "symbol": "TGT (1)", - "decimal": 18 - }, - { - "address": "0x96c30D5499EF6eA96A9c221Bc18BC39D29c97F27", - "symbol": "Thar", - "decimal": 18 - }, - { - "address": "0x3883f5e181fccaF8410FA61e12b59BAd963fb645", - "symbol": "THETA", - "decimal": 18 - }, - { - "address": "0x1Cb3209D45B2a60B7fBCA1cCDBF87f674237A4aa", - "symbol": "THR", - "decimal": 4 - }, - { - "address": "0x4f27053F32edA8Af84956437Bc00e5fFa7003287", - "symbol": "THRT", - "decimal": 18 - }, - { - "address": "0xfe7B915A0bAA0E79f85c5553266513F7C1c03Ed0", - "symbol": "THUG", - "decimal": 18 - }, - { - "address": "0x614b9802D45Aa1bC2282651dC1408632F9027A6e", - "symbol": "TIC", - "decimal": 18 - }, - { - "address": "0x72430A612Adc007c50e3b6946dBb1Bb0fd3101D1", - "symbol": "TIC (1)", - "decimal": 8 - }, - { - "address": "0x7F4B2A690605A7cbb66F7AA6885EbD906a5e2E9E", - "symbol": "TICO", - "decimal": 8 - }, - { - "address": "0xa5dB1d6F7A0D5Bccc17d0bFD39D7AF32d5E5EDc6", - "symbol": "TICO (1)", - "decimal": 5 - }, - { - "address": "0x999967E2Ec8A74B7c8E9dB19E039d920B31d39D0", - "symbol": "TIE", - "decimal": 18 - }, - { - "address": "0xEee2d00Eb7DEB8Dd6924187f5AA3496B7d06E62A", - "symbol": "TIG", - "decimal": 18 - }, - { - "address": "0x6531f133e6DeeBe7F2dcE5A0441aA7ef330B4e53", - "symbol": "TIME", - "decimal": 8 - }, - { - "address": "0x80BC5512561c7f85A3A9508c7df7901b370Fa1DF", - "symbol": "TIO", - "decimal": 18 - }, - { - "address": "0xEa1f346faF023F974Eb5adaf088BbCdf02d761F4", - "symbol": "TIX", - "decimal": 18 - }, - { - "address": "0xdaE1Baf249964bc4b6aC98c3122f0e3E785fd279", - "symbol": "TKA", - "decimal": 18 - }, - { - "address": "0x0675DAa94725A528b05A3A88635C03EA964BFA7E", - "symbol": "TKLN", - "decimal": 18 - }, - { - "address": "0xaAAf91D9b90dF800Df4F55c205fd6989c977E73a", - "symbol": "TKN", - "decimal": 8 - }, - { - "address": "0xB45a50545bEEAB73F38F31E5973768C421805E5E", - "symbol": "TKR", - "decimal": 18 - }, - { - "address": "0xb3616550aBc8AF79c7A5902DEF9Efa3bC9A95200", - "symbol": "TLX", - "decimal": 8 - }, - { - "address": "0x3209f98BeBF0149B769ce26D71F7aEA8E435EfEa", - "symbol": "TMT", - "decimal": 18 - }, - { - "address": "0x10086399DD8c1e3De736724AF52587a2044c9fA2", - "symbol": "TMTG", - "decimal": 18 - }, - { - "address": "0xF7920B0768Ecb20A123fAc32311d07D193381d6f", - "symbol": "TNB", - "decimal": 18 - }, - { - "address": "0xb0280743b44bF7db4B6bE482b2Ba7b75E5dA096C", - "symbol": "TNS", - "decimal": 18 - }, - { - "address": "0x08f5a9235B08173b7569F83645d2c7fB55e8cCD8", - "symbol": "TNT", - "decimal": 8 - }, - { - "address": "0x9a49f02e128a8E989b443a8f94843C0918BF45E7", - "symbol": "TOK", - "decimal": 8 - }, - { - "address": "0x8b353021189375591723E7384262F45709A3C3dC", - "symbol": "TOMO", - "decimal": 18 - }, - { - "address": "0x8eb965ee9cCFBCE76c0a06264492c0afEfc2826d", - "symbol": "TOOR", - "decimal": 18 - }, - { - "address": "0xaA7a9CA87d3694B5755f213B5D04094b8d0F0A6F", - "symbol": "TRAC", - "decimal": 18 - }, - { - "address": "0x12759512D326303B45f1ceC8F7B6fd96F387778E", - "symbol": "TRAK", - "decimal": 18 - }, - { - "address": "0xcB3F902bf97626391bF8bA87264bbC3DC13469be", - "symbol": "TRC", - "decimal": 18 - }, - { - "address": "0xdB52a87cda28EdA00f8aDd1C79c9DB4a50a70457", - "symbol": "TRC (1)", - "decimal": 18 - }, - { - "address": "0x566Fd7999B1Fc3988022bD38507A48F0bCf22c77", - "symbol": "TRCN", - "decimal": 18 - }, - { - "address": "0x30ceCB5461A449A90081F5a5F55db4e048397BAB", - "symbol": "TRCT", - "decimal": 8 - }, - { - "address": "0x33f90Dee07c6E8B9682dD20F73E6C358B2ED0f03", - "symbol": "TRDT", - "decimal": 0 - }, - { - "address": "0xCb94be6f13A1182E4A4B6140cb7bf2025d28e41B", - "symbol": "TRST", - "decimal": 6 - }, - { - "address": "0xf230b790E05390FC8295F4d3F60332c93BEd42e2", - "symbol": "TRX", - "decimal": 6 - }, - { - "address": "0x6B87999bE87358065bBdE41e8a0fe0B7b1cd2514", - "symbol": "TSW", - "decimal": 18 - }, - { - "address": "0xaaB606817809841E8b1168be8779Eeaf6744Ef64", - "symbol": "TTA", - "decimal": 18 - }, - { - "address": "0x9389434852b94bbaD4c8AfEd5B7BDBc5Ff0c2275", - "symbol": "TTC", - "decimal": 18 - }, - { - "address": "0x9CDa8A60dd5AfA156c95Bd974428d91a0812e054", - "symbol": "TTU", - "decimal": 18 - }, - { - "address": "0xa838be6E4b760E6061D4732D6B9F11Bf578f9A76", - "symbol": "TTV", - "decimal": 18 - }, - { - "address": "0x0000000000085d4780B73119b644AE5ecd22b376", - "symbol": "TUSD", - "decimal": 18 - }, - { - "address": "0x8dd5fbCe2F6a956C3022bA3663759011Dd51e73E", - "symbol": "TUSD (OLD)", - "decimal": 18 - }, - { - "address": "0x2eF1aB8a26187C58BB8aAeB11B2fC6D25C5c0716", - "symbol": "TWN", - "decimal": 18 - }, - { - "address": "0xfbd0d1c77B501796A35D86cF91d65D9778EeE695", - "symbol": "TWNKL", - "decimal": 3 - }, - { - "address": "0x6704B673c70dE9bF74C8fBa4b4bd748F0e2190E1", - "symbol": "UBEX", - "decimal": 18 - }, - { - "address": "0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e", - "symbol": "UBT", - "decimal": 8 - }, - { - "address": "0x92e52a1A235d9A103D970901066CE910AAceFD37", - "symbol": "UCASH", - "decimal": 8 - }, - { - "address": "0x2adba23Cf1252dE095aCEd801e758b369EC10426", - "symbol": "UCBI", - "decimal": 8 - }, - { - "address": "0xAAf37055188Feee4869dE63464937e683d61b2a1", - "symbol": "UCN", - "decimal": 18 - }, - { - "address": "0xEA097A2b1dB00627B2Fa17460Ad260c016016977", - "symbol": "UFR", - "decimal": 18 - }, - { - "address": "0x24692791Bc444c5Cd0b81e3CBCaba4b04Acd1F3B", - "symbol": "UKG", - "decimal": 18 - }, - { - "address": "0x105d97ef2E723f1cfb24519Bc6fF15a6D091a3F1", - "symbol": "UMKA", - "decimal": 4 - }, - { - "address": "0x8e5afc69f6227A3ad75eD346c8723Bc62ce97123", - "symbol": "UMKA (1)", - "decimal": 4 - }, - { - "address": "0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7", - "symbol": "Unicorn", - "decimal": 0 - }, - { - "address": "0x6Ba460AB75Cd2c56343b3517ffeBA60748654D26", - "symbol": "UP", - "decimal": 8 - }, - { - "address": "0xC86D054809623432210c107af2e3F619DcFbf652", - "symbol": "UPP", - "decimal": 18 - }, - { - "address": "0xD01DB73E047855Efb414e6202098C4Be4Cd2423B", - "symbol": "UQC", - "decimal": 18 - }, - { - "address": "0x931684139f756C24eC0731E9F74FE50e5548dDeF", - "symbol": "URB", - "decimal": 18 - }, - { - "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - "symbol": "USDC", - "decimal": 6 - }, - { - "address": "0xD760ADdFb24D9C01Fe4Bfea7475C5e3636684058", - "symbol": "USDM", - "decimal": 2 - }, - { - "address": "0xA4Bdb11dc0a2bEC88d24A3aa1E6Bb17201112eBe", - "symbol": "USDS", - "decimal": 6 - }, - { - "address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", - "symbol": "USDT", - "decimal": 6 - }, - { - "address": "0x70a72833d6bF7F508C8224CE59ea1Ef3d0Ea3A38", - "symbol": "UTK", - "decimal": 18 - }, - { - "address": "0x9e3319636e2126e3c0bc9e3134AEC5e1508A46c7", - "symbol": "UTNP", - "decimal": 18 - }, - { - "address": "0x16f812Be7FfF02cAF662B85d5d58a5da6572D4Df", - "symbol": "UTT", - "decimal": 8 - }, - { - "address": "0x3543638eD4a9006E4840B105944271Bcea15605D", - "symbol": "UUU", - "decimal": 18 - }, - { - "address": "0x297E4e5e59Ad72B1B0A2fd446929e76117be0E0a", - "symbol": "VALOR", - "decimal": 18 - }, - { - "address": "0x9a9bB9b4b11BF8eccff84B58a6CCCCD4058A7f0D", - "symbol": "VD", - "decimal": 8 - }, - { - "address": "0x57C75ECCc8557136D32619a191fBCDc88560d711", - "symbol": "VDG", - "decimal": 0 - }, - { - "address": "0x82BD526bDB718C6d4DD2291Ed013A5186cAE2DCa", - "symbol": "VDOC", - "decimal": 18 - }, - { - "address": "0x340D2bdE5Eb28c1eed91B2f790723E3B160613B7", - "symbol": "VEE", - "decimal": 18 - }, - { - "address": "0xFADe17a07ba3B480aA1714c3724a52D4C57d410E", - "symbol": "VEGAN", - "decimal": 8 - }, - { - "address": "0xD850942eF8811f2A866692A623011bDE52a462C1", - "symbol": "VEN", - "decimal": 18 - }, - { - "address": "0xEbeD4fF9fe34413db8fC8294556BBD1528a4DAca", - "symbol": "VENUS", - "decimal": 3 - }, - { - "address": "0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374", - "symbol": "VERI", - "decimal": 18 - }, - { - "address": "0x1B879d3812F2Ade1214264655B473910e0caF1e6", - "symbol": "VERSI", - "decimal": 18 - }, - { - "address": "0x2C974B2d0BA1716E644c1FC59982a89DDD2fF724", - "symbol": "VIB", - "decimal": 18 - }, - { - "address": "0xe8Ff5C9c75dEb346acAc493C463C8950Be03Dfba", - "symbol": "VIBE", - "decimal": 18 - }, - { - "address": "0x882448f83d90B2bf477Af2eA79327fDEA1335D93", - "symbol": "VIBEX", - "decimal": 18 - }, - { - "address": "0x445f51299Ef3307dBD75036dd896565F5B4BF7A5", - "symbol": "VIDT", - "decimal": 18 - }, - { - "address": "0xF03f8D65BaFA598611C3495124093c56e8F638f0", - "symbol": "VIEW", - "decimal": 18 - }, - { - "address": "0xd2946be786F35c3Cc402C29b323647aBda799071", - "symbol": "VIKKY", - "decimal": 8 - }, - { - "address": "0xF3e014fE81267870624132ef3A646B8E83853a96", - "symbol": "VIN", - "decimal": 18 - }, - { - "address": "0x23b75Bc7AaF28e2d6628C3f424B3882F8f072a3c", - "symbol": "VIT", - "decimal": 18 - }, - { - "address": "0x1b793E49237758dBD8b752AFC9Eb4b329d5Da016", - "symbol": "VITE", - "decimal": 18 - }, - { - "address": "0x519475b31653E46D20cD09F9FdcF3B12BDAcB4f5", - "symbol": "VIU", - "decimal": 18 - }, - { - "address": "0x922aC473A3cC241fD3a0049Ed14536452D58D73c", - "symbol": "VLD", - "decimal": 18 - }, - { - "address": "0xC650f5514AE1A3a27930922145ce49E8A91b91AB", - "symbol": "VNTY", - "decimal": 18 - }, - { - "address": "0xc3bC9Eb71f75Ec439A6b6C8E8b746fCF5b62F703", - "symbol": "VOC", - "decimal": 18 - }, - { - "address": "0x83eEA00D838f92dEC4D1475697B9f4D3537b56E3", - "symbol": "VOISE", - "decimal": 8 - }, - { - "address": "0xF722B01910F93B84EDa9CA128b9F05821A41EAe1", - "symbol": "VRE", - "decimal": 18 - }, - { - "address": "0x92E78dAe1315067a8819EFD6dCA432de9DCdE2e9", - "symbol": "VRS", - "decimal": 6 - }, - { - "address": "0xeDBaF3c5100302dCddA53269322f3730b1F0416d", - "symbol": "VRS (1)", - "decimal": 5 - }, - { - "address": "0xBA3a79D758f19eFe588247388754b8e4d6EddA81", - "symbol": "VSF", - "decimal": 18 - }, - { - "address": "0x5c543e7AE0A1104f78406C340E9C64FD9fCE5170", - "symbol": "VSL", - "decimal": 18 - }, - { - "address": "0x4b96bf1feF93A216914fc843D81207A027ce52b3", - "symbol": "VUU", - "decimal": 18 - }, - { - "address": "0x9720b467a710382A232a32F540bDCed7d662a10B", - "symbol": "VZT", - "decimal": 18 - }, - { - "address": "0x4BBbC57aF270138Ef2FF2C50DbfAD684e9E0e604", - "symbol": "WAB", - "decimal": 18 - }, - { - "address": "0x286BDA1413a2Df81731D4930ce2F862a35A609fE", - "symbol": "WABI", - "decimal": 18 - }, - { - "address": "0x9f6513ED2b0DE89218E97DB4A5115ba04Be449f1", - "symbol": "WAK", - "decimal": 18 - }, - { - "address": "0x829A4cA1303383F1082B6B1fB937116e4b3b5605", - "symbol": "WATT", - "decimal": 18 - }, - { - "address": "0x39Bb259F66E1C59d5ABEF88375979b4D20D98022", - "symbol": "WAX", - "decimal": 8 - }, - { - "address": "0x217f96737b39f9b9211767cb6aeF5DbAe2Fe9402", - "symbol": "WAY", - "decimal": 8 - }, - { - "address": "0x74951B677de32D596EE851A233336926e6A2cd09", - "symbol": "WBA", - "decimal": 7 - }, - { - "address": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", - "symbol": "WBTC", - "decimal": 8 - }, - { - "address": "0x8F936fE0faF0604c9C0Ef2406bde0A65365515d6", - "symbol": "WCN", - "decimal": 18 - }, - { - "address": "0x6a0A97E47d15aAd1D132a1Ac79a480E3F2079063", - "symbol": "WCT", - "decimal": 18 - }, - { - "address": "0x840fe75ABfaDc0F2d54037829571B2782e919ce4", - "symbol": "WEB", - "decimal": 18 - }, - { - "address": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - "symbol": "WETH", - "decimal": 18 - }, - { - "address": "0xF4FE95603881D0e07954fD7605E0e9a916e42C44", - "symbol": "WHEN", - "decimal": 18 - }, - { - "address": "0xe200641890772FCe8eE6EDc5354cCEa30ac92F49", - "symbol": "WHO", - "decimal": 18 - }, - { - "address": "0xe933c0Cd9784414d5F278C114904F5A84b396919", - "symbol": "WHO (1)", - "decimal": 18 - }, - { - "address": "0x3F17Dd476faF0a4855572F0B6ed5115D9bBA22AD", - "symbol": "WIB", - "decimal": 18 - }, - { - "address": "0x5e4ABE6419650CA839Ce5BB7Db422b881a6064bB", - "symbol": "WiC", - "decimal": 18 - }, - { - "address": "0x62CD07D414Ec50B68C7EcAa863a23d344f2d062f", - "symbol": "WIC", - "decimal": 0 - }, - { - "address": "0xD3C00772B24D997A812249ca637a921e81357701", - "symbol": "WILD", - "decimal": 18 - }, - { - "address": "0x899338b84D25aC505a332aDCE7402d697D947494", - "symbol": "WIN", - "decimal": 8 - }, - { - "address": "0x667088b212ce3d06a1b553a7221E1fD19000d9aF", - "symbol": "WINGS", - "decimal": 18 - }, - { - "address": "0x1b22C32cD936cB97C28C5690a0695a82Abf688e6", - "symbol": "WISH", - "decimal": 18 - }, - { - "address": "0xBFbe5332f172d77811bC6c272844f3e54A7B23bB", - "symbol": "WMK", - "decimal": 18 - }, - { - "address": "0xd73A66B8FB26Be8B0AcD7c52Bd325054Ac7d468b", - "symbol": "WNK", - "decimal": 18 - }, - { - "address": "0xF9D9702D031407F425a4412682fDc56b07d05262", - "symbol": "WOC", - "decimal": 0 - }, - { - "address": "0x728781E75735dc0962Df3a51d7Ef47E798A7107E", - "symbol": "WOLK", - "decimal": 18 - }, - { - "address": "0xF6B55acBBC49f4524Aa48D19281A9A77c54DE10f", - "symbol": "WOLK (1)", - "decimal": 18 - }, - { - "address": "0xA686514FAF7d54289266F483D1e4852C99E13EC7", - "symbol": "WORK", - "decimal": 8 - }, - { - "address": "0xD18e454D844eb0009D32E07A0Cde89E18d64CFb4", - "symbol": "WORK (1)", - "decimal": 18 - }, - { - "address": "0x62087245087125d3DB5B9A3D713d78E7BBc31e54", - "symbol": "WPC", - "decimal": 18 - }, - { - "address": "0x4CF488387F035FF08c371515562CBa712f9015d4", - "symbol": "WPR", - "decimal": 18 - }, - { - "address": "0x72aDadb447784dd7AB1F472467750fC485e4cb2d", - "symbol": "WRC", - "decimal": 6 - }, - { - "address": "0x71e8d74fF1C923E369D0e70DFb09866629C4DD35", - "symbol": "WRK", - "decimal": 18 - }, - { - "address": "0x1d9a3CeF66B01D44003b9db0e00ec3fd44746988", - "symbol": "WSS", - "decimal": 18 - }, - { - "address": "0xb7cB1C96dB6B22b0D3d9536E0108d062BD488F74", - "symbol": "WTC", - "decimal": 18 - }, - { - "address": "0x84119cb33E8F590D75c2D6Ea4e6B0741a7494EDA", - "symbol": "WTT", - "decimal": 0 - }, - { - "address": "0xd8950fDeaa10304B7A7Fd03a2FC66BC39f3c711a", - "symbol": "WYS", - "decimal": 18 - }, - { - "address": "0x056017c55aE7AE32d12AeF7C679dF83A85ca75Ff", - "symbol": "WYV", - "decimal": 18 - }, - { - "address": "0x910Dfc18D6EA3D6a7124A6F8B5458F281060fa4c", - "symbol": "X8X", - "decimal": 18 - }, - { - "address": "0x4DF812F6064def1e5e029f1ca858777CC98D2D81", - "symbol": "XAUR", - "decimal": 8 - }, - { - "address": "0x49AeC0752E68D0282Db544C677f6BA407BA17ED7", - "symbol": "XBL", - "decimal": 18 - }, - { - "address": "0x28dee01D53FED0Edf5f6E310BF8Ef9311513Ae40", - "symbol": "XBP", - "decimal": 18 - }, - { - "address": "0x4d829f8C92a6691c56300D020c9e0dB984Cfe2BA", - "symbol": "XCC", - "decimal": 18 - }, - { - "address": "0xB4272071eCAdd69d933AdcD19cA99fe80664fc08", - "symbol": "XCHF", - "decimal": 18 - }, - { - "address": "0x0843971B4ac6e842a518AA184e0271d88B5cB74F", - "symbol": "XCL", - "decimal": 8 - }, - { - "address": "0x1E26b3D07E57F453caE30F7DDd2f945f5bF3EF33", - "symbol": "XCLR", - "decimal": 8 - }, - { - "address": "0x41AB1b6fcbB2fA9DCEd81aCbdeC13Ea6315F2Bf2", - "symbol": "XDCE", - "decimal": 18 - }, - { - "address": "0xA017ac5faC5941f95010b12570B812C974469c2C", - "symbol": "XES", - "decimal": 18 - }, - { - "address": "0x054C64741dBafDC19784505494029823D89c3b13", - "symbol": "XET", - "decimal": 8 - }, - { - "address": "0x16aF5bfb4Ae7E475b9aDC3Bf5Cb2f1E6a50d7940", - "symbol": "XFS", - "decimal": 8 - }, - { - "address": "0xf6b6AA0Ef0f5Edc2C1c5d925477F97eAF66303e7", - "symbol": "XGG", - "decimal": 8 - }, - { - "address": "0x533ef0984b2FAA227AcC620C67cce12aA39CD8CD", - "symbol": "XGM", - "decimal": 8 - }, - { - "address": "0x30f4A3e0aB7a76733D8b60b89DD93c3D0b4c9E2f", - "symbol": "XGT", - "decimal": 18 - }, - { - "address": "0xB110eC7B1dcb8FAB8dEDbf28f53Bc63eA5BEdd84", - "symbol": "XID", - "decimal": 8 - }, - { - "address": "0x44449Fa4d607F807d1eD4a69ad942971728391C8", - "symbol": "XMCT", - "decimal": 18 - }, - { - "address": "0x0f8c45B896784A1E408526B9300519ef8660209c", - "symbol": "XMX", - "decimal": 8 - }, - { - "address": "0xBC86727E770de68B1060C91f6BB6945c73e10388", - "symbol": "XNK", - "decimal": 18 - }, - { - "address": "0xab95E915c123fdEd5BDfB6325e35ef5515F1EA69", - "symbol": "XNN", - "decimal": 18 - }, - { - "address": "0x572E6f318056ba0C5d47A422653113843D250691", - "symbol": "XNT", - "decimal": 0 - }, - { - "address": "0x153eD9CC1b792979d2Bde0BBF45CC2A7e436a5F9", - "symbol": "XOV", - "decimal": 18 - }, - { - "address": "0x90528aeb3a2B736B780fD1B6C478bB7E1d643170", - "symbol": "XPA", - "decimal": 18 - }, - { - "address": "0xBB1fA4FdEB3459733bF67EbC6f893003fA976a82", - "symbol": "XPAT", - "decimal": 18 - }, - { - "address": "0xbC7Ed0c8cf986ae62337fc8DF3B02C6EC87310Ed", - "symbol": "XPAY", - "decimal": 18 - }, - { - "address": "0xB24754bE79281553dc1adC160ddF5Cd9b74361a4", - "symbol": "XRL", - "decimal": 9 - }, - { - "address": "0x0F513fFb4926ff82D7F60A05069047AcA295C413", - "symbol": "XSC", - "decimal": 18 - }, - { - "address": "0x55296f69f40Ea6d20E478533C15A6B08B654E758", - "symbol": "XYO", - "decimal": 18 - }, - { - "address": "0x922105fAd8153F516bCfB829f56DC097a0E1D705", - "symbol": "YEE", - "decimal": 18 - }, - { - "address": "0x6F7A4bac3315B5082F793161a22e26666d22717f", - "symbol": "YEED", - "decimal": 18 - }, - { - "address": "0xcA2796F9F61dc7b238Aab043971e49c6164DF375", - "symbol": "YEED (1)", - "decimal": 18 - }, - { - "address": "0x1BC7C1dE0AC6eF4fDeC35c053030D90cf54c7e9A", - "symbol": "YNN", - "decimal": 18 - }, - { - "address": "0xcbeAEc699431857FDB4d37aDDBBdc20E132D4903", - "symbol": "YOYOW", - "decimal": 18 - }, - { - "address": "0x534546C490A4Ed2a9D0c3555447Bb9b4b01bcb9E", - "symbol": "YTRO", - "decimal": 17 - }, - { - "address": "0xD9A12Cde03a86E800496469858De8581D3A5353d", - "symbol": "YUP", - "decimal": 18 - }, - { - "address": "0x0F33bb20a282A7649C7B3AFf644F084a9348e933", - "symbol": "YUPIE", - "decimal": 18 - }, - { - "address": "0x6781a0F84c7E9e846DCb84A9a5bd49333067b104", - "symbol": "ZAP", - "decimal": 18 - }, - { - "address": "0xb9EF770B6A5e12E45983C5D80545258aA38F3B78", - "symbol": "ZCN", - "decimal": 10 - }, - { - "address": "0x2008e3057BD734e10AD13c9EAe45Ff132aBc1722", - "symbol": "ZCO", - "decimal": 8 - }, - { - "address": "0x7A41e0517a5ecA4FdbC7FbebA4D4c47B9fF6DC63", - "symbol": "ZCS", - "decimal": 18 - }, - { - "address": "0x8188e51Bc678F0070531f0e782718Df0027452De", - "symbol": "ZERA", - "decimal": 8 - }, - { - "address": "0xe7E4279b80D319EDe2889855135A22021baf0907", - "symbol": "ZEUS", - "decimal": 18 - }, - { - "address": "0x05f4a42e251f2d52b8ed15E9FEdAacFcEF1FAD27", - "symbol": "ZIL", - "decimal": 12 - }, - { - "address": "0x4AaC461C86aBfA71e9d00d9a2cde8d74E4E1aeEa", - "symbol": "ZINC", - "decimal": 18 - }, - { - "address": "0xA9d2927d3a04309E008B6af6E2e282AE2952e7fD", - "symbol": "ZIP", - "decimal": 18 - }, - { - "address": "0xEDD7c94FD7B4971b916d15067Bc454b9E1bAD980", - "symbol": "ZIPT", - "decimal": 18 - }, - { - "address": "0xf3C092cA8CD6D3d4ca004Dc1d0f1fe8CcAB53599", - "symbol": "ZIX", - "decimal": 18 - }, - { - "address": "0xfd8971d5E8E1740cE2d0A84095fCA4De729d0c16", - "symbol": "ZLA", - "decimal": 18 - }, - { - "address": "0xE25FAAb5821ce70BA4179A70c1d481BA45b9D0c9", - "symbol": "ZMAN", - "decimal": 8 - }, - { - "address": "0x554FFc77F4251a9fB3c0E3590a6a205f8d4e067D", - "symbol": "ZMN", - "decimal": 18 - }, - { - "address": "0xb5b8F5616Fe42d5ceCA3e87F3FddbDd8F496d760", - "symbol": "ZPR", - "decimal": 18 - }, - { - "address": "0xE41d2489571d322189246DaFA5ebDe1F4699F498", - "symbol": "ZRX", - "decimal": 18 - }, - { - "address": "0xe386B139Ed3715Ca4B18Fd52671bDcea1cdFE4b1", - "symbol": "ZST", - "decimal": 8 - }, - { - "address": "0xE8F9fa977ea585591d9F394681318C16552577fB", - "symbol": "ZTX", - "decimal": 18 - }, - { - "address": "0x83e2BE8d114F9661221384B3a50d24B96a5653F5", - "symbol": "ZXC", - "decimal": 18 - } -] \ No newline at end of file diff --git a/common/config/tokens/goerli.json b/common/config/tokens/goerli.json deleted file mode 100644 index 42ca48b16..000000000 --- a/common/config/tokens/goerli.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "address": "0x7af963cF6D228E564e2A0aA0DdBF06210B38615D", - "symbol": "TST", - "decimal": 18 - } -] \ No newline at end of file diff --git a/common/config/tokens/index.ts b/common/config/tokens/index.ts deleted file mode 100644 index 26cb36c53..000000000 --- a/common/config/tokens/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ETC from './etc.json'; -import ETH from './eth.json'; -import EXP from './exp.json'; -import Kovan from './kovan.json'; -import Rinkeby from './rinkeby.json'; -import Ropsten from './ropsten.json'; -import Goerli from './goerli.json'; -import RSK from './rsk.json'; -import RSK_TESTNET from './rsk_testnet.json'; -import UBQ from './ubq.json'; -import ESN from './esn.json'; -import ARTIS_SIGMA1 from './artis_sigma1.json'; -import ARTIS_TAU1 from './artis_tau1.json'; - -export default { - ETC, - ETH, - EXP, - Kovan, - Rinkeby, - Ropsten, - Goerli, - RSK, - RSK_TESTNET, - UBQ, - ESN, - ARTIS_SIGMA1, - ARTIS_TAU1 -}; diff --git a/common/config/tokens/kovan.json b/common/config/tokens/kovan.json deleted file mode 100644 index a45af2ab2..000000000 --- a/common/config/tokens/kovan.json +++ /dev/null @@ -1,67 +0,0 @@ -[ - { - "address": "0x8667559254241ddeD4d11392f868d72092765367", - "symbol": "Aeternity", - "decimal": 18 - }, - { - "address": "0xC4375B7De8af5a38a93548eb8453a498222C4fF2", - "symbol": "DAI", - "decimal": 18 - }, - { - "address": "0xeeE3870657E4716670f185dF08652dd848fe8f7e", - "symbol": "DGD", - "decimal": 18 - }, - { - "address": "0x4733659a5cB7896A65c918Add6f59C5148FB5ffa", - "symbol": "GAV", - "decimal": 6 - }, - { - "address": "0xeF7FfF64389B814A946f3E92105513705CA6B990", - "symbol": "GNT", - "decimal": 18 - }, - { - "address": "0x3C67f7D4decF7795225f51b54134F81137385f83", - "symbol": "GUP", - "decimal": 3 - }, - { - "address": "0x1Dad4783cf3fe3085C1426157aB175A6119A04bA", - "symbol": "MKR", - "decimal": 18 - }, - { - "address": "0xAaF64BFCC32d0F15873a02163e7E500671a4ffcD", - "symbol": "MKR (1)", - "decimal": 18 - }, - { - "address": "0x323B5d4C32345ced77393B3530b1EeD0f346429D", - "symbol": "MLN", - "decimal": 18 - }, - { - "address": "0xB18845c260F680d5B9D84649638813E342E4F8C9", - "symbol": "REP", - "decimal": 18 - }, - { - "address": "0xc57538846Ec405Ea25Deb00e0f9B29a432D53507", - "symbol": "RLC", - "decimal": 9 - }, - { - "address": "0x4A6e6C3868A279e1D9047B42C3fB356FF4680003", - "symbol": "TIB", - "decimal": 18 - }, - { - "address": "0x6Ff6C0Ff1d68b964901F986d4C9FA3ac68346570", - "symbol": "ZRX", - "decimal": 18 - } -] \ No newline at end of file diff --git a/common/config/tokens/rinkeby.json b/common/config/tokens/rinkeby.json deleted file mode 100644 index 0086f2bc1..000000000 --- a/common/config/tokens/rinkeby.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "address": "0x398A7A69f3c59181A1ffe34bed11DCb5DF863A8a", - "symbol": "AETH", - "decimal": 18 - }, - { - "address": "0xe27826eE778B6F78a49a686dA7D64f6E7b084a4f", - "symbol": "BHNT", - "decimal": 0 - }, - { - "address": "0x8B65d4B7ee3FFFA986C577F0F4b70a21BaE3dD54", - "symbol": "CTGA", - "decimal": 18 - }, - { - "address": "0x275A5B346599b56917e7B1C9de019DCf9EaD861a", - "symbol": "KC", - "decimal": 18 - }, - { - "address": "0x6475A7FA6Ed2D5180F0e0a07c2d951D12C0EDB91", - "symbol": "NONE", - "decimal": 0 - }, - { - "address": "0x12fE174C097F6B3e876B3b060C9061F4B9dEBB80", - "symbol": "PPD", - "decimal": 18 - }, - { - "address": "0x3615757011112560521536258c1E7325Ae3b48AE", - "symbol": "RDN", - "decimal": 18 - }, - { - "address": "0xf1e6Ad3a7eF0c86c915F0feDF80eD851809bEA90", - "symbol": "RLC", - "decimal": 9 - }, - { - "address": "0x0A057a87CE9C56D7e336B417c79cf30E8d27860B", - "symbol": "WALL", - "decimal": 15 - } -] \ No newline at end of file diff --git a/common/config/tokens/ropsten.json b/common/config/tokens/ropsten.json deleted file mode 100644 index 293a8e8e1..000000000 --- a/common/config/tokens/ropsten.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "address": "0x95D7321EdCe519419ba1DbC60A89bAfbF55EAC0D", - "symbol": "*PLASMA", - "decimal": 6 - }, - { - "address": "0xa1bAccA0e12D4091Ec1f92e7CaE3394CC9854D3D", - "symbol": "dqr30", - "decimal": 18 - }, - { - "address": "0x6f95a3B682F8e9aacC86D057A6DF88A0E68145A8", - "symbol": "ILSC", - "decimal": 2 - }, - { - "address": "0x4C572Fbc03D4A2B683cF4f10ffdcaFD00885E108", - "symbol": "MEWV5", - "decimal": 9 - }, - { - "address": "0xFD5a69A1309595FF5121553F52C8A5B2B1B31031", - "symbol": "NONE", - "decimal": 0 - }, - { - "address": "0x7314Dc4d7794b5E7894212CA1556ae8e3De58621", - "symbol": "RLC", - "decimal": 9 - } -] \ No newline at end of file diff --git a/common/config/tokens/rsk.json b/common/config/tokens/rsk.json deleted file mode 100644 index 3d4835dbf..000000000 --- a/common/config/tokens/rsk.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "address": "0x2acc95758f8b5f583470ba265eb685a8f45fc9d5", - "symbol": "RIF", - "decimal": 18 - } -] diff --git a/common/config/tokens/rsk_testnet.json b/common/config/tokens/rsk_testnet.json deleted file mode 100644 index 864f89c3b..000000000 --- a/common/config/tokens/rsk_testnet.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - { - "address": "0x19f64674d8a5b4e652319f5e239efd3bc969a1fe", - "symbol": "tRIF", - "decimal": 18 - } -] diff --git a/common/config/tokens/ubq.json b/common/config/tokens/ubq.json deleted file mode 100644 index 3f9f385c5..000000000 --- a/common/config/tokens/ubq.json +++ /dev/null @@ -1,27 +0,0 @@ -[ - { - "address": "0xFF3bF057ADF3b0E015b6465331a6236e55688274", - "symbol": "BEER", - "decimal": 0 - }, - { - "address": "0x08533D6A06CE365298b12Ef92eb407cBA8Aa8273", - "symbol": "CEFS", - "decimal": 8 - }, - { - "address": "0x94aD7e41c1D44022C4F47cb1Ba019Fd1a022c536", - "symbol": "DOT", - "decimal": 8 - }, - { - "address": "0x4b4899a10F3E507DB207b0ee2426029eFa168a67", - "symbol": "QWARK", - "decimal": 8 - }, - { - "address": "0x5e1715bB79805Bd672729760B3f7F34D6f485098", - "symbol": "RICKS", - "decimal": 8 - } -] \ No newline at end of file diff --git a/common/containers/OnboardingModal/OnboardingModal.scss b/common/containers/OnboardingModal/OnboardingModal.scss deleted file mode 100644 index 1159e78f3..000000000 --- a/common/containers/OnboardingModal/OnboardingModal.scss +++ /dev/null @@ -1,122 +0,0 @@ -@import 'common/sass/variables/colors.scss'; -@import 'common/sass/mixins.scss'; - -.OnboardingModal { - display: flex; - flex-direction: column; - width: 90vw; - height: 90vh; - min-height: 300px; - background: color(pane-bg); - border-radius: 6px; - box-shadow: 0 7px 14px 0 rgba(50, 50, 93, 0.1), 0 3px 6px 0 rgba(0, 0, 0, 0.07); - - h1 { - @include onboarding-modal-slide-heading; - color: color(text-color); - } - p, - li { - @include onboarding-modal-slide-text; - } - ul { - padding-left: 20px; - } - - &-top { - @include perfectly-centered; - @include baby-blue; - - flex: 1; - border-radius: 6px 6px 0 0; - - img { - transform: scale(0.5); - } - - @media (min-width: 500px) { - display: none; - } - } - &-side { - display: none; - - @media (min-width: 500px) { - @include baby-blue; - - flex: 2; - display: flex; - flex-direction: column; - border-radius: 6px 0 0 6px; - - &-top { - @include perfectly-centered; - - flex: 1; - - img { - transform: scale(0.7); - } - } - &-middle { - @include perfectly-centered; - - flex: 3; - - img { - transform: scale(0.7); - } - } - &-bottom { - @include perfectly-centered; - - flex: 1; - } - } - } - &-middle { - flex: 4; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 0 2rem; - overflow-y: auto; - - > section { - min-height: 0; - } - // A couple of slides that require scrolling need to overcome - // the inability for padding to take effect. - .SecondSlide, - .ThirdSlide, - .FourthSlide { - button { - margin-bottom: 2rem; - } - } - } - &-bottom { - @include perfectly-centered; - @include baby-blue; - - flex: 1; - justify-content: space-around; - border-radius: 0 0 6px 6px; - - img { - width: 60px; - height: 60px; - } - - @media (min-width: 500px) { - display: none; - } - } - - @media (min-width: 500px) { - flex-direction: row; - max-width: 1000px; - max-height: 600px; - } -} diff --git a/common/containers/OnboardingModal/OnboardingModal.tsx b/common/containers/OnboardingModal/OnboardingModal.tsx deleted file mode 100644 index 71351d6aa..000000000 --- a/common/containers/OnboardingModal/OnboardingModal.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { onboardingSelectors } from 'features/onboarding'; -import { Modal } from 'components/v2'; -import logo from 'assets/images/logo-mycrypto-white.svg'; -import chest from 'assets/images/icn-chest.svg'; -import bankVsMyCrypto from 'assets/images/icn-bank-vs-mycrypto.svg'; -import vault from 'assets/images/icn-vault.svg'; -import champagne from 'assets/images/icn-champagne.svg'; -import { ProgressDots } from './components'; -import { FirstSlide, SecondSlide, ThirdSlide, FourthSlide } from './slides'; -import './OnboardingModal.scss'; - -interface StateProps { - currentSlide: ReturnType; -} - -function OnboardingModal({ currentSlide }: StateProps) { - const images = [chest, bankVsMyCrypto, vault, champagne]; - const logoImage = MyCrypto logo; - const slideImage = Slide art; - const slides = [ - , - , - , - - ]; - const slide = slides[currentSlide - 1]; - - return ( - -
    -
    {logoImage}
    -
    -
    {logoImage}
    -
    {slideImage}
    -
    - -
    -
    -
    {slide}
    -
    - {slideImage} - -
    -
    -
    - ); -} - -export default connect((state: AppState) => ({ - currentSlide: onboardingSelectors.getSlide(state) -}))(OnboardingModal); diff --git a/common/containers/OnboardingModal/components/HardwareWalletChoice.scss b/common/containers/OnboardingModal/components/HardwareWalletChoice.scss deleted file mode 100644 index 8734ec466..000000000 --- a/common/containers/OnboardingModal/components/HardwareWalletChoice.scss +++ /dev/null @@ -1,51 +0,0 @@ -@import 'common/sass/mixins.scss'; -@import 'common/sass/variables.scss'; - -.HardwareWalletChoice { - display: flex; - align-items: center; - justify-content: center; - margin: 1rem 0; - padding: 1rem; - border: 1px solid $light-gray; - - &:first-of-type { - @media (min-width: 500px) { - border-bottom: none; - border-bottom: 1px solid $light-gray; - } - } - &-image { - flex: 1; - - img { - width: 50px; - height: 50px; - - @media (min-width: 500px) { - width: 75px; - height: 75px; - } - @media (min-width: 800px) { - width: 100px; - height: 100px; - } - } - } - p { - @include onboarding-modal-slide-text; - - flex: 1; - margin: 0; - color: $light-gray; - - @media (min-width: 500px) { - margin-top: 1rem; - } - } - - @media (min-width: 500px) { - flex-direction: column; - margin-right: 1rem; - } -} diff --git a/common/containers/OnboardingModal/components/HardwareWalletChoice.tsx b/common/containers/OnboardingModal/components/HardwareWalletChoice.tsx deleted file mode 100644 index e745b4762..000000000 --- a/common/containers/OnboardingModal/components/HardwareWalletChoice.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import React from 'react'; - -import './HardwareWalletChoice.scss'; - -interface Props { - image: string; - text: string; - link: string; -} - -export default function HardwareWalletChoice({ image, text, link }: Props) { - return ( - -
    - {text} -
    -

    {text}

    -
    - ); -} diff --git a/common/containers/OnboardingModal/components/OnboardingButton.scss b/common/containers/OnboardingModal/components/OnboardingButton.scss deleted file mode 100644 index ced2d6d67..000000000 --- a/common/containers/OnboardingModal/components/OnboardingButton.scss +++ /dev/null @@ -1,9 +0,0 @@ -@import 'common/sass/variables.scss'; - -.OnboardingButton { - width: 120px; - height: 50px; - border-radius: 2px; - background: $button-primary; - color: #fff; -} diff --git a/common/containers/OnboardingModal/components/OnboardingButton.tsx b/common/containers/OnboardingModal/components/OnboardingButton.tsx deleted file mode 100644 index d54ebda3e..000000000 --- a/common/containers/OnboardingModal/components/OnboardingButton.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { onboardingActions, onboardingSelectors } from 'features/onboarding'; -import './OnboardingButton.scss'; - -interface OwnProps { - className?: string; -} - -interface StateProps { - currentSlide: ReturnType; -} - -interface DispatchProps { - completeOnboarding: onboardingActions.TCompleteOnboarding; - setSlide: onboardingActions.TSetOnboardingSlide; -} - -type Props = OwnProps & StateProps & DispatchProps; - -function OnboardingButton({ className = '', currentSlide, completeOnboarding, setSlide }: Props) { - const fullClassName = `OnboardingButton ${className}`; - const nextSlide = currentSlide + 1; - const isOnFinalSlide = nextSlide > 4; - const changeSlide = () => setSlide(nextSlide); - const onClick = isOnFinalSlide ? completeOnboarding : changeSlide; - const text = isOnFinalSlide ? 'Get Started' : 'Next'; - - return ( - - ); -} - -export default connect( - (state: AppState) => ({ - currentSlide: onboardingSelectors.getSlide(state) - }), - { - completeOnboarding: onboardingActions.completeOnboarding, - setSlide: onboardingActions.setOnboardingSlide - } -)(OnboardingButton); diff --git a/common/containers/OnboardingModal/components/ProgressDots.scss b/common/containers/OnboardingModal/components/ProgressDots.scss deleted file mode 100644 index a6c56a9a5..000000000 --- a/common/containers/OnboardingModal/components/ProgressDots.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import 'common/sass/variables.scss'; - -.ProgressDots { - display: flex; - align-items: center; - - &-dot { - width: 8px; - height: 8px; - margin: 0 0.5rem; - border-radius: 50%; - background: #fff; - cursor: pointer; - - &--active { - width: 12px; - height: 12px; - background: $baby-blue; - border: 3px solid #fff; - } - } -} diff --git a/common/containers/OnboardingModal/components/ProgressDots.tsx b/common/containers/OnboardingModal/components/ProgressDots.tsx deleted file mode 100644 index 6d2f334f5..000000000 --- a/common/containers/OnboardingModal/components/ProgressDots.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { onboardingActions, onboardingSelectors } from 'features/onboarding'; -import './ProgressDots.scss'; - -interface StateProps { - currentStep: ReturnType; -} - -interface DispatchProps { - setSlide: onboardingActions.TSetOnboardingSlide; -} - -type Props = StateProps & DispatchProps; - -function ProgressDots({ currentStep, setSlide }: Props) { - const dots = new Array(4).fill('ProgressDots-dot'); - - // Replace the active page with a different dot. - dots[currentStep - 1] = 'ProgressDots-dot ProgressDots-dot--active'; - - return ( -
    - {dots.map((dot, index) => ( -
    setSlide(index + 1)} /> - ))} -
    - ); -} - -export default connect( - (state: AppState) => ({ - currentStep: onboardingSelectors.getSlide(state) - }), - { - setSlide: onboardingActions.setOnboardingSlide - } -)(ProgressDots); diff --git a/common/containers/OnboardingModal/components/index.ts b/common/containers/OnboardingModal/components/index.ts deleted file mode 100644 index 15ee6cdd6..000000000 --- a/common/containers/OnboardingModal/components/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as HardwareWalletChoice } from './HardwareWalletChoice'; -export { default as OnboardingButton } from './OnboardingButton'; -export { default as ProgressDots } from './ProgressDots'; diff --git a/common/containers/OnboardingModal/index.ts b/common/containers/OnboardingModal/index.ts deleted file mode 100644 index a40c94717..000000000 --- a/common/containers/OnboardingModal/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './OnboardingModal'; diff --git a/common/containers/OnboardingModal/slides/FirstSlide.tsx b/common/containers/OnboardingModal/slides/FirstSlide.tsx deleted file mode 100644 index 3b454cd66..000000000 --- a/common/containers/OnboardingModal/slides/FirstSlide.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { OnboardingButton } from '../components'; - -export default function FirstSlide() { - return ( -
    -

    {translate('ONBOARDING_TEXT_1')}

    -

    {translate('ONBOARDING_TEXT_2')}

    - -
    - ); -} diff --git a/common/containers/OnboardingModal/slides/FourthSlide.scss b/common/containers/OnboardingModal/slides/FourthSlide.scss deleted file mode 100644 index 1032df1ca..000000000 --- a/common/containers/OnboardingModal/slides/FourthSlide.scss +++ /dev/null @@ -1,7 +0,0 @@ -.FourthSlide { - &-wallets { - @media (min-width: 560px) { - display: flex; - } - } -} diff --git a/common/containers/OnboardingModal/slides/FourthSlide.tsx b/common/containers/OnboardingModal/slides/FourthSlide.tsx deleted file mode 100644 index f962c0460..000000000 --- a/common/containers/OnboardingModal/slides/FourthSlide.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; - -import translate, { translateRaw } from 'translations'; -import trezor from 'assets/images/icn-trezor-new.svg'; -import ledger from 'assets/images/icn-ledger-nano.svg'; -import { HardwareWalletChoice, OnboardingButton } from '../components'; -import './FourthSlide.scss'; - -export default function FourthSlide() { - return ( -
    -
    -

    {translate('ONBOARDING_TEXT_25')}

    -

    {translate('ONBOARDING_TEXT_26')}

    -
    - - -
    -

    - {translate('ONBOARDING_TEXT_29', { - $link: 'https://support.mycrypto.com/' - })} -

    - -
    -
    - ); -} diff --git a/common/containers/OnboardingModal/slides/SecondSlide.scss b/common/containers/OnboardingModal/slides/SecondSlide.scss deleted file mode 100644 index 478e54144..000000000 --- a/common/containers/OnboardingModal/slides/SecondSlide.scss +++ /dev/null @@ -1,25 +0,0 @@ -@import 'common/sass/mixins.scss'; - -.SecondSlide { - .horizontal { - display: none; - } - li { - @include onboarding-modal-slide-text; - } - - @media (min-width: 700px) { - display: flex; - justify-content: space-between; - - section:first-of-type { - margin-right: 1rem; - } - .horizontal { - display: block; - } - .vertical { - display: none; - } - } -} diff --git a/common/containers/OnboardingModal/slides/SecondSlide.tsx b/common/containers/OnboardingModal/slides/SecondSlide.tsx deleted file mode 100644 index 24c60e644..000000000 --- a/common/containers/OnboardingModal/slides/SecondSlide.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { OnboardingButton } from '../components'; -import './SecondSlide.scss'; - -export default function SecondSlide() { - return ( -
    -
    -

    {translate('ONBOARDING_TEXT_3')}

    -
      -
    • {translate('ONBOARDING_TEXT_4')}
    • -
    • {translate('ONBOARDING_TEXT_5')}
    • -
    • {translate('ONBOARDING_TEXT_6')}
    • -
    • {translate('ONBOARDING_TEXT_7')}
    • -
    - -
    -
    -

    {translate('ONBOARDING_TEXT_8')}

    -
      -
    • {translate('ONBOARDING_TEXT_9')}
    • -
    • {translate('ONBOARDING_TEXT_10')}
    • -
    • {translate('ONBOARDING_TEXT_11')}
    • -
    • {translate('ONBOARDING_TEXT_12')}
    • -
    -
    - -
    - ); -} diff --git a/common/containers/OnboardingModal/slides/ThirdSlide.tsx b/common/containers/OnboardingModal/slides/ThirdSlide.tsx deleted file mode 100644 index 9d735e9b3..000000000 --- a/common/containers/OnboardingModal/slides/ThirdSlide.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React from 'react'; - -import translate from 'translations'; -import { OnboardingButton } from '../components'; - -export default function ThirdSlide() { - return ( -
    -
    -

    {translate('ONBOARDING_TEXT_13')}

    -
      -
    • {translate('ONBOARDING_TEXT_14')}
    • -
    • {translate('ONBOARDING_TEXT_15')}
    • -
    • {translate('ONBOARDING_TEXT_16')}
    • -
    • {translate('ONBOARDING_TEXT_17')}
    • -
    -
    -
    -
    -

    {translate('ONBOARDING_TEXT_18')}

    -
      -
    • - {translate('ONBOARDING_TEXT_19')} -
        -
      • {translate('ONBOARDING_TEXT_20')}
      • -
      • {translate('ONBOARDING_TEXT_21')}
      • -
      • {translate('ONBOARDING_TEXT_22')}
      • -
      -
    • -
    • - {translate('ONBOARDING_TEXT_23', { - $link: 'https://etherscamdb.info/' - })} -
    • -
    • - {translate('ONBOARDING_TEXT_24', { - $link: 'https://download.mycrypto.com/' - })} -
    • -
    -
    - -
    -
    - ); -} diff --git a/common/containers/OnboardingModal/slides/index.ts b/common/containers/OnboardingModal/slides/index.ts deleted file mode 100644 index 6a99f7c27..000000000 --- a/common/containers/OnboardingModal/slides/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as FirstSlide } from './FirstSlide'; -export { default as SecondSlide } from './SecondSlide'; -export { default as ThirdSlide } from './ThirdSlide'; -export { default as FourthSlide } from './FourthSlide'; diff --git a/common/containers/QrSignerModal/index.tsx b/common/containers/QrSignerModal/index.tsx deleted file mode 100644 index c7fa1150b..000000000 --- a/common/containers/QrSignerModal/index.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import { addHexPrefix } from 'ethereumjs-util'; -import translate, { translateRaw } from 'translations'; -import { AppState } from 'features/reducers'; -import { paritySignerActions } from 'features/paritySigner'; -import { ParityQrSigner } from 'components'; -import Modal, { IButton } from 'components/ui/Modal'; - -interface State { - scan: boolean; -} - -interface PropsClosed { - isOpen: false; -} - -interface PropsOpen { - isOpen: true; - isMessage: boolean; - from: string; - data: string; -} - -interface ActionProps { - finalizeSignature: paritySignerActions.TFinalizeSignature; -} - -type Props = (PropsClosed | PropsOpen) & ActionProps; - -class QrSignerModal extends React.Component { - constructor(props: Props) { - super(props); - this.state = { - scan: false - }; - } - - public render() { - if (!this.props.isOpen) { - return null; - } - - const { scan } = this.state; - const { from, data, isMessage } = this.props; - - const buttons: IButton[] = [ - { - disabled: false, - text: translate(scan ? 'ACTION_4' : 'ADD_PARITY_3'), - type: 'primary', - onClick: () => this.setState({ scan: !scan }) - }, - { - disabled: false, - text: translate('ACTION_2'), - type: 'default', - onClick: this.onClose - } - ]; - - return ( -
    - -
    - {scan ? ( - - ) : isMessage ? ( - - ) : ( - - )} -
    -
    -
    - ); - } - - private onClose = () => { - if (!this.props.isOpen) { - return; - } - - this.props.finalizeSignature(null); - this.setState({ scan: false }); - }; - - private onScan = (signature: string) => { - if (!this.props.isOpen) { - return; - } - - this.props.finalizeSignature(addHexPrefix(signature)); - this.setState({ scan: false }); - }; -} - -function mapStateToProps(state: AppState): PropsClosed | PropsOpen { - const { requested } = state.paritySigner; - - if (!requested) { - return { isOpen: false }; - } - - return { - isOpen: true, - ...requested - }; -} - -export default connect( - mapStateToProps, - { - finalizeSignature: paritySignerActions.finalizeSignature - } -)(QrSignerModal); diff --git a/common/containers/Sidebar/Sidebar.scss b/common/containers/Sidebar/Sidebar.scss deleted file mode 100644 index 17e3891fc..000000000 --- a/common/containers/Sidebar/Sidebar.scss +++ /dev/null @@ -1,187 +0,0 @@ -@mixin list { - flex-grow: 1; - margin: 0; - padding: 0; - list-style-type: none; - overflow: auto; - - > li { - margin: 0; - } -} - -.Sidebar { - display: flex; - flex-direction: column; - position: fixed; - // Make room for sidebar. - top: 80px; - right: 0; - bottom: 0; - z-index: 100; - width: 100vw; - background: #fff; - box-shadow: -2px 0 6px 0 rgba(0, 0, 0, 0.1); - color: #333; - overflow: auto; - - &-controls { - display: flex; - justify-content: flex-end; - padding-top: 12px; - padding-right: 12px; - - button { - padding: 0; - border: none; - background: none; - } - } - - @media (min-width: 500px) { - width: 375px; - } - @media (min-width: 1000px) { - top: 0; - } - - .is-selected { - background: #f2f2f2; - } -} - -.SidebarScreen { - flex-grow: 1; - display: flex; - flex-direction: column; - - &-image { - text-align: center; - } - &-upper { - flex-shrink: 0; - border-bottom: 1px solid #e9e9e9; - } - &-heading { - padding: 0 42px; - font-family: Lato; - font-size: 25px; - font-weight: 900; - text-align: center; - color: #163150; - margin-bottom: 5px; - } - &-text { - padding: 0 42px; - margin-bottom: 25px; - font-family: Lato; - font-size: 16px; - line-height: 1.31; - text-align: center; - color: #000000; - } - &-list { - @include list; - } - &-list-full { - @include list; - } - &-action { - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; - height: 78px; - max-height: 78px; - border-top: 1px solid #e9e9e9; - border-bottom: 1px solid #e9e9e9; - background: #fff; - cursor: pointer; - - &-content { - display: flex; - align-items: center; - font-size: 18px; - font-weight: bold; - text-transform: uppercase; - - img { - margin-right: 14px; - } - } - } - &-language { - margin: 0; - padding: 15px 20px; - border-top: 1px solid #e9e9e9; - cursor: pointer; - transition: background 0.3s ease-in; - - &:hover { - background: #f2f2f2; - } - } -} - -.NewNetworkOption { - margin-bottom: 0; - padding: 14px 18px; - border-bottom: 1px solid #e9e9e9; - font-weight: bold; - - &-name { - display: flex; - align-items: center; - cursor: pointer; - - img { - margin-right: 9px; - } - } - &-list { - margin-top: 6px; - padding-left: 27px; - list-style-type: none; - } -} - -.NewNodeOption { - display: flex; - align-items: center; - cursor: pointer; - - .CustomRadio { - transform: scale(0.7); - } -} - -.CustomRadio { - display: flex; - align-items: center; - justify-content: center; - width: 18px; - height: 18px; - margin-right: 9px; - border-radius: 50%; - border: 1.2px solid #1eb8e7; - - &-inner { - width: 12px; - height: 12px; - background: #1eb8e7; - border-radius: 50%; - } -} - -.no-top-border { - border-top: none !important; -} - -.is-secondary { - background: #f7f7f7; -} - -.plain-ul { - list-style-type: none; - padding: 0; -} diff --git a/common/containers/Sidebar/Sidebar.tsx b/common/containers/Sidebar/Sidebar.tsx deleted file mode 100644 index 5410ba0e5..000000000 --- a/common/containers/Sidebar/Sidebar.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { sidebarActions, sidebarSelectors } from 'features/sidebar'; -import closeIcon from 'assets/images/exit.svg'; -import { AddCustomNode, SelectLanguage, SelectNetworkAndNode } from './components'; -import './Sidebar.scss'; - -const screens: any = { - addCustomNode: AddCustomNode, - selectNetworkAndNode: SelectNetworkAndNode, - selectLanguage: SelectLanguage -}; - -interface Props { - close: sidebarActions.TCloseSidebar; - screen: ReturnType; - style: { [declaration: string]: string | number }; -} - -function Sidebar({ close, screen, style }: Props) { - const Screen = screens[screen]; - - return ( -
    -
    - -
    - -
    - ); -} - -const mapStateToProps = (state: AppState) => ({ - screen: sidebarSelectors.getSidebarScreen(state) -}); - -const mapDispatchToProps = { - close: sidebarActions.closeSidebar -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(Sidebar); diff --git a/common/containers/Sidebar/components/AddCustomNode.tsx b/common/containers/Sidebar/components/AddCustomNode.tsx deleted file mode 100644 index 9961b632b..000000000 --- a/common/containers/Sidebar/components/AddCustomNode.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import React from 'react'; - -import { translateRaw } from 'translations'; -import node from 'assets/images/icn-node.svg'; - -export default function AddCustomNode() { - return ( -
    -
    - Node cartoon -
    -

    {translateRaw('NEW_SIDEBAR_TEXT_4')}

    -

    {translateRaw('NEW_SIDEBAR_TEXT_5')}

    -
    - ); -} diff --git a/common/containers/Sidebar/components/CustomRadio.tsx b/common/containers/Sidebar/components/CustomRadio.tsx deleted file mode 100644 index c133f8e43..000000000 --- a/common/containers/Sidebar/components/CustomRadio.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import noop from 'lodash/noop'; - -interface Props { - enabled: boolean; - onClick(): void; -} - -export default function CustomRadio({ onClick, enabled = false }: Props) { - return ( -
    - {enabled &&
    } -
    - ); -} diff --git a/common/containers/Sidebar/components/NetworkOption.tsx b/common/containers/Sidebar/components/NetworkOption.tsx deleted file mode 100644 index 9ca67e8f0..000000000 --- a/common/containers/Sidebar/components/NetworkOption.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { Component } from 'react'; -import classnames from 'classnames'; - -import { NodeConfig } from 'types/node'; -import CustomRadio from './CustomRadio'; -import NodeOption from './NodeOption'; - -interface Props { - name: string; - isToggled: boolean; - nodes: NodeConfig[]; - isSecondary: boolean; - isSelected: boolean; - selectedNode: NodeConfig; - onSelect(): void; - onNodeSelect(id: string): void; - onClick(e: React.MouseEvent): void; -} - -export default class NetworkOption extends Component { - private node = React.createRef(); - - public componentDidMount() { - const { isSelected } = this.props; - - if (isSelected && this.node && this.node.current) { - this.node.current.scrollIntoView(); - } - } - - public render() { - const { - onSelect, - onNodeSelect, - onClick, - name, - isToggled, - nodes, - isSecondary, - isSelected, - selectedNode - } = this.props; - - const className = classnames('NewNetworkOption', { 'is-secondary': isSecondary }); - - return ( -
  • -
    - - {name} -
    - {isToggled && ( -
      - {nodes.map(node => ( - ) => { - e.stopPropagation(); - onNodeSelect(node.id); - }} - isSelected={selectedNode.id === node.id} - {...node} - /> - ))} -
    - )} -
  • - ); - } -} diff --git a/common/containers/Sidebar/components/NodeOption.tsx b/common/containers/Sidebar/components/NodeOption.tsx deleted file mode 100644 index d0a2cc9c7..000000000 --- a/common/containers/Sidebar/components/NodeOption.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import noop from 'lodash/noop'; - -import CustomRadio from './CustomRadio'; - -interface Props { - name: string; - isSelected: boolean; - onClick(e: React.MouseEvent): void; -} - -export default function NodeOption({ onClick, name, isSelected = false }: Props) { - return ( -
  • - {name} -
  • - ); -} diff --git a/common/containers/Sidebar/components/SelectLanguage.tsx b/common/containers/Sidebar/components/SelectLanguage.tsx deleted file mode 100644 index 63cbb912a..000000000 --- a/common/containers/Sidebar/components/SelectLanguage.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import classnames from 'classnames'; - -import { languages } from 'config'; -import { translateRaw } from 'translations'; -import { AppState } from 'features/reducers'; -import { configMetaActions, configMetaSelectors } from 'features/config'; -import { sidebarActions } from 'features/sidebar'; - -interface StateProps { - languageSelection: ReturnType; -} - -interface DispatchProps { - changeLanguage: configMetaActions.TChangeLanguage; - closeSidebar: sidebarActions.TCloseSidebar; -} - -type Props = StateProps & DispatchProps; - -class LanguageSelect extends Component { - public render() { - const { languageSelection } = this.props; - - return ( -
    -

    - {translateRaw('NEW_SIDEBAR_TEXT_1')} -

    -
      - {Object.entries(languages).map(([code, language]: [string, string]) => ( -
    • this.handleLanguageSelect(code)} - > - {language} -
    • - ))} -
    -
    - ); - } - - private handleLanguageSelect = (code: string) => { - const { languageSelection, changeLanguage, closeSidebar } = this.props; - - if (code !== languageSelection) { - changeLanguage(code); - } - - closeSidebar(); - }; -} - -const mapStateToProps = (state: AppState) => ({ - languageSelection: configMetaSelectors.getLanguageSelection(state) -}); - -const mapDispatchToProps = { - changeLanguage: configMetaActions.changeLanguage, - closeSidebar: sidebarActions.closeSidebar -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(LanguageSelect); diff --git a/common/containers/Sidebar/components/SelectNetworkAndNode.tsx b/common/containers/Sidebar/components/SelectNetworkAndNode.tsx deleted file mode 100644 index 50385df71..000000000 --- a/common/containers/Sidebar/components/SelectNetworkAndNode.tsx +++ /dev/null @@ -1,206 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { translateRaw } from 'translations'; -import { NetworkConfig } from 'types/network'; -import { NodeConfig } from 'types/node'; -import { AppState } from 'features/reducers'; -import { - configNodesSelectors, - configNodesSelectedActions, - configNetworksActions, - configSelectors, - configNodesCustomTypes, - configNodesCustomActions -} from 'features/config'; -import { sidebarActions } from 'features/sidebar'; -import show from 'assets/images/icn-show.svg'; -import add from 'assets/images/icn-add.svg'; -import CustomNodeModal from 'components/CustomNodeModal'; -import { CORE_NETWORKS, generateNetworksToNodes, splitUpNetworkOptions } from '../helpers'; -import NetworkOption from './NetworkOption'; - -interface Props { - selectedNode: NodeConfig; - selectedNetwork: NetworkConfig; - allNodes: NodeConfig[]; - allNetworks: { [key: string]: NetworkConfig }; - changeNodeRequested: configNodesSelectedActions.TChangeNodeRequested; - changeNetworkRequested: configNetworksActions.TChangeNetworkRequested; - addCustomNode: configNodesCustomActions.TAddCustomNode; - closeSidebar: sidebarActions.TCloseSidebar; -} - -interface State { - toggledNetworks: string[]; - showingSecondaryNetworks: boolean; - showingCustomNodeModal: boolean; -} - -class SelectNetworkAndNode extends Component { - public state: State = { - toggledNetworks: [], - showingSecondaryNetworks: false, - showingCustomNodeModal: false - }; - - public componentDidMount() { - const { selectedNode } = this.props; - const showingSecondaryNetworks = !CORE_NETWORKS.includes(selectedNode.network); - const toggledNetworks = - selectedNode.isCustom || !selectedNode.isAuto ? [selectedNode.network] : []; - - this.setState({ - showingSecondaryNetworks, - toggledNetworks - }); - } - - public render() { - const { selectedNode, selectedNetwork, allNodes, allNetworks } = this.props; - const { toggledNetworks, showingSecondaryNetworks, showingCustomNodeModal } = this.state; - const networksToNodes = generateNetworksToNodes(allNodes); - const { primaryNetworks, secondaryNetworks } = splitUpNetworkOptions(networksToNodes); - - return ( -
    -
    -

    {translateRaw('NEW_SIDEBAR_TEXT_2')}

    -

    {translateRaw('NEW_SIDEBAR_TEXT_3')}

    -
    -
      - {primaryNetworks.map(({ network, nodes }: { network: string; nodes: NodeConfig[] }) => { - const isSelected = selectedNetwork.id === network; - const onSelect = () => this.handleNetworkSelect(allNetworks[network].id); - const onNodeSelect = (node: string) => this.handleNodeSelect(node); - const onClick = (e: React.MouseEvent) => { - e.stopPropagation(); - this.toggleNetwork(network); - }; - const name = allNetworks[network].name; - const isToggled = toggledNetworks.includes(network); - - return ( - - ); - })} -
    • -
      -
      - Toggle showing all networks - {translateRaw( - showingSecondaryNetworks ? 'NEW_SIDEBAR_TEXT_7' : 'NEW_SIDEBAR_TEXT_8' - )} -
      -
      - {showingSecondaryNetworks && ( -
        - {secondaryNetworks.map(({ network, nodes }) => ( - this.handleNetworkSelect(allNetworks[network].id)} - selectedNode={selectedNode} - onNodeSelect={(node: string) => this.handleNodeSelect(node)} - onClick={e => { - e.stopPropagation(); - this.toggleNetwork(network); - }} - name={(allNetworks[network] || {}).name} - isToggled={toggledNetworks.includes(network)} - nodes={nodes} - isSecondary={true} - /> - ))} -
      - )} -
    • -
    -
    -
    - Add custom node - {translateRaw('NEW_SIDEBAR_TEXT_6')} -
    -
    - {showingCustomNodeModal && ( - - )} -
    - ); - } - - private toggleNetwork = (network: string) => - this.setState((prevState: State) => ({ - toggledNetworks: prevState.toggledNetworks.includes(network) - ? prevState.toggledNetworks.filter(toggledNetwork => toggledNetwork !== network) - : prevState.toggledNetworks.concat(network) - })); - - private toggleShowingSecondaryNetworks = () => - this.setState(prevState => ({ - showingSecondaryNetworks: !prevState.showingSecondaryNetworks - })); - - private toggleShowingCustomNodeModal = () => - this.setState(prevState => ({ - showingCustomNodeModal: !prevState.showingCustomNodeModal - })); - - private handleNetworkSelect = (network: string) => { - const { changeNetworkRequested, closeSidebar } = this.props; - - changeNetworkRequested(network); - closeSidebar(); - }; - - private handleNodeSelect = (node: string) => { - const { changeNodeRequested, closeSidebar } = this.props; - - changeNodeRequested(node); - closeSidebar(); - }; - - private addCustomNode = (payload: configNodesCustomTypes.AddCustomNodeAction['payload']) => { - const { addCustomNode, closeSidebar } = this.props; - - addCustomNode(payload); - closeSidebar(); - }; -} - -const mapStateToProps = (state: AppState) => ({ - selectedNode: configNodesSelectors.getNodeConfig(state), - selectedNetwork: configSelectors.getNetworkConfig(state), - allNodes: configSelectors.getAllNodes(state), - allNetworks: configSelectors.getAllNetworkConfigs(state) -}); - -const mapDispatchToProps = { - changeNodeRequested: configNodesSelectedActions.changeNodeRequested, - changeNetworkRequested: configNetworksActions.changeNetworkRequested, - closeSidebar: sidebarActions.closeSidebar, - addCustomNode: configNodesCustomActions.addCustomNode -}; - -export default connect( - mapStateToProps, - mapDispatchToProps -)(SelectNetworkAndNode as any); diff --git a/common/containers/Sidebar/components/index.ts b/common/containers/Sidebar/components/index.ts deleted file mode 100644 index be6aa1097..000000000 --- a/common/containers/Sidebar/components/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as AddCustomNode } from './AddCustomNode'; -export { default as SelectLanguage } from './SelectLanguage'; -export { default as SelectNetworkAndNode } from './SelectNetworkAndNode'; diff --git a/common/containers/Sidebar/helpers.ts b/common/containers/Sidebar/helpers.ts deleted file mode 100644 index d312a8107..000000000 --- a/common/containers/Sidebar/helpers.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { NodeConfig } from 'types/node'; - -interface NetworkOptions { - [key: string]: NodeConfig[]; -} - -interface PrioritizedNetworkOptions { - primaryNetworks: any[]; - secondaryNetworks: any[]; -} - -export const CORE_NETWORKS = ['ETH', 'ETC', 'Ropsten', 'Kovan', 'Rinkeby', 'Goerli', 'RSK']; - -export function generateNetworksToNodes(nodes: NodeConfig[]): NetworkOptions { - return Object.values(nodes).reduce((networksToNodes: NetworkOptions, nextNode) => { - const { network } = nextNode; - const newNetworkEntry = (networksToNodes[network] || []).concat(nextNode); - - networksToNodes[network] = newNetworkEntry; - - return networksToNodes; - }, {}); -} - -export function splitUpNetworkOptions(networksToNodes: NetworkOptions): PrioritizedNetworkOptions { - return Object.entries(networksToNodes).reduce( - (networkOptions, [network, nodes]) => { - const { primaryNetworks, secondaryNetworks } = networkOptions; - const collection = CORE_NETWORKS.includes(network) ? primaryNetworks : secondaryNetworks; - - collection.push({ - network, - nodes - }); - - return networkOptions; - }, - { - primaryNetworks: [], - secondaryNetworks: [] - } as PrioritizedNetworkOptions - ); -} diff --git a/common/containers/Sidebar/index.ts b/common/containers/Sidebar/index.ts deleted file mode 100644 index e842a8591..000000000 --- a/common/containers/Sidebar/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './Sidebar'; diff --git a/common/containers/TabSection/ElectronTemplate.scss b/common/containers/TabSection/ElectronTemplate.scss deleted file mode 100644 index 7bf4ec9d8..000000000 --- a/common/containers/TabSection/ElectronTemplate.scss +++ /dev/null @@ -1,46 +0,0 @@ -@import 'common/sass/variables'; - -.ElectronTemplate { - height: 100%; - display: flex; - flex-direction: row; - - &-sidebar, - &-content { - position: relative; - overflow: auto; - } - - &-sidebar { - width: $electron-sidebar-width; - overflow-x: hidden; - background: color(control-bg); - border-right: 1px solid color(gray-lighter); - } - - &-content { - padding: 10vh 30px; - flex: 1; - - &-tab { - width: 100%; - max-width: 1200px; - margin: 0 auto; - } - } - - &-draggable { - display: none; - position: fixed; - top: 0; - left: 0; - right: 0; - height: 16px; - -webkit-app-region: drag; - - // Only needed on OSX, Linux and Windows have title bars - .is-osx & { - display: block; - } - } -} diff --git a/common/containers/TabSection/ElectronTemplate.tsx b/common/containers/TabSection/ElectronTemplate.tsx deleted file mode 100644 index 5dd48c3fb..000000000 --- a/common/containers/TabSection/ElectronTemplate.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { configMetaSelectors } from 'features/config'; -import { ElectronNav } from 'components'; -import OfflineTab from './OfflineTab'; -import Notifications from './Notifications'; -import './ElectronTemplate.scss'; - -interface StateProps { - isOffline: AppState['config']['meta']['offline']; -} - -interface OwnProps { - isUnavailableOffline?: boolean; - children: string | React.ReactElement | React.ReactElement[]; -} - -type Props = OwnProps & StateProps; - -class ElectronTemplate extends Component { - public render() { - const { isUnavailableOffline, children, isOffline } = this.props; - - return ( -
    -
    - -
    -
    -
    - {isUnavailableOffline && isOffline ? : children} -
    - -
    -
    -
    - ); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { - isOffline: configMetaSelectors.getOffline(state) - }; -} - -export default connect( - mapStateToProps, - {} -)(ElectronTemplate); diff --git a/common/containers/TabSection/NotificationRow.tsx b/common/containers/TabSection/NotificationRow.tsx deleted file mode 100644 index 67dbde510..000000000 --- a/common/containers/TabSection/NotificationRow.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { Component } from 'react'; -import classnames from 'classnames'; - -import { notificationsTypes } from 'features/notifications'; -import TransactionSucceeded from 'components/ExtendedNotifications/TransactionSucceeded'; -import './Notifications.scss'; - -interface Props { - notification: notificationsTypes.Notification; - onClose(n: notificationsTypes.Notification): void; -} - -export default class NotificationRow extends Component { - public render() { - const { msg, level, rendersComponent, componentConfig } = this.props.notification; - const notifClass = classnames({ - Notification: true, - alert: true, - [`alert-${level}`]: !!level - }); - - let internal: any; - - if (!rendersComponent) { - internal = msg; - } else if (rendersComponent && componentConfig) { - const customComponents: any = { - TransactionSucceeded - }; - const { component, ...rest } = componentConfig; - - if (customComponents[component]) { - const CustomComponent = customComponents[component]; - - internal = ; - } else { - const BasicComponent: any = component; - - internal = {msg}; - } - } else { - throw new Error('If a notification renders a component is must contain config'); - } - - return ( -
    - {level} -
    {internal}
    -
    - ); - } - - public onClose = () => { - this.props.onClose(this.props.notification); - }; -} diff --git a/common/containers/TabSection/Notifications.scss b/common/containers/TabSection/Notifications.scss deleted file mode 100644 index 43d93d5e6..000000000 --- a/common/containers/TabSection/Notifications.scss +++ /dev/null @@ -1,191 +0,0 @@ -@import "common/sass/variables"; -@import "common/sass/mixins"; - -.Notifications { - position: fixed; - bottom: 0; - left: 0; - right: 0; - z-index: $zindex-alerts; -} - -.Notification { - position: relative; - padding: 1.25rem 1rem; - margin: 0 0 1px; - font-weight: 300; - font-size: $font-size-bump; - box-shadow: 0 1px rgba(#fff, 0.4); - - @include theme(dark) { - background: color(tooltip-bg); - } - - &:first-child { - margin-top: 0; - } - &:last-child { - margin-bottom: 0; - } - - // Make sure headers blend in - h1, - h2, - h3, - h4, - h5, - h6 { - margin: 0; - color: inherit; - } - - &-message { - position: relative; - padding: 0 10rem 0 5rem; - - @media screen and (max-width: $screen-xs) { - padding: 3rem 1rem 0 4rem; - } - - // Message contents - a { - color: #fff; - text-decoration: underline; - - &:hover { - opacity: 0.8; - } - - &:active, - &:focus { - opacity: 1; - } - } - - svg { - vertical-align: bottom; - } - - // Icons - &:after { - content: ''; - background-position: 50%; - background-repeat: no-repeat; - background-size: contain; - display: block; - color: #fff; - position: absolute; - top: 0; - bottom: 0; - left: 1%; - width: $space * 2; - - @media screen and (max-width: $screen-sm) { - left: 3%; - } - @media screen and (max-width: $screen-xs) { - left: 1%; - } - } - - &:after, - .alert-info &:after { - background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20x%3D%2230%22%20y%3D%2230%22%20viewBox%3D%220%200%2065%2065%22%20width%3D%22512%22%20height%3D%22512%22%3E%3Cpath%20d%3D%22M32.5%200C14.58%200%200%2014.579%200%2032.5S14.58%2065%2032.5%2065%2065%2050.421%2065%2032.5%2050.42%200%2032.5%200zm0%2061C16.785%2061%204%2048.215%204%2032.5S16.785%204%2032.5%204%2061%2016.785%2061%2032.5%2048.215%2061%2032.5%2061z%22%20fill%3D%22%23FFF%22/%3E%3Ccircle%20cx%3D%2233.018%22%20cy%3D%2219.541%22%20r%3D%223.345%22%20fill%3D%22%23FFF%22/%3E%3Cpath%20d%3D%22M32.137%2028.342a2%202%200%200%200-2%202v17a2%202%200%200%200%204%200v-17a2%202%200%200%200-2-2z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E'); - } - - .alert-success &:after { - background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20478.2%20478.2%22%20width%3D%2232%22%20height%3D%2232%22%3E%3Cpath%20d%3D%22M457.575%20325.1c9.8-12.5%2014.5-25.9%2013.9-39.7-.6-15.2-7.4-27.1-13-34.4%206.5-16.2%209-41.7-12.7-61.5-15.9-14.5-42.9-21-80.3-19.2-26.3%201.2-48.3%206.1-49.2%206.3h-.1c-5%20.9-10.3%202-15.7%203.2-.4-6.4.7-22.3%2012.5-58.1%2014-42.6%2013.2-75.2-2.6-97-16.6-22.9-43.1-24.7-50.9-24.7-7.5%200-14.4%203.1-19.3%208.8-11.1%2012.9-9.8%2036.7-8.4%2047.7-13.2%2035.4-50.2%20122.2-81.5%20146.3-.6.4-1.1.9-1.6%201.4-9.2%209.7-15.4%2020.2-19.6%2029.4-5.9-3.2-12.6-5-19.8-5h-61c-23%200-41.6%2018.7-41.6%2041.6v162.5c0%2023%2018.7%2041.6%2041.6%2041.6h61c8.9%200%2017.2-2.8%2024-7.6l23.5%202.8c3.6.5%2067.6%208.6%20133.3%207.3%2011.9.9%2023.1%201.4%2033.5%201.4%2017.9%200%2033.5-1.4%2046.5-4.2%2030.6-6.5%2051.5-19.5%2062.1-38.6%208.1-14.6%208.1-29.1%206.8-38.3%2019.9-18%2023.4-37.9%2022.7-51.9-.4-8.1-2.2-15-4.1-20.1zm-409.3%20122.2c-8.1%200-14.6-6.6-14.6-14.6V270.1c0-8.1%206.6-14.6%2014.6-14.6h61c8.1%200%2014.6%206.6%2014.6%2014.6v162.5c0%208.1-6.6%2014.6-14.6%2014.6h-61v.1zm383.7-133.9c-4.2%204.4-5%2011.1-1.8%2016.3%200%20.1%204.1%207.1%204.6%2016.7.7%2013.1-5.6%2024.7-18.8%2034.6-4.7%203.6-6.6%209.8-4.6%2015.4%200%20.1%204.3%2013.3-2.7%2025.8-6.7%2012-21.6%2020.6-44.2%2025.4-18.1%203.9-42.7%204.6-72.9%202.2h-1.4c-64.3%201.4-129.3-7-130-7.1h-.1l-10.1-1.2c.6-2.8.9-5.8.9-8.8V270.1c0-4.3-.7-8.5-1.9-12.4%201.8-6.7%206.8-21.6%2018.6-34.3%2044.9-35.6%2088.8-155.7%2090.7-160.9.8-2.1%201-4.4.6-6.7-1.7-11.2-1.1-24.9%201.3-29%205.3.1%2019.6%201.6%2028.2%2013.5%2010.2%2014.1%209.8%2039.3-1.2%2072.7-16.8%2050.9-18.2%2077.7-4.9%2089.5%206.6%205.9%2015.4%206.2%2021.8%203.9%206.1-1.4%2011.9-2.6%2017.4-3.5.4-.1.9-.2%201.3-.3%2030.7-6.7%2085.7-10.8%20104.8%206.6%2016.2%2014.8%204.7%2034.4%203.4%2036.5-3.7%205.6-2.6%2012.9%202.4%2017.4.1.1%2010.6%2010%2011.1%2023.3.4%208.9-3.8%2018-12.5%2027z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E'); - } - - .alert-warning &:after { - background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%20width%3D%2232%22%20height%3D%2232%22%3E%3Cpath%20d%3D%22M505.403%20406.394L295.389%2058.102c-8.274-13.721-23.367-22.245-39.39-22.245s-31.116%208.524-39.391%2022.246L6.595%20406.394c-8.551%2014.182-8.804%2031.95-.661%2046.37%208.145%2014.42%2023.491%2023.378%2040.051%2023.378h420.028c16.56%200%2031.907-8.958%2040.052-23.379%208.143-14.421%207.89-32.189-.662-46.369zm-28.364%2029.978a12.684%2012.684%200%200%201-11.026%206.436H45.985a12.68%2012.68%200%200%201-11.025-6.435%2012.683%2012.683%200%200%201%20.181-12.765L245.156%2075.316A12.732%2012.732%200%200%201%20256%2069.192c4.41%200%208.565%202.347%2010.843%206.124l210.013%20348.292a12.677%2012.677%200%200%201%20.183%2012.764z%22%20fill%3D%22%23FFF%22/%3E%3Cpath%20d%3D%22M256.154%20173.005c-12.68%200-22.576%206.804-22.576%2018.866%200%2036.802%204.329%2089.686%204.329%20126.489.001%209.587%208.352%2013.607%2018.248%2013.607%207.422%200%2017.937-4.02%2017.937-13.607%200-36.802%204.329-89.686%204.329-126.489%200-12.061-10.205-18.866-22.267-18.866zM256.465%20353.306c-13.607%200-23.814%2010.824-23.814%2023.814%200%2012.68%2010.206%2023.814%2023.814%2023.814%2012.68%200%2023.505-11.134%2023.505-23.814%200-12.99-10.826-23.814-23.505-23.814z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E'); - } - - .alert-danger &:after { - background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20viewBox%3D%220%200%20512%20512%22%20width%3D%2232%22%20height%3D%2232%22%3E%3Cpath%20d%3D%22M505.403%20406.394L295.389%2058.102c-8.274-13.721-23.367-22.245-39.39-22.245s-31.116%208.524-39.391%2022.246L6.595%20406.394c-8.551%2014.182-8.804%2031.95-.661%2046.37%208.145%2014.42%2023.491%2023.378%2040.051%2023.378h420.028c16.56%200%2031.907-8.958%2040.052-23.379%208.143-14.421%207.89-32.189-.662-46.369zm-28.364%2029.978a12.684%2012.684%200%200%201-11.026%206.436H45.985a12.68%2012.68%200%200%201-11.025-6.435%2012.683%2012.683%200%200%201%20.181-12.765L245.156%2075.316A12.732%2012.732%200%200%201%20256%2069.192c4.41%200%208.565%202.347%2010.843%206.124l210.013%20348.292a12.677%2012.677%200%200%201%20.183%2012.764z%22%20fill%3D%22%23FFF%22/%3E%3Cpath%20d%3D%22M256.154%20173.005c-12.68%200-22.576%206.804-22.576%2018.866%200%2036.802%204.329%2089.686%204.329%20126.489.001%209.587%208.352%2013.607%2018.248%2013.607%207.422%200%2017.937-4.02%2017.937-13.607%200-36.802%204.329-89.686%204.329-126.489%200-12.061-10.205-18.866-22.267-18.866zM256.465%20353.306c-13.607%200-23.814%2010.824-23.814%2023.814%200%2012.68%2010.206%2023.814%2023.814%2023.814%2012.68%200%2023.505-11.134%2023.505-23.814%200-12.99-10.826-23.814-23.505-23.814z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E'); - } - } - - &-close { - @include reset-button; - background-position: 50%; - background-repeat: no-repeat; - background-size: 1rem; - cursor: pointer; - opacity: .7; - position: absolute; - top: 0; - right: 0; - width: 9rem; - bottom: 0; - border-radius: 0; - transition: $transition; - background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%20348.333%20348.334%22%3E%3Cpath%20d%3D%22M336.559%2068.611L231.016%20174.165l105.543%20105.549c15.699%2015.705%2015.699%2041.145%200%2056.85-7.844%207.844-18.128%2011.769-28.407%2011.769-10.296%200-20.581-3.919-28.419-11.769L174.167%20231.003%2068.609%20336.563c-7.843%207.844-18.128%2011.769-28.416%2011.769-10.285%200-20.563-3.919-28.413-11.769-15.699-15.698-15.699-41.139%200-56.85l105.54-105.549L11.774%2068.611c-15.699-15.699-15.699-41.145%200-56.844%2015.696-15.687%2041.127-15.687%2056.829%200l105.563%20105.554L279.721%2011.767c15.705-15.687%2041.139-15.687%2056.832%200%2015.705%2015.699%2015.705%2041.145.006%2056.844z%22%20fill%3D%22%23FFF%22/%3E%3C/svg%3E'); - - &:after { - content: ''; - position: absolute; - top: 10px; - bottom: 10px; - left: 0; - border-left: 1px solid rgba(0, 0, 0, .1); - transition: $transition; - } - - &:hover { - background-color: rgba(#000, 0.1); - border-color: rgba(#fff, .5); - - &:after { - opacity: 0; - } - } - &:active { - background-color: rgba(#000, 0.1); - border-color: rgba(#fff, .7); - opacity: 1; - } - - @media screen and (max-width: $screen-sm) { - width: 7rem; - } - - @media screen and (max-width: $screen-xs) { - width: 100%; - height: 3rem; - left: 0; - right: 0; - top: 0; - bottom: auto; - border-left: 0; - border-bottom: 1px solid rgba(255, 255, 255, .7); - } - } -} - -.NotificationAnimation { - &-enter, - &-exit { - transition: opacity 250ms ease, transform 250ms ease; - } - - &-enter { - opacity: 0; - transform: translateY(100%); - - &-active { - opacity: 1; - transform: translateY(0%); - } - } - - &-exit { - opacity: 1; - transform: translateY(0%); - - &-active { - opacity: 0; - transform: translateY(100%); - } - } -} diff --git a/common/containers/TabSection/Notifications.tsx b/common/containers/TabSection/Notifications.tsx deleted file mode 100644 index 3b102e52a..000000000 --- a/common/containers/TabSection/Notifications.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { TransitionGroup, CSSTransition } from 'react-transition-group'; -import { connect } from 'react-redux'; - -import { AppState } from 'features/reducers'; -import { notificationsTypes, notificationsActions } from 'features/notifications'; -import NotificationRow from './NotificationRow'; -import './Notifications.scss'; - -interface Props { - notifications: notificationsTypes.Notification[]; - closeNotification: notificationsActions.TCloseNotification; -} - -export class Notifications extends React.Component { - public render() { - return ( - - {this.props.notifications.map(n => { - return ( - - - - ); - })} - - ); - } -} - -const mapStateToProps = (state: AppState) => ({ - notifications: state.notifications -}); - -export default connect( - mapStateToProps, - { - closeNotification: notificationsActions.closeNotification - } -)(Notifications); diff --git a/common/containers/TabSection/WebTemplate.tsx b/common/containers/TabSection/WebTemplate.tsx deleted file mode 100644 index ae98d0216..000000000 --- a/common/containers/TabSection/WebTemplate.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; -import { Transition } from 'react-spring'; - -import { makeAutoNodeName } from 'libs/nodes'; -import { AppState } from 'features/reducers'; -import { configMetaSelectors } from 'features/config'; -import { sidebarSelectors } from 'features/sidebar'; -import Sidebar from 'containers/Sidebar'; -import NewHeader from 'components/Header/NewHeader/NewHeader'; -import NewFooter from 'components/Footer/NewFooter/NewFooter'; -import { Query } from 'components/renderCbs'; -import Notifications from './Notifications'; -import OfflineTab from './OfflineTab'; -import './WebTemplate.scss'; - -interface StateProps { - isOffline: AppState['config']['meta']['offline']; - latestBlock: AppState['config']['meta']['latestBlock']; - sidebarVisible: ReturnType; -} - -interface OwnProps { - isUnavailableOffline?: boolean; - children: string | React.ReactElement | React.ReactElement[]; -} - -type Props = OwnProps & StateProps; - -class WebTemplate extends Component { - public render() { - const { isUnavailableOffline, children, isOffline, sidebarVisible } = this.props; - - return ( - -
    - ( - - )} - /> - - {sidebarVisible && ((style: any) => )} - -
    - {isUnavailableOffline && isOffline ? : children} -
    -
    - - -
    - - ); - } -} - -function mapStateToProps(state: AppState): StateProps { - return { - isOffline: configMetaSelectors.getOffline(state), - latestBlock: configMetaSelectors.getLatestBlock(state), - sidebarVisible: sidebarSelectors.getSidebarVisible(state) - }; -} - -export default connect(mapStateToProps)(WebTemplate); diff --git a/common/containers/TabSection/index.tsx b/common/containers/TabSection/index.tsx deleted file mode 100644 index 499fbfeb8..000000000 --- a/common/containers/TabSection/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import ElectronTemplate from './ElectronTemplate'; -import WebTemplate from './WebTemplate'; - -const template = process.env.BUILD_ELECTRON ? ElectronTemplate : WebTemplate; - -export default template; diff --git a/common/containers/Tabs/BroadcastTx/index.scss b/common/containers/Tabs/BroadcastTx/index.scss deleted file mode 100644 index 39f284144..000000000 --- a/common/containers/Tabs/BroadcastTx/index.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import "common/sass/variables"; - -.BroadcastTx { - max-width: 520px; - margin: 0 auto; - - &-help { - margin-bottom: $space * 1.5; - } - - &-qr { - max-width: 15rem; - margin: 1rem auto; - width: 100%; - text-align: center; - } -} diff --git a/common/containers/Tabs/BroadcastTx/index.tsx b/common/containers/Tabs/BroadcastTx/index.tsx deleted file mode 100644 index ab3d5e109..000000000 --- a/common/containers/Tabs/BroadcastTx/index.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { Component } from 'react'; -import { Switch, Route, RouteComponentProps } from 'react-router'; -import { connect } from 'react-redux'; -import { toBuffer, bufferToHex } from 'ethereumjs-util'; -import EthTx from 'ethereumjs-tx'; - -import translate from 'translations'; -import { computeIndexingHash, getTransactionFields, makeTransaction } from 'libs/transaction'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { transactionSignActions } from 'features/transaction'; -import { QRCode, Input, CodeBlock } from 'components/ui'; -import { SendButton } from 'components/SendButton'; -import './index.scss'; - -import TabSection from 'containers/TabSection'; -import { RouteNotFound } from 'components/RouteNotFound'; - -interface StateProps { - stateTransaction: AppState['transaction']['sign']['local']['signedTransaction']; -} -interface DispatchProps { - signLocalTransactionSucceeded: transactionSignActions.TSignLocalTransactionSucceeded; - signTransactionFailed: transactionSignActions.TSignTransactionFailed; -} -interface State { - userInput: string; -} -const INITIAL_STATE: State = { userInput: '' }; - -type Props = DispatchProps & StateProps & RouteComponentProps<{}>; - -const getStringifiedTx = (serializedTx: Buffer) => - JSON.stringify(getTransactionFields(makeTransaction(serializedTx)), null, 2); - -class BroadcastTx extends Component { - public state: State = INITIAL_STATE; - - public render() { - const { userInput } = this.state; - const { stateTransaction } = this.props; - const currentPath = this.props.match.url; - return ( - -
    - - ( -
    -

    - {translate('BROADCAST_TX_TITLE')} -

    -

    - {translate('BROADCAST_TX_DESCRIPTION')} -

    - -
    - -
    - - {stateTransaction && ( - - - {getStringifiedTx(stateTransaction)} - - )} - - - -
    - {stateTransaction && } -
    -
    - )} - /> - -
    -
    -
    - ); - } - - protected handleChange = ({ currentTarget }: React.FormEvent) => { - const { value } = currentTarget; - this.setState({ userInput: value }); - try { - const bufferTransaction = toBuffer(value); - const tx = new EthTx(bufferTransaction); - if (!tx.verifySignature()) { - throw Error(); - } - const indexingHash = computeIndexingHash(bufferTransaction); - this.props.signLocalTransactionSucceeded({ - signedTransaction: bufferTransaction, - indexingHash, - noVerify: true - }); - } catch { - this.props.signTransactionFailed(); - } - }; -} - -export default connect( - (state: AppState) => ({ stateTransaction: selectors.getSerializedTransaction(state) }), - { - signLocalTransactionSucceeded: transactionSignActions.signLocalTransactionSucceeded, - signTransactionFailed: transactionSignActions.signTransactionFailed - } -)(BroadcastTx); diff --git a/common/containers/Tabs/CheckTransaction/components/TxHashInput.scss b/common/containers/Tabs/CheckTransaction/components/TxHashInput.scss deleted file mode 100644 index 14541cc92..000000000 --- a/common/containers/Tabs/CheckTransaction/components/TxHashInput.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import 'common/sass/variables'; - -.TxHashInput { - max-width: 700px; - margin: 0 auto; - - &-recent { - text-align: left; - - &-separator { - display: block; - margin: $space-sm 0; - text-align: center; - color: shade-dark(0.3); - } - } -} diff --git a/common/containers/Tabs/CheckTransaction/components/TxHashInput.tsx b/common/containers/Tabs/CheckTransaction/components/TxHashInput.tsx deleted file mode 100644 index e275b6cd3..000000000 --- a/common/containers/Tabs/CheckTransaction/components/TxHashInput.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import React from 'react'; -import { connect } from 'react-redux'; -import Select from 'react-select'; -import moment from 'moment'; - -import translate from 'translations'; -import { isValidTxHash } from 'libs/validators'; -import { AppState } from 'features/reducers'; -import * as selectors from 'features/selectors'; -import { configSelectors } from 'features/config'; -import { Input } from 'components/ui'; -import './TxHashInput.scss'; - -interface OwnProps { - hash?: string; - onSubmit(hash: string): void; -} - -interface ReduxProps { - recentTxs: AppState['transactions']['recent']; - isValidAddress: ReturnType; -} - -type Props = OwnProps & ReduxProps; - -interface State { - hash: string; -} - -interface Option { - label: string; - value: string; -} - -class TxHashInput extends React.Component { - public constructor(props: Props) { - super(props); - this.state = { hash: props.hash || '' }; - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - if (this.props.hash !== nextProps.hash && nextProps.hash) { - this.setState({ hash: nextProps.hash }); - } - } - - public render() { - const { recentTxs, isValidAddress } = this.props; - const { hash } = this.state; - - let selectOptions: Option[] = []; - - if (recentTxs && recentTxs.length) { - selectOptions = recentTxs.map(tx => ({ - label: ` - ${moment(tx.time).format('lll')} - - - ${tx.from.substr(0, 8)}... - to - ${tx.to.substr(0, 8)}... - `, - value: tx.hash - })); - } - - return ( -
    - {!!selectOptions.length && ( -
    - - - {isValidAddress(hash) && ( -

    - {translate('SELECT_RECENT_TX_BY_TXHASH')} -

    - )} - - - - ); - } - - private handleChange = (ev: React.FormEvent) => { - this.setState({ hash: ev.currentTarget.value }); - }; - - private handleSelectTx = (option: Option) => { - if (option && option.value) { - this.setState({ hash: option.value }); - this.props.onSubmit(option.value); - } else { - this.setState({ hash: '' }); - } - }; - - private handleSubmit = (ev: React.FormEvent) => { - ev.preventDefault(); - if (isValidTxHash(this.state.hash)) { - this.props.onSubmit(this.state.hash); - } - }; -} - -export default connect( - (state: AppState): ReduxProps => ({ - recentTxs: selectors.getRecentNetworkTransactions(state), - isValidAddress: configSelectors.getIsValidAddressFn(state) - }) -)(TxHashInput); diff --git a/common/containers/Tabs/CheckTransaction/index.scss b/common/containers/Tabs/CheckTransaction/index.scss deleted file mode 100644 index 4dc40d626..000000000 --- a/common/containers/Tabs/CheckTransaction/index.scss +++ /dev/null @@ -1,12 +0,0 @@ -@import 'common/sass/variables'; - -.CheckTransaction { - &-form { - text-align: center; - - &-desc { - max-width: 580px; - margin: 0 auto $space; - } - } -} diff --git a/common/containers/Tabs/CheckTransaction/index.tsx b/common/containers/Tabs/CheckTransaction/index.tsx deleted file mode 100644 index 784768f1f..000000000 --- a/common/containers/Tabs/CheckTransaction/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import React from 'react'; -import { RouteComponentProps } from 'react-router'; -import { connect } from 'react-redux'; - -import { etherChainExplorerInst } from 'config/data'; -import translate from 'translations'; -import { getParamFromURL } from 'utils/helpers'; -import { NetworkConfig } from 'types/network'; -import { AppState } from 'features/reducers'; -import { configSelectors } from 'features/config'; -import { TransactionStatus as TransactionStatusComponent } from 'components'; -import TabSection from 'containers/TabSection'; -import TxHashInput from './components/TxHashInput'; -import './index.scss'; - -interface StateProps { - network: NetworkConfig; -} - -interface State { - hash: string; -} - -type Props = StateProps & RouteComponentProps<{}>; - -class CheckTransaction extends React.Component { - public state: State = { - hash: '' - }; - - public componentDidMount() { - const hash = getParamFromURL(this.props.location.search, 'txHash'); - if (hash) { - this.setState({ hash }); - } - } - - public UNSAFE_componentWillReceiveProps(nextProps: Props) { - const { network } = this.props; - if (network.chainId !== nextProps.network.chainId) { - this.setState({ hash: '' }); - } - } - - public render() { - const { network } = this.props; - const { hash } = this.state; - const CHECK_TX_KEY = - network.id === 'ETH' - ? 'CHECK_TX_STATUS_DESCRIPTION_MULTIPLE' - : 'CHECK_TX_STATUS_DESCRIPTION_2'; - - return ( - -
    -
    -

    {translate('CHECK_TX_STATUS_TITLE')}

    -

    - {translate('CHECK_TX_STATUS_DESCRIPTION_1')} - {!network.isCustom && - translate(CHECK_TX_KEY, { - $block_explorer: network.blockExplorer.name, - $block_explorer_link: network.blockExplorer.origin, - // On ETH networks, we also show Etherchain. Otherwise, these variables are ignored - $block_explorer_2: etherChainExplorerInst.name, - $block_explorer_link_2: etherChainExplorerInst.origin - })} -

    - -
    - - {hash && ( -
    - -
    - )} -
    -
    - ); - } - - private handleHashSubmit = (hash: string) => { - // Reset to re-mount the component - this.setState({ hash: '' }, () => { - this.setState({ hash }); - }); - }; -} - -export default connect( - (state: AppState): StateProps => ({ - network: configSelectors.getNetworkConfig(state) - }) -)(CheckTransaction); diff --git a/common/containers/Tabs/Contracts/components/Deploy.scss b/common/containers/Tabs/Contracts/components/Deploy.scss deleted file mode 100644 index 22e74016b..000000000 --- a/common/containers/Tabs/Contracts/components/Deploy.scss +++ /dev/null @@ -1,17 +0,0 @@ -.Deploy { - &-field { - margin-top: 0; - - &-reset { - display: block; - margin: auto; - margin-bottom: 0.25rem; - .fa { - margin-right: 8px; - } - } - } - &-submit { - margin-bottom: 1rem; - } -} diff --git a/common/containers/Tabs/Contracts/components/Deploy.tsx b/common/containers/Tabs/Contracts/components/Deploy.tsx deleted file mode 100644 index 450f416e8..000000000 --- a/common/containers/Tabs/Contracts/components/Deploy.tsx +++ /dev/null @@ -1,106 +0,0 @@ -import React, { Component } from 'react'; -import { connect } from 'react-redux'; - -import translate from 'translations'; -import { transactionFieldsActions } from 'features/transaction'; -import { walletActions } from 'features/wallet'; -import { NonceField, TXMetaDataPanel, SigningStatus } from 'components'; -import { FullWalletOnly } from 'components/renderCbs'; -import { TextArea } from 'components/ui'; -import { DataFieldFactory } from 'components/DataFieldFactory'; -import { SendButtonFactory } from 'components/SendButtonFactory'; -import WalletDecrypt, { DISABLE_WALLETS } from 'components/WalletDecrypt'; -import { ConfirmationModal } from 'components/ConfirmationModal'; -import './Deploy.scss'; - -interface DispatchProps { - resetWallet: walletActions.TResetWallet; - resetTransactionRequested: transactionFieldsActions.TResetTransactionRequested; -} - -class DeployClass extends Component { - public componentDidMount() { - this.props.resetTransactionRequested(); - } - - public render() { - const makeContent = () => ( -
    - - -
    -