diff --git a/README.md b/README.md
index 9bd7fe1..2ae8de7 100644
--- a/README.md
+++ b/README.md
@@ -20,11 +20,16 @@ import {PayFiat} from 'payfiat'
class Example extends Component {
render () {
return (
-
+
)
}
}
```
+> **Note** - if `receiverAccount` prop is not provided, then ethereum account address is exported from injected web3 provided like Metamask.
## License
diff --git a/example/src/App.js b/example/src/App.js
index ccade55..be2387e 100644
--- a/example/src/App.js
+++ b/example/src/App.js
@@ -6,7 +6,7 @@ export default class App extends Component {
render() {
return (
)
}
diff --git a/example/src/index.js b/example/src/index.js
index 856fb60..49624cc 100644
--- a/example/src/index.js
+++ b/example/src/index.js
@@ -3,5 +3,4 @@ import ReactDOM from 'react-dom'
import './index.css'
import App from './App'
-console.log(process.env.REACT_APP_PAYFIAT_SERVER_URL)
ReactDOM.render(, document.getElementById('root'))
diff --git a/package.json b/package.json
index 7ee4c25..41cc98d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "payfiat",
- "version": "1.0.0",
+ "version": "1.1.0",
"description": "React component to allow users to pay for Ocean Protocol assets in fiat currency",
"author": "akshay-ap",
"license": "Apache 2.0",
@@ -70,4 +70,4 @@
"files": [
"dist"
]
-}
+}
\ No newline at end of file
diff --git a/server/.env.example b/server/.env.example
new file mode 100644
index 0000000..45e8fb6
--- /dev/null
+++ b/server/.env.example
@@ -0,0 +1,10 @@
+STRIPE_PUBLISHABLE_KEY=
+STRIPE_SECRET_KEY=
+STRIPE_WEBHOOK_SECRET=
+
+INFURA_NODE=
+PACIFIC_NODE="https://pacific.oceanprotocol.com"
+PORT=4242
+OCEAN_CONTRACT_ADDRESS=
+OCEAN_FROM_KEY=
+OCEAN_FROM_ADDRESS=
\ No newline at end of file
diff --git a/server/README.md b/server/README.md
new file mode 100644
index 0000000..695ea21
--- /dev/null
+++ b/server/README.md
@@ -0,0 +1,12 @@
+# Running the server
+
+We included several RESTful server that each implement the same endpoints and logic.
+Pick the language you are most comfortable in and follow the instructions in the directory on how to run.
+
+# Supported languages
+
+* [JavaScript (Node)](node/README.md)
+* [Python (Flask)](python/README.md)
+* [Ruby (Sinatra)](ruby/README.md)
+* [PHP (Slim)](php/README.md)
+* [Java (Spark)](java/README.md)
\ No newline at end of file
diff --git a/server/src/README.md b/server/src/README.md
new file mode 100644
index 0000000..a662713
--- /dev/null
+++ b/server/src/README.md
@@ -0,0 +1,20 @@
+# Name of sample
+An [Express server](http://expressjs.com) implementation
+
+## Requirements
+* Node v10+
+* [Configured .env file](../README.md)
+
+## How to run
+
+1. Install dependencies
+
+```
+npm install
+```
+
+2. Run the application
+
+```
+npm start
+```
diff --git a/server/src/abi/ERC20.json b/server/src/abi/ERC20.json
new file mode 100644
index 0000000..b7561ad
--- /dev/null
+++ b/server/src/abi/ERC20.json
@@ -0,0 +1 @@
+[{"name": "Transfer", "inputs": [{"type": "address", "name": "_from", "indexed": true}, {"type": "address", "name": "_to", "indexed": true}, {"type": "uint256", "name": "_value", "indexed": false}], "anonymous": false, "type": "event"}, {"name": "Approval", "inputs": [{"type": "address", "name": "_owner", "indexed": true}, {"type": "address", "name": "_spender", "indexed": true}, {"type": "uint256", "name": "_value", "indexed": false}], "anonymous": false, "type": "event"}, {"name": "__init__", "outputs": [], "inputs": [{"type": "bytes32", "name": "_name"}, {"type": "bytes32", "name": "_symbol"}, {"type": "uint256", "name": "_decimals"}, {"type": "uint256", "name": "_supply"}], "constant": false, "payable": false, "type": "constructor"}, {"name": "deposit", "outputs": [], "inputs": [], "constant": false, "payable": true, "type": "function", "gas": 74279}, {"name": "withdraw", "outputs": [{"type": "bool", "name": "out"}], "inputs": [{"type": "uint256", "name": "_value"}], "constant": false, "payable": false, "type": "function", "gas": 108706}, {"name": "totalSupply", "outputs": [{"type": "uint256", "name": "out"}], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 543}, {"name": "balanceOf", "outputs": [{"type": "uint256", "name": "out"}], "inputs": [{"type": "address", "name": "_owner"}], "constant": true, "payable": false, "type": "function", "gas": 745}, {"name": "transfer", "outputs": [{"type": "bool", "name": "out"}], "inputs": [{"type": "address", "name": "_to"}, {"type": "uint256", "name": "_value"}], "constant": false, "payable": false, "type": "function", "gas": 74698}, {"name": "transferFrom", "outputs": [{"type": "bool", "name": "out"}], "inputs": [{"type": "address", "name": "_from"}, {"type": "address", "name": "_to"}, {"type": "uint256", "name": "_value"}], "constant": false, "payable": false, "type": "function", "gas": 110600}, {"name": "approve", "outputs": [{"type": "bool", "name": "out"}], "inputs": [{"type": "address", "name": "_spender"}, {"type": "uint256", "name": "_value"}], "constant": false, "payable": false, "type": "function", "gas": 37888}, {"name": "allowance", "outputs": [{"type": "uint256", "name": "out"}], "inputs": [{"type": "address", "name": "_owner"}, {"type": "address", "name": "_spender"}], "constant": true, "payable": false, "type": "function", "gas": 1025}, {"name": "name", "outputs": [{"type": "bytes32", "name": "out"}], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 723}, {"name": "symbol", "outputs": [{"type": "bytes32", "name": "out"}], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 753}, {"name": "decimals", "outputs": [{"type": "uint256", "name": "out"}], "inputs": [], "constant": true, "payable": false, "type": "function", "gas": 783}]
\ No newline at end of file
diff --git a/server/src/abi/token.json b/server/src/abi/token.json
new file mode 100644
index 0000000..e58fde8
--- /dev/null
+++ b/server/src/abi/token.json
@@ -0,0 +1,486 @@
+[
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x06fdde03"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x095ea7b3"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x18160ddd"
+ },
+ {
+ "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",
+ "signature": "0x23b872dd"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x313ce567"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "cap",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x355274ea"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x39509351"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x40c10f19"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x70a08231"
+ },
+ {
+ "constant": false,
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x715018a6"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x8da5cb5b"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "isOwner",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x8f32d59b"
+ },
+ {
+ "constant": true,
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0x95d89b41"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "addMinter",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x983b2d56"
+ },
+ {
+ "constant": false,
+ "inputs": [],
+ "name": "renounceMinter",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x98650275"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0xa457c2d7"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0xa9059cbb"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "isMinter",
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0xaa271e1a"
+ },
+ {
+ "constant": true,
+ "inputs": [
+ {
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "view",
+ "type": "function",
+ "signature": "0xdd62ed3e"
+ },
+ {
+ "constant": false,
+ "inputs": [
+ {
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0xf2fde38b"
+ },
+ {
+ "inputs": [
+ {
+ "name": "_owner",
+ "type": "address"
+ }
+ ],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "constructor",
+ "signature": "constructor"
+ },
+ {
+ "payable": true,
+ "stateMutability": "payable",
+ "type": "fallback"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "MinterAdded",
+ "type": "event",
+ "signature": "0x6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f6"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "MinterRemoved",
+ "type": "event",
+ "signature": "0xe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb66692"
+ },
+ {
+ "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",
+ "signature": "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
+ },
+ {
+ "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",
+ "signature": "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event",
+ "signature": "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"
+ },
+ {
+ "constant": false,
+ "inputs": [],
+ "name": "kill",
+ "outputs": [],
+ "payable": false,
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "signature": "0x41c0e1b5"
+ }
+ ]
\ No newline at end of file
diff --git a/server/src/package-lock.json b/server/src/package-lock.json
new file mode 100644
index 0000000..64e34bb
--- /dev/null
+++ b/server/src/package-lock.json
@@ -0,0 +1,400 @@
+{
+ "name": "stripe-recipe-demo",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "accepts": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+ "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+ "requires": {
+ "mime-types": "~2.1.24",
+ "negotiator": "0.6.2"
+ }
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "body-parser": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+ "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "requires": {
+ "bytes": "3.1.0",
+ "content-type": "~1.0.4",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "on-finished": "~2.3.0",
+ "qs": "6.7.0",
+ "raw-body": "2.4.0",
+ "type-is": "~1.6.17"
+ }
+ },
+ "bytes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+ },
+ "content-disposition": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "content-type": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+ },
+ "cookie": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+ "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "destroy": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
+ },
+ "dotenv": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz",
+ "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg=="
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "express": {
+ "version": "4.17.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+ "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+ "requires": {
+ "accepts": "~1.3.7",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.19.0",
+ "content-disposition": "0.5.3",
+ "content-type": "~1.0.4",
+ "cookie": "0.4.0",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "~1.1.2",
+ "fresh": "0.5.2",
+ "merge-descriptors": "1.0.1",
+ "methods": "~1.1.2",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.7",
+ "proxy-addr": "~2.0.5",
+ "qs": "6.7.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.1.2",
+ "send": "0.17.1",
+ "serve-static": "1.14.1",
+ "setprototypeof": "1.1.1",
+ "statuses": "~1.5.0",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ }
+ },
+ "forwarded": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+ "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ },
+ "fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ },
+ "http-errors": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+ "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.1",
+ "statuses": ">= 1.5.0 < 2",
+ "toidentifier": "1.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "ipaddr.js": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+ "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
+ "mime-db": {
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+ "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+ },
+ "mime-types": {
+ "version": "2.1.24",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+ "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+ "requires": {
+ "mime-db": "1.40.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "negotiator": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+ },
+ "path-to-regexp": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ },
+ "proxy-addr": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+ "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.9.0"
+ }
+ },
+ "qs": {
+ "version": "6.7.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+ "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ },
+ "range-parser": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+ },
+ "raw-body": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+ "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+ "requires": {
+ "bytes": "3.1.0",
+ "http-errors": "1.7.2",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "send": {
+ "version": "0.17.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "~1.1.2",
+ "destroy": "~1.0.4",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "~1.7.2",
+ "mime": "1.6.0",
+ "ms": "2.1.1",
+ "on-finished": "~2.3.0",
+ "range-parser": "~1.2.1",
+ "statuses": "~1.5.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ }
+ }
+ },
+ "serve-static": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+ "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.17.1"
+ }
+ },
+ "setprototypeof": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ },
+ "statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ },
+ "stripe": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/stripe/-/stripe-7.1.0.tgz",
+ "integrity": "sha512-5xZE/HrQ1WjEds5+z6JfcLtXoEbOV5LxfIE0x8YACqqvelNVyW0aErfeUIFSjSgniEDLWvQalb1l2Bx2LQqV0w==",
+ "requires": {
+ "lodash.isplainobject": "^4.0.6",
+ "qs": "^6.6.0",
+ "safe-buffer": "^5.1.1",
+ "uuid": "^3.3.2"
+ }
+ },
+ "toidentifier": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ },
+ "type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "requires": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ }
+ }
+}
diff --git a/server/src/package.json b/server/src/package.json
new file mode 100644
index 0000000..03c2efe
--- /dev/null
+++ b/server/src/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "payfiat-server",
+ "version": "0.0.1",
+ "description": "backend server for Payfiat payment service",
+ "main": "src/server.js",
+ "scripts": {
+ "start": "node server.js",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "engines": {
+ "node": "^10.13.0"
+ },
+ "author": "akshay-ap",
+ "license": "ISC",
+ "dependencies": {
+ "body-parser": "^1.19.0",
+ "express": "^4.17.1",
+ "axios": "^0.19.0",
+ "bignumber.js": "^9.0.0",
+ "concurrently": "4.1.2",
+ "dotenv": "^8.0.0",
+ "ethereumjs-common": "^1.5.0",
+ "ethereumjs-tx": "^2.1.2",
+ "react-router-dom": "^5.1.2",
+ "stripe": "^7.1.0",
+ "web3": "^1.2.4"
+ }
+}
\ No newline at end of file
diff --git a/server/src/routes/crypto.router.js b/server/src/routes/crypto.router.js
new file mode 100644
index 0000000..9506844
--- /dev/null
+++ b/server/src/routes/crypto.router.js
@@ -0,0 +1,111 @@
+const express = require("express");
+const router = express.Router();
+const Web3 = require("web3");
+const BigNumber = require("bignumber.js");
+const allTokens = require("../tokens");
+const erc20 = require("../abi/ERC20.json");
+const axios = require("axios");
+const { sendTx } = require("../utils/signer");
+
+let web3 = new Web3(process.env.INFURA_NODE);
+console.log(process.env.INFURA_NODE);
+
+router.get("/balance", async (req, res, next) => {
+ try {
+ console.log(req.query.token);
+ let balance = 0;
+ let { token, senderAddress } = req.query;
+ if (token == "ETH") {
+ let bal = await web3.eth.getBalance(senderAddress);
+ balance = readableBalance(bal, 18);
+ console.log(balance);
+ } else {
+ let selectedToken = allTokens.find(t => t.symbol == token);
+ //if token doesn't exists
+ if (!selectedToken) {
+ res
+ .status(404)
+ .json({ message: `Token ${token} is currently not supported` });
+ }
+
+ const tokenContract = new web3.eth.Contract(erc20, selectedToken.address);
+ let bal = await tokenContract.methods.balanceOf(senderAddress).call();
+ balance = readableBalance(bal, selectedToken.decimals);
+ }
+ res.status(200).json({ balance });
+ } catch (error) {
+ res.status(500).json({ message: "Oops! Some error occured" });
+ console.error(error);
+ }
+});
+
+router.get("/currentPrice", async (req, res, next) => {
+ let price = 0;
+ try {
+ let { contractAddress, currency } = req.query;
+ let resp = await axios.get(
+ "https://api.coingecko.com/api/v3/simple/token_price/ethereum",
+ {
+ params: {
+ contract_addresses: contractAddress,
+ vs_currencies: currency
+ }
+ }
+ );
+
+ let data = resp.data;
+ console.log(data[contractAddress][currency.toLowerCase()]);
+ price = data[contractAddress][currency.toLowerCase()];
+ } catch (err) {
+ console.error(err.message);
+ }
+
+ res.status(200).json({ price });
+});
+
+router.post("/validatePayment", async (req, res, next) => {
+ try {
+ console.log(req.query.token);
+ let balance = 0;
+ let { amount, contractAddress, txhash, receiverAddress } = req.query;
+ const receipt = await web3.eth.getTransactionReceipt(txhash);
+ if (receipt && receipt.status) {
+ //payment is successful
+ //transfer ocean tokens
+ const oceanInstance = new web3.eth.Contract(erc20, contractAddress);
+ var txData = await oceanInstance.methods
+ .transfer(receiverAddress, amount)
+ .encodeABI();
+
+ let selectedToken = allTokens.find(t => t.address == contractAddress);
+ let sendAmount = parseAmount(amount, selectedToken.address);
+ //transfer tokens to receiver address
+ sendTx(
+ txData,
+ process.env.OCEAN_FROM,
+ process.env.OCEAN_CONTRACT_ADDRESS,
+ 0
+ );
+ }
+ } catch (error) {
+ res.status(500).json({ message: "Oops! Some error occured" });
+ console.error(error);
+ }
+});
+
+function readableBalance(preformattedAmount, decimals) {
+ let bn = new BigNumber(Number(preformattedAmount));
+ let tokenUnit = new BigNumber(10);
+ tokenUnit = tokenUnit.pow(-1 * decimals);
+ return bn.multipliedBy(tokenUnit).toPrecision();
+}
+
+function parseAmount(preformattedAmount, decimals) {
+ let bn = new BigNumber(Number(preformattedAmount));
+ let tokenUnit = new BigNumber(10);
+ tokenUnit = tokenUnit.pow(decimals);
+ let value = bn.multipliedBy(tokenUnit).toPrecision();
+ return value;
+}
+
+module.exports = router;
diff --git a/server/src/routes/fiat.router.js b/server/src/routes/fiat.router.js
new file mode 100644
index 0000000..57b3212
--- /dev/null
+++ b/server/src/routes/fiat.router.js
@@ -0,0 +1,94 @@
+require("dotenv").config();
+const express = require("express");
+const router = express.Router();
+const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);
+const Web3 = require("web3");
+let web3 = new Web3(process.env.INFURA_NODE);
+const { sendTx } = require("../utils/signer");
+const abi = require("../abi/token.json");
+const { parseAmount } = require("../utils/formatter");
+
+router.get("/public-key", (req, res) => {
+ console.log(`pub key - ${process.env.STRIPE_PUBLISHABLE_KEY}`);
+ res.send({ publicKey: process.env.STRIPE_PUBLISHABLE_KEY });
+});
+
+router.post("/create-payment-intent", async (req, res) => {
+ const body = req.body;
+ const options = {
+ ...body
+ };
+ console.log(options)
+
+ try {
+ const paymentIntent = await stripe.paymentIntents.create(options);
+ res.status(200).json(paymentIntent);
+ } catch (err) {
+ res.status(500).json(err);
+ console.error(err.message);
+ }
+});
+
+
+router.get("/transfer-oceans", async (req, res) => {
+ const { receiverAddress, amount } = req.query;
+ let oceanContractAddress = process.env.OCEAN_CONTRACT_ADDRESS;
+
+ try {
+ //create token instance from abi and contract address
+ const tokenInstance = new web3.eth.Contract(abi, oceanContractAddress);
+ let amt = parseAmount(amount).toString();
+ console.log(amt)
+ var txData = await tokenInstance.methods.transfer(receiverAddress, amt).encodeABI();
+ let txHash = await sendTx(txData, process.env.OCEAN_FROM_ADDRESS, oceanContractAddress, 0);
+ res.status(201).json({ txHash });
+ } catch (err) {
+ res.status(500).json({ message: err.message });
+ console.error(err.message);
+ }
+});
+
+// Webhook handler for asynchronous events.
+router.post("/webhook", async (req, res) => {
+ let data;
+ let eventType;
+ // Check if webhook signing is configured.
+ if (process.env.STRIPE_WEBHOOK_SECRET) {
+ // Retrieve the event by verifying the signature using the raw body and secret.
+ let event;
+ let signature = req.headers["stripe-signature"];
+
+ try {
+ event = stripe.webhooks.constructEvent(
+ req.rawBody,
+ signature,
+ process.env.STRIPE_WEBHOOK_SECRET
+ );
+ } catch (err) {
+ console.log(`⚠️ Webhook signature verification failed.`);
+ return res.sendStatus(400);
+ }
+ // Extract the object from the event.
+ data = event.data;
+ eventType = event.type;
+ } else {
+ // Webhook signing is recommended, but if the secret is not configured in `config.js`,
+ // retrieve the event data directly from the request body.
+ data = req.body.data;
+ eventType = req.body.type;
+ }
+
+ if (eventType === "payment_intent.succeeded") {
+ // Fulfill any orders, e-mail receipts, etc
+ console.log("💰 Payment received!");
+ }
+
+ if (eventType === "payment_intent.payment_failed") {
+ // Notify the customer that their order was not fulfilled
+ console.log("❌ Payment failed.");
+ }
+
+ res.sendStatus(200);
+});
+
+module.exports = router;
diff --git a/server/src/routes/index.js b/server/src/routes/index.js
new file mode 100644
index 0000000..16aea26
--- /dev/null
+++ b/server/src/routes/index.js
@@ -0,0 +1,4 @@
+const cryptoRouter = require("./crypto.router");
+const fiatRouter = require("./fiat.router");
+
+module.exports = { cryptoRouter, fiatRouter };
diff --git a/server/src/server.js b/server/src/server.js
new file mode 100644
index 0000000..180dc5d
--- /dev/null
+++ b/server/src/server.js
@@ -0,0 +1,43 @@
+require("dotenv").config();
+
+const express = require("express");
+const bodyParser = require("body-parser");
+const app = express();
+const { fiatRouter, cryptoRouter } = require("./routes");
+
+app.use(bodyParser.json());
+
+// configure CORS headers
+app.use((req, res, next) => {
+ res.header("Access-Control-Allow-Origin", "*");
+ res.header(
+ "Access-Control-Allow-Headers",
+ "Origin, X-Requested-With, Content-Type, Accept, Authorization"
+ );
+ res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE");
+ next();
+});
+
+app.use(
+ express.json({
+ // We need the raw body to verify webhook signatures.
+ // Let's compute it only when hitting the Stripe webhook endpoint.
+ verify: function (req, res, buf) {
+ if (req.originalUrl.startsWith("/webhook")) {
+ req.rawBody = buf.toString();
+ }
+ }
+ })
+);
+
+//routes
+app.use("/fiat", fiatRouter);
+app.use("/crypto", cryptoRouter);
+
+app.get("/", (req, res) => {
+ res.send("Hello from API");
+});
+
+app.listen(process.env.PORT || 4242, () =>
+ console.log(`Node server listening on port ${process.env.PORT || 4242}!`)
+);
diff --git a/server/src/tokens/idex.js b/server/src/tokens/idex.js
new file mode 100644
index 0000000..f54f538
--- /dev/null
+++ b/server/src/tokens/idex.js
@@ -0,0 +1,2494 @@
+module.exports = [
+{ symbol: 'PLU',
+ name: 'Pluton',
+ address: '0xd8912c10681d8b21fd3742244f44658dba12264e',
+ decimals: 18 },
+{ symbol: '1ST',
+ name: 'FirstBlood',
+ address: '0xaf30d2a7e90d7dc361c8c4585e9bb7d2f6f15bc7',
+ decimals: 18 },
+{ symbol: 'SNGLS',
+ name: 'SingularDTV',
+ address: '0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009',
+ decimals: 0 },
+{ symbol: 'DGD',
+ name: 'Digix DAO',
+ address: '0xe0b7927c4af23765cb51314a0e0521a9645f0e2a',
+ decimals: 9 },
+{ symbol: 'DCN',
+ name: 'Dentacoin',
+ address: '0x08d32b0da63e2c3bcf8019c9c5d849d7a9d791e6',
+ decimals: 0 },
+{ symbol: 'RLC',
+ name: 'iExec',
+ address: '0x607f4c5bb672230e8672085532f7e901544a7375',
+ decimals: 9 },
+{ symbol: 'TRST',
+ name: 'Trustcoin',
+ address: '0xcb94be6f13a1182e4a4b6140cb7bf2025d28e41b',
+ decimals: 6 },
+{ symbol: 'GNO',
+ name: 'Gnosis',
+ address: '0x6810e776880c02933d47db1b9fc05908e5386b96',
+ decimals: 18 },
+{ symbol: 'WINGS',
+ name: 'WINGS',
+ address: '0x667088b212ce3d06a1b553a7221e1fd19000d9af',
+ decimals: 18 },
+{ symbol: 'TKN',
+ name: 'Monolith',
+ address: '0xaaaf91d9b90df800df4f55c205fd6989c977e73a',
+ decimals: 8 },
+{ symbol: 'HMQ',
+ name: 'Humaniq',
+ address: '0xcbcc0f036ed4788f63fc0fee32873d6a7487b908',
+ decimals: 8 },
+{ symbol: 'ANT',
+ name: 'Aragon',
+ address: '0x960b236a07cf122663c4303350609a66a7b288c0',
+ decimals: 18 },
+{ symbol: 'BAT',
+ name: 'Basic Attention Token',
+ address: '0x0d8775f648430679a709e98d2b0cb6250d2887ef',
+ decimals: 18 },
+{ symbol: 'MYST',
+ name: 'Mysterium',
+ address: '0xa645264c5603e96c3b0b078cdab68733794b0a71',
+ decimals: 8 },
+{ symbol: 'BNT',
+ name: 'Bancor',
+ address: '0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c',
+ decimals: 18 },
+{ symbol: 'SNT',
+ name: 'Status',
+ address: '0x744d70fdbe2ba4cf95131626614a1763df805b9e',
+ decimals: 18 },
+{ symbol: 'SNM',
+ name: 'SONM',
+ address: '0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63',
+ decimals: 18 },
+{ symbol: 'NMR',
+ name: 'Numeraire',
+ address: '0x1776e1f26f98b1a5df9cd347953a26dd3cb46671',
+ decimals: 18 },
+{ symbol: 'PAY',
+ name: 'TenX',
+ address: '0xb97048628db6b661d4c2aa833e95dbe1a905b280',
+ decimals: 18 },
+{ symbol: 'PPT',
+ name: 'Populous',
+ address: '0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a',
+ decimals: 8 },
+{ symbol: 'FUN',
+ name: 'FunFair',
+ address: '0x419d0d8bdd9af5e606ae2232ed285aff190e711b',
+ decimals: 8 },
+{ symbol: 'ADT',
+ name: 'AdToken',
+ address: '0xd0d6d6c5fe4a677d343cc433536bb717bae167dd',
+ decimals: 9 },
+{ symbol: 'STORJ',
+ name: 'StorjToken',
+ address: '0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac',
+ decimals: 8 },
+{ symbol: 'ADX',
+ name: 'AdEx',
+ address: '0x4470bb87d77b963a013db939be332f927f2b992e',
+ decimals: 4 },
+{ symbol: 'MTL',
+ name: 'Metal',
+ address: '0xf433089366899d83a9f26a773d59ec7ecf30355e',
+ decimals: 8 },
+{ symbol: 'PLR',
+ name: 'PILLAR',
+ address: '0xe3818504c1b32bf1557b16c238b2e01fd3149c17',
+ decimals: 18 },
+{ symbol: 'CVC',
+ name: 'Civic',
+ address: '0x41e5560054824ea6b0732e656e3ad64e20e94e45',
+ decimals: 8 },
+{ symbol: 'IXT',
+ name: 'iXledger',
+ address: '0xfca47962d45adfdfd1ab2d972315db4ce7ccf094',
+ decimals: 8 },
+{ symbol: 'DNT',
+ name: 'district0x',
+ address: '0x0abdace70d3790235af448c88547603b945604ea',
+ decimals: 18 },
+{ symbol: 'ETHOS',
+ name: 'Ethos',
+ address: '0x5af2be193a6abca9c8817001f45744777db30756',
+ decimals: 8 },
+{ symbol: 'STX',
+ name: 'Stox',
+ address: '0x006bea43baa3f7a6f765f14f10a1a1b08334ef45',
+ decimals: 18 },
+{ symbol: 'DENT',
+ name: 'DENT',
+ address: '0x3597bfd533a99c9aa083587b074434e61eb0a258',
+ decimals: 8 },
+{ symbol: 'SAN',
+ name: 'SANtiment',
+ address: '0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098',
+ decimals: 18 },
+{ symbol: 'ZRX',
+ name: '0x',
+ address: '0xe41d2489571d322189246dafa5ebde1f4699f498',
+ decimals: 18 },
+{ symbol: 'MCO',
+ name: 'crypto.com',
+ address: '0xb63b606ac810a52cca15e44bb630fd42d8d1d83d',
+ decimals: 8 },
+{ symbol: 'POE',
+ name: 'Poet',
+ address: '0x0e0989b1f9b8a38983c2ba8053269ca62ec9b195',
+ decimals: 8 },
+{ symbol: 'WTT',
+ name: 'Cryptonomos',
+ address: '0x84119cb33e8f590d75c2d6ea4e6b0741a7494eda',
+ decimals: 0 },
+{ symbol: 'SCL',
+ name: 'SOCIAL',
+ address: '0xd7631787b4dcc87b1254cfd1e5ce48e96823dee8',
+ decimals: 8 },
+{ symbol: 'RVT',
+ name: 'RvT',
+ address: '0x3d1ba9be9f66b8ee101911bc36d3fb562eac2244',
+ decimals: 18 },
+{ symbol: 'TNT',
+ name: 'Tierion',
+ address: '0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8',
+ decimals: 8 },
+{ symbol: 'REX',
+ name: 'imbrex',
+ address: '0xf05a9382a4c3f29e2784502754293d88b835109c',
+ decimals: 18 },
+{ symbol: 'MANA',
+ name: 'Decentraland',
+ address: '0x0f5d2fb29fb7d3cfee444a200298f468908cc942',
+ decimals: 18 },
+{ symbol: 'KICK',
+ name: 'KickCoin',
+ address: '0x27695e09149adc738a978e9a678f99e4c39e9eb9',
+ decimals: 8 },
+{ symbol: 'MTH',
+ name: 'Monetha',
+ address: '0xaf4dce16da2877f8c9e00544c93b62ac40631f16',
+ decimals: 5 },
+{ symbol: 'WTC',
+ name: 'Walton',
+ address: '0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74',
+ decimals: 18 },
+{ symbol: 'ELIX',
+ name: 'elixir',
+ address: '0xc8c6a31a4a806d3710a7b38b7b296d2fabccdba8',
+ decimals: 18 },
+{ symbol: 'UMC',
+ name: 'UmbrellaCoin',
+ address: '0x190fb342aa6a15eb82903323ae78066ff8616746',
+ decimals: 6 },
+{ symbol: 'ART',
+ name: 'Maecenas',
+ address: '0xfec0cf7fe078a500abf15f1284958f22049c2c7e',
+ decimals: 18 },
+{ symbol: 'PRO2',
+ name: 'Propy',
+ address: '0x226bb599a12c826476e3a771454697ea52e9e220',
+ decimals: 8 },
+{ symbol: 'HBT',
+ name: 'Hubiits',
+ address: '0xdd6c68bb32462e01705011a4e2ad1a60740f217f',
+ decimals: 15 },
+{ symbol: 'KNC',
+ name: 'Kyber',
+ address: '0xdd974d5c2e2928dea5f71b9825b8b646686bd200',
+ decimals: 18 },
+{ symbol: 'RLX',
+ name: 'Relex',
+ address: '0x4a42d2c580f83dce404acad18dab26db11a1750e',
+ decimals: 18 },
+{ symbol: 'LINK',
+ name: 'ChainLink',
+ address: '0x514910771af9ca656af840dff83e8264ecf986ca',
+ decimals: 18 },
+{ symbol: 'TFT',
+ name: 'Travelling',
+ address: '0x13ea82d5e1a811f55bda9c86fdd6195a6bd23aed',
+ decimals: 8 },
+{ symbol: 'RPL',
+ name: 'Rocket Pool',
+ address: '0xb4efd85c19999d84251304bda99e90b92300bd93',
+ decimals: 18 },
+{ symbol: 'CND',
+ name: 'Cindicator',
+ address: '0xd4c435f5b09f855c3317c8524cb1f586e42795fa',
+ decimals: 18 },
+{ symbol: 'BTM',
+ name: 'Bytom',
+ address: '0xcb97e65f07da24d46bcdd078ebebd7c6e6e3d750',
+ decimals: 8 },
+{ symbol: 'SALT',
+ name: 'SALT Lending',
+ address: '0x4156d3342d5c385a87d264f90653733592000581',
+ decimals: 8 },
+{ symbol: 'HVN',
+ name: 'Hive',
+ address: '0xc0eb85285d83217cd7c891702bcbc0fc401e2d9d',
+ decimals: 8 },
+{ symbol: 'EVX',
+ name: 'Everex',
+ address: '0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8',
+ decimals: 4 },
+{ symbol: 'ENG',
+ name: 'Enigma',
+ address: '0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4',
+ decimals: 8 },
+{ symbol: 'AST',
+ name: 'AirSwap',
+ address: '0x27054b13b1b798b345b591a4d22e6562d47ea75a',
+ decimals: 4 },
+{ symbol: 'REQ',
+ name: 'Request Network',
+ address: '0x8f8221afbb33998d8584a2b05749ba73c37a938a',
+ decimals: 18 },
+{ symbol: 'ENJ',
+ name: 'EnjinCoin',
+ address: '0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c',
+ decimals: 18 },
+{ symbol: 'DATA',
+ name: 'Streamr',
+ address: '0x0cf0ee63788a0849fe5297f3407f701e122cc023',
+ decimals: 18 },
+{ symbol: 'ALIS',
+ name: 'ALIS Media',
+ address: '0xea610b1153477720748dc13ed378003941d84fab',
+ decimals: 18 },
+{ symbol: 'VIB',
+ name: 'Viberate',
+ address: '0x2c974b2d0ba1716e644c1fc59982a89ddd2ff724',
+ decimals: 18 },
+{ symbol: 'RCN',
+ name: 'Ripio',
+ address: '0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6',
+ decimals: 18 },
+{ symbol: 'EDO',
+ name: 'Eidoo',
+ address: '0xced4e93198734ddaff8492d525bd258d49eb388e',
+ decimals: 18 },
+{ symbol: 'BLUE',
+ name: 'Ethereum Blue',
+ address: '0x539efe69bcdd21a83efd9122571a64cc25e0282b',
+ decimals: 8 },
+{ symbol: 'ACC',
+ name: 'Accelerator',
+ address: '0x13f1b7fdfbe1fc66676d56483e21b1ecb40b58e2',
+ decimals: 18 },
+{ symbol: 'ARN',
+ name: 'Aeron',
+ address: '0xba5f11b16b155792cf3b2e6880e8706859a8aeb6',
+ decimals: 8 },
+{ symbol: 'LIFE',
+ name: 'LIFE Token',
+ address: '0xff18dbc487b4c2e3222d115952babfda8ba52f5f',
+ decimals: 18 },
+{ symbol: 'EPY',
+ name: 'Emphy',
+ address: '0x50ee674689d75c0f88e8f83cfe8c4b69e8fd590d',
+ decimals: 8 },
+{ symbol: 'SWM',
+ name: 'Swarm Fund Token',
+ address: '0x9e88613418cf03dca54d6a2cf6ad934a78c7a17a',
+ decimals: 18 },
+{ symbol: 'EXMR',
+ name: 'EXMR',
+ address: '0xc98e0639c6d2ec037a615341c369666b110e80e5',
+ decimals: 8 },
+{ symbol: 'RDN',
+ name: 'Raiden',
+ address: '0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6',
+ decimals: 18 },
+{ symbol: 'GRID',
+ name: 'Grid+',
+ address: '0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd',
+ decimals: 12 },
+{ symbol: 'UKG',
+ name: 'Unikoin Gold',
+ address: '0x24692791bc444c5cd0b81e3cbcaba4b04acd1f3b',
+ decimals: 18 },
+{ symbol: 'GVT',
+ name: 'Genesis Vision',
+ address: '0x103c3a209da59d3e7c4a89307e66521e081cfdf0',
+ decimals: 18 },
+{ symbol: 'ASTRO',
+ name: 'AstroTokens',
+ address: '0x7b22938ca841aa392c93dbb7f4c42178e3d65e88',
+ decimals: 4 },
+{ symbol: 'DNA',
+ name: 'Gene-Chain Coin',
+ address: '0x82b0e50478eeafde392d45d1259ed1071b6fda81',
+ decimals: 18 },
+{ symbol: 'COV',
+ name: 'Covesting',
+ address: '0xe2fb6529ef566a080e6d23de0bd351311087d567',
+ decimals: 18 },
+{ symbol: 'LEND',
+ name: 'ETHLend',
+ address: '0x80fb784b7ed66730e8b1dbd9820afd29931aab03',
+ decimals: 18 },
+{ symbol: 'PKT',
+ name: 'PlayKey Token',
+ address: '0x2604fa406be957e542beb89e6754fcde6815e83f',
+ decimals: 18 },
+{ symbol: 'ITT',
+ name: 'ITT',
+ address: '0x0aef06dcccc531e581f0440059e6ffcc206039ee',
+ decimals: 8 },
+{ symbol: 'DRGN',
+ name: 'Dragonchain',
+ address: '0x419c4db4b9e25d6db2ad9691ccb832c8d9fda05e',
+ decimals: 18 },
+{ symbol: 'NIO',
+ name: 'Autonio',
+ address: '0x5554e04e76533e1d14c52f05beef6c9d329e1e30',
+ decimals: 0 },
+{ symbol: 'GET',
+ name: 'GUTS',
+ address: '0x8a854288a5976036a725879164ca3e91d30c6a1b',
+ decimals: 18 },
+{ symbol: 'BNTY',
+ name: 'Bounty0x',
+ address: '0xd2d6158683aee4cc838067727209a0aaf4359de3',
+ decimals: 18 },
+{ symbol: 'CAJ',
+ name: 'Cajutel',
+ address: '0x3c6a7ab47b5f058be0e7c7fe1a4b7925b8aca40e',
+ decimals: 18 },
+{ symbol: 'SPANK',
+ name: 'SpankChain',
+ address: '0x42d6622dece394b54999fbd73d108123806f6a18',
+ decimals: 18 },
+{ symbol: 'BKX',
+ name: 'BANKEX',
+ address: '0x45245bc59219eeaaf6cd3f382e078a461ff9de7b',
+ decimals: 18 },
+{ symbol: 'BLT',
+ name: 'Bloom',
+ address: '0x107c4504cd79c5d2696ea0030a8dd4e92601b82e',
+ decimals: 18 },
+{ symbol: 'EXRN',
+ name: 'EXRNchain',
+ address: '0xe469c4473af82217b30cf17b10bcdb6c8c796e75',
+ decimals: 0 },
+{ symbol: 'WAX',
+ name: 'Worldwide Asset eXchange',
+ address: '0x39bb259f66e1c59d5abef88375979b4d20d98022',
+ decimals: 8 },
+{ symbol: 'AIX',
+ name: 'Aigang',
+ address: '0x1063ce524265d5a3a624f4914acd573dd89ce988',
+ decimals: 18 },
+{ symbol: 'DAI',
+ name: 'Maker DAI',
+ address: '0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359',
+ decimals: 18 },
+{ symbol: 'GIM',
+ name: 'Gimli',
+ address: '0xae4f56f072c34c0a65b3ae3e4db797d831439d93',
+ decimals: 8 },
+{ symbol: 'CAT2',
+ name: 'BitClave',
+ address: '0x1234567461d3f8db7496581774bd869c83d51c93',
+ decimals: 18 },
+{ symbol: 'CAT',
+ name: 'BlockCAT',
+ address: '0x56ba2ee7890461f463f7be02aac3099f6d5811a8',
+ decimals: 18 },
+{ symbol: 'MKR',
+ name: 'Maker',
+ address: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
+ decimals: 18 },
+{ symbol: 'DMT',
+ name: 'DMarket',
+ address: '0x2ccbff3a042c68716ed2a2cb0c544a9f1d1935e1',
+ decimals: 8 },
+{ symbol: 'TAU',
+ name: 'Lamden',
+ address: '0xc27a2f05fa577a83ba0fdb4c38443c0718356501',
+ decimals: 18 },
+{ symbol: 'CRED',
+ name: 'Verify',
+ address: '0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd',
+ decimals: 18 },
+{ symbol: 'VEE',
+ name: 'blockv',
+ address: '0x340d2bde5eb28c1eed91b2f790723e3b160613b7',
+ decimals: 18 },
+{ symbol: 'UFR',
+ name: 'upfiring',
+ address: '0xea097a2b1db00627b2fa17460ad260c016016977',
+ decimals: 18 },
+{ symbol: 'SXUT',
+ name: 'Spectre U-Token',
+ address: '0x2c82c73d5b34aa015989462b2948cd616a37641f',
+ decimals: 18 },
+{ symbol: 'WABI',
+ name: 'WaBi',
+ address: '0x286bda1413a2df81731d4930ce2f862a35a609fe',
+ decimals: 18 },
+{ symbol: 'APPC',
+ name: 'AppCoins',
+ address: '0x1a7a8bd9106f2b8d977e08582dc7d24c723ab0db',
+ decimals: 18 },
+{ symbol: 'BDG',
+ name: 'Bitdegree',
+ address: '0x1961b3331969ed52770751fc718ef530838b6dee',
+ decimals: 18 },
+{ symbol: 'WAND',
+ name: 'WANDX',
+ address: '0x27f610bf36eca0939093343ac28b1534a721dbb4',
+ decimals: 18 },
+{ symbol: 'LEV',
+ name: 'LeverJ',
+ address: '0x0f4ca92660efad97a9a70cb0fe969c755439772c',
+ decimals: 9 },
+{ symbol: 'REF',
+ name: 'RefToken',
+ address: '0x89303500a7abfb178b274fd89f2469c264951e1f',
+ decimals: 8 },
+{ symbol: 'TEL',
+ name: 'Telcoin',
+ address: '0x85e076361cc813a908ff672f9bad1541474402b2',
+ decimals: 2 },
+{ symbol: 'INS',
+ name: 'INS Ecosystem',
+ address: '0x5b2e4a700dfbc560061e957edec8f6eeeb74a320',
+ decimals: 10 },
+{ symbol: 'NEU',
+ name: 'Neumark',
+ address: '0xa823e6722006afe99e91c30ff5295052fe6b8e32',
+ decimals: 18 },
+{ symbol: 'HQX',
+ name: 'Hoqu',
+ address: '0x1b957dc4aefeed3b4a2351a6a6d5cbfbba0cecfa',
+ decimals: 18 },
+{ symbol: 'POWR',
+ name: 'Power Ledger',
+ address: '0x595832f8fc6bf59c85c527fec3740a1b7a361269',
+ decimals: 6 },
+{ symbol: 'KEY',
+ name: 'SelfKey',
+ address: '0x4cc19356f2d37338b9802aa8e8fc58b0373296e7',
+ decimals: 18 },
+{ symbol: 'PRFT',
+ name: 'Proof',
+ address: '0xc5cea8292e514405967d958c2325106f2f48da77',
+ decimals: 18 },
+{ symbol: 'H2O',
+ name: 'Hydrominer',
+ address: '0xfeed1a53bd53ffe453d265fc6e70dd85f8e993b6',
+ decimals: 18 },
+{ symbol: 'STK',
+ name: 'STACK',
+ address: '0xae73b38d1c9a8b274127ec30160a4927c4d71824',
+ decimals: 18 },
+{ symbol: 'ARY',
+ name: 'Blockarray',
+ address: '0xa5f8fc0921880cb7342368bd128eb8050442b1a1',
+ decimals: 18 },
+{ symbol: 'CRPT',
+ name: 'Crypterium',
+ address: '0x80a7e048f37a50500351c204cb407766fa3bae7f',
+ decimals: 18 },
+{ symbol: 'SAL',
+ name: 'SALPay',
+ address: '0x75c5ee419331b6150879530d06f9ba054755f1da',
+ decimals: 18 },
+{ symbol: 'ELF',
+ name: 'Aelf',
+ address: '0xbf2179859fc6d5bee9bf9158632dc51678a4100e',
+ decimals: 18 },
+{ symbol: 'QSP',
+ name: 'Quantstamp',
+ address: '0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d',
+ decimals: 18 },
+{ symbol: 'CBT',
+ name: 'CommerceBlock',
+ address: '0x076c97e1c869072ee22f8c91978c99b4bcb02591',
+ decimals: 18 },
+{ symbol: 'INXT',
+ name: 'Internxt',
+ address: '0xa8006c4ca56f24d6836727d106349320db7fef82',
+ decimals: 8 },
+{ symbol: 'PRO',
+ name: 'ProChain',
+ address: '0x9041fe5b3fdea0f5e4afdc17e75180738d877a01',
+ decimals: 18 },
+{ symbol: 'IDXM',
+ name: 'IDEX Membership',
+ address: '0xcc13fc627effd6e35d2d2706ea3c4d7396c610ea',
+ decimals: 8 },
+{ symbol: 'REAL',
+ name: 'Real.Markets',
+ address: '0x9214ec02cb71cba0ada6896b8da260736a67ab10',
+ decimals: 18 },
+{ symbol: 'AGI',
+ name: 'Singularity.net',
+ address: '0x8eb24319393716668d768dcec29356ae9cffe285',
+ decimals: 8 },
+{ symbol: 'MIRO',
+ name: 'Mirocana',
+ address: '0x0168703872fa06741ecaa9dff7803168e83f7ae0',
+ decimals: 8 },
+{ symbol: 'SKR',
+ name: 'Skrilla',
+ address: '0x4c382f8e09615ac86e08ce58266cc227e7d4d913',
+ decimals: 6 },
+{ symbol: 'STORM',
+ name: 'Storm Market',
+ address: '0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433',
+ decimals: 18 },
+{ symbol: 'BTO',
+ name: 'Bottos',
+ address: '0x36905fc93280f52362a1cbab151f25dc46742fb5',
+ decimals: 18 },
+{ symbol: 'JNT',
+ name: 'Jibrel Network Token',
+ address: '0xa5fd1a791c4dfcaacc963d4f73c6ae5824149ea7',
+ decimals: 18 },
+{ symbol: 'EQC',
+ name: 'Qchain',
+ address: '0xc438b4c0dfbb1593be6dee03bbd1a84bb3aa6213',
+ decimals: 8 },
+{ symbol: 'SRN',
+ name: 'SIRIN LABS',
+ address: '0x68d57c9a1c35f63e2c83ee8e49a64e9d70528d25',
+ decimals: 18 },
+{ symbol: 'DAT',
+ name: 'Datum',
+ address: '0x81c9151de0c8bafcd325a57e3db5a5df1cebf79c',
+ decimals: 18 },
+{ symbol: 'IDH',
+ name: 'INDAHASH COIN',
+ address: '0x5136c98a80811c3f46bdda8b5c4555cfd9f812f0',
+ decimals: 6 },
+{ symbol: 'LOCI',
+ name: 'LOCIcoin',
+ address: '0x9c23d67aea7b95d80942e3836bcdf7e708a747c2',
+ decimals: 18 },
+{ symbol: 'ESZ',
+ name: 'ESZCoin',
+ address: '0xe8a1df958be379045e2b46a31a98b93a2ecdfded',
+ decimals: 18 },
+{ symbol: 'SETH',
+ name: 'Sether',
+ address: '0x78b039921e84e726eb72e7b1212bb35504c645ca',
+ decimals: 18 },
+{ symbol: 'BCDT',
+ name: 'BCDiploma',
+ address: '0xacfa209fb73bf3dd5bbfb1101b9bc999c49062a5',
+ decimals: 18 },
+{ symbol: 'TTT',
+ name: 'Tap Coin',
+ address: '0x9f599410d207f3d2828a8712e5e543ac2e040382',
+ decimals: 18 },
+{ symbol: 'CXO',
+ name: 'CargoX',
+ address: '0xb6ee9668771a79be7967ee29a63d4184f8097143',
+ decimals: 18 },
+{ symbol: 'WISH',
+ name: 'MyWish',
+ address: '0x1b22c32cd936cb97c28c5690a0695a82abf688e6',
+ decimals: 18 },
+{ symbol: 'EVE',
+ name: 'Devery',
+ address: '0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c',
+ decimals: 18 },
+{ symbol: 'NEXT',
+ name: 'NEXT.exchange',
+ address: '0x4e005a760e00e17c4912a8070eec047cfecbabbb',
+ decimals: 18 },
+{ symbol: 'CV',
+ name: 'CarVertical',
+ address: '0xda6cb58a0d0c01610a29c5a65c303e13e885887c',
+ decimals: 18 },
+{ symbol: 'TRAC',
+ name: 'Origin Trail',
+ address: '0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f',
+ decimals: 18 },
+{ symbol: 'QASH',
+ name: 'QASH',
+ address: '0x618e75ac90b12c6049ba3b27f5d5f8651b0037f6',
+ decimals: 6 },
+{ symbol: 'PARETO',
+ name: 'Pareto Network',
+ address: '0xea5f88e54d982cbb0c441cde4e79bc305e5b43bc',
+ decimals: 18 },
+{ symbol: 'IOST',
+ name: 'IOS',
+ address: '0xfa1a856cfa3409cfa145fa4e20eb270df3eb21ab',
+ decimals: 18 },
+{ symbol: 'DTA',
+ name: 'DATA',
+ address: '0x69b148395ce0015c13e36bffbad63f49ef874e03',
+ decimals: 18 },
+{ symbol: 'COFI',
+ name: 'CoinFI',
+ address: '0x3136ef851592acf49ca4c825131e364170fa32b3',
+ decimals: 18 },
+{ symbol: 'CHSB',
+ name: 'SwissBorg',
+ address: '0xba9d4199fab4f26efe3551d490e3821486f135ba',
+ decimals: 8 },
+{ symbol: 'FOTA',
+ name: 'Fortuna',
+ address: '0x4270bb238f6dd8b1c3ca01f96ca65b2647c06d3c',
+ decimals: 18 },
+{ symbol: 'CPC',
+ name: 'CPChain',
+ address: '0xfae4ee59cdd86e3be9e8b90b53aa866327d7c090',
+ decimals: 18 },
+{ symbol: 'ADB',
+ name: 'Adbank',
+ address: '0x2baac9330cf9ac479d819195794d79ad0c7616e3',
+ decimals: 18 },
+{ symbol: 'ING',
+ name: 'Iungo',
+ address: '0x24ddff6d8b8a42d835af3b440de91f3386554aa4',
+ decimals: 18 },
+{ symbol: 'STAR',
+ name: 'Starbase',
+ address: '0xf70a642bd387f94380ffb90451c2c81d4eb82cbc',
+ decimals: 18 },
+{ symbol: 'POLY',
+ name: 'Polymath',
+ address: '0x9992ec3cf6a55b00978cddf2b27bc6882d88d1ec',
+ decimals: 18 },
+{ symbol: 'MTN',
+ name: 'MedToken',
+ address: '0x41dbecc1cdc5517c6f76f6a6e836adbee2754de3',
+ decimals: 18 },
+{ symbol: 'BEE',
+ name: 'Bee Token',
+ address: '0x4d8fc1453a0f359e99c9675954e656d80d996fbf',
+ decimals: 18 },
+{ symbol: 'BLZ',
+ name: 'Bluzelle',
+ address: '0x5732046a883704404f284ce41ffadd5b007fd668',
+ decimals: 18 },
+{ symbol: 'MWAT',
+ name: 'RED MWAT',
+ address: '0x6425c6be902d692ae2db752b3c268afadb099d3b',
+ decimals: 18 },
+{ symbol: 'WPR',
+ name: 'WePower Token',
+ address: '0x4cf488387f035ff08c371515562cba712f9015d4',
+ decimals: 18 },
+{ symbol: 'SIG',
+ name: 'Spectiv Signal',
+ address: '0x6888a16ea9792c15a4dcf2f6c623d055c8ede792',
+ decimals: 18 },
+{ symbol: 'REN',
+ name: 'Republic Token',
+ address: '0x408e41876cccdc0f92210600ef50372656052a38',
+ decimals: 18 },
+{ symbol: 'DADI',
+ name: 'DADI',
+ address: '0xfb2f26f266fb2805a387230f2aa0a331b4d96fba',
+ decimals: 18 },
+{ symbol: 'LHCOIN',
+ name: 'LHCoin',
+ address: '0x0778cc2e8bbad3d483e82371606d100cc8604522',
+ decimals: 8 },
+{ symbol: 'OPT',
+ name: 'OPUS',
+ address: '0x4355fc160f74328f9b383df2ec589bb3dfd82ba0',
+ decimals: 18 },
+{ symbol: 'REM',
+ name: 'REMME',
+ address: '0x83984d6142934bb535793a82adb0a46ef0f66b6d',
+ decimals: 4 },
+{ symbol: 'DXT',
+ name: 'DataWallet Token',
+ address: '0x8db54ca569d3019a2ba126d03c37c44b5ef81ef6',
+ decimals: 8 },
+{ symbol: 'DAN',
+ name: 'DAN Token',
+ address: '0x9b70740e708a083c6ff38df52297020f5dfaa5ee',
+ decimals: 10 },
+{ symbol: 'TKT',
+ name: 'CryptoTickets COIN',
+ address: '0x233cea452c8b2e46f54d3772592edfeb8edbb763',
+ decimals: 18 },
+{ symbol: 'CRC',
+ name: 'Crycash',
+ address: '0xf41e5fbc2f6aac200dd8619e121ce1f05d150077',
+ decimals: 18 },
+{ symbol: 'HKN',
+ name: 'HACKEN',
+ address: '0x9e6b2b11542f2bc52f3029077ace37e8fd838d7f',
+ decimals: 8 },
+{ symbol: 'FSN',
+ name: 'Fusion Token',
+ address: '0xd0352a019e9ab9d757776f532377aaebd36fd541',
+ decimals: 18 },
+{ symbol: 'DTH',
+ name: 'Dether',
+ address: '0x5adc961d6ac3f7062d2ea45fefb8d8167d44b190',
+ decimals: 18 },
+{ symbol: 'X8X',
+ name: 'X8X Token',
+ address: '0x910dfc18d6ea3d6a7124a6f8b5458f281060fa4c',
+ decimals: 18 },
+{ symbol: 'MTRC',
+ name: 'ModulTrade',
+ address: '0x1e49ff77c355a3e38d6651ce8404af0e48c5395f',
+ decimals: 18 },
+{ symbol: 'ITC',
+ name: 'IoT Chain',
+ address: '0x5e6b6d9abad9093fdc861ea1600eba1b355cd940',
+ decimals: 18 },
+{ symbol: 'RFR',
+ name: 'Refereum',
+ address: '0xd0929d411954c47438dc1d871dd6081f5c5e149c',
+ decimals: 4 },
+{ symbol: 'FND',
+ name: 'FundRequest',
+ address: '0x4df47b4969b2911c966506e3592c41389493953b',
+ decimals: 18 },
+{ symbol: 'AUN',
+ name: 'Authoreon',
+ address: '0x5b7093fe2491dfb058c94bcd62a1cd4d822f884c',
+ decimals: 18 },
+{ symbol: 'NTK',
+ name: 'NeuroToken',
+ address: '0x69beab403438253f13b6e92db91f7fb849258263',
+ decimals: 18 },
+{ symbol: 'GEM',
+ name: 'Gems',
+ address: '0xc7bba5b765581efb2cdd2679db5bea9ee79b201f',
+ decimals: 18 },
+{ symbol: 'CS',
+ name: 'CREDITS',
+ address: '0x46b9ad944d1059450da1163511069c718f699d31',
+ decimals: 6 },
+{ symbol: 'DRG',
+ name: 'DRAGON',
+ address: '0x814f67fa286f7572b041d041b1d99b432c9155ee',
+ decimals: 8 },
+{ symbol: 'NGC',
+ name: 'NAGA',
+ address: '0x72dd4b6bd852a3aa172be4d6c5a6dbec588cf131',
+ decimals: 18 },
+{ symbol: 'MNTP',
+ name: 'Goldmint',
+ address: '0x83cee9e086a77e492ee0bb93c2b0437ad6fdeccc',
+ decimals: 18 },
+{ symbol: 'LION',
+ name: 'CoinLion',
+ address: '0x2167fb82309cf76513e83b25123f8b0559d6b48f',
+ decimals: 18 },
+{ symbol: 'LIF',
+ name: 'Lif',
+ address: '0xeb9951021698b42e4399f9cbb6267aa35f82d59d',
+ decimals: 18 },
+{ symbol: 'FKX',
+ name: 'KnoxsterToken',
+ address: '0x009e864923b49263c7f10d19b7f8ab7a9a5aad33',
+ decimals: 18 },
+{ symbol: 'STQ',
+ name: 'Storiqa',
+ address: '0x5c3a228510d246b78a3765c20221cbf3082b44a4',
+ decimals: 18 },
+{ symbol: 'UTK',
+ name: 'UTRUST',
+ address: '0x70a72833d6bf7f508c8224ce59ea1ef3d0ea3a38',
+ decimals: 18 },
+{ symbol: 'PRIX',
+ name: 'Privatix',
+ address: '0x3adfc4999f77d04c8341bac5f3a76f58dff5b37a',
+ decimals: 8 },
+{ symbol: 'SENT',
+ name: 'Sentinel',
+ address: '0xa44e5137293e855b1b7bc7e2c6f8cd796ffcb037',
+ decimals: 8 },
+{ symbol: 'EXY',
+ name: 'Experty',
+ address: '0x5c743a35e903f6c584514ec617acee0611cf44f3',
+ decimals: 18 },
+{ symbol: 'XNK',
+ name: 'Ink Protocol',
+ address: '0xbc86727e770de68b1060c91f6bb6945c73e10388',
+ decimals: 18 },
+{ symbol: 'DOCK',
+ name: 'Dock Token',
+ address: '0xe5dada80aa6477e85d09747f2842f7993d0df71c',
+ decimals: 18 },
+{ symbol: 'FT',
+ name: 'Fabric Token',
+ address: '0x78a73b6cbc5d183ce56e786f6e905cadec63547b',
+ decimals: 18 },
+{ symbol: 'FDZ',
+ name: 'Friendz Coin',
+ address: '0x23352036e911a22cfc692b5e2e196692658aded9',
+ decimals: 18 },
+{ symbol: 'SCT',
+ name: 'Soma Community Token',
+ address: '0x63b992e6246d88f07fc35a056d2c365e6d441a3d',
+ decimals: 18 },
+{ symbol: 'LALA',
+ name: 'LALA',
+ address: '0xfd107b473ab90e8fbd89872144a3dc92c40fa8c9',
+ decimals: 18 },
+{ symbol: 'ELEC',
+ name: 'ElectrifyAsia',
+ address: '0xd49ff13661451313ca1553fd6954bd1d9b6e02b9',
+ decimals: 18 },
+{ symbol: 'NCT',
+ name: 'Nectar',
+ address: '0x9e46a38f5daabe8683e10793b06749eef7d733d1',
+ decimals: 18 },
+{ symbol: 'LNC',
+ name: 'Lancer Token',
+ address: '0x63e634330a20150dbb61b15648bc73855d6ccf07',
+ decimals: 18 },
+{ symbol: 'J8T',
+ name: 'JET8 Token',
+ address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4',
+ decimals: 8 },
+{ symbol: 'BANCA',
+ name: 'BANCA Token',
+ address: '0x998b3b82bc9dba173990be7afb772788b5acb8bd',
+ decimals: 18 },
+{ symbol: 'SENSE',
+ name: 'SENSE',
+ address: '0x6745fab6801e376cd24f03572b9c9b0d4edddccf',
+ decimals: 8 },
+{ symbol: 'SHIP',
+ name: 'ShipChain',
+ address: '0xe25b0bba01dc5630312b6a21927e578061a13f55',
+ decimals: 18 },
+{ symbol: 'TFD',
+ name: 'TE-FOOD',
+ address: '0xe5f166c0d8872b68790061317bb6cca04582c912',
+ decimals: 18 },
+{ symbol: 'AMB',
+ name: 'Amber Token',
+ address: '0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce',
+ decimals: 18 },
+{ symbol: 'BAX',
+ name: 'BABB',
+ address: '0x9a0242b7a33dacbe40edb927834f96eb39f8fbcb',
+ decimals: 18 },
+{ symbol: 'NPX',
+ name: 'NapoleonX',
+ address: '0x28b5e12cce51f15594b0b91d5b5adaa70f684a02',
+ decimals: 2 },
+{ symbol: 'VST',
+ name: 'Vestarin',
+ address: '0x552ed8253f341fb770e8badff5a0e0ee2fd57b43',
+ decimals: 18 },
+{ symbol: 'LOC',
+ name: 'LockChain',
+ address: '0x5e3346444010135322268a4630d2ed5f8d09446c',
+ decimals: 18 },
+{ symbol: 'BMH',
+ name: 'BlockMesh',
+ address: '0xf03045a4c8077e38f3b8e2ed33b8aee69edf869f',
+ decimals: 18 },
+{ symbol: 'NCASH',
+ name: 'Nucleus Vision',
+ address: '0x809826cceab68c387726af962713b64cb5cb3cca',
+ decimals: 18 },
+{ symbol: 'IGNX',
+ name: 'Ignite',
+ address: '0xafd8f91c4d7c2e3240f4154a1c596048035eb63c',
+ decimals: 18 },
+{ symbol: 'AMN',
+ name: 'Amon',
+ address: '0x737f98ac8ca59f2c68ad658e3c3d8c8963e40a4c',
+ decimals: 18 },
+{ symbol: 'YUP',
+ name: 'Crowdholding',
+ address: '0xd9a12cde03a86e800496469858de8581d3a5353d',
+ decimals: 18 },
+{ symbol: 'SENC',
+ name: 'Sentinel Chain',
+ address: '0xa13f0743951b4f6e3e3aa039f682e17279f52bc3',
+ decimals: 18 },
+{ symbol: 'LST',
+ name: 'Lendroid',
+ address: '0x4de2573e27e648607b50e1cfff921a33e4a34405',
+ decimals: 18 },
+{ symbol: 'BUBO',
+ name: 'Bubo',
+ address: '0xccbf21ba6ef00802ab06637896b799f7101f54a2',
+ decimals: 18 },
+{ symbol: 'ABX',
+ name: 'ABX Token',
+ address: '0x9a794dc1939f1d78fa48613b89b8f9d0a20da00e',
+ decimals: 18 },
+{ symbol: 'SKRP',
+ name: 'Skraps',
+ address: '0xfdfe8b7ab6cf1bd1e3d14538ef40686296c42052',
+ decimals: 18 },
+{ symbol: 'LOOM',
+ name: 'Loom',
+ address: '0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0',
+ decimals: 18 },
+{ symbol: 'CCO',
+ name: 'Ccore Token',
+ address: '0x679badc551626e01b23ceecefbc9b877ea18fc46',
+ decimals: 18 },
+{ symbol: 'DAXT',
+ name: 'BlockEx',
+ address: '0x61725f3db4004afe014745b21dab1e1677cc328b',
+ decimals: 18 },
+{ symbol: 'BBC',
+ name: 'B2B Coin',
+ address: '0xe7d3e4413e29ae35b0893140f4500965c74365e5',
+ decimals: 18 },
+{ symbol: 'FSBT',
+ name: 'FSBT Tech',
+ address: '0x1ed7ae1f0e2fa4276dd7ddc786334a3df81d50c0',
+ decimals: 18 },
+{ symbol: 'BBN',
+ name: 'Banyan',
+ address: '0x35a69642857083ba2f30bfab735dacc7f0bac969',
+ decimals: 18 },
+{ symbol: 'ANN',
+ name: 'Agent Not Needed',
+ address: '0xe0e73e8fc3a0fa161695be1d75e1bc3e558957c4',
+ decimals: 18 },
+{ symbol: 'XBP',
+ name: 'BlitzPredict',
+ address: '0x28dee01d53fed0edf5f6e310bf8ef9311513ae40',
+ decimals: 18 },
+{ symbol: 'SEN',
+ name: 'Consensus Token',
+ address: '0xd53370acf66044910bb49cbcfe8f3cd020337f60',
+ decimals: 18 },
+{ symbol: 'CAPP',
+ name: 'Cappasity',
+ address: '0x04f2e7221fdb1b52a68169b25793e51478ff0329',
+ decimals: 2 },
+{ symbol: 'IPSX',
+ name: 'IP Exchange',
+ address: '0x001f0aa5da15585e5b2305dbab2bac425ea71007',
+ decimals: 18 },
+{ symbol: 'VIEW',
+ name: 'Viewly',
+ address: '0xf03f8d65bafa598611c3495124093c56e8f638f0',
+ decimals: 18 },
+{ symbol: 'OCN',
+ name: 'OCoin',
+ address: '0x4092678e4e78230f46a1534c0fbc8fa39780892b',
+ decimals: 18 },
+{ symbol: 'DROP',
+ name: 'Dropil',
+ address: '0x4672bad527107471cb5067a887f4656d585a8a31',
+ decimals: 18 },
+{ symbol: 'VIT',
+ name: 'Vice Industry Token',
+ address: '0x23b75bc7aaf28e2d6628c3f424b3882f8f072a3c',
+ decimals: 18 },
+{ symbol: 'ADH',
+ name: 'ADHIVE',
+ address: '0xe69a353b3152dd7b706ff7dd40fe1d18b7802d31',
+ decimals: 18 },
+{ symbol: 'XDCE',
+ name: 'XDCE',
+ address: '0x41ab1b6fcbb2fa9dced81acbdec13ea6315f2bf2',
+ decimals: 18 },
+{ symbol: 'BERRY',
+ name: 'Rentberry',
+ address: '0x6aeb95f06cda84ca345c2de0f3b7f96923a44f4c',
+ decimals: 14 },
+{ symbol: 'MTC',
+ name: 'Medical Token Currency',
+ address: '0x905e337c6c8645263d3521205aa37bf4d034e745',
+ decimals: 18 },
+{ symbol: 'NAVI',
+ name: 'Navi Token',
+ address: '0x588047365df5ba589f923604aac23d673555c623',
+ decimals: 18 },
+{ symbol: 'MRK',
+ name: 'Mark Space',
+ address: '0xf453b5b9d4e0b5c62ffb256bb2378cc2bc8e8a89',
+ decimals: 8 },
+{ symbol: 'GBX',
+ name: 'Globitex Token',
+ address: '0x12fcd6463e66974cf7bbc24ffc4d40d6be458283',
+ decimals: 8 },
+{ symbol: 'LCD',
+ name: 'Lucyd',
+ address: '0x9a4059c1cf329a017e0ee1337c503137fd9463b2',
+ decimals: 18 },
+{ symbol: 'MFG',
+ name: 'SyncFab',
+ address: '0x6710c63432a2de02954fc0f851db07146a6c0312',
+ decimals: 18 },
+{ symbol: 'ADI',
+ name: 'Aditus',
+ address: '0x8810c63470d38639954c6b41aac545848c46484a',
+ decimals: 18 },
+{ symbol: 'CMS',
+ name: 'COMSA',
+ address: '0xf83301c5cd1ccbb86f466a6b3c53316ed2f8465a',
+ decimals: 6 },
+{ symbol: 'SMT3',
+ name: 'Sun Money Token',
+ address: '0xc761c8dc05ae52a8a785665e528ddbb00c098ad1',
+ decimals: 18 },
+{ symbol: 'ORI',
+ name: 'Origami Network',
+ address: '0xd2fa8f92ea72abb35dbd6deca57173d22db2ba49',
+ decimals: 18 },
+{ symbol: 'MITX',
+ name: 'Morpheus Labs Token',
+ address: '0x4a527d8fc13c5203ab24ba0944f4cb14658d1db6',
+ decimals: 18 },
+{ symbol: 'LND',
+ name: 'LendingBlock',
+ address: '0x0947b0e6d821378805c9598291385ce7c791a6b2',
+ decimals: 18 },
+{ symbol: 'AUC',
+ name: 'Auctus Token',
+ address: '0xc12d099be31567add4e4e4d0d45691c3f58f5663',
+ decimals: 18 },
+{ symbol: 'IVY',
+ name: 'IvyKoin',
+ address: '0xa4ea687a2a7f29cf2dc66b39c68e4411c0d00c49',
+ decimals: 18 },
+{ symbol: 'GET2',
+ name: 'Themis network',
+ address: '0x60c68a87be1e8a84144b543aacfa77199cd3d024',
+ decimals: 18 },
+{ symbol: 'UQC',
+ name: 'Uquid Coin',
+ address: '0xd01db73e047855efb414e6202098c4be4cd2423b',
+ decimals: 18 },
+{ symbol: 'ABYSS',
+ name: 'ABYSS',
+ address: '0x0e8d6b471e332f140e7d9dbb99e5e3822f728da6',
+ decimals: 18 },
+{ symbol: 'PAR',
+ name: 'Parachute',
+ address: '0x1beef31946fbbb40b877a72e4ae04a8d1a5cee06',
+ decimals: 18 },
+{ symbol: 'FTX',
+ name: 'FintruX Network',
+ address: '0xd559f20296ff4895da39b5bd9add54b442596a61',
+ decimals: 18 },
+{ symbol: 'ABT',
+ name: 'ArcBlock',
+ address: '0xb98d4c97425d9908e66e53a6fdf673acca0be986',
+ decimals: 18 },
+{ symbol: 'CEL',
+ name: 'Celsius',
+ address: '0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d',
+ decimals: 4 },
+{ symbol: 'NODE',
+ name: 'NODE',
+ address: '0xac956c72c262e5405a84dac655d5f3bea7ae9534',
+ decimals: 2 },
+{ symbol: 'IHT',
+ name: 'I HOUSE TOKEN',
+ address: '0xeda8b016efa8b1161208cf041cd86972eee0f31e',
+ decimals: 18 },
+{ symbol: 'VLD',
+ name: 'VETRI',
+ address: '0x922ac473a3cc241fd3a0049ed14536452d58d73c',
+ decimals: 18 },
+{ symbol: 'SS',
+ name: 'Sharder Chain',
+ address: '0xbbff862d906e348e9946bfb2132ecb157da3d4b4',
+ decimals: 18 },
+{ symbol: 'HBZ',
+ name: 'Helbiz',
+ address: '0xe34e1944e776f39b9252790a0527ebda647ae668',
+ decimals: 18 },
+{ symbol: 'SKCH',
+ name: 'Skychain Global Token',
+ address: '0x70c621f949b6556c4545707a2d5d73a776b98359',
+ decimals: 6 },
+{ symbol: 'ZCO',
+ name: 'Zebi Coin',
+ address: '0x2008e3057bd734e10ad13c9eae45ff132abc1722',
+ decimals: 8 },
+{ symbol: 'SHPING',
+ name: 'SHPING',
+ address: '0x7c84e62859d0715eb77d1b1c4154ecd6abb21bec',
+ decimals: 18 },
+{ symbol: 'HOT',
+ name: 'HoloToken',
+ address: '0x6c6ee5e31d828de241282b9606c8e98ea48526e2',
+ decimals: 18 },
+{ symbol: 'DML',
+ name: 'DecentralizedML',
+ address: '0xbcdfe338d55c061c084d81fd793ded00a27f226d',
+ decimals: 18 },
+{ symbol: 'APIS',
+ name: 'APIS',
+ address: '0x4c0fbe1bb46612915e7967d2c3213cd4d87257ad',
+ decimals: 18 },
+{ symbol: 'NBAI',
+ name: 'Nebula AI Token',
+ address: '0x17f8afb63dfcdcc90ebe6e84f060cc306a98257d',
+ decimals: 18 },
+{ symbol: 'XES',
+ name: 'PROXEUS',
+ address: '0xa017ac5fac5941f95010b12570b812c974469c2c',
+ decimals: 18 },
+{ symbol: 'GEN',
+ name: 'DAOstack',
+ address: '0x543ff227f64aa17ea132bf9886cab5db55dcaddf',
+ decimals: 18 },
+{ symbol: 'KRL',
+ name: 'Kryll',
+ address: '0x464ebe77c293e473b48cfe96ddcf88fcf7bfdac0',
+ decimals: 18 },
+{ symbol: 'TUSD',
+ name: 'True USD',
+ address: '0x8dd5fbce2f6a956c3022ba3663759011dd51e73e',
+ decimals: 18 },
+{ symbol: 'BZNT',
+ name: 'Bezant',
+ address: '0xe1aee98495365fc179699c1bb3e761fa716bee62',
+ decimals: 18 },
+{ symbol: 'WZI',
+ name: 'Wizzle Infinity Token',
+ address: '0xb8327f32127afe37a544c52b628653e222a93bad',
+ decimals: 18 },
+{ symbol: 'XTRD',
+ name: 'XTRD',
+ address: '0x9c794f933b4dd8b49031a79b0f924d68bef43992',
+ decimals: 18 },
+{ symbol: 'TKA',
+ name: 'Tokia Token',
+ address: '0xdae1baf249964bc4b6ac98c3122f0e3e785fd279',
+ decimals: 18 },
+{ symbol: 'UBT',
+ name: 'Unibright',
+ address: '0x8400d94a5cb0fa0d041a3788e395285d61c9ee5e',
+ decimals: 8 },
+{ symbol: 'EXRT',
+ name: 'EXRT',
+ address: '0xb20043f149817bff5322f1b928e89abfc65a9925',
+ decimals: 8 },
+{ symbol: 'CNN',
+ name: 'CNN Token',
+ address: '0x8713d26637cf49e1b6b4a7ce57106aabc9325343',
+ decimals: 18 },
+{ symbol: 'POA20',
+ name: 'POA Network',
+ address: '0x6758b7d441a9739b98552b373703d8d3d14f9e62',
+ decimals: 18 },
+{ symbol: 'SNTR',
+ name: 'SilentNotary',
+ address: '0x2859021ee7f2cb10162e67f33af2d22764b31aff',
+ decimals: 4 },
+{ symbol: 'FXT',
+ name: 'Fuzex',
+ address: '0x1829aa045e21e0d59580024a951db48096e01782',
+ decimals: 18 },
+{ symbol: 'BBK',
+ name: 'Brickblock Token',
+ address: '0x4a6058666cf1057eac3cd3a5a614620547559fc9',
+ decimals: 18 },
+{ symbol: 'WYS',
+ name: 'wys Token',
+ address: '0xd8950fdeaa10304b7a7fd03a2fc66bc39f3c711a',
+ decimals: 18 },
+{ symbol: 'SGN',
+ name: 'Signals Network Token',
+ address: '0xb2135ab9695a7678dd590b1a996cb0f37bcb0718',
+ decimals: 9 },
+{ symbol: 'CLN',
+ name: 'Colu Local Network',
+ address: '0x4162178b78d6985480a308b2190ee5517460406d',
+ decimals: 18 },
+{ symbol: 'LBA',
+ name: 'Libra Credit',
+ address: '0xfe5f141bf94fe84bc28ded0ab966c16b17490657',
+ decimals: 18 },
+{ symbol: 'CEDEX',
+ name: 'CEDEX Token',
+ address: '0xf4065e4477e91c177ded71a7a6fb5ee07dc46bc9',
+ decimals: 18 },
+{ symbol: 'HER',
+ name: 'HeroNode Token',
+ address: '0x491c9a23db85623eed455a8efdd6aba9b911c5df',
+ decimals: 18 },
+{ symbol: 'ELI',
+ name: 'EligmaToken',
+ address: '0xc7c03b8a3fc5719066e185ea616e87b88eba44a3',
+ decimals: 18 },
+{ symbol: 'SNOV',
+ name: 'Snovio',
+ address: '0xbdc5bac39dbe132b1e030e898ae3830017d7d969',
+ decimals: 18 },
+{ symbol: 'HYDRO',
+ name: 'HYDRO',
+ address: '0xebbdf302c940c6bfd49c6b165f457fdb324649bc',
+ decimals: 18 },
+{ symbol: 'IPL',
+ name: 'InsurePal',
+ address: '0x64cdf819d3e75ac8ec217b3496d7ce167be42e80',
+ decimals: 18 },
+{ symbol: 'FACE',
+ name: 'Faceter Token',
+ address: '0x1ccaa0f2a7210d76e1fdec740d5f323e2e1b1672',
+ decimals: 18 },
+{ symbol: 'LUC',
+ name: 'Play2live',
+ address: '0x5dbe296f97b23c4a6aa6183d73e574d02ba5c719',
+ decimals: 18 },
+{ symbol: 'TTV',
+ name: 'Token for Television',
+ address: '0xa838be6e4b760e6061d4732d6b9f11bf578f9a76',
+ decimals: 18 },
+{ symbol: 'XYO',
+ name: 'XY Oracle',
+ address: '0x55296f69f40ea6d20e478533c15a6b08b654e758',
+ decimals: 18 },
+{ symbol: 'BTT',
+ name: 'Blocktrade',
+ address: '0xfa456cf55250a839088b27ee32a424d7dacb54ff',
+ decimals: 18 },
+{ symbol: 'BBO',
+ name: 'Bigbom',
+ address: '0x84f7c44b6fed1080f647e354d552595be2cc602f',
+ decimals: 18 },
+{ symbol: 'PRYZ',
+ name: 'Pryze',
+ address: '0x6b834f43b7f5a1644e0c81caa0246969da23105e',
+ decimals: 18 },
+{ symbol: 'DTRC',
+ name: 'Datarius Credit',
+ address: '0xc20464e0c373486d2b3335576e83a218b1618a5e',
+ decimals: 18 },
+{ symbol: 'IOTX',
+ name: 'IoTeX Network',
+ address: '0x6fb3e0a217407efff7ca062d46c26e5d60a14d69',
+ decimals: 18 },
+{ symbol: 'RTE',
+ name: 'Rate3',
+ address: '0x436f0f3a982074c4a05084485d421466a994fe53',
+ decimals: 18 },
+{ symbol: 'ETK',
+ name: 'EnergiToken',
+ address: '0x3c4a3ffd813a107febd57b2f01bc344264d90fde',
+ decimals: 2 },
+{ symbol: 'SEELE',
+ name: 'Seele',
+ address: '0xb1eef147028e9f480dbc5ccaa3277d417d1b85f0',
+ decimals: 18 },
+{ symbol: 'IND',
+ name: 'Indorse',
+ address: '0xf8e386eda857484f5a12e4b5daa9984e06e73705',
+ decimals: 18 },
+{ symbol: 'OMX',
+ name: 'Omix',
+ address: '0xb5dbc6d3cf380079df3b27135664b6bcf45d1869',
+ decimals: 8 },
+{ symbol: 'WEB',
+ name: 'Webcoin',
+ address: '0x840fe75abfadc0f2d54037829571b2782e919ce4',
+ decimals: 18 },
+{ symbol: 'IQN',
+ name: 'IQeon',
+ address: '0x0db8d8b76bc361bacbb72e2c491e06085a97ab31',
+ decimals: 18 },
+{ symbol: 'XCD',
+ name: 'Capdax',
+ address: '0xca00bc15f67ebea4b20dfaaa847cace113cc5501',
+ decimals: 18 },
+{ symbol: 'EDR',
+ name: 'Endor Protocol Token',
+ address: '0xc528c28fec0a90c083328bc45f587ee215760a0f',
+ decimals: 18 },
+{ symbol: 'PI',
+ name: 'PCHAIN',
+ address: '0xb9bb08ab7e9fa0a1356bd4a39ec0ca267e03b0b3',
+ decimals: 18 },
+{ symbol: 'BETEX',
+ name: 'BETEX',
+ address: '0xbd270f9a96ed49a1c82055a22ad9b8eec564097f',
+ decimals: 18 },
+{ symbol: 'VME',
+ name: 'VeriME',
+ address: '0xc343f099d3e41aa5c1b59470450e21e92e2d840b',
+ decimals: 18 },
+{ symbol: 'ECOM',
+ name: 'Omnitude',
+ address: '0x171d750d42d661b62c277a6b486adb82348c3eca',
+ decimals: 18 },
+{ symbol: 'MRP',
+ name: 'MoneyRebel',
+ address: '0x21f0f0fd3141ee9e11b3d7f13a1028cd515f459c',
+ decimals: 18 },
+{ symbol: 'BKRX',
+ name: 'BlockRx Digital Token',
+ address: '0x3cf9e0c385a5abec9fd2a71790aa344c4e8e3570',
+ decimals: 18 },
+{ symbol: 'CEEK',
+ name: 'CEEK',
+ address: '0xb056c38f6b7dc4064367403e26424cd2c60655e1',
+ decimals: 18 },
+{ symbol: 'ICNQ',
+ name: 'Iconiq Lab Token',
+ address: '0xb3e2cb7cccfe139f8ff84013823bf22da6b6390a',
+ decimals: 18 },
+{ symbol: 'COU',
+ name: 'Couchain',
+ address: '0xf091cf09c51811819db705710e9634b8bf18f164',
+ decimals: 18 },
+{ symbol: 'ZCN',
+ name: '0chain',
+ address: '0xb9ef770b6a5e12e45983c5d80545258aa38f3b78',
+ decimals: 10 },
+{ symbol: 'BIT',
+ name: 'Bitrewards',
+ address: '0x47da42696a866cdc61a4c809a515500a242909c1',
+ decimals: 18 },
+{ symbol: '0XBTC',
+ name: '0xBitcoin',
+ address: '0xb6ed7644c69416d67b522e20bc294a9a9b405b31',
+ decimals: 8 },
+{ symbol: 'QKC',
+ name: 'QuarkChain Token',
+ address: '0xea26c4ac16d4a5a106820bc8aee85fd0b7b2b664',
+ decimals: 18 },
+{ symbol: 'BITCAR',
+ name: 'BitCar',
+ address: '0x08b4c866ae9d1be56a06e0c302054b4ffe067b43',
+ decimals: 8 },
+{ symbol: 'LAN',
+ name: 'FreelancerCoin',
+ address: '0x64ff248ddd36430e3640fbea76999941a8bccbd7',
+ decimals: 18 },
+{ symbol: 'MVL',
+ name: 'Mass Vehicle Ledger',
+ address: '0xa849eaae994fb86afa73382e9bd88c2b6b18dc71',
+ decimals: 18 },
+{ symbol: 'METM',
+ name: 'MetaMorph',
+ address: '0xfef3884b603c33ef8ed4183346e093a173c94da6',
+ decimals: 18 },
+{ symbol: 'GMR',
+ name: 'GIMMER',
+ address: '0x9b8d5f3402f74c7a61d9f09c32d3ca07b45c1466',
+ decimals: 18 },
+{ symbol: 'PCO',
+ name: 'Pecunio',
+ address: '0xf5b815344641412401d8e868790dbd125e6761ca',
+ decimals: 8 },
+{ symbol: 'OMG',
+ name: 'OmiseGO',
+ address: '0xd26114cd6ee289accf82350c8d8487fedb8a0c07',
+ decimals: 18 },
+{ symbol: 'FMF',
+ name: 'Formosa Financial',
+ address: '0xb4d0fdfc8497aef97d3c2892ae682ee06064a2bc',
+ decimals: 18 },
+{ symbol: 'WT',
+ name: 'WeToken',
+ address: '0xaae81c0194d6459f320b70ca0cedf88e11a242ce',
+ decimals: 18 },
+{ symbol: 'CUZ',
+ name: 'Cool Cousin',
+ address: '0xf832484f0c9f6b7cd5c945488899035467508a5d',
+ decimals: 18 },
+{ symbol: 'MYB',
+ name: 'MyBit',
+ address: '0x5d60d8d7ef6d37e16ebabc324de3be57f135e0bc',
+ decimals: 18 },
+{ symbol: 'RMESH',
+ name: 'RightMesh',
+ address: '0x8d5682941ce456900b12d47ac06a88b47c764ce1',
+ decimals: 18 },
+{ symbol: 'CBC',
+ name: 'CashBetCoin',
+ address: '0x26db5439f651caf491a87d48799da81f191bdb6b',
+ decimals: 8 },
+{ symbol: 'OWN',
+ name: 'OwnData',
+ address: '0x170b275ced089fffaebfe927f445a350ed9160dc',
+ decimals: 8 },
+{ symbol: 'CFTY',
+ name: 'Crafty',
+ address: '0x6956983f8b3ce173b4ab84361aa0ad52f38d936f',
+ decimals: 8 },
+{ symbol: 'SPN',
+ name: 'Sapien Network',
+ address: '0x20f7a3ddf244dc9299975b4da1c39f8d5d75f05a',
+ decimals: 6 },
+{ symbol: 'HOLD',
+ name: 'HOLD',
+ address: '0xd6e1401a079922469e9b965cb090ea6ff64c6839',
+ decimals: 18 },
+{ symbol: 'WBT',
+ name: 'Whalesburg Token',
+ address: '0xe2ee1ac57b2e5564522b2de064a47b3f98b0e9c9',
+ decimals: 18 },
+{ symbol: 'MOT',
+ name: 'Mount Olympus Token',
+ address: '0x263c618480dbe35c300d8d5ecda19bbb986acaed',
+ decimals: 18 },
+{ symbol: 'ATMI',
+ name: 'Atonomi',
+ address: '0x97aeb5066e1a590e868b511457beb6fe99d329f5',
+ decimals: 18 },
+{ symbol: 'MVP',
+ name: 'Merculet',
+ address: '0x8a77e40936bbc27e80e9a3f526368c967869c86d',
+ decimals: 18 },
+{ symbol: '000',
+ name: 'Not a real coin',
+ address: '0xadc46ff5434910bd17b24ffb429e585223287d7f',
+ decimals: 8 },
+{ symbol: 'KYT',
+ name: 'Keyrpto Token',
+ address: '0x532843f66375d5257ea34f723c6c2723ccf7b7a2',
+ decimals: 18 },
+{ symbol: 'UPP',
+ name: 'Sentinel Protocol',
+ address: '0xc86d054809623432210c107af2e3f619dcfbf652',
+ decimals: 18 },
+{ symbol: 'SNX',
+ name: 'Synthetix Network',
+ address: '0xc011a72400e58ecd99ee497cf89e3775d4bd732f',
+ decimals: 18 },
+{ symbol: 'DGX',
+ name: 'Digix Gold',
+ address: '0x4f3afec4e5a3f2a6a1a411def7d7dfe50ee057bf',
+ decimals: 9 },
+{ symbol: 'PST',
+ name: 'Primas',
+ address: '0x5d4abc77b8405ad177d8ac6682d584ecbfd46cec',
+ decimals: 18 },
+{ symbol: 'TEN',
+ name: 'TOKENOMY',
+ address: '0xdd16ec0f66e54d453e6756713e533355989040e4',
+ decimals: 18 },
+{ symbol: 'AUTO',
+ name: 'CUBE',
+ address: '0x622dffcc4e83c64ba959530a5a5580687a57581b',
+ decimals: 18 },
+{ symbol: 'THRT',
+ name: 'Thrive',
+ address: '0x4f27053f32eda8af84956437bc00e5ffa7003287',
+ decimals: 18 },
+{ symbol: 'TGAME',
+ name: 'Truegame',
+ address: '0xf8e06e4e4a80287fdca5b02dccecaa9d0954840f',
+ decimals: 18 },
+{ symbol: 'LIKE',
+ name: 'LikeCoin',
+ address: '0x02f61fd266da6e8b102d4121f5ce7b992640cf98',
+ decimals: 18 },
+{ symbol: 'DAG',
+ name: 'Constellation',
+ address: '0xa8258abc8f2811dd48eccd209db68f25e3e34667',
+ decimals: 8 },
+{ symbol: 'LCK',
+ name: 'LuckCash',
+ address: '0x82adce3b6a226f9286af99841410b04a075b54d5',
+ decimals: 18 },
+{ symbol: 'PMA',
+ name: 'PumaPay',
+ address: '0x846c66cf71c43f80403b51fe3906b3599d63336f',
+ decimals: 18 },
+{ symbol: 'ZINC',
+ name: 'Zinc',
+ address: '0x4aac461c86abfa71e9d00d9a2cde8d74e4e1aeea',
+ decimals: 18 },
+{ symbol: 'DAV',
+ name: 'DAV Network',
+ address: '0xd82df0abd3f51425eb15ef7580fda55727875f14',
+ decimals: 18 },
+{ symbol: 'OLT',
+ name: 'OneLedger',
+ address: '0x64a60493d888728cf42616e034a0dfeae38efcf0',
+ decimals: 18 },
+{ symbol: 'MEDX',
+ name: 'MediBloc',
+ address: '0xfd1e80508f243e64ce234ea88a5fd2827c71d4b7',
+ decimals: 8 },
+{ symbol: 'VITE',
+ name: 'VITE',
+ address: '0x1b793e49237758dbd8b752afc9eb4b329d5da016',
+ decimals: 18 },
+{ symbol: 'MET',
+ name: 'Metronome',
+ address: '0xa3d58c4e56fedcae3a7c43a725aee9a71f0ece4e',
+ decimals: 18 },
+{ symbol: 'QNT',
+ name: 'Quant',
+ address: '0x4a220e6096b25eadb88358cb44068a3248254675',
+ decimals: 18 },
+{ symbol: 'C8',
+ name: 'Carboneum',
+ address: '0xd42debe4edc92bd5a3fbb4243e1eccf6d63a4a5d',
+ decimals: 18 },
+{ symbol: 'DIW',
+ name: 'DIW Token',
+ address: '0xa253be28580ae23548a4182d95bf8201c28369a8',
+ decimals: 18 },
+{ symbol: 'TTC',
+ name: 'TTC Protocol',
+ address: '0x9389434852b94bbad4c8afed5b7bdbc5ff0c2275',
+ decimals: 18 },
+{ symbol: 'BOB',
+ name: 'Bobs Repair',
+ address: '0xdf347911910b6c9a4286ba8e2ee5ea4a39eb2134',
+ decimals: 18 },
+{ symbol: 'EGT',
+ name: 'Egretia',
+ address: '0x8e1b448ec7adfc7fa35fc2e885678bd323176e34',
+ decimals: 18 },
+{ symbol: 'ELY',
+ name: 'Elysian',
+ address: '0xa95592dcffa3c080b4b40e459c5f5692f67db7f8',
+ decimals: 18 },
+{ symbol: 'PITCH',
+ name: 'PITCH',
+ address: '0x87f56ee356b434187105b40f96b230f5283c0ab4',
+ decimals: 9 },
+{ symbol: 'MRPH',
+ name: 'Morpheus Network',
+ address: '0x7b0c06043468469967dba22d1af33d77d44056c8',
+ decimals: 4 },
+{ symbol: 'AIC',
+ name: 'Akaiito',
+ address: '0x7ca936344d234034cf6936472d6bedbe8ae6667f',
+ decimals: 18 },
+{ symbol: 'BST',
+ name: 'Blocksquare Token',
+ address: '0x509a38b7a1cc0dcd83aa9d06214663d9ec7c7f4a',
+ decimals: 18 },
+{ symbol: 'GOT',
+ name: 'GoToken',
+ address: '0x423b5f62b328d0d6d44870f4eee316befa0b2df5',
+ decimals: 18 },
+{ symbol: 'VAI',
+ name: 'VIOLET',
+ address: '0xd4078bdb652610ad5383a747d130cbe905911102',
+ decimals: 18 },
+{ symbol: 'MFT',
+ name: 'Mainframe',
+ address: '0xdf2c7238198ad8b389666574f2d8bc411a4b7428',
+ decimals: 18 },
+{ symbol: 'ZXC',
+ name: '0xcert Protocol',
+ address: '0x83e2be8d114f9661221384b3a50d24b96a5653f5',
+ decimals: 18 },
+{ symbol: 'ESS',
+ name: 'ESSENTIA',
+ address: '0xfc05987bd2be489accf0f509e44b0145d68240f7',
+ decimals: 18 },
+{ symbol: 'BITX',
+ name: 'BitScreenerToken',
+ address: '0xff2b3353c3015e9f1fbf95b9bda23f58aa7ce007',
+ decimals: 18 },
+{ symbol: 'REP',
+ name: 'Augur',
+ address: '0x1985365e9f78359a9b6ad760e32412f4a445e862',
+ decimals: 18 },
+{ symbol: 'ZIPT',
+ name: 'Zippie',
+ address: '0xedd7c94fd7b4971b916d15067bc454b9e1bad980',
+ decimals: 18 },
+{ symbol: 'EBC',
+ name: 'EBCoin',
+ address: '0x31f3d9d1bece0c033ff78fa6da60a6048f3e13c5',
+ decimals: 18 },
+{ symbol: 'BOX',
+ name: 'ContentBox Token',
+ address: '0x63f584fa56e60e4d0fe8802b27c7e6e3b33e007f',
+ decimals: 18 },
+{ symbol: 'PNK',
+ name: 'Kleros',
+ address: '0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d',
+ decimals: 18 },
+{ symbol: 'R',
+ name: 'Revain',
+ address: '0x48f775efbe4f5ece6e0df2f7b5932df56823b990',
+ decimals: 0 },
+{ symbol: 'NCC',
+ name: 'NeuroChain',
+ address: '0x5d48f293baed247a2d0189058ba37aa238bd4725',
+ decimals: 18 },
+{ symbol: 'HYB',
+ name: 'Hybrid Block',
+ address: '0x6059f55751603ead7dc6d280ad83a7b33d837c90',
+ decimals: 18 },
+{ symbol: 'ALTX',
+ name: 'Alttex',
+ address: '0xb1ed41dc1fe9b723a31137afdd1201d17917fe91',
+ decimals: 8 },
+{ symbol: 'INCX',
+ name: 'InternationalCryptoX',
+ address: '0xa984a92731c088f1ea4d53b71a2565a399f7d8d5',
+ decimals: 18 },
+{ symbol: 'AXPR',
+ name: 'aXpire',
+ address: '0xc39e626a04c5971d770e319760d7926502975e47',
+ decimals: 18 },
+{ symbol: 'GARD',
+ name: 'Hashgard',
+ address: '0x5c64031c62061865e5fd0f53d3cdaef80f72e99d',
+ decimals: 18 },
+{ symbol: 'SEAL',
+ name: 'Seal Network',
+ address: '0xd7b3669c7d3e38ab5a441383d41f25e003e02148',
+ decimals: 18 },
+{ symbol: 'VIKKY',
+ name: 'Vikky',
+ address: '0xd2946be786f35c3cc402c29b323647abda799071',
+ decimals: 8 },
+{ symbol: 'SNR',
+ name: 'Sonder',
+ address: '0x47d1a59cbdd19aee060c859c0009277e245328ae',
+ decimals: 18 },
+{ symbol: 'DACC',
+ name: 'DACC',
+ address: '0xf8c595d070d104377f58715ce2e6c93e49a87f3c',
+ decimals: 6 },
+{ symbol: 'SAT',
+ name: 'Satisfaction Token',
+ address: '0x92736b3bff1bbd72a72478d78f18a6ab9b68b791',
+ decimals: 18 },
+{ symbol: 'CONTRACTIUM',
+ name: 'CTU',
+ address: '0x943aca8ed65fbf188a7d369cfc2bee0ae435ee1b',
+ decimals: 18 },
+{ symbol: 'PDX',
+ name: 'PDX',
+ address: '0x5f33d158ca7275848f70a3f149b421190df85b32',
+ decimals: 18 },
+{ symbol: 'T2T',
+ name: 'Traceto',
+ address: '0xe6824483e279d967ea6f8472ace7585862fa1185',
+ decimals: 18 },
+{ symbol: 'NTK2',
+ name: 'Netkoin',
+ address: '0x5d4d57cd06fa7fe99e26fdc481b468f77f05073c',
+ decimals: 18 },
+{ symbol: 'SET',
+ name: 'Swytch Energy',
+ address: '0xfa75b65e52a6cbc5503f45f4abba2c5df4688875',
+ decimals: 18 },
+{ symbol: 'PKG',
+ name: 'PKG Token',
+ address: '0x02f2d4a04e6e01ace88bd2cd632875543b2ef577',
+ decimals: 18 },
+{ symbol: 'ACAD',
+ name: 'Academy',
+ address: '0x1efc4dfd580df95426a0f04848870bd8cb5a338e',
+ decimals: 18 },
+{ symbol: 'XD',
+ name: 'Data Transaction Token',
+ address: '0x24dcc881e7dd730546834452f21872d5cb4b5293',
+ decimals: 18 },
+{ symbol: 'ONG',
+ name: 'onG.social',
+ address: '0xd341d1680eeee3255b8c4c75bcce7eb57f144dae',
+ decimals: 18 },
+{ symbol: 'EMTV',
+ name: 'Multiversum',
+ address: '0x07a7ed332c595b53a317afcee50733af571475e7',
+ decimals: 18 },
+{ symbol: 'BNC',
+ name: 'Bionic',
+ address: '0xef51c9377feb29856e61625caf9390bd0b67ea18',
+ decimals: 8 },
+{ symbol: 'MFTU',
+ name: 'MFTU',
+ address: '0x05d412ce18f24040bb3fa45cf2c69e506586d8e8',
+ decimals: 18 },
+{ symbol: 'ROX',
+ name: 'Robotina',
+ address: '0x574f84108a98c575794f75483d801d1d5dc861a5',
+ decimals: 18 },
+{ symbol: 'DX',
+ name: 'DXChain',
+ address: '0x973e52691176d36453868d9d86572788d27041a9',
+ decimals: 18 },
+{ symbol: 'IG',
+ name: 'IG',
+ address: '0x8a88f04e0c905054d2f33b26bb3a46d7091a039a',
+ decimals: 18 },
+{ symbol: 'AVINOC',
+ name: 'AVINOC',
+ address: '0xf1ca9cb74685755965c7458528a36934df52a3ef',
+ decimals: 18 },
+{ symbol: 'VXV',
+ name: 'Vectorspace AI',
+ address: '0x7d29a64504629172a429e64183d6673b9dacbfce',
+ decimals: 18 },
+{ symbol: 'TALAO',
+ name: 'TALAO',
+ address: '0x1d4ccc31dab6ea20f461d329a0562c1c58412515',
+ decimals: 18 },
+{ symbol: 'KIND',
+ name: 'Kind Ads',
+ address: '0x4618519de4c304f3444ffa7f812dddc2971cc688',
+ decimals: 8 },
+{ symbol: 'SVD',
+ name: 'savedroid',
+ address: '0xbdeb4b83251fb146687fa19d1c660f99411eefe3',
+ decimals: 18 },
+{ symbol: 'BNN',
+ name: 'BrokerNekoNetwork',
+ address: '0xda80b20038bdf968c7307bb5907a469482cf6251',
+ decimals: 8 },
+{ symbol: 'FTT',
+ name: 'Farmatrust',
+ address: '0x2aec18c5500f21359ce1bea5dc1777344df4c0dc',
+ decimals: 18 },
+{ symbol: 'ABL',
+ name: 'Airbloc',
+ address: '0xf8b358b3397a8ea5464f8cc753645d42e14b79ea',
+ decimals: 18 },
+{ symbol: 'ABLX',
+ name: 'ABLE',
+ address: '0x865bfd8232778f00cae81315bf75ef1fe6e30cdd',
+ decimals: 18 },
+{ symbol: 'BEAT',
+ name: 'BEAT',
+ address: '0x2fb12bccf6f5dd338b76be784a93ade072425690',
+ decimals: 18 },
+{ symbol: 'CDT',
+ name: 'Blox',
+ address: '0x177d39ac676ed1c67a2b268ad7f1e58826e5b0af',
+ decimals: 18 },
+{ symbol: 'OIO',
+ name: 'online.io',
+ address: '0xa3efef1a1e3d1ad72b9d0f4253e7c9c084c2c08b',
+ decimals: 18 },
+{ symbol: 'MUXE',
+ name: 'MUXE',
+ address: '0x515669d308f887fd83a471c7764f5d084886d34d',
+ decimals: 18 },
+{ symbol: 'DIP',
+ name: 'Etherisc',
+ address: '0xc719d010b63e5bbf2c0551872cd5316ed26acd83',
+ decimals: 18 },
+{ symbol: 'FTEC',
+ name: 'FTEC',
+ address: '0x6bec54e4fea5d541fb14de96993b8e11d81159b2',
+ decimals: 18 },
+{ symbol: 'UBEX',
+ name: 'UBEX',
+ address: '0x6704b673c70de9bf74c8fba4b4bd748f0e2190e1',
+ decimals: 18 },
+{ symbol: 'CST',
+ name: 'CryptosolarTech',
+ address: '0xbb49a51ee5a66ca3a8cbe529379ba44ba67e6771',
+ decimals: 18 },
+{ symbol: 'HAND',
+ name: 'SHOWHAND',
+ address: '0x48c1b2f3efa85fbafb2ab951bf4ba860a08cdbb7',
+ decimals: 0 },
+{ symbol: 'GENE',
+ name: 'GeneSourceCodeChain',
+ address: '0x884181554dfa9e578d36379919c05c25dc4a15bb',
+ decimals: 18 },
+{ symbol: 'FTXT',
+ name: 'FUTURAX',
+ address: '0x41875c2332b0877cdfaa699b641402b7d4642c32',
+ decimals: 8 },
+{ symbol: 'UUU',
+ name: 'UNetworkToken',
+ address: '0x3543638ed4a9006e4840b105944271bcea15605d',
+ decimals: 18 },
+{ symbol: 'DIT',
+ name: 'Inmediate',
+ address: '0xf14922001a2fb8541a433905437ae954419c2439',
+ decimals: 8 },
+{ symbol: 'BKU',
+ name: 'Blocktek University',
+ address: '0x60b5aa3334185d72eed79ac5ffc9870e98f502eb',
+ decimals: 18 },
+{ symbol: 'TILE',
+ name: 'Loomia Tile',
+ address: '0x25f735b108b4273fb0aceb87599ed8bba10065de',
+ decimals: 18 },
+{ symbol: 'UBC',
+ name: 'Ubcoin',
+ address: '0x2d3e7d4870a51b918919e7b851fe19983e4c38d5',
+ decimals: 18 },
+{ symbol: 'SKYFT',
+ name: 'SKYFchain',
+ address: '0x5dd0815a4cf119ad91ba045bbbf879f3f7de3c68',
+ decimals: 18 },
+{ symbol: 'USE',
+ name: 'UseChain Token',
+ address: '0xd9485499499d66b175cf5ed54c0a19f1a6bcb61a',
+ decimals: 18 },
+{ symbol: 'KIT',
+ name: 'KitToken',
+ address: '0x080eb7238031f97ff011e273d6cad5ad0c2de532',
+ decimals: 18 },
+{ symbol: 'ARCONA',
+ name: 'ARCONA',
+ address: '0x0f71b8de197a1c84d31de0f1fa7926c365f052b3',
+ decimals: 18 },
+{ symbol: 'SURE',
+ name: 'Surety Token',
+ address: '0x95382ac82e886a367bac9e1e23beabe569bcfed8',
+ decimals: 6 },
+{ symbol: 'TIP',
+ name: 'TIP',
+ address: '0x59ae863232238a8bd7953bdfc1b4796f8e9a5b4e',
+ decimals: 18 },
+{ symbol: 'HAVY',
+ name: 'Havy',
+ address: '0x7c2e5b7ec572199d3841f6a38f7d4868bd0798f1',
+ decimals: 8 },
+{ symbol: 'EEE',
+ name: 'Elementh token',
+ address: '0x4c567c3363cc42c5a42c6d8bf01503fd1d0b91cd',
+ decimals: 18 },
+{ symbol: 'CARD',
+ name: 'Cardstack',
+ address: '0x954b890704693af242613edef1b603825afcd708',
+ decimals: 18 },
+{ symbol: 'NPXS',
+ name: 'Pundi X',
+ address: '0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3',
+ decimals: 18 },
+{ symbol: 'EDN',
+ name: 'EdenCoin',
+ address: '0x05860d453c7974cbf46508c06cba14e211c629ce',
+ decimals: 18 },
+{ symbol: 'IHF',
+ name: 'Invictus Hyperion',
+ address: '0xaf1250fa68d7decd34fd75de8742bc03b29bd58e',
+ decimals: 18 },
+{ symbol: '3DES',
+ name: '3DES Token',
+ address: '0x115e7b7ecdd9792d6995cb426b2ef4d6119682a7',
+ decimals: 18 },
+{ symbol: 'UBBEY',
+ name: 'UBBEY',
+ address: '0x6cb1c2b61e24ad08bf5fff4d2b13ea987d211a88',
+ decimals: 18 },
+{ symbol: 'TBE',
+ name: 'TowerBee',
+ address: '0xb3c61539af156438951ea6cd48756d22a48fce62',
+ decimals: 18 },
+{ symbol: 'UCN',
+ name: 'UChain Token',
+ address: '0xaaf37055188feee4869de63464937e683d61b2a1',
+ decimals: 18 },
+{ symbol: 'MAS',
+ name: 'Midas Protocol',
+ address: '0x23ccc43365d9dd3882eab88f43d515208f832430',
+ decimals: 18 },
+{ symbol: 'DEC',
+ name: 'Darico Ecosystem Coin',
+ address: '0x89c6c856a6db3e46107163d0cda7a7ff211bd655',
+ decimals: 18 },
+{ symbol: 'TXN',
+ name: 'Traxion',
+ address: '0xaaf099a16cb37dfdaffc1a169f6e99f41aaaf75c',
+ decimals: 18 },
+{ symbol: 'USDC',
+ name: 'USD//Coin',
+ address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48',
+ decimals: 6 },
+{ symbol: 'BIO',
+ name: 'BioCrypt',
+ address: '0xf18432ef894ef4b2a5726f933718f5a8cf9ff831',
+ decimals: 8 },
+{ symbol: 'S',
+ name: 'Sharpay',
+ address: '0x96b0bf939d9460095c15251f71fda11e41dcbddb',
+ decimals: 18 },
+{ symbol: 'TOL',
+ name: 'Tolar ',
+ address: '0xd07d9fe2d2cc067015e2b4917d24933804f42cfa',
+ decimals: 18 },
+{ symbol: 'ODEM',
+ name: 'ODEM',
+ address: '0xbf52f2ab39e26e0951d2a02b49b7702abe30406a',
+ decimals: 18 },
+{ symbol: 'XMOO',
+ name: 'MOO Token',
+ address: '0x221535cbced4c264e53373d81b73c29d010832a5',
+ decimals: 18 },
+{ symbol: 'MTCN',
+ name: 'Multicoin',
+ address: '0xf6117cc92d7247f605f11d4c942f0feda3399cb5',
+ decimals: 18 },
+{ symbol: 'PEP',
+ name: 'Peptoken',
+ address: '0xbb0ef9e617faddf54b8d16e29046f72b4d3ec77f',
+ decimals: 18 },
+{ symbol: 'UAC',
+ name: 'Ubiatar Coin',
+ address: '0x4297a285db467eb779fcc45f69a169bd8dccd0e9',
+ decimals: 18 },
+{ symbol: 'ONE',
+ name: 'Menlo Token',
+ address: '0x4d807509aece24c0fa5a102b6a3b059ec6e14392',
+ decimals: 18 },
+{ symbol: 'ALT',
+ name: 'Alt.Estate Token',
+ address: '0x419b8ed155180a8c9c64145e76dad49c0a4efb97',
+ decimals: 18 },
+{ symbol: 'JSE',
+ name: 'JSECOIN',
+ address: '0x2d184014b5658c453443aa87c8e9c4d57285620b',
+ decimals: 18 },
+{ symbol: 'AMO',
+ name: 'AMO Coin',
+ address: '0x38c87aa89b2b8cd9b95b736e1fa7b612ea972169',
+ decimals: 18 },
+{ symbol: 'TYPE',
+ name: 'Typerium',
+ address: '0xeaf61fc150cd5c3bea75744e830d916e60ea5a9f',
+ decimals: 4 },
+{ symbol: 'VOCO',
+ name: 'VOCO',
+ address: '0xb5ca46cf1da09248126682a7bd72401fd7a6b151',
+ decimals: 18 },
+{ symbol: 'FTM',
+ name: 'Fantom',
+ address: '0x4e15361fd6b4bb609fa63c81a2be19d873717870',
+ decimals: 18 },
+{ symbol: 'LQD',
+ name: 'Liquid',
+ address: '0xd29f0b5b3f50b07fe9a9511f7d86f4f4bac3f8c4',
+ decimals: 18 },
+{ symbol: 'PSK',
+ name: 'Pool of Stake Token',
+ address: '0x1c5f43710a1776b0ea7191b7ead75d4b98d69858',
+ decimals: 18 },
+{ symbol: 'POR',
+ name: 'Proof of Review Token',
+ address: '0x08c507046e12cd1538741d067d28411f2b922062',
+ decimals: 18 },
+{ symbol: 'WORK',
+ name: 'Aworker Token',
+ address: '0xa686514faf7d54289266f483d1e4852c99e13ec7',
+ decimals: 8 },
+{ symbol: 'VIU',
+ name: 'Viuly Token',
+ address: '0x464baddce9bd32581a7d59d9bb8350c7c7764668',
+ decimals: 18 },
+{ symbol: 'COIN',
+ name: 'Coinvest',
+ address: '0xeb547ed1d8a3ff1461abaa7f0022fed4836e00a4',
+ decimals: 18 },
+{ symbol: 'PEG',
+ name: 'Peg Network Token',
+ address: '0x8ae56a6850a7cbeac3c3ab2cb311e7620167eac8',
+ decimals: 18 },
+{ symbol: 'WCT',
+ name: 'Wealth Chain Token',
+ address: '0xff2ce8a8589e5de40ecb564604714025f3d1819d',
+ decimals: 18 },
+{ symbol: 'REDC',
+ name: 'RedCab',
+ address: '0xb563300a3bac79fc09b93b6f84ce0d4465a2ac27',
+ decimals: 18 },
+{ symbol: 'TVND',
+ name: 'TrueVND',
+ address: '0x3dc0501c32bee0cc1e629d590302a4b909797474',
+ decimals: 18 },
+{ symbol: 'ZEON',
+ name: 'ZEON',
+ address: '0xe5b826ca2ca02f09c1725e9bd98d9a8874c30532',
+ decimals: 18 },
+{ symbol: 'HEAL',
+ name: 'Etheal Token',
+ address: '0x6bd26bb09c992e09d2156b48f723e56e52eead9c',
+ decimals: 18 },
+{ symbol: 'AWC',
+ name: 'Atomic Wallet Token',
+ address: '0xad22f63404f7305e4713ccbd4f296f34770513f4',
+ decimals: 8 },
+{ symbol: 'MBT',
+ name: 'Metabase',
+ address: '0x599c49b932f08707888791a9b55949e385a00aeb',
+ decimals: 18 },
+{ symbol: 'KWH',
+ name: 'KWHCoin',
+ address: '0xb8ddc930c2bab6c71610a2be639036e829f9c10b',
+ decimals: 18 },
+{ symbol: 'FOAM',
+ name: 'FOAM Token',
+ address: '0x4946fcea7c692606e8908002e55a582af44ac121',
+ decimals: 18 },
+{ symbol: 'MXC',
+ name: 'MXC Token',
+ address: '0x5ca381bbfb58f0092df149bd3d243b08b9a8386e',
+ decimals: 18 },
+{ symbol: 'LPT',
+ name: 'LivePeer Token',
+ address: '0x58b6a8a3302369daec383334672404ee733ab239',
+ decimals: 18 },
+{ symbol: 'CMCT',
+ name: 'Crowd Machine Compute Token',
+ address: '0x47bc01597798dcd7506dcca36ac4302fc93a8cfb',
+ decimals: 8 },
+{ symbol: 'FXP',
+ name: 'FXPay',
+ address: '0x14ddda446688b73161aa1382f4e4343353af6fc8',
+ decimals: 8 },
+{ symbol: 'EXO',
+ name: 'EXOLOVER',
+ address: '0xe58e751aba3b9406367b5f3cbc39c2fa9b519789',
+ decimals: 18 },
+{ symbol: 'ECHT',
+ name: 'ECHAT TOKEN',
+ address: '0x1a2277c83930b7a64c3e3d5544eaa8c4f946b1b7',
+ decimals: 18 },
+{ symbol: 'KAT',
+ name: 'Kambria Token',
+ address: '0xa858bc1b71a895ee83b92f149616f9b3f6afa0fb',
+ decimals: 18 },
+{ symbol: 'TDP',
+ name: 'TrueDeck',
+ address: '0x5b11aacb6bddb9ffab908fdce739bf4aed554327',
+ decimals: 18 },
+{ symbol: 'TDT',
+ name: 'Trident',
+ address: '0x4eea6844a4dc5bf3127decf034b3f4a7211ef2e7',
+ decimals: 18 },
+{ symbol: 'DBLK',
+ name: 'DataOnBlock',
+ address: '0x526ccc90191a9472299323816bd2c784c0a1bcde',
+ decimals: 18 },
+{ symbol: 'UTS',
+ name: 'Utemis',
+ address: '0x979ebc09e55ea0ab563cf7175e4c4b1a03afc19a',
+ decimals: 18 },
+{ symbol: 'BOUNCY',
+ name: 'BouncyCoinToken',
+ address: '0xe9f9547c17fc9539df99a42dcb6ec38165994c45',
+ decimals: 18 },
+{ symbol: 'ATF',
+ name: 'AgroTechFarm',
+ address: '0x014e42ae89b24738591e2f695e1ef6d95bd38619',
+ decimals: 18 },
+{ symbol: 'GMB',
+ name: 'GAMB',
+ address: '0xa0008f510fe9ee696e7e320c9e5cbf61e27791ee',
+ decimals: 18 },
+{ symbol: 'HBX',
+ name: 'Hyperbridge Token',
+ address: '0x2793a23341012e0970cf478bab08606b56504c3e',
+ decimals: 18 },
+{ symbol: 'LIQUID',
+ name: 'Netkoin Liquid',
+ address: '0xac2385e183d9301dd5e2bb08da932cbf9800dc9c',
+ decimals: 18 },
+{ symbol: 'XCHF',
+ name: 'CryptoFranc',
+ address: '0xb4272071ecadd69d933adcd19ca99fe80664fc08',
+ decimals: 18 },
+{ symbol: 'BNFT',
+ name: 'Benefits Coin',
+ address: '0xda2c424fc98c741c2d4ef2f42897cefed897ca75',
+ decimals: 9 },
+{ symbol: 'NKN',
+ name: 'NKN',
+ address: '0x5cf04716ba20127f1e2297addcf4b5035000c9eb',
+ decimals: 18 },
+{ symbol: 'TVNT',
+ name: 'TravelNote',
+ address: '0x5635ddeabf9cdda686995fe90beb5411831563fc',
+ decimals: 8 },
+{ symbol: 'COVA',
+ name: 'Covalent Token',
+ address: '0xb37a769b37224449d92aac57de379e1267cd3b00',
+ decimals: 18 },
+{ symbol: 'LTO',
+ name: 'LTO Network Token',
+ address: '0x3db6ba6ab6f95efed1a6e794cad492faaabf294d',
+ decimals: 8 },
+{ symbol: 'FRECNX',
+ name: 'FreldoCoinX',
+ address: '0xd8b8e1eca89da014e67fdbc2014eaa8e171079bf',
+ decimals: 18 },
+{ symbol: 'STASH',
+ name: 'BitStash',
+ address: '0x965f109d31ccb77005858defae0ebaf7b4381652',
+ decimals: 18 },
+{ symbol: 'FOXT',
+ name: 'Fox Trading',
+ address: '0xfbe878ced08132bd8396988671b450793c44bc12',
+ decimals: 18 },
+{ symbol: 'EVR',
+ name: 'Everus',
+ address: '0x3137619705b5fc22a3048989f983905e456b59ab',
+ decimals: 8 },
+{ symbol: 'WBTC',
+ name: 'Bitcoin',
+ address: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
+ decimals: 8 },
+{ symbol: 'XLG',
+ name: 'Ledgerium',
+ address: '0x598c9a4f069dc076984868873c01e78a905d50e6',
+ decimals: 8 },
+{ symbol: 'BETHER',
+ name: 'Bethereum',
+ address: '0x14c926f2290044b647e1bf2072e67b495eff1905',
+ decimals: 18 },
+{ symbol: 'SPRING',
+ name: 'Spring Token',
+ address: '0xfb0bdc444c8ae7e9b5beea5e4d1e8de93879e487',
+ decimals: 18 },
+{ symbol: 'ZCC',
+ name: 'ZeroCarbon',
+ address: '0x6737fe98389ffb356f64ebb726aa1a92390d94fb',
+ decimals: 18 },
+{ symbol: 'WMB',
+ name: 'WatermelonBloc Tokens',
+ address: '0x7a18919f0b05fa5e91f3ef43afe8a72105c9d4b8',
+ decimals: 6 },
+{ symbol: 'CCC',
+ name: 'Container Crypto Coin',
+ address: '0x9e3359f862b6c7f5c660cfd6d1aa6909b1d9504d',
+ decimals: 18 },
+{ symbol: 'VNT',
+ name: 'Vanta Token',
+ address: '0xdcc27bbaa14cafd8a6aeb847e1b01c5dffb70935',
+ decimals: 18 },
+{ symbol: 'COT',
+ name: 'CoTrader',
+ address: '0x5c872500c00565505f3624ab435c222e558e9ff8',
+ decimals: 18 },
+{ symbol: 'HXRO',
+ name: 'Hxro',
+ address: '0x4bd70556ae3f8a6ec6c4080a0c327b24325438f3',
+ decimals: 18 },
+{ symbol: 'PFR',
+ name: 'PayFair Token',
+ address: '0xb41422d5a1d5d5c73c229686935b40f881502785',
+ decimals: 8 },
+{ symbol: 'INNBCL',
+ name: 'InnovativeBioresearchClassic',
+ address: '0x8cc3e2bdc17682c622eb789eda23fbd6988c84da',
+ decimals: 10 },
+{ symbol: 'BIRD',
+ name: 'BirdCoin',
+ address: '0x026e62dded1a6ad07d93d39f96b9eabd59665e0d',
+ decimals: 18 },
+{ symbol: 'FXC',
+ name: 'Flexacoin',
+ address: '0x4a57e687b9126435a9b19e4a802113e266adebde',
+ decimals: 18 },
+{ symbol: 'UGAS',
+ name: 'UltrainGas',
+ address: '0x8716fc5da009d3a208f0178b637a50f4ef42400f',
+ decimals: 18 },
+{ symbol: 'ARR',
+ name: 'ARROUND',
+ address: '0xcb089b8ae76b5df461d40e957603f7a59aea9e0d',
+ decimals: 18 },
+{ symbol: 'NRP',
+ name: 'Neural Protocol',
+ address: '0x3918c42f14f2eb1168365f911f63e540e5a306b5',
+ decimals: 8 },
+{ symbol: 'PLA',
+ name: 'PlayChip',
+ address: '0x0198f46f520f33cd4329bd4be380a25a90536cd5',
+ decimals: 18 },
+{ symbol: 'IMT',
+ name: 'Money Token',
+ address: '0x13119e34e140097a507b07a5564bde1bc375d9e6',
+ decimals: 18 },
+{ symbol: 'CCN',
+ name: 'CustomContractNetwork',
+ address: '0x17b26400621695c2d8c2d8869f6259e82d7544c4',
+ decimals: 18 },
+{ symbol: 'FET',
+ name: 'Fetch',
+ address: '0x1d287cc25dad7ccaf76a26bc660c5f7c8e2a05bd',
+ decimals: 18 },
+{ symbol: 'TASH',
+ name: 'TripCash',
+ address: '0x002f06abe6995fd0ea4be011c53bfc989fa53ce0',
+ decimals: 18 },
+{ symbol: 'WBBC',
+ name: 'Wibcoin',
+ address: '0x195a179bbfe539bb8a485d944ac60d3a0329f0ec',
+ decimals: 18 },
+{ symbol: 'DAGT',
+ name: 'DAGT',
+ address: '0x56d1ae30c97288da4b58bc39f026091778e4e316',
+ decimals: 18 },
+{ symbol: 'IMPCN',
+ name: 'IMPERIVMCoin',
+ address: '0x1d2aee5eaf5e4352965b710293513a5ad99796ff',
+ decimals: 6 },
+{ symbol: 'PCL',
+ name: 'Peculium',
+ address: '0x0f02e27745e3b6e9e1310d19469e2b5d7b5ec99a',
+ decimals: 8 },
+{ symbol: 'HUDDL',
+ name: 'Huddl',
+ address: '0x5137a403dd25e48de528912a4af62881e625d801',
+ decimals: 18 },
+{ symbol: 'ANKR',
+ name: 'Ankr Network',
+ address: '0x8290333cef9e6d528dd5618fb97a76f268f3edd4',
+ decimals: 18 },
+{ symbol: 'LED',
+ name: 'Terrawatt',
+ address: '0x93c9291523cb95c0eb0bc379b0483f4d7fc05072',
+ decimals: 18 },
+{ symbol: 'VIDT',
+ name: 'V-ID Token',
+ address: '0x445f51299ef3307dbd75036dd896565f5b4bf7a5',
+ decimals: 18 },
+{ symbol: 'SHK',
+ name: 'Shook',
+ address: '0xebe4a49df7885d015329c919bf43e6460a858f1e',
+ decimals: 18 },
+{ symbol: 'MESG',
+ name: 'MESG',
+ address: '0x420167d87d35c3a249b32ef6225872fbd9ab85d2',
+ decimals: 18 },
+{ symbol: 'PMNT',
+ name: 'Paymon',
+ address: '0x81b4d08645da11374a03749ab170836e4e539767',
+ decimals: 9 },
+{ symbol: 'UND',
+ name: 'United Network Distribution',
+ address: '0xbe6ac6b50f577205c9d107f37b6e205aa6acc5d4',
+ decimals: 18 },
+{ symbol: 'CRO',
+ name: 'Crypto.com Chain',
+ address: '0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b',
+ decimals: 8 },
+{ symbol: 'BEZ',
+ name: 'Bezop',
+ address: '0x8a1e3930fde1f151471c368fdbb39f3f63a65b55',
+ decimals: 18 },
+{ symbol: 'AERGO',
+ name: 'AERGO',
+ address: '0xae31b85bfe62747d0836b82608b4830361a3d37a',
+ decimals: 18 },
+{ symbol: 'BTMX',
+ name: 'BitMax Token',
+ address: '0x1c289a12a8552b314d0d153d6991fd27a54aa640',
+ decimals: 18 },
+{ symbol: 'USDS',
+ name: 'StableUSD',
+ address: '0xa4bdb11dc0a2bec88d24a3aa1e6bb17201112ebe',
+ decimals: 6 },
+{ symbol: 'PAX',
+ name: 'Paxos Standard Token',
+ address: '0x8e870d67f660d95d5be530380d0ec0bd388289e1',
+ decimals: 18 },
+{ symbol: 'CSP',
+ name: 'Caspian',
+ address: '0xa6446d655a0c34bc4f05042ee88170d056cbaf45',
+ decimals: 18 },
+{ symbol: 'ZAP',
+ name: 'ZAP',
+ address: '0x6781a0f84c7e9e846dcb84a9a5bd49333067b104',
+ decimals: 18 },
+{ symbol: 'CYFM',
+ name: 'CYBERFM',
+ address: '0x3f06b5d78406cd97bdf10f5c420b241d32759c80',
+ decimals: 18 },
+{ symbol: 'W12',
+ name: 'W12.io',
+ address: '0xbf799a2f71d020a4a8c10e7406e2bf970b3d734b',
+ decimals: 18 },
+{ symbol: 'UDOO',
+ name: 'Howdoo',
+ address: '0x0df721639ca2f7ff0e1f618b918a65ffb199ac4e',
+ decimals: 18 },
+{ symbol: 'TGBP',
+ name: 'TrueGBP',
+ address: '0x00000000441378008ea67f4284a57932b1c000a5',
+ decimals: 18 },
+{ symbol: 'NFC',
+ name: 'NoFakeCoin',
+ address: '0xb0866289e870d2efc282406cf4123df6e5bcb652',
+ decimals: 18 },
+{ symbol: 'WETC',
+ name: 'WETC',
+ address: '0x86aabcc646f290b9fc9bd05ce17c3858d1511da1',
+ decimals: 18 },
+{ symbol: 'WHEN',
+ name: 'WHEN Token',
+ address: '0xf4fe95603881d0e07954fd7605e0e9a916e42c44',
+ decimals: 18 },
+{ symbol: 'BLOC',
+ name: 'Blockcloud',
+ address: '0x6f919d67967a97ea36195a2346d9244e60fe0ddb',
+ decimals: 18 },
+{ symbol: 'LIT',
+ name: 'LITION',
+ address: '0x763fa6806e1acf68130d2d0f0df754c93cc546b2',
+ decimals: 18 },
+{ symbol: 'HGO',
+ name: 'HireGo',
+ address: '0xaaa89105dab822dbc9a6de64a23d045d99d5fd36',
+ decimals: 18 },
+{ symbol: 'BUD',
+ name: 'BUDDY',
+ address: '0x57652fc91f522f9eff0b38cdf1d51f5fb5764215',
+ decimals: 18 },
+{ symbol: 'MOVI',
+ name: 'MoviToken',
+ address: '0x06f979e4f04ec565ae8d7479a94c60def8846832',
+ decimals: 6 },
+{ symbol: 'SNTVT',
+ name: 'Sentivate',
+ address: '0x7865af71cf0b288b4e7f654f4f7851eb46a2b7f8',
+ decimals: 18 },
+{ symbol: 'XBASE',
+ name: 'Eterbase Coin',
+ address: '0x4d13d624a87baa278733c068a174412afa9ca6c8',
+ decimals: 18 },
+{ symbol: 'NOW',
+ name: 'ChangeNOW',
+ address: '0xe9a95d175a5f4c9369f3b74222402eb1b837693b',
+ decimals: 8 },
+{ symbol: 'CUSD',
+ name: 'Carbon',
+ address: '0x1410d4ec3d276c0ebbf16ccbe88a4383ae734ed0',
+ decimals: 18 },
+{ symbol: 'ORBS',
+ name: 'Orbs',
+ address: '0xff56cc6b1e6ded347aa0b7676c85ab0b3d08b0fa',
+ decimals: 18 },
+{ symbol: 'RC20',
+ name: 'RoboCalls',
+ address: '0x61b2d3ea9f1c6b387c985c73d40e8fbfb284e5c7',
+ decimals: 18 },
+{ symbol: 'AER',
+ name: 'Aeryus Token',
+ address: '0xac4d22e40bf0b8ef4750a99ed4e935b99a42685e',
+ decimals: 18 },
+{ symbol: 'ORME',
+ name: 'Ormeus Coin',
+ address: '0xc96df921009b790dffca412375251ed1a2b75c60',
+ decimals: 8 },
+{ symbol: 'MATIC',
+ name: 'Matic Token',
+ address: '0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0',
+ decimals: 18 },
+{ symbol: 'RC',
+ name: 'ReceiptCoin',
+ address: '0xd6e49800decb64c0e195f791348c1e87a5864fd7',
+ decimals: 9 },
+{ symbol: 'ZNT',
+ name: 'Zenswap Network Token',
+ address: '0x4fa000df40c06fc8c7d9179661535846b7cd4f87',
+ decimals: 18 },
+{ symbol: 'IDEX',
+ name: 'IDEX Token',
+ address: '0xb705268213d593b8fd88d3fdeff93aff5cbdcfae',
+ decimals: 18 },
+{ symbol: 'EURS',
+ name: 'STASIS EURS',
+ address: '0xdb25f211ab05b1c97d595516f45794528a807ad8',
+ decimals: 2 },
+{ symbol: 'MBL',
+ name: 'MovieBloc',
+ address: '0xb879da8b24c9b8685de8526cf492e954f165d74b',
+ decimals: 18 },
+{ symbol: 'CRE',
+ name: 'Carry Token',
+ address: '0x115ec79f1de567ec68b7ae7eda501b406626478e',
+ decimals: 18 },
+{ symbol: 'RSR',
+ name: 'Reserve Rights',
+ address: '0x8762db106b2c2a0bccb3a80d1ed41273552616e8',
+ decimals: 18 },
+{ symbol: 'SSN',
+ name: 'SuperSkyNet',
+ address: '0xa5b46ff9a887180c8fb2d97146398ddfc5fef1cd',
+ decimals: 18 },
+{ symbol: 'BQQQ',
+ name: 'BITSDAQ',
+ address: '0x1b80eeeadcc590f305945bcc258cfa770bbe1890',
+ decimals: 18 },
+{ symbol: 'SMT',
+ name: 'Smathium',
+ address: '0x4b4787aace23eb70da046bcc0ccfe28d4e4fb899',
+ decimals: 18 },
+{ symbol: 'XNS',
+ name: 'Xeonbit Token',
+ address: '0x79c71d3436f39ce382d0f58f1b011d88100b9d91',
+ decimals: 18 },
+{ symbol: 'CHR',
+ name: 'CHROMA',
+ address: '0x915044526758533dfb918eceb6e44bc21632060d',
+ decimals: 6 },
+{ symbol: 'STPT',
+ name: 'Standard Tokenization Protocol',
+ address: '0xde7d85157d9714eadf595045cc12ca4a5f3e2adb',
+ decimals: 18 },
+{ symbol: 'VNC',
+ name: 'Vincoin Cash',
+ address: '0xdf413690fb785e56895551cc21086a15b6e90386',
+ decimals: 8 },
+{ symbol: 'JAR',
+ name: 'Jarvis+ Coins',
+ address: '0xa249de6948022783765fee4850d7b85e43118fcc',
+ decimals: 18 },
+{ symbol: 'AQU',
+ name: 'Aquest Token',
+ address: '0x7756edf05ef3c2b321a85d77b5cbf7c8a9a7c247',
+ decimals: 18 },
+{ symbol: 'CHZ',
+ name: 'chiliZ',
+ address: '0x3506424f91fd33084466f402d5d97f05f8e3b4af',
+ decimals: 18 },
+{ symbol: 'ESH',
+ name: 'Switch',
+ address: '0xdf329603bd378021698f9833cd5205b52f9e370e',
+ decimals: 18 },
+{ symbol: 'EQUAD',
+ name: 'Quadrant Protocol',
+ address: '0xc28e931814725bbeb9e670676fabbcb694fe7df2',
+ decimals: 18 },
+{ symbol: 'TFB',
+ name: 'TrueFeedBack',
+ address: '0x79cdfa04e3c4eb58c4f49dae78b322e5b0d38788',
+ decimals: 18 },
+{ symbol: 'COTI',
+ name: 'COTI Token',
+ address: '0xddb3422497e61e13543bea06989c0789117555c5',
+ decimals: 18 },
+{ symbol: 'XCT',
+ name: 'xCrypt Token',
+ address: '0xd2bb16cf38ca086cab5128d5c25de9477ebd596b',
+ decimals: 18 },
+{ symbol: 'URAC',
+ name: 'Uranus',
+ address: '0xff8be4b22cedc440591dcb1e641eb2a0dd9d25a5',
+ decimals: 18 },
+{ symbol: 'ENK',
+ name: 'Enkronos Token',
+ address: '0x92b914f1ddcbb1d117a718e83c9ed7eb32fc44d1',
+ decimals: 18 },
+{ symbol: 'EUULA',
+ name: 'Uulala',
+ address: '0x26de40bffafe73ff4e37089b2c71e35fd02eb1a7',
+ decimals: 2 },
+{ symbol: 'POLL',
+ name: 'ClearPoll',
+ address: '0x705ee96c1c160842c92c1aecfcffccc9c412e3d9',
+ decimals: 18 },
+{ symbol: 'LGO',
+ name: 'LGO Token',
+ address: '0x0a50c93c762fdd6e56d86215c24aaad43ab629aa',
+ decimals: 8 },
+{ symbol: '1UP',
+ name: 'Uptrennd',
+ address: '0x07597255910a51509ca469568b048f2597e72504',
+ decimals: 18 },
+]
diff --git a/server/src/tokens/index.js b/server/src/tokens/index.js
new file mode 100644
index 0000000..52f843a
--- /dev/null
+++ b/server/src/tokens/index.js
@@ -0,0 +1,4 @@
+const idex = require("./idex");
+const uniswap = require("./uniswap");
+
+module.exports = [...idex, ...uniswap];
diff --git a/server/src/tokens/uniswap.js b/server/src/tokens/uniswap.js
new file mode 100644
index 0000000..c4c665a
--- /dev/null
+++ b/server/src/tokens/uniswap.js
@@ -0,0 +1,1436 @@
+module.exports = [
+ {
+ symbol: "WETH",
+ name: "WETH",
+ address: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
+ decimals: 18
+ },
+ {
+ symbol: "DAI",
+ name: "Dai",
+ address: "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359",
+ decimals: 18
+ },
+ {
+ symbol: "WBTC",
+ name: "Wrapped Bitcoin",
+ address: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599",
+ decimals: 8
+ },
+ {
+ symbol: "TKN",
+ name: "TokenCard",
+ address: "0xaaaf91d9b90df800df4f55c205fd6989c977e73a",
+ decimals: 8
+ },
+ {
+ symbol: "SPANK",
+ name: "SpankChain",
+ address: "0x42d6622dece394b54999fbd73d108123806f6a18",
+ decimals: 18
+ },
+ {
+ symbol: "BAT",
+ name: "Basic Attention Token",
+ address: "0x0d8775f648430679a709e98d2b0cb6250d2887ef",
+ decimals: 18
+ },
+ {
+ symbol: "XCHF",
+ name: "CryptoFranc",
+ address: "0xb4272071ecadd69d933adcd19ca99fe80664fc08",
+ decimals: 18
+ },
+ {
+ symbol: "REP",
+ name: "Augur",
+ address: "0x1985365e9f78359a9b6ad760e32412f4a445e862",
+ decimals: 18
+ },
+ {
+ symbol: "DGX",
+ name: "Digix Gold Token",
+ address: "0x4f3afec4e5a3f2a6a1a411def7d7dfe50ee057bf",
+ decimals: 9
+ },
+ {
+ symbol: "USDC",
+ name: "USD Coin",
+ address: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
+ decimals: 6
+ },
+ {
+ symbol: "ANT",
+ name: "Aragon",
+ address: "0x960b236a07cf122663c4303350609a66a7b288c0",
+ decimals: 18
+ },
+ {
+ symbol: "GNO",
+ name: "Gnosis",
+ address: "0x6810e776880c02933d47db1b9fc05908e5386b96",
+ decimals: 18
+ },
+ {
+ symbol: "ZRX",
+ name: "0x",
+ address: "0xe41d2489571d322189246dafa5ebde1f4699f498",
+ decimals: 18
+ },
+ {
+ symbol: "LINK",
+ name: "Chainlink",
+ address: "0x514910771af9ca656af840dff83e8264ecf986ca",
+ decimals: 18
+ },
+ {
+ symbol: "FUN",
+ name: "FunFair",
+ address: "0x419d0d8bdd9af5e606ae2232ed285aff190e711b",
+ decimals: 8
+ },
+ {
+ symbol: "SNT",
+ name: "Status",
+ address: "0x744d70fdbe2ba4cf95131626614a1763df805b9e",
+ decimals: 18
+ },
+ {
+ symbol: "PNK",
+ name: "Kleros",
+ address: "0x93ed3fbe21207ec2e8f2d3c3de6e058cb73bc04d",
+ decimals: 18
+ },
+ {
+ symbol: "NMR",
+ name: "Numeraire",
+ address: "0x1776e1f26f98b1a5df9cd347953a26dd3cb46671",
+ decimals: 18
+ },
+ {
+ symbol: "RLC",
+ name: "iExec RLC",
+ address: "0x607f4c5bb672230e8672085532f7e901544a7375",
+ decimals: 9
+ },
+ {
+ symbol: "NEXO",
+ name: "Nexo",
+ address: "0xb62132e35a6c13ee1ee0f84dc5d40bad8d815206",
+ decimals: 18
+ },
+ {
+ symbol: "HOT",
+ name: "Holo",
+ address: "0x6c6ee5e31d828de241282b9606c8e98ea48526e2",
+ decimals: 18
+ },
+ {
+ symbol: "BNT",
+ name: "Bancor",
+ address: "0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c",
+ decimals: 18
+ },
+ {
+ symbol: "RDN",
+ name: "Raiden Network Token",
+ address: "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6",
+ decimals: 18
+ },
+ {
+ symbol: "LOOM",
+ name: "Loom Network",
+ address: "0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0",
+ decimals: 18
+ },
+ {
+ symbol: "RPL",
+ name: "Rocket Pool",
+ address: "0xb4efd85c19999d84251304bda99e90b92300bd93",
+ decimals: 18
+ },
+ {
+ symbol: "DGD",
+ name: "DigixDAO",
+ address: "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a",
+ decimals: 9
+ },
+ {
+ symbol: "BLT",
+ name: "Bloom",
+ address: "0x107c4504cd79c5d2696ea0030a8dd4e92601b82e",
+ decimals: 18
+ },
+ {
+ symbol: "KNC",
+ name: "Kyber Network",
+ address: "0xdd974d5c2e2928dea5f71b9825b8b646686bd200",
+ decimals: 18
+ },
+ {
+ symbol: "GRID",
+ name: "Grid+",
+ address: "0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd",
+ decimals: 12
+ },
+ {
+ symbol: "MANA",
+ name: "Decentraland",
+ address: "0x0f5d2fb29fb7d3cfee444a200298f468908cc942",
+ decimals: 18
+ },
+ {
+ symbol: "RCN",
+ name: "Ripio Credit Network",
+ address: "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6",
+ decimals: 18
+ },
+ {
+ symbol: "LRC",
+ name: "Loopring",
+ address: "0xbbbbca6a901c926f240b89eacb641d8aec7aeafd",
+ decimals: 18
+ },
+ {
+ symbol: "GEN",
+ name: "DAOstack",
+ address: "0x543ff227f64aa17ea132bf9886cab5db55dcaddf",
+ decimals: 18
+ },
+ {
+ symbol: "FOAM",
+ name: "FOAM",
+ address: "0x4946fcea7c692606e8908002e55a582af44ac121",
+ decimals: 18
+ },
+ {
+ symbol: "AMPL",
+ name: "Ampleforth",
+ address: "0xd46ba6d942050d489dbd938a2c909a5d5039a161",
+ decimals: 9
+ },
+ {
+ symbol: "ENJ",
+ name: "Enjin Coin",
+ address: "0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c",
+ decimals: 18
+ },
+ {
+ symbol: "FTX",
+ name: "FintruX Network",
+ address: "0xd559f20296ff4895da39b5bd9add54b442596a61",
+ decimals: 18
+ },
+ {
+ symbol: "STORJ",
+ name: "Storj",
+ address: "0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac",
+ decimals: 8
+ },
+ {
+ symbol: "TRST",
+ name: "WeTrust",
+ address: "0xcb94be6f13a1182e4a4b6140cb7bf2025d28e41b",
+ decimals: 6
+ },
+ {
+ symbol: "C20",
+ name: "CRYPTO20",
+ address: "0x26e75307fc0c021472feb8f727839531f112f317",
+ decimals: 18
+ },
+ {
+ symbol: "FT",
+ name: "Fabric Token",
+ address: "0x78a73b6cbc5d183ce56e786f6e905cadec63547b",
+ decimals: 18
+ },
+ {
+ symbol: "LPT",
+ name: "Livepeer",
+ address: "0x58b6a8a3302369daec383334672404ee733ab239",
+ decimals: 18
+ },
+ {
+ symbol: "SWT",
+ name: "Swarm City",
+ address: "0xb9e7f8568e08d5659f5d29c4997173d84cdf2607",
+ decimals: 18
+ },
+ {
+ symbol: "0xBTC",
+ name: "0xBitcoin",
+ address: "0xb6ed7644c69416d67b522e20bc294a9a9b405b31",
+ decimals: 8
+ },
+ {
+ symbol: "FND",
+ name: "FundRequest",
+ address: "0x4df47b4969b2911c966506e3592c41389493953b",
+ decimals: 18
+ },
+ {
+ symbol: "LEO",
+ name: "UNUS SED LEO",
+ address: "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3",
+ decimals: 18
+ },
+ {
+ symbol: "FXC",
+ name: "Flexacoin",
+ address: "0x4a57e687b9126435a9b19e4a802113e266adebde",
+ decimals: 18
+ },
+ {
+ symbol: "REQ",
+ name: "Request",
+ address: "0x8f8221afbb33998d8584a2b05749ba73c37a938a",
+ decimals: 18
+ },
+ {
+ symbol: "BEE",
+ name: "Bee Token",
+ address: "0x4d8fc1453a0f359e99c9675954e656d80d996fbf",
+ decimals: 18
+ },
+ {
+ symbol: "REN",
+ name: "Ren",
+ address: "0x408e41876cccdc0f92210600ef50372656052a38",
+ decimals: 18
+ },
+ {
+ symbol: "STX",
+ name: "Stox",
+ address: "0x006bea43baa3f7a6f765f14f10a1a1b08334ef45",
+ decimals: 18
+ },
+ {
+ symbol: "SALT",
+ name: "SALT",
+ address: "0x4156d3342d5c385a87d264f90653733592000581",
+ decimals: 8
+ },
+ {
+ symbol: "LQD",
+ name: "Liquidity Network",
+ address: "0xD29F0b5b3F50b07Fe9a9511F7d86F4f4bAc3f8c4",
+ decimals: 18
+ },
+ {
+ symbol: "DATA",
+ name: "Streamr DATAcoin",
+ address: "0x0cf0ee63788a0849fe5297f3407f701e122cc023",
+ decimals: 18
+ },
+ {
+ symbol: "XD",
+ name: "Data Transaction Token",
+ address: "0x24dcc881e7dd730546834452f21872d5cb4b5293",
+ decimals: 18
+ },
+ {
+ symbol: "DNT",
+ name: "district0x",
+ address: "0x0abdace70d3790235af448c88547603b945604ea",
+ decimals: 18
+ },
+ {
+ symbol: "KIN",
+ name: "Kin",
+ address: "0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5",
+ decimals: 18
+ },
+ {
+ symbol: "AMN",
+ name: "Amon",
+ address: "0x737f98ac8ca59f2c68ad658e3c3d8c8963e40a4c",
+ decimals: 18
+ },
+ {
+ symbol: "CVC",
+ name: "Civic",
+ address: "0x41e5560054824ea6b0732e656e3ad64e20e94e45",
+ decimals: 8
+ },
+ {
+ symbol: "QSP",
+ name: "Quantstamp",
+ address: "0x99ea4db9ee77acd40b119bd1dc4e33e1c070b80d",
+ decimals: 18
+ },
+ {
+ symbol: "LST",
+ name: "Lendroid Support Token",
+ address: "0x4de2573e27e648607b50e1cfff921a33e4a34405",
+ decimals: 18
+ },
+ {
+ symbol: "CAN",
+ name: "CanYaCoin",
+ address: "0x1d462414fe14cf489c7a21cac78509f4bf8cd7c0",
+ decimals: 6
+ },
+ {
+ symbol: "DICE",
+ name: "Etheroll",
+ address: "0x2e071D2966Aa7D8dECB1005885bA1977D6038A65",
+ decimals: 16
+ },
+ {
+ symbol: "IOTX",
+ name: "IoTeX",
+ address: "0x6fb3e0a217407efff7ca062d46c26e5d60a14d69",
+ decimals: 18
+ },
+ {
+ symbol: "SNX",
+ name: "Synthetix Network Token",
+ address: "0xc011a72400e58ecd99ee497cf89e3775d4bd732f",
+ decimals: 18
+ },
+ {
+ symbol: "UFR",
+ name: "Upfiring",
+ address: "0xea097a2b1db00627b2fa17460ad260c016016977",
+ decimals: 18
+ },
+ {
+ symbol: "RLX",
+ name: "Relex",
+ address: "0x4a42d2c580f83dce404acad18dab26db11a1750e",
+ decimals: 18
+ },
+ {
+ symbol: "AST",
+ name: "AirSwap",
+ address: "0x27054b13b1b798b345b591a4d22e6562d47ea75a",
+ decimals: 4
+ },
+ {
+ symbol: "DOS",
+ name: "DOS Network",
+ address: "0x70861e862e1ac0c96f853c8231826e469ead37b1",
+ decimals: 18
+ },
+ {
+ symbol: "ELET",
+ name: "Elementeum",
+ address: "0x6c37bf4f042712c978a73e3fd56d1f5738dd7c43",
+ decimals: 18
+ },
+ {
+ symbol: "MFT",
+ name: "Mainframe",
+ address: "0xdf2c7238198ad8b389666574f2d8bc411a4b7428",
+ decimals: 18
+ },
+ {
+ symbol: "MYB",
+ name: "MyBit",
+ address: "0x5d60d8d7ef6d37e16ebabc324de3be57f135e0bc",
+ decimals: 18
+ },
+ {
+ symbol: "PMA",
+ name: "PumaPay",
+ address: "0x846c66cf71c43f80403b51fe3906b3599d63336f",
+ decimals: 18
+ },
+ {
+ symbol: "SETH",
+ name: "Sether",
+ address: "0x78b039921e84e726eb72e7b1212bb35504c645ca",
+ decimals: 18
+ },
+ {
+ symbol: "SUB",
+ name: "Substratum",
+ address: "0x8D75959f1E61EC2571aa72798237101F084DE63a",
+ decimals: 18
+ },
+ {
+ symbol: "BNTY",
+ name: "Bounty0x",
+ address: "0xd2d6158683aee4cc838067727209a0aaf4359de3",
+ decimals: 18
+ },
+ {
+ symbol: "POWR",
+ name: "Power Ledger",
+ address: "0x595832f8fc6bf59c85c527fec3740a1b7a361269",
+ decimals: 6
+ },
+ {
+ symbol: "NOW",
+ name: "NOW Token",
+ address: "0xe9a95d175a5f4c9369f3b74222402eb1b837693b",
+ decimals: 8
+ },
+ {
+ symbol: "GUSD",
+ name: "Gemini Dollar",
+ address: "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd",
+ decimals: 2
+ },
+ {
+ symbol: "OST",
+ name: "OST",
+ address: "0x2c4e8f2d746113d0696ce89b35f0d8bf88e0aeca",
+ decimals: 18
+ },
+ {
+ symbol: "EDG",
+ name: "Edgeless",
+ address: "0x08711d3b02c8758f2fb3ab4e80228418a7f8e39c",
+ decimals: 0
+ },
+ {
+ symbol: "ETHPLO",
+ name: "ETHplode",
+ address: "0xe0c6ce3e73029f201e5c0bedb97f67572a93711c",
+ decimals: 6
+ },
+ {
+ symbol: "PAX",
+ name: "Paxos Standard Token",
+ address: "0x8e870d67f660d95d5be530380d0ec0bd388289e1",
+ decimals: 18
+ },
+ {
+ symbol: "DRGN",
+ name: "Dragonchain",
+ address: "0x419c4db4b9e25d6db2ad9691ccb832c8d9fda05e",
+ decimals: 18
+ },
+ {
+ symbol: "NPXS",
+ name: "Pundi X",
+ address: "0xa15c7ebe1f07caf6bff097d8a589fb8ac49ae5b3",
+ decimals: 18
+ },
+ {
+ symbol: "ART",
+ name: "Maecenas",
+ address: "0xfec0cf7fe078a500abf15f1284958f22049c2c7e",
+ decimals: 18
+ },
+ {
+ symbol: "WAX",
+ name: "WAX",
+ address: "0x39Bb259F66E1C59d5ABEF88375979b4D20D98022",
+ decimals: 8
+ },
+ {
+ symbol: "BTU",
+ name: "BTU Protocol",
+ address: "0xb683d83a532e2cb7dfa5275eed3698436371cc9f",
+ decimals: 18
+ },
+ {
+ symbol: "MET",
+ name: "Metronome",
+ address: "0xa3d58c4e56fedcae3a7c43a725aee9a71f0ece4e",
+ decimals: 18
+ },
+ {
+ symbol: "EOST",
+ name: "EOST TRUST",
+ address: "0x87210f1d3422ba75b6c40c63c78d79324dabcd55",
+ decimals: 18
+ },
+ {
+ symbol: "EVN",
+ name: "Envion",
+ address: "0xd780ae2bf04cd96e577d3d014762f831d97129d0",
+ decimals: 18
+ },
+ {
+ symbol: "ETHOS",
+ name: "Ethos",
+ address: "0x5af2be193a6abca9c8817001f45744777db30756",
+ decimals: 8
+ },
+ {
+ symbol: "DALC",
+ name: "Dalecoin",
+ address: "0x07d9e49ea402194bf48a8276dafb16e4ed633317",
+ decimals: 8
+ },
+ {
+ symbol: "CRED",
+ name: "Verify",
+ address: "0x672a1ad4f667fb18a333af13667aa0af1f5b5bdd",
+ decimals: 18
+ },
+ {
+ symbol: "KEY",
+ name: "Selfkey",
+ address: "0x4cc19356f2d37338b9802aa8e8fc58b0373296e7",
+ decimals: 18
+ },
+ {
+ symbol: "LIKE",
+ name: "LikeCoin",
+ address: "0x02f61fd266da6e8b102d4121f5ce7b992640cf98",
+ decimals: 18
+ },
+ {
+ symbol: "PRG",
+ name: "Paragon",
+ address: "0x7728dFEF5aBd468669EB7f9b48A7f70a501eD29D",
+ decimals: 6
+ },
+ {
+ symbol: "CLM",
+ name: "Claymore",
+ address: "0x0ed8343dfdee32e38b4c4ce15a3b00a59e90f3db",
+ decimals: 18
+ },
+ {
+ symbol: "STORM",
+ name: "Storm",
+ address: "0xd0a4b8946cb52f0661273bfbc6fd0e0c75fc6433",
+ decimals: 18
+ },
+ {
+ symbol: "DADI",
+ name: "DADI",
+ address: "0xfb2f26f266fb2805a387230f2aa0a331b4d96fba",
+ decimals: 18
+ },
+ {
+ symbol: "PI",
+ name: "PCHAIN",
+ address: "0xb9bb08ab7e9fa0a1356bd4a39ec0ca267e03b0b3",
+ decimals: 18
+ },
+ {
+ symbol: "FMF",
+ name: "Formosa Financial",
+ address: "0xb4d0fdfc8497aef97d3c2892ae682ee06064a2bc",
+ decimals: 18
+ },
+ {
+ symbol: "MCO",
+ name: "Crypto.com",
+ address: "0xb63b606ac810a52cca15e44bb630fd42d8d1d83d",
+ decimals: 8
+ },
+ {
+ symbol: "WINGS",
+ name: "Wings",
+ address: "0x667088b212ce3d06a1b553a7221E1fD19000d9aF",
+ decimals: 18
+ },
+ {
+ symbol: "LEND",
+ name: "ETHLend",
+ address: "0x80fb784b7ed66730e8b1dbd9820afd29931aab03",
+ decimals: 18
+ },
+ {
+ symbol: "WABI",
+ name: "Tael",
+ address: "0x286bda1413a2df81731d4930ce2f862a35a609fe",
+ decimals: 18
+ },
+ {
+ symbol: "SUSD",
+ name: "sUSD",
+ address: "0x57ab1e02fee23774580c119740129eac7081e9d3",
+ decimals: 18
+ },
+ {
+ symbol: "JSE",
+ name: "JSECOIN",
+ address: "0x2d184014b5658c453443aa87c8e9c4d57285620b",
+ decimals: 18
+ },
+ {
+ symbol: "TYPE",
+ name: "Typerium",
+ address: "0xeaf61fc150cd5c3bea75744e830d916e60ea5a9f",
+ decimals: 4
+ },
+ {
+ symbol: "HERC",
+ name: "Hercules",
+ address: "0x6251583e7d997df3604bc73b9779196e94a090ce",
+ decimals: 18
+ },
+ {
+ symbol: "TRAC",
+ name: "OriginTrail",
+ address: "0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f",
+ decimals: 18
+ },
+ {
+ symbol: "LBA",
+ name: "Cred",
+ address: "0xfe5f141bf94fe84bc28ded0ab966c16b17490657",
+ decimals: 18
+ },
+ {
+ symbol: "NEU",
+ name: "Neumark",
+ address: "0xa823e6722006afe99e91c30ff5295052fe6b8e32",
+ decimals: 18
+ },
+ {
+ symbol: "RHOC",
+ name: "RChain",
+ address: "0x168296bb09e24a88805cb9c33356536b980d3fc5",
+ decimals: 8
+ },
+ {
+ symbol: "EVE",
+ name: "Devery",
+ address: "0x923108a439c4e8c2315c4f6521e5ce95b44e9b4c",
+ decimals: 18
+ },
+ {
+ symbol: "LIT",
+ name: "Lition",
+ address: "0x763fa6806e1acf68130d2d0f0df754c93cc546b2",
+ decimals: 18
+ },
+ {
+ symbol: "LA",
+ name: "LATOKEN",
+ address: "0xe50365f5d679cb98a1dd62d6f6e58e59321bcddf",
+ decimals: 18
+ },
+ {
+ symbol: "BLUE",
+ name: "Blue Protocol",
+ address: "0x539efe69bcdd21a83efd9122571a64cc25e0282b",
+ decimals: 8
+ },
+ {
+ symbol: "QCH",
+ name: "QChi",
+ address: "0x687bfc3e73f6af55f0ccca8450114d107e781a0e",
+ decimals: 18
+ },
+ {
+ symbol: "DCN",
+ name: "Dentacoin",
+ address: "0x08d32b0da63e2c3bcf8019c9c5d849d7a9d791e6",
+ decimals: 0
+ },
+ {
+ symbol: "HAND",
+ name: "ShowHand",
+ address: "0x48c1b2f3efa85fbafb2ab951bf4ba860a08cdbb7",
+ decimals: 0
+ },
+ {
+ symbol: "ENG",
+ name: "Enigma",
+ address: "0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4",
+ decimals: 8
+ },
+ {
+ symbol: "SAN",
+ name: "Santiment Network Token",
+ address: "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098",
+ decimals: 18
+ },
+ {
+ symbol: "DTH",
+ name: "Dether",
+ address: "0x5adc961d6ac3f7062d2ea45fefb8d8167d44b190",
+ decimals: 18
+ },
+ {
+ symbol: "AUC",
+ name: "Auctus",
+ address: "0xc12d099be31567add4e4e4d0d45691c3f58f5663",
+ decimals: 18
+ },
+ {
+ symbol: "TAAS",
+ name: "TaaS",
+ address: "0xe7775a6e9bcf904eb39da2b68c5efb4f9360e08c",
+ decimals: 6
+ },
+ {
+ symbol: "MITH",
+ name: "Mithril",
+ address: "0x3893b9422cd5d70a81edeffe3d5a1c6a978310bb",
+ decimals: 18
+ },
+ {
+ symbol: "AAA",
+ name: "Abulaba",
+ address: "0xd938137e6d96c72e4a6085412ada2dad78ff89c4",
+ decimals: 8
+ },
+ {
+ symbol: "ADX",
+ name: "AdEx",
+ address: "0x4470bb87d77b963a013db939be332f927f2b992e",
+ decimals: 4
+ },
+ {
+ symbol: "AERGO",
+ name: "Aergo",
+ address: "0xae31b85bfe62747d0836b82608b4830361a3d37a",
+ decimals: 18
+ },
+ {
+ symbol: "AGI",
+ name: "SingularityNET",
+ address: "0x8eb24319393716668d768dcec29356ae9cffe285",
+ decimals: 8
+ },
+ {
+ symbol: "AMB",
+ name: "Ambrosus",
+ address: "0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce",
+ decimals: 18
+ },
+ {
+ symbol: "AOA",
+ name: "Aurora",
+ address: "0x9ab165d795019b6d8b3e971dda91071421305e5a",
+ decimals: 18
+ },
+ {
+ symbol: "ARN",
+ name: "Aeron",
+ address: "0xBA5F11b16B155792Cf3B2E6880E8706859A8AEB6",
+ decimals: 8
+ },
+ {
+ symbol: "AWC",
+ name: "Atomic Wallet Coin",
+ address: "0xad22f63404f7305e4713ccbd4f296f34770513f4",
+ decimals: 8
+ },
+ {
+ symbol: "BAX",
+ name: "BABB",
+ address: "0x9a0242b7a33dacbe40edb927834f96eb39f8fbcb",
+ decimals: 18
+ },
+ {
+ symbol: "BBO",
+ name: "Bigbom",
+ address: "0x84f7c44b6fed1080f647e354d552595be2cc602f",
+ decimals: 18
+ },
+ {
+ symbol: "BCDT",
+ name: "Blockchain Certified Data Token",
+ address: "0xacfa209fb73bf3dd5bbfb1101b9bc999c49062a5",
+ decimals: 18
+ },
+ {
+ symbol: "BLZ",
+ name: "Bluzelle",
+ address: "0x5732046a883704404f284ce41ffadd5b007fd668",
+ decimals: 18
+ },
+ {
+ symbol: "BOMB",
+ name: "BOMB",
+ address: "0x1C95b093d6C236d3EF7c796fE33f9CC6b8606714",
+ decimals: 0
+ },
+ {
+ symbol: "BPT",
+ name: "Blockport",
+ address: "0x327682779bab2bf4d1337e8974ab9de8275a7ca8",
+ decimals: 18
+ },
+ {
+ symbol: "CAR",
+ name: "CarBlock",
+ address: "0x4d9e23a3842fe7eb7682b9725cf6c507c424a41b",
+ decimals: 18
+ },
+ {
+ symbol: "CAT",
+ name: "BitClave",
+ address: "0x1234567461d3f8db7496581774bd869c83d51c93",
+ decimals: 18
+ },
+ {
+ symbol: "CEL",
+ name: "Celsius",
+ address: "0xaaaebe6fe48e54f431b0c390cfaf0b017d09d42d",
+ decimals: 4
+ },
+ {
+ symbol: "CENNZ",
+ name: "Centrality",
+ address: "0x1122b6a0e00dce0563082b6e2953f3a943855c1f",
+ decimals: 18
+ },
+ {
+ symbol: "CET",
+ name: "CoinEx Token",
+ address: "0x081f67afa0ccf8c7b17540767bbe95df2ba8d97f",
+ decimals: 18
+ },
+ {
+ symbol: "CMCT",
+ name: "Crowd Machine",
+ address: "0x47bc01597798dcd7506dcca36ac4302fc93a8cfb",
+ decimals: 8
+ },
+ {
+ symbol: "CND",
+ name: "Cindicator",
+ address: "0xd4c435f5b09f855c3317c8524cb1f586e42795fa",
+ decimals: 18
+ },
+ {
+ symbol: "CNN",
+ name: "Content Neutrality Network",
+ address: "0x8713d26637cf49e1b6b4a7ce57106aabc9325343",
+ decimals: 18
+ },
+ {
+ symbol: "CNUS",
+ name: "CoinUs",
+ address: "0x722f2f3eac7e9597c73a593f7cf3de33fbfc3308",
+ decimals: 18
+ },
+ {
+ symbol: "COT",
+ name: "CoTrader",
+ address: "0x5c872500c00565505f3624ab435c222e558e9ff8",
+ decimals: 18
+ },
+ {
+ symbol: "CRO",
+ name: "Crypto.com Chain",
+ address: "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b",
+ decimals: 8
+ },
+ {
+ symbol: "CTRT",
+ name: "Cryptrust",
+ address: "0x8606a8f28e1e2fd50b9074d65c01548b1f040b32",
+ decimals: 8
+ },
+ {
+ symbol: "CYFM",
+ name: "CyberFM",
+ address: "0x3f06b5d78406cd97bdf10f5c420b241d32759c80",
+ decimals: 18
+ },
+ {
+ symbol: "DENT",
+ name: "Dent",
+ address: "0x3597bfd533a99c9aa083587b074434e61eb0a258",
+ decimals: 8
+ },
+ {
+ symbol: "DGTX",
+ name: "Digitex Futures",
+ address: "0x1c83501478f1320977047008496dacbd60bb15ef",
+ decimals: 18
+ },
+ {
+ symbol: "DREAM",
+ name: "DreamTeam Token",
+ address: "0x82f4ded9cec9b5750fbff5c2185aee35afc16587",
+ decimals: 6
+ },
+ {
+ symbol: "EDR",
+ name: "Endor Protocol",
+ address: "0xc528c28fec0a90c083328bc45f587ee215760a0f",
+ decimals: 18
+ },
+ {
+ symbol: "EDU",
+ name: "EduCoin",
+ address: "0xf263292e14d9d8ecd55b58dad1f1df825a874b7c",
+ decimals: 18
+ },
+ {
+ symbol: "ELEC",
+ name: "Electrify.Asia",
+ address: "0xd49ff13661451313ca1553fd6954bd1d9b6e02b9",
+ decimals: 18
+ },
+ {
+ symbol: "ELITE",
+ name: "Ethereum Lite",
+ address: "0x0a76aad21948ea1ef447d26dee91a54370e151e0",
+ decimals: 18
+ },
+ {
+ symbol: "ERC20",
+ name: "ERC20",
+ address: "0xc3761eb917cd790b30dad99f6cc5b4ff93c4f9ea",
+ decimals: 18
+ },
+ {
+ symbol: "EURS",
+ name: "STASIS EURS",
+ address: "0xdb25f211ab05b1c97d595516f45794528a807ad8",
+ decimals: 2
+ },
+ {
+ symbol: "FLIXX",
+ name: "Flixxo",
+ address: "0xf04a8ac553fcedb5ba99a64799155826c136b0be",
+ decimals: 18
+ },
+ {
+ symbol: "FREE",
+ name: "FREE Coin",
+ address: "0x2f141ce366a2462f02cea3d12cf93e4dca49e4fd",
+ decimals: 18
+ },
+ {
+ symbol: "FTM",
+ name: "Fantom",
+ address: "0x4e15361fd6b4bb609fa63c81a2be19d873717870",
+ decimals: 18
+ },
+ {
+ symbol: "FTXT",
+ name: "FUTURAX",
+ address: "0x41875c2332b0877cdfaa699b641402b7d4642c32",
+ decimals: 8
+ },
+ {
+ symbol: "GNT",
+ name: "Golem",
+ address: "0xa74476443119A942dE498590Fe1f2454d7D4aC0d",
+ decimals: 18
+ },
+ {
+ symbol: "GZE",
+ name: "GazeCoin",
+ address: "0x4ac00f287f36a6aad655281fe1ca6798c9cb727b",
+ decimals: 18
+ },
+ {
+ symbol: "HBZ",
+ name: "HBZ coin",
+ address: "0xe34e1944e776f39b9252790a0527ebda647ae668",
+ decimals: 18
+ },
+ {
+ symbol: "HERO",
+ name: "Hero",
+ address: "0x02585e4a14da274d02df09b222d4606b10a4e940",
+ decimals: 18
+ },
+ {
+ symbol: "HGT",
+ name: "HelloGold",
+ address: "0xba2184520a1cc49a6159c57e61e1844e085615b6",
+ decimals: 8
+ },
+ {
+ symbol: "HOT",
+ name: "Hydro Protocol",
+ address: "0x9af839687f6c94542ac5ece2e317daae355493a1",
+ decimals: 18
+ },
+ {
+ symbol: "HPT",
+ name: "Huobi Pool Token",
+ address: "0xa66Daa57432024023DB65477BA87D4E7F5f95213",
+ decimals: 18
+ },
+ {
+ symbol: "HYDRO",
+ name: "Hydro",
+ address: "0xebbdf302c940c6bfd49c6b165f457fdb324649bc",
+ decimals: 18
+ },
+ {
+ symbol: "IDT",
+ name: "InvestDigital",
+ address: "0x02c4c78c462e32cca4a90bc499bf411fb7bc6afb",
+ decimals: 18
+ },
+ {
+ symbol: "IDXM",
+ name: "IDEX Membership",
+ address: "0xcc13fc627effd6e35d2d2706ea3c4d7396c610ea",
+ decimals: 8
+ },
+ {
+ symbol: "IHF",
+ name: "Invictus Hyperion Fund",
+ address: "0xaf1250fa68d7decd34fd75de8742bc03b29bd58e",
+ decimals: 18
+ },
+ {
+ symbol: "INB",
+ name: "Insight Chain",
+ address: "0x17aa18a4b64a55abed7fa543f2ba4e91f2dce482",
+ decimals: 18
+ },
+ {
+ symbol: "IND",
+ name: "Indorse Token",
+ address: "0xf8e386eda857484f5a12e4b5daa9984e06e73705",
+ decimals: 18
+ },
+ {
+ symbol: "INE",
+ name: "IntelliShare",
+ address: "0x86e6a4f512b1290c043970b04e0b570d4fc98291",
+ decimals: 18
+ },
+ {
+ symbol: "IPSX",
+ name: "IP Exchange",
+ address: "0x001f0aa5da15585e5b2305dbab2bac425ea71007",
+ decimals: 18
+ },
+ {
+ symbol: "ITT",
+ name: "Intelligent Trading Foundation",
+ address: "0x0aef06dcccc531e581f0440059e6ffcc206039ee",
+ decimals: 8
+ },
+ {
+ symbol: "JS",
+ name: "JavaScript Token",
+ address: "0x5046e860ff274fb8c66106b0ffb8155849fb0787",
+ decimals: 8
+ },
+ {
+ symbol: "KBC",
+ name: "Karatgold Coin",
+ address: "0xf3586684107ce0859c44aa2b2e0fb8cd8731a15a",
+ decimals: 7
+ },
+ {
+ symbol: "KCS",
+ name: "KuCoin Shares",
+ address: "0x039b5649a59967e3e936d7471f9c3700100ee1ab",
+ decimals: 6
+ },
+ {
+ symbol: "LALA",
+ name: "LALA World",
+ address: "0xfd107b473ab90e8fbd89872144a3dc92c40fa8c9",
+ decimals: 18
+ },
+ {
+ symbol: "LIF",
+ name: "Winding Tree",
+ address: "0xeb9951021698b42e4399f9cbb6267aa35f82d59d",
+ decimals: 18
+ },
+ {
+ symbol: "LTO",
+ name: "LTO Network",
+ address: "0x3db6ba6ab6f95efed1a6e794cad492faaabf294d",
+ decimals: 8
+ },
+ {
+ symbol: "MAS",
+ name: "MidasProtocol",
+ address: "0x23ccc43365d9dd3882eab88f43d515208f832430",
+ decimals: 18
+ },
+ {
+ symbol: "MATIC",
+ name: "Matic Network",
+ address: "0x7D1AfA7B718fb893dB30A3aBc0Cfc608AaCfeBB0",
+ decimals: 18
+ },
+ {
+ symbol: "MEDIBIT",
+ name: "MediBit",
+ address: "0x737fa0372c8d001904ae6acaf0552d4015f9c947",
+ decimals: 18
+ },
+ {
+ symbol: "MFG",
+ name: "SyncFab",
+ address: "0x6710c63432a2de02954fc0f851db07146a6c0312",
+ decimals: 18
+ },
+ {
+ symbol: "MLN",
+ name: "Melon",
+ address: "0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1",
+ decimals: 18
+ },
+ {
+ symbol: "MRPH",
+ name: "Morpheus.Network",
+ address: "0x7b0c06043468469967dba22d1af33d77d44056c8",
+ decimals: 4
+ },
+ {
+ symbol: "MTL",
+ name: "Metal",
+ address: "0xF433089366899D83a9f26A773D59ec7eCF30355e",
+ decimals: 8
+ },
+ {
+ symbol: "MTN",
+ name: "Medicalchain",
+ address: "0x41dbecc1cdc5517c6f76f6a6e836adbee2754de3",
+ decimals: 18
+ },
+ {
+ symbol: "MTV",
+ name: "MultiVAC",
+ address: "0x8aa688AB789d1848d131C65D98CEAA8875D97eF1",
+ decimals: 18
+ },
+ {
+ symbol: "MYST",
+ name: "Mysterium",
+ address: "0xa645264c5603e96c3b0b078cdab68733794b0a71",
+ decimals: 8
+ },
+ {
+ symbol: "NTK",
+ name: "Neurotoken",
+ address: "0x69beab403438253f13b6e92db91f7fb849258263",
+ decimals: 18
+ },
+ {
+ symbol: "NUG",
+ name: "Nuggets",
+ address: "0x245ef47d4d0505ecf3ac463f4d81f41ade8f1fd1",
+ decimals: 18
+ },
+ {
+ symbol: "OCEAN",
+ name: "Ocean Protocol",
+ address: "0x985dd3d42de1e256d09e1c10f112bccb8015ad41",
+ decimals: 18
+ },
+ {
+ symbol: "OGO",
+ name: "Origo",
+ address: "0xff0e5e014cf97e0615cb50f6f39da6388e2fae6e",
+ decimals: 18
+ },
+ {
+ symbol: "OMG",
+ name: "OmiseGO",
+ address: "0xd26114cd6EE289AccF82350c8d8487fedB8A0C07",
+ decimals: 18
+ },
+ {
+ symbol: "PAY",
+ name: "TenX",
+ address: "0xb97048628db6b661d4c2aa833e95dbe1a905b280",
+ decimals: 18
+ },
+ {
+ symbol: "PLAY",
+ name: "HEROcoin",
+ address: "0xe477292f1b3268687a29376116b0ed27a9c76170",
+ decimals: 18
+ },
+ {
+ symbol: "PLR",
+ name: "Pillar",
+ address: "0xe3818504c1b32bf1557b16c238b2e01fd3149c17",
+ decimals: 18
+ },
+ {
+ symbol: "PPP",
+ name: "PayPie",
+ address: "0xc42209accc14029c1012fb5680d95fbd6036e2a0",
+ decimals: 18
+ },
+ {
+ symbol: "PRIX",
+ name: "Privatix",
+ address: "0x3adfc4999f77d04c8341bac5f3a76f58dff5b37a",
+ decimals: 8
+ },
+ {
+ symbol: "PTOY",
+ name: "Patientory",
+ address: "0x8ae4bf2c33a8e667de34b54938b0ccd03eb8cc06",
+ decimals: 8
+ },
+ {
+ symbol: "QNT",
+ name: "Quant",
+ address: "0x4a220e6096b25eadb88358cb44068a3248254675",
+ decimals: 18
+ },
+ {
+ symbol: "RC20",
+ name: "RoboCalls",
+ address: "0x61b2d3ea9f1c6b387c985c73d40e8fbfb284e5c7",
+ decimals: 18
+ },
+ {
+ symbol: "REAL",
+ name: "REAL",
+ address: "0x9214ec02cb71cba0ada6896b8da260736a67ab10",
+ decimals: 18
+ },
+ {
+ symbol: "RIYA",
+ name: "Etheriya",
+ address: "0x0b1724cc9fda0186911ef6a75949e9c0d3f0f2f3",
+ decimals: 8
+ },
+ {
+ symbol: "RSR",
+ name: "Reserve Rights",
+ address: "0x8762db106b2c2a0bccb3a80d1ed41273552616e8",
+ decimals: 18
+ },
+ {
+ symbol: "SENT",
+ name: "Sentinel",
+ address: "0xa44e5137293e855b1b7bc7e2c6f8cd796ffcb037",
+ decimals: 8
+ },
+ {
+ symbol: "SHP",
+ name: "Sharpe Platform Token",
+ address: "0xef2463099360a085f1f10b076ed72ef625497a06",
+ decimals: 18
+ },
+ {
+ symbol: "SNGLS",
+ name: "SingularDTV",
+ address: "0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009",
+ decimals: 0
+ },
+ {
+ symbol: "STAR",
+ name: "Starbase",
+ address: "0xf70a642bd387f94380ffb90451c2c81d4eb82cbc",
+ decimals: 18
+ },
+ {
+ symbol: "STR",
+ name: "Staker",
+ address: "0xbae235823d7255d9d48635ced4735227244cd583",
+ decimals: 18
+ },
+ {
+ symbol: "SWM",
+ name: "Swarm",
+ address: "0x9e88613418cf03dca54d6a2cf6ad934a78c7a17a",
+ decimals: 18
+ },
+ {
+ symbol: "SXUT",
+ name: "Spectre.ai Utility Token",
+ address: "0x2c82c73d5b34aa015989462b2948cd616a37641f",
+ decimals: 18
+ },
+ {
+ symbol: "TAU",
+ name: "Lamden",
+ address: "0xc27a2f05fa577a83ba0fdb4c38443c0718356501",
+ decimals: 18
+ },
+ {
+ symbol: "TRAT",
+ name: "Tratok",
+ address: "0x0cbc9b02b8628ae08688b5cc8134dc09e36c443b",
+ decimals: 5
+ },
+ {
+ symbol: "TRXC",
+ name: "TRONCLASSIC",
+ address: "0xad5fe5b0b8ec8ff4565204990e4405b2da117d8e",
+ decimals: 0
+ },
+ {
+ symbol: "TUSD",
+ name: "TrueUSD",
+ address: "0x0000000000085d4780B73119b644AE5ecd22b376",
+ decimals: 18
+ },
+ {
+ symbol: "UBN",
+ name: "Ubricoin",
+ address: "0xdb13025b219db5e4529f48b65ff009a26b6ae733",
+ decimals: 18
+ },
+ {
+ symbol: "VERI",
+ name: "Veritaseum",
+ address: "0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374",
+ decimals: 18
+ },
+ {
+ symbol: "VIB",
+ name: "Viberate",
+ address: "0x2c974b2d0ba1716e644c1fc59982a89ddd2ff724",
+ decimals: 18
+ },
+ {
+ symbol: "VIDT",
+ name: "V-ID",
+ address: "0x445f51299ef3307dbd75036dd896565f5b4bf7a5",
+ decimals: 18
+ },
+ {
+ symbol: "VLD",
+ name: "Vetri",
+ address: "0x922ac473a3cc241fd3a0049ed14536452d58d73c",
+ decimals: 18
+ },
+ {
+ symbol: "WIB",
+ name: "Wibson",
+ address: "0x3f17dd476faf0a4855572f0b6ed5115d9bba22ad",
+ decimals: 9
+ },
+ {
+ symbol: "WPR",
+ name: "WePower",
+ address: "0x4CF488387F035FF08c371515562CBa712f9015d4",
+ decimals: 18
+ },
+ {
+ symbol: "X8X",
+ name: "X8X Token",
+ address: "0x910dfc18d6ea3d6a7124a6f8b5458f281060fa4c",
+ decimals: 18
+ },
+ {
+ symbol: "XES",
+ name: "Proxeus",
+ address: "0xa017ac5fac5941f95010b12570b812c974469c2c",
+ decimals: 18
+ },
+ {
+ symbol: "YUP",
+ name: "Crowdholding",
+ address: "0xd9a12cde03a86e800496469858de8581d3a5353d",
+ decimals: 18
+ },
+ {
+ symbol: "ZCN",
+ name: "0Chain",
+ address: "0xb9ef770b6a5e12e45983c5d80545258aa38f3b78",
+ decimals: 10
+ },
+ {
+ symbol: "ZCO",
+ name: "Zebi",
+ address: "0x2008e3057bd734e10ad13c9eae45ff132abc1722",
+ decimals: 8
+ },
+ {
+ symbol: "ZEON",
+ name: "ZEON",
+ address: "0xe5b826ca2ca02f09c1725e9bd98d9a8874c30532",
+ decimals: 18
+ }
+];
diff --git a/server/src/utils/formatter.js b/server/src/utils/formatter.js
new file mode 100644
index 0000000..37ec1e3
--- /dev/null
+++ b/server/src/utils/formatter.js
@@ -0,0 +1,20 @@
+const BigNumber = require('bignumber.js');
+
+//helper function to parse amount from csv and convert into ERC-20 token's 18 decimal digit
+const parseAmount = (preformattedAmount) => {
+ bn = new BigNumber(Number(preformattedAmount.trim()));
+ tokenUnit = new BigNumber(10);
+ tokenUnit = tokenUnit.exponentiatedBy(18);
+ return (bn.multipliedBy(tokenUnit)).toPrecision();
+}
+
+//make amount to readable format
+const readableBalance = (preformattedAmount) => {
+ bn = new BigNumber(Number(preformattedAmount));
+ tokenUnit = new BigNumber(10);
+ tokenUnit = tokenUnit.exponentiatedBy(-18);
+ return (bn.multipliedBy(tokenUnit)).toPrecision();
+
+}
+
+module.exports = { parseAmount, readableBalance }
\ No newline at end of file
diff --git a/server/src/utils/signer.js b/server/src/utils/signer.js
new file mode 100644
index 0000000..f5ace35
--- /dev/null
+++ b/server/src/utils/signer.js
@@ -0,0 +1,88 @@
+require("dotenv").config();
+const Web3 = require("web3");
+const Common = require('ethereumjs-common');
+const Tx = require("ethereumjs-tx").Transaction;
+//instantite web3
+let web3 = new Web3(process.env.INFURA_NODE);
+
+const customPacific = Common.default.forCustomChain(
+ 'ropsten',
+ {
+ name: 'pacific-network',
+ networkId: 846353,
+ chainId: 846353,
+ },
+ 'petersburg'
+)
+
+async function sendTx(txData, from, to, value) {
+ try {
+ //get current nonce
+ let nonce = await web3.eth.getTransactionCount(from, "pending");
+ console.log(`Nonce for ${from} - ${nonce}`);
+
+ //prepare unsigned tx
+ let gasPrice = "20000000000";
+ let chainId = await getChainId(web3);
+ console.log("Chain Id - ", chainId);
+
+ let rawTransaction = {
+ from: from,
+ nonce: nonce,
+ gasPrice: web3.utils.toHex(parseInt(gasPrice)),
+ gasLimit: web3.utils.toHex(parseInt("1000000")),
+ to: to,
+ value: 0,
+ data: txData,
+ chainId: chainId //846353
+ };
+
+ let tx = new Tx(rawTransaction, { chain: 4 });
+ //sign the transaction
+ console.log("The transaction's chain id is", tx.getChainId())
+ let privKey = new Buffer.from(process.env.OCEAN_FROM_KEY, "hex");
+ //sign the transaction
+ tx.sign(privKey);
+ console.log(`Signed tx`);
+ //serialize the given tx to send it to blockchain
+ let serializedTx = tx.serialize();
+ console.log(`Tx serialised`);
+ console.log(serializedTx)
+ // send our signed tx to ethereum blockchain
+ let signedTx = web3.eth.sendSignedTransaction(
+ "0x" + serializedTx.toString("hex")
+ );
+ console.log(`Tx sent to the node`);
+
+ //wait for confirmation
+ let txHash = await new Promise((resolve, reject) => {
+ signedTx
+ .on("transactionHash", function (hash) {
+ console.log(`Tx sent to network with id - ${hash}`);
+ signedTx.off("transactionHash");
+ resolve(hash);
+ })
+ .on("error", function (error) {
+ reject(error);
+ throw Error(error);
+ });
+ });
+
+ return txHash;
+ } catch (error) {
+ throw Error(error);
+ }
+}
+
+async function getChainId(web3) {
+ try {
+ console.log('Getting chain id')
+ const chainId = await web3.eth.net.getId()
+ console.log({ chainId }, 'Chain id obtained')
+ return chainId
+ } catch (e) {
+ throw new Error(`Chain Id cannot be obtained`)
+ }
+}
+
+module.exports = { sendTx };
diff --git a/src/api.js b/src/api.js
index 13476db..24a03ab 100644
--- a/src/api.js
+++ b/src/api.js
@@ -1,5 +1,17 @@
let baseUrl = process.env.REACT_APP_PAYFIAT_SERVER_URL;
+const checkServerAvailability = options => {
+ return window
+ .fetch(`${baseUrl}/health`)
+ .then(res => {
+ if (res.status == 200) {
+ return true;
+ } else {
+ return false;
+ }
+ });
+}
+
const createPaymentIntent = options => {
return window
.fetch(`${baseUrl}/fiat/create-payment-intent`, {
@@ -27,32 +39,6 @@ const createPaymentIntent = options => {
});
};
-const getProductDetails = options => {
- return window
- .fetch(`${baseUrl}/fiat/product-details`, {
- method: "GET",
- headers: {
- 'Content-Type': 'application/json',
- 'Accept': 'application/json'
- }
- })
- .then(res => {
- if (res.status === 200) {
- return res.json();
- } else {
- return null;
- }
- })
- .then(data => {
- if (!data || data.error) {
- console.log("API error:", { data });
- throw Error("API Error");
- } else {
- return data;
- }
- });
-};
-
const getPublicStripeKey = options => {
return window
.fetch(`${baseUrl}/fiat/public-key`, {
@@ -116,6 +102,23 @@ const getCurrentOceanPrice = async options => {
}
}
+const checkTxStatus = async options => {
+ let { txHash } = options;
+ let res = await window.fetch(
+ `${baseUrl}/crypto/checkTxStatus?txHash=${txHash}`,
+ {
+ method: "GET",
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Accept': 'application/json'
+ }
+ }
+ );
+
+ let data = await res.json();
+ return data;
+}
+
const transferOCEAN = async options => {
let { amount, receiverAddress } = options;
let res = await window.fetch(
@@ -138,12 +141,13 @@ const transferOCEAN = async options => {
}
}
const api = {
+ checkServerAvailability,
createPaymentIntent,
- getPublicStripeKey: getPublicStripeKey,
- getProductDetails: getProductDetails,
+ getPublicStripeKey,
getTokenBalance,
getCurrentOceanPrice,
- transferOCEAN
+ transferOCEAN,
+ checkTxStatus
};
export default api;
diff --git a/src/components/Checkmark.js b/src/components/Checkmark.js
index 6d1145c..14474b5 100644
--- a/src/components/Checkmark.js
+++ b/src/components/Checkmark.js
@@ -11,7 +11,6 @@ class Checkmark extends Component {
}
static getDerivedStateFromProps(nextProps, prevState) {
- console.log(`Derived props - ${JSON.stringify(nextProps)} , ${JSON.stringify(prevState)}`)
if (nextProps.loadComplete !== prevState.loadComplete && nextProps.loadComplete) {
return { loadComplete: nextProps.loadComplete, loaderClassname: 'circle-loader load-complete' };
}
diff --git a/src/components/fiat/FiatCheckoutForm.js b/src/components/fiat/FiatCheckoutForm.js
index fda7c3e..1184491 100644
--- a/src/components/fiat/FiatCheckoutForm.js
+++ b/src/components/fiat/FiatCheckoutForm.js
@@ -28,7 +28,9 @@ class FiatCheckoutForm extends Component {
tokenTransferError: null,
transferSuccessful: null,
transferFailed: null,
- tooltipOpen: false
+ tooltipOpen: false,
+ txHash: null,
+ clearInterval: null
};
this.handleSubmit = this.handleSubmit.bind(this);
@@ -36,6 +38,7 @@ class FiatCheckoutForm extends Component {
async componentDidMount() {
+ console.log(`Receiver Account - ${this.props.receiverAccount}`)
if (!web3.currentProvider) {
this.setState({ web3Connected: false }); //Unlock your metamask
return;
@@ -43,13 +46,22 @@ class FiatCheckoutForm extends Component {
this.setState({ web3Connected: true });
let _accounts = await web3.eth.getAccounts();
- console.log(_accounts[0]);
+ console.log(`Injected Web3 account - ${_accounts[0]}`);
+
+ if (!this.props.receiverAccount) {
+ this.setState({
+ amount: this.props.totalAmount,
+ currency: this.props.currency,
+ currentAccount: _accounts[0]
+ });
+ } else {
+ this.setState({
+ amount: this.props.totalAmount,
+ currency: this.props.currency,
+ currentAccount: this.props.receiverAccount
+ });
+ }
- this.setState({
- amount: this.props.totalAmount,
- currency: this.props.currency,
- currentAccount: _accounts[0]
- });
}
}
@@ -71,8 +83,10 @@ class FiatCheckoutForm extends Component {
else {
console.log(`TxHash - ${resp.txHash}`)
//start checking for transaction receipt
- setInterval(function () { this.checkForTokenTransferState(resp.txHash) }.bind(this), 5000);
+ let stopCheckingTxState = setInterval(function () { this.checkForTokenTransferState(resp.txHash) }.bind(this), 5000);
this.setState({
+ clearInterval: stopCheckingTxState,
+ txHash: resp.txHash,
hasTransferInitiated: true,
tokenTransferError: null
})
@@ -81,25 +95,40 @@ class FiatCheckoutForm extends Component {
}
async checkForTokenTransferState(txHash) {
+ console.log("checking for tx finality...")
try {
- let receipt = await web3.eth.getTransactionReceipt(txHash);
- if (receipt && receipt.status) {
+ console.log(`TxHash - ${txHash}`)
+ let resp = await api.checkTxStatus({ txHash: txHash })
+ if (!resp.status) {
+ throw Error(resp.message);
+ }
+
+ /*await web3.eth.getTransactionReceipt(txHash);*/
+ if (resp.status == "success") {
this.setState({
+ clearInterval: null,
transferSuccessful: true,
transferFailed: false,
transferProcessComplete: true
})
- } else if (receipt && receipt.status == false) {
+ //clear interval
+ clearInterval(this.state.clearInterval);
+ } else if (resp.status == "fail") {
this.setState({
+ clearInterval: null,
transferFailed: true,
transferSuccessful: false,
transferProcessComplete: true
})
+ //clear interval
+ clearInterval(this.state.clearInterval);
}
+
} catch (err) {
console.error(`Transfer receipt error - ${err.message}`)
this.setState({
- tokenTransferError: err.message
+ tokenTransferError: err.message,
+ transferFailed: true
})
}
}
@@ -139,7 +168,7 @@ class FiatCheckoutForm extends Component {
error: "",
metadata: payload.paymentIntent
});
- console.log("[PaymentIntent]", payload.paymentIntent);
+
}
});
})
@@ -190,6 +219,7 @@ class FiatCheckoutForm extends Component {
Transferring {this.props.oceanAmount} OCEAN to
{this.state.currentAccount}
+ {this.state.txHash ? (Tx Hash - {this.state.txHash}
) : ''}
);
}
diff --git a/src/fiatcheckout.js b/src/fiatcheckout.js
index cf66baa..2745acd 100644
--- a/src/fiatcheckout.js
+++ b/src/fiatcheckout.js
@@ -15,7 +15,6 @@ class FiatCheckout extends Component {
componentDidMount() {
api.getPublicStripeKey().then(apiKey => {
- console.log(apiKey);
this.setState({
apiKey: apiKey
});
@@ -34,6 +33,7 @@ class FiatCheckout extends Component {
currency={this.props.currency}
closeModal={this.props.closeModal.bind(this)}
oceanAmount={this.props.oceanAmount}
+ receiverAccount={this.props.receiverAccount}
/>
diff --git a/src/index.js b/src/index.js
index 8d662f9..274f2d7 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,7 +1,8 @@
import React, { Component } from "react";
import PayButtons from "./paybuttons.js";
-import "./index.css";
+import api from "./api";
+import "./index.css";
import "./assets/vendor/nucleo/css/nucleo.css";
import "./assets/vendor/font-awesome/css/font-awesome.min.css";
import "./assets/scss/argon-design-system-react.scss";
@@ -11,6 +12,41 @@ export class PayFiat extends Component {
constructor(props) {
super(props);
+ this.state = {
+ isServerOk: false,
+ isServerCheckOngoing: true
+ }
+ }
+
+ async componentDidMount() {
+ if (!this.state.isServerOk) {
+ let resp = await api.checkServerAvailability();
+ this.setState({
+ isServerOk: resp,
+ isServerCheckOngoing: false
+ })
+ }
+ }
+
+ renderInProgress() {
+ return (
+ Checking PayFiat Server availability...
+ )
+ }
+
+ renderServerUnavailable() {
+ return (
+ PayFiat server unavailable. Make sure Server is up and running and endpoint in configured correctly in .env file...
+ )
+ }
+
+ renderPayFiat() {
+ return (
+
+ )
}
render() {
@@ -18,11 +54,16 @@ export class PayFiat extends Component {
-
+ {this.state.isServerCheckOngoing ?
+ this.renderInProgress() :
+ (this.state.isServerOk ?
+ this.renderPayFiat() :
+ this.renderServerUnavailable())}
);
+
}
}
diff --git a/src/paybuttons.js b/src/paybuttons.js
index 58ffdbd..554c239 100644
--- a/src/paybuttons.js
+++ b/src/paybuttons.js
@@ -22,7 +22,6 @@ class PayButtons extends Component {
componentDidMount() {
api.getCurrentOceanPrice({ contractAddress: "0x985dd3d42de1e256d09e1c10f112bccb8015ad41", currency: this.props.currency }).then(price => {
- console.log(price);
this.setState({
payable: price
});
@@ -67,6 +66,7 @@ class PayButtons extends Component {
this.setState({ modal: shouldClose }))}
oceanAmount={this.props.oceanAmount}
closeModal={this.showClosebutton.bind(this)}
@@ -78,7 +78,6 @@ class PayButtons extends Component {
}
render() {
- console.log(`Modal - ${this.state.modal}`);
return (
{this.state.modal ? (