forked from MyEtherWallet/ethereum-lists
-
Notifications
You must be signed in to change notification settings - Fork 0
/
createTokens.js
116 lines (116 loc) · 3.11 KB
/
createTokens.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
const fs = require('fs');
const Web3 = require('web3');
const fetch = require('node-fetch');
const utils = Web3.utils;
const tokensDirectory = './src/tokens/eth/';
const notInListPath = './notinlist.json';
const notInList = JSON.parse(fs.readFileSync(notInListPath));
const api = 'https://api.coingecko.com/api/v3/coins/ethereum/contract';
const node = 'https://nodes.mewapi.io/rpc/eth';
const abi = [
{
constant: true,
inputs: [],
name: 'decimals',
outputs: [
{
name: '',
type: 'uint8'
}
],
payable: false,
stateMutability: 'view',
type: 'function'
}
];
const web3 = new Web3(node);
async function createToken() {
for (let index = 0; index < notInList.length; index++) {
try {
const contract = new web3.eth.Contract(abi, notInList[index]);
const decimal = await contract.methods
.decimals()
.call()
.catch(() => {
console.log(`Could not fetch decimal for: ${notInList[index]}!`);
});
const tokenInfo = await fetch(`${api}/${notInList[index]}`).then(
response => {
return response.json();
}
);
const tokenTemp = {
symbol: '',
name: '',
type: 'ERC20',
address: '',
ens_address: '',
decimals: 0,
website: '',
logo: {
src: '',
width: '',
height: '',
ipfs_hash: ''
},
support: {
email: '',
url: ''
},
social: {
blog: '',
chat: '',
discord: '',
facebook: '',
forum: '',
github: '',
gitter: '',
instagram: '',
linkedin: '',
reddit: '',
slack: '',
telegram: '',
twitter: '',
youtube: ''
}
};
if (!tokenInfo.hasOwnProperty('error')) {
const homepage = tokenInfo.hasOwnProperty('links')
? tokenInfo.links.hasOwnProperty('homepage')
? tokenInfo.links.homepage[0]
: ''
: '';
const newTokenCopy = Object.assign({}, tokenTemp, {
symbol: tokenInfo.symbol.toUpperCase(),
name: tokenInfo.name,
address: utils.toChecksumAddress(notInList[index]),
decimals: Number(decimal),
website: homepage
});
fs.writeFileSync(
`${tokensDirectory}/${utils.toChecksumAddress(
notInList[index].replace('.json', '')
)}.json`,
JSON.stringify(newTokenCopy)
);
} else {
const newTokenCopy = Object.assign({}, tokenTemp, {
address: utils.toChecksumAddress(notInList[index]),
decimals: Number(decimal)
});
fs.writeFileSync(
`${tokensDirectory}/${utils.toChecksumAddress(
notInList[index].replace('.json', '')
)}.json`,
JSON.stringify(newTokenCopy)
);
console.log(
`CoinGecko could not find ${notInList[index]}! Some info will be missing`
);
}
} catch (e) {
console.log(e, notInList[index], index);
}
}
}
createToken();