From 418bfdfbe2f4ba86c05ec26d5970614ac27901eb Mon Sep 17 00:00:00 2001 From: jejolare Date: Fri, 29 Aug 2025 22:55:37 +0700 Subject: [PATCH] add FUSD price from mexc --- server/server.ts | 74 +++++++++++++++++++++++++++++-------------- server/utils/utils.ts | 1 + 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/server/server.ts b/server/server.ts index 52e5b76..f3b9c0d 100644 --- a/server/server.ts +++ b/server/server.ts @@ -7,7 +7,7 @@ import exceptionHandler from "./exceptionHandler"; import path from "path"; import initDB from "./database/initdb"; import sequelize from "./database/sequelize"; -import { log, config, ZANO_ASSET_ID, parseComment, parseTrackingKey, decodeString } from "./utils/utils"; +import { log, config, ZANO_ASSET_ID, parseComment, parseTrackingKey, decodeString, FUSD_ASSET_ID } from "./utils/utils"; import { blockInfo, lastBlock, setLastBlock, state, setState, setBlockInfo, PriceData } from "./utils/states"; import { emitSocketInfo, getBlocksDetails, getMainBlockDetails, getTxPoolDetails, getVisibilityInfo } from "./utils/methods"; import AltBlock from "./schemes/AltBlock"; @@ -282,7 +282,7 @@ async function waitForDb() { order: [[Sequelize.literal('ABS(timestamp - $targetTs)'), 'ASC']], bind: { targetTs: target_timestamp }, raw: true, - }); + }); if (!closestPrice) { return res.json({ @@ -1211,6 +1211,23 @@ async function waitForDb() { }); } + if (req.query.asset_id === FUSD_ASSET_ID) { + if (!state.priceData?.fusd?.price) { + return res.send({ success: false, data: 'Price not found' }); + } + + return res.send({ + success: true, + data: { + name: 'FUSD', + usd: state.priceData?.fusd?.price, + zano_price: (state.priceData?.fusd?.price / (state.priceData?.zano?.price || 1)), + usd_24h_change: state.priceData?.fusd?.usd_24h_change, + fiat_prices: calcFiatPrice(state.priceData?.fusd?.price, state?.fiat_rates), + } + }); + } + const assetData = await Asset.findOne({ where: { asset_id: req.query.asset_id } }); @@ -2139,6 +2156,10 @@ cron.schedule("0 */4 * * *", async () => { return fetchPriceFromMexc('ETH'); } + async function fetchFUSDPrice() { + return fetchPriceFromMexc('FUSD'); + } + // Fetch fiat rates from CoinGecko async function fetchFiatRates() { try { @@ -2202,31 +2223,36 @@ cron.schedule("0 */4 * * *", async () => { const zanoPrice = await fetchZanoPrice(); - - if (zanoPrice) { - setState({ - ...state, - priceData: { - ...state.priceData, - zano: zanoPrice, - }, - }); - } - - // Fetch Ethereum price every 10 seconds const ethPrice = await fetchEthereumPrice(); + const fusdPrice = await fetchFUSDPrice(); - if (ethPrice) { - setState({ - ...state, - priceData: { - ...state.priceData, - ethereum: ethPrice, - }, - }); - } + const pricesToIncert = { + zano: zanoPrice || null, + ethereum: ethPrice || null, + fusd: fusdPrice || null, + }; + + const validPrices = Object.entries(pricesToIncert) + .map(e => { + if (!e[1]) { + return null; + } + return { + [e[0]]: e[1] + }; + }) + .filter(e => e !== null); + + const validPricesObject = Object.assign({}, ...validPrices); + + setState({ + ...state, + priceData: { + ...state.priceData, + ...validPricesObject + }, + }); - console.log(state.priceData); // Fetch fiat rates every 1h (3600 seconds) diff --git a/server/utils/utils.ts b/server/utils/utils.ts index 193f6c4..b84c3b5 100644 --- a/server/utils/utils.ts +++ b/server/utils/utils.ts @@ -1,6 +1,7 @@ import "dotenv/config"; export const ZANO_ASSET_ID = 'd6329b5b1f7c0805b5c345f4957554002a2f557845f64d7645dae0e051a6498a'; +export const FUSD_ASSET_ID = '86143388bd056a8f0bab669f78f14873fac8e2dd8d57898cdb725a2d5e2e4f8f'; export const config = { "api": process.env.API + '/json_rpc',