diff --git a/src/index.ts b/src/index.ts index 66a1771..35f8f26 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,6 +22,7 @@ import { getPlatforms } from './notifications/utils/get-platforms.util'; import { redisClient } from './redis'; import { evmRouter } from './routers/evm'; import { adRulesRouter } from './routers/slise-ad-rules'; +import { getTkeyStats } from './tkey-stats'; import { getABData } from './utils/ab-test'; import { cancelAliceBobOrder } from './utils/alice-bob/cancel-alice-bob-order'; import { createAliceBobOrder } from './utils/alice-bob/create-alice-bob-order'; @@ -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..bbcc38c --- /dev/null +++ b/src/tkey-stats.ts @@ -0,0 +1,52 @@ +import axios from 'axios'; +import memoizee from 'memoizee'; + +const BURN_ADDRESS = 'tz1burnburnburnburnburnburnburjAYjjX'; +const INCENTIVES_ADDRESS = 'tz1Ntpk55Q6AVJHVrCs1uN4HyTTxBbVMFZcb'; +const INVESTMENT_ADDRESS = 'tz1imUX3aTc4HX6KygaQUe8e1sQqYvGs6eCF'; +const DEVELOPER_REWARDS_ADDRESS = 'tz1bxHEHAtKubVy44vBDFVEZ1iqYPYdJVS9U'; +const CONTRACT = 'KT1VaEsVNiBoA56eToEK6n6BcPgh1tdx9eXi'; +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 getTkeyBalance = memoizee( + async (holder: string) => { + const response = await axios.get( + `https://api.tzkt.io/v1/tokens/balances?account=${holder}&token.contract=${CONTRACT}` + ); + + return BigInt(response.data[0].balance) / 10n ** DECIMALS; + }, + { + maxAge: 1000 * 60 * 60 // 1 hour + } +); + +const getBurnedTokens = () => getTkeyBalance(BURN_ADDRESS); +const getInvestmentFund = () => getTkeyBalance(INVESTMENT_ADDRESS); +const getIncentivesFund = () => getTkeyBalance(INCENTIVES_ADDRESS); +const getDeveloperRewardsFund = () => getTkeyBalance(DEVELOPER_REWARDS_ADDRESS); + +export const getTkeyStats = memoizee( + async () => { + const burned = await getBurnedTokens(); + const incentives = await getIncentivesFund(); + const investment = await getInvestmentFund(); + const developerRewards = await getDeveloperRewardsFund(); + + const circulating = TOTAL_SUPPLY_WITH_DECIMALS - incentives - developerRewards - investment - burned; + + return { + incentivesFund: incentives.toString(), + investmentFund: investment.toString(), + developerRewardsFund: developerRewards.toString(), + totalSupply: TOTAL_SUPPLY_WITH_DECIMALS.toString(), + circulating: 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,