import express = require('express'); import {TCRStateProvider} from "../../providers/chain-state/tcr/tcr"; import {ChainStateProvider} from "../../providers/chain-state"; // import {ChainStateProvider} from "../../providers/chain-state"; const router = express.Router({mergeParams: true}); const COIN = 100000000; const settings = { nTnodePaymentsStartBlock: 25 * 60 / 2.5, rewardsStage2Start: 71000, rewardsStage3Start: 300000, rewardsStage4Start: 510000, rewardsStage5Start: 760000, rewardsStage6Start: 970000, nSubsidyHalvingInterval: 840000, nPremineSubsidy: 21000000, }; const getBlockSubsidy = function (nHeight: number) { // Genesis block is 0 coin if (nHeight == 0) return 0; // Block 1 premine subsidy if (nHeight == 1) return settings.nPremineSubsidy * COIN; const halvings = parseInt((nHeight / settings.nSubsidyHalvingInterval) + ''); // Force block reward to zero when right shift is undefined. if (halvings >= 64) return 0; let nSubsidy = 112.5 * COIN; // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. // nSubsidy >>= halvings; for (let i = 0; i < halvings; ++i) { nSubsidy /= 2; } return nSubsidy; } router.get('/tnodes', async function (req, res) { let {chain, network} = req.params; try { let payload = { chain, network, req, res }; let tnodes = await (new TCRStateProvider()).getTnodesList(payload); return res.json(tnodes); } catch (err) { return res.status(500).send(err); } }); router.get('/tnodes-qty', async function (req, res) { let {chain, network} = req.params; try { let payload = { chain, network, req, res }; let tnodes:any = await (new TCRStateProvider()).getTnodesList(payload); let qty = 0; for (let [, val] of Object.entries(tnodes)) { if (val === "ENABLED") { qty++; } } return res.json({data: {qty}}); } catch (err) { return res.status(500).send(err); } }); router.get('/tnode-block-reward', async function (req, res) { console.log(req, res); let {chain, network} = req.params; const tip: any = await ChainStateProvider.getLocalTip({chain, network}); const {height} = tip; let ret; const blockValue = getBlockSubsidy(height); if (height < settings.nTnodePaymentsStartBlock) { ret = 0; } else if (height < settings.rewardsStage2Start) { // T1 ret = blockValue * 39 / 100; } else if (height < settings.rewardsStage3Start) { // T2 ret = blockValue * 15 / 100; } else if (height < settings.rewardsStage4Start) { // T3 ret = blockValue * 15 / 100; } else if (height < settings.rewardsStage5Start) { // T4 ret = blockValue * 20 / 100; } else if (height < settings.rewardsStage6Start) { // T5 ret = blockValue * 20 / 100; } else { // T6 ret = blockValue * 25 / 100; } return res.json({reward: ret, reward_formatted: ret / COIN, height}); }); module.exports = { router: router, path: '/ext' };