From 43e0cd2c74a493d5fbe03ca50b8ac92870fe3259 Mon Sep 17 00:00:00 2001 From: Korney Vasilchenko Date: Tue, 10 Sep 2024 12:59:02 +0100 Subject: [PATCH] TW-1537 Add TKEY stats endpoint --- src/index.ts | 5 +++++ src/tkey-stats.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ tsconfig.json | 2 +- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/tkey-stats.ts diff --git a/src/index.ts b/src/index.ts index 66a1771..88dbeb9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -39,6 +39,7 @@ import { getSignedMoonPayUrl } from './utils/moonpay/get-signed-moonpay-url'; import { getSigningNonce } from './utils/signing-nonce'; import SingleQueryDataProvider from './utils/SingleQueryDataProvider'; import { getExchangeRates } from './utils/tokens'; +import { getTkeyStats } from './tkey-stats'; const PINO_LOGGER = { logger: logger.child({ name: 'web' }), @@ -105,6 +106,10 @@ app.get('/api/top-coins', (_req, res) => { res.status(200).send(coinGeckoTokens); }); +app.get('/api/tkey', async (_req, res) => { + res.send(await getTkeyStats()); +}); + app.get('/api/notifications', async (_req, res) => { try { const { platform, startFromTime } = _req.query; diff --git a/src/tkey-stats.ts b/src/tkey-stats.ts new file mode 100644 index 0000000..c93a862 --- /dev/null +++ b/src/tkey-stats.ts @@ -0,0 +1,44 @@ +import memoizee from 'memoizee'; +import axios from 'axios'; + +const CONTRACT = 'KT1VaEsVNiBoA56eToEK6n6BcPgh1tdx9eXi'; +const BURN_ADDRESS = 'tz1burnburnburnburnburnburnburjAYjjX'; +const DECIMALS = 18n; +const TOTAL_SUPPLY = 14_000_000_000_000_000_000_000_000n; +const TOTAL_SUPPLY_WITH_DECIMALS = TOTAL_SUPPLY / 10n ** DECIMALS; + +const INCENTIVES = 1_000_000n; +const INVESTMENT = 1_000_000n; +const DEVELOPER_REWARDS = 2_000_000n; + +const getBurnedTokens = memoizee( + async () => { + const response = await axios.get( + `https://api.tzkt.io/v1/tokens/balances?account=${BURN_ADDRESS}&token.contract=${CONTRACT}` + ); + + return BigInt(response.data[0].balance) / 10n ** DECIMALS; + }, + { + maxAge: 1000 * 60 * 60 // 1 hour + } +); + +export const getTkeyStats = memoizee( + async () => { + const burned = await getBurnedTokens(); + const circulating = TOTAL_SUPPLY_WITH_DECIMALS - INCENTIVES - DEVELOPER_REWARDS - INVESTMENT - burned; + + return { + incentivesFund: INCENTIVES.toString(), + investmentFund: INVESTMENT.toString(), + developerRewardsFund: DEVELOPER_REWARDS.toString(), + totalSupply: TOTAL_SUPPLY_WITH_DECIMALS.toString(), + circulatingSupply: circulating.toString(), + burned: burned.toString() + }; + }, + { + maxAge: 1000 * 60 * 60 // 1 hour + } +); diff --git a/tsconfig.json b/tsconfig.json index 87d512f..aa0ae21 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { /* Basic Options */ - "target": "ES2019", + "target": "ES2020", "module": "commonjs", "lib": ["esnext"], "allowJs": true,