forked from DeFiGeek-Community/discord-bot
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.js
More file actions
93 lines (81 loc) · 2.81 KB
/
Copy pathapi.js
File metadata and controls
93 lines (81 loc) · 2.81 KB
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
const express = require('express');
const fetch = require('node-fetch');
const dotenv = require('dotenv');
const Big = require('big.js');
dotenv.config();
const app = express();
const PORT = 9000;
const myWalletAddresses = [
"0x24dd242c3c4061b1fcaa5119af608b56afbaea95",
"0x153d9dd730083e53615610a0d2f6f95ab5a0bc01",
"0x4534f4968006ca9eca3bac922022c7ecba066e9e",
"0xdc94eeeb3260d0b9bf22849e8f5d236d286cdba1",
];
const USERNAME = process.env.API_KEY;
const SUB_URL = 'https://api.thegraph.com/subgraphs/name/balancer-labs/balancer';
const AUTH_HEADER = { Authorization: `Basic ${Buffer.from(`${USERNAME}:`).toString('base64')}` };
const PARAMS = { method: 'GET', headers: AUTH_HEADER };
const TOTAL_COINS = Big(210000);
async function getSupplyData() {
let sum = Big(0);
const output = [];
for (const myAddress of myWalletAddresses) {
const url = `https://api.zerion.io/v1/wallets/${myAddress}/positions/?currency=jpy&sort=value`;
const response = await fetch(url, PARAMS);
const json = await response.json();
for (const obj of json.data) {
if (obj.attributes.fungible_info.symbol === 'BPT-V1') {
const lpTokenAddress = obj.attributes.fungible_info.implementations[0].address;
const lpTokenQuery = `
query {
pool(id: "${lpTokenAddress}") {
totalShares
tokens {
symbol
balance
}
}
}
`;
const response = await fetch(SUB_URL, {
method: 'post',
body: JSON.stringify({ query: lpTokenQuery }),
headers: { 'Content-Type': 'application/json' },
});
const lpTokenJson = await response.json();
for (const token of lpTokenJson.data.pool.tokens) {
const underlyingToken = token.symbol;
const underlyingTokenBalance = Big(token.balance).times(obj.attributes.quantity.numeric).div(lpTokenJson.data.pool.totalShares);
if (underlyingToken === 'TXJP') {
output.push(underlyingTokenBalance);
}
}
} else if (obj.attributes.fungible_info.symbol === 'TXJP') {
output.push(Big(obj.attributes.quantity.numeric));
}
}
}
for (const number of output) {
sum = sum.plus(number);
}
return sum;
}
app.get('/', async (req, res) => {
const q = req.query.q;
let value;
if (q === 'totalcoins') {
value = TOTAL_COINS;
} else if (q === 'circulating') {
const circulatingSupply = await getSupplyData();
value = TOTAL_COINS.minus(circulatingSupply);
} else {
const error = {
message: "Invalid parameter value. Please specify either 'totalcoins' or 'circulating'."
};
res.status(400).json(error);
}
res.json(Number(value));
});
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`);
});