diff --git a/api2/routes/getStableCoin.ts b/api2/routes/getStableCoin.ts index 8ccf0ca4..21f0c9d8 100644 --- a/api2/routes/getStableCoin.ts +++ b/api2/routes/getStableCoin.ts @@ -1,5 +1,4 @@ -import { importAdapter } from "../../src/peggedAssets/utils/importAdapter"; import peggedAssets from "../../src/peggedData/peggedData"; import { getChainDisplayName } from "../../src/utils/normalizeChain"; import { cache } from "../cache"; @@ -18,16 +17,12 @@ export function getStablecoinData(peggedID: string | undefined) { const peggedData = peggedAssets.find((pegged) => pegged.id === peggedID); if (!peggedData) throw new Error( "Pegged asset is not in our database") - const module = importAdapter(peggedData) const { balances, lastBalance } = cache.peggedAssetsData?.[peggedData.id] ?? {} const lastBalancesHourlyRecord = lastBalance const historicalPeggedBalances = balances ?? []; if (!useHourlyData) replaceLast(historicalPeggedBalances, lastBalancesHourlyRecord); let response = peggedData as any; - if (module.methodology !== undefined) response.methodology = module.methodology; - if (module.misrepresentedTokens !== undefined) response.misrepresentedTokens = true; - if (module.hallmarks !== undefined) response.hallmarks = module.hallmarks; response.chainBalances = {}; const currentChainBalances: { [chain: string]: object } = {}; response.currentChainBalances = currentChainBalances; diff --git a/package.json b/package.json index 552a5c51..761f4e03 100644 --- a/package.json +++ b/package.json @@ -7,17 +7,14 @@ "api2-prod": "bash api2/scripts/prod_start.sh", "api2-cron-task": "npx ts-node --transpile-only api2/cron-task/index.ts", "api2-store-rates": "npx ts-node --transpile-only api2/scripts/storeRates.ts", - "deploy:env": "npm run prebuild && sls deploy --stage $NODE_ENV", + "deploy:env": "sls deploy --stage $NODE_ENV", "deploy:dev": "export NODE_ENV=dev && npm run deploy:env", "deploy:prod": "export NODE_OPTIONS=--max-old-space-size=6144 && export NODE_ENV=prod && npm run deploy:env", "deploy": "npm run deploy:dev", "serve": "node --max-old-space-size=8192 node_modules/serverless/bin/serverless offline start", "test": "cd src/adapters/peggedAssets && npx ts-node --transpile-only test", "test:watch": "jest --watch", - "prebuild": "npx ts-node src/cli/buildRequires.ts", - "pretest": "npm run prebuild", "build": "sls package", - "updateAdapters": "cd DefiLlama-Adapters && git pull", "store-all": "set AWS_REGION='eu-central-1' && set tableName='prod-stablecoins-table' && npx ts-node --transpile-only src/cli/storeAllPeggedAssets.ts", "fillOld": "set AWS_REGION='eu-central-1' && set tableName='prod-stablecoins-table' && npx ts-node src/cli/fillOld.ts", "fillLast": "export AWS_REGION='eu-central-1' && export tableName='prod-stablecoins-table' && npx ts-node src/cli/fillLast.ts" diff --git a/serverless.yml b/serverless.yml index ef287573..495f2709 100644 --- a/serverless.yml +++ b/serverless.yml @@ -151,12 +151,6 @@ functions: memorySize: 3000 events: - schedule: cron(30 0 * * ? *) - checkRecentEntries: - handler: src/checkRecentDbEntries.default - timeout: 60 - memorySize: 3000 - events: - - schedule: cron(30 */6 * * ? *) rates: handler: src/getRates.default timeout: 60 diff --git a/src/adapters/peggedAssets/index.ts b/src/adapters/peggedAssets/index.ts deleted file mode 100644 index 2c60d3d7..00000000 --- a/src/adapters/peggedAssets/index.ts +++ /dev/null @@ -1,624 +0,0 @@ -import alusd from "./alchemix-usd"; -import busd from "./binance-usd"; -import brz from "./brz"; -import cusd from "./celo-dollar"; -import dai from "./dai"; -import doc from "./doc"; -import dola from "./dola-usd"; -import fei from "./fei-usd"; -import flexusd from "./flex-usd"; -import frax from "./frax"; -import gusd from "./gemini-dollar"; -import hchf from "./hedera-swiss-franc"; -import husd from "./husd"; -import liquity from "./liquity-usd"; -import mim from "./magic-internet-money"; -import mimatic from "./mimatic"; -import musd from "./musd"; -import neutrino from "./neutrino"; -import nusd from "./nexus-usd"; -import susd from "./nusd"; -import ousd from "./origin-dollar"; -import pai from "./parrot-usd"; -import pax from "./paxos-standard"; -import pht from "./pht-stablecoin"; -import reserve from "./reserve"; -import sperax from "./sperax-usd"; -import spiceusd from "./spiceusd"; -import terrausd from "./terrausd"; -import tether from "./tether"; -import tor from "./tor"; -import trueusd from "./true-usd"; -import usdb from "./usd-balance"; -import usdc from "./usd-coin"; -import usdd from "./usdd"; -import usdk from "./usdk"; -import usdp from "./usdp"; -import vai from "./vai"; -import yusd from "./yusd-stablecoin"; -//import ratio from "./ratio-stable-coin"; -import aseed from "./acala-dollar"; -import home from "./bacon-protocol-home"; -import bai from "./bai-stablecoin"; -import bean2 from "./bean2"; -import ceur from "./celo-euro"; -import dei from "./dei-token"; -import eura from "./eura"; -import eurc from "./eurc"; -import fusd from "./fantom-usd"; -import fiat from "./fixed-income-asset-token"; -import float from "./float-protocol-float"; -import fpi from "./frax-price-index"; -import gai from "./gai-stablecoin"; -import ush from "./hedge-usd"; -import usdj from "./just-stablecoin"; -import par from "./par-stablecoin"; -import pusd from "./pusd-2"; -import r from "./r"; -import rai from "./rai"; -import seur from "./seur"; -import sigmausd from "./sigmausd"; -import stasis from "./stasis-eurs"; -import stbl from "./stbl"; -import eurt from "./tether-eurt"; -import threeusd from "./three-usd"; -import usx from "./token-dforce-usd"; -import usd from "./usd"; -import usdh from "./usdh"; -import usdlemma from "./usdlemma"; -import usdx from "./usdx"; -import usn from "./usn"; -import uxd from "./uxd-stablecoin"; -import volt from "./volt-protocol"; -import zusd from "./zusd"; -//import pandousd from "./pando-usd"; -import dusd from "./digitaldollar"; -import usdi from "./interest-protocol"; -import kusd from "./kolibri-usd"; -import money from "./moremoney-usd"; -import usdtez from "./usdtez"; -import vst from "./vesta-stable"; -import uusd from "./youves-uusd"; -// import lugh from "./lugh"; -import lisusd from "./helio-protocol-hay"; -import note from "./note"; -//import usd2 from "./usd2"; -import lcny from "./alternity-cny"; -import arusd from "./arable-usd"; -import bankofchain from "./bank-of-chain"; -import baousd from "./baousd"; -import bob from "./bob"; -import cleverusd from "./clever-usd"; -import c98dollar from "./coin98-dollar"; -import crvusd from "./crvusd"; -import czusd from "./czusd"; -import d2o from "./dam-finance"; -import davos from "./davos-protocol"; -import defifranc from "./defi-franc"; -import dsu from "./digital-standard-unit"; -import djed from "./djed"; -import electronicusd from "./electronic-usd"; -import ethosreservenote from "./ethos-reserve-note"; -import euroe from "./euroe-stablecoin"; -import eusd from "./eusd"; -import eusdv2 from "./eusdv2"; -import fdusd from "./first-digital-usd"; -import gho from "./gho"; -import grai from "./grai"; -import gateusd from "./gusd"; -import gyen from "./gyen"; -import hyusd from "./high-yield-usd"; -import infniFi from "./infinifi-usd"; -import inter from "./inter-stable-token"; -import ibeur from "./iron-bank-euro"; -import iusd from "./iusd"; -import knox from "./knox-dollar"; -import pina from "./meme-dollar"; -import eure from "./monerium-eur-money"; -import nars from "./nars"; -import nexus1 from "./nexus"; -import nxusd from "./nxusd"; -import anonusd from "./offshift-anonusd"; -import usdy from "./ondo-us-dollar-yield"; -import overnightdai from "./overnight-dai"; -import pyusd from "./paypal-usd"; -import peusd from "./peg-eusd"; -import phase from "./phase-dollar"; -import usp from "./platypus-usd"; -import prismamkusd from "./prisma-mkusd"; -import psy from "./psy"; -import usdr from "./real-usd"; -import rusd from "./redeemable"; -import rgusd from "./revenue-generating-usd"; -import svusd from "./savvy-usd"; -import silk from "./silk"; -import cash from "./stabl-fi"; -import star from "./star"; -import uaht from "./uaht"; -import usdm from "./usdm"; -import usdtplus from "./usdtplus"; -import usdw from "./usdw"; -import usk from "./usk"; -import usd3 from "./web-3-dollar"; -import xai from "./xai"; -import zunETH from "./zun-eth"; -import zunUSD from "./zun-usd"; -import uzd from "./zunami-protocol"; -//import eeur from "./e-money-eur"; -import aeeur from "./aryze-eeur"; -import aegbp from "./aryze-egbp"; -import cdt from "./collateralized-debt-token"; -//import aesgd from "./aryze-esgd"; -import a7a5 from './a7a5'; -import aegisyusd from "./aegis-yusd"; -import ausdagora from "./agora-dollar"; -import aeur from "./anchored-coins-eur"; -import usda from "./angle-usd"; -import usdz from "./anzen-usdz"; -import cardano_usda from './anzens-usda'; -import msd from './arche-protocol-msd'; -import aeusd from "./aryze-eusd"; -import usdf from "./astherus-usdf"; -import usdaf from './asymmetry-usdaf'; -import asymmetryUsdaf2 from './asymmetry-usdaf-2'; -import autonomint_usd from './autonomint-usda+'; -import avalon_usda from "./avalon-usda"; -import avusd from './avant-usd'; -import bnusd from "./balanced-dollars"; -import tryb from './bilira'; -import binancebusd from "./binance-peg-busd"; -import btcusd from "./bitcoin-usd-btcfi"; -import bitusd from "./bitsmiley-bitusd"; -import buidl from "./blackrock-usd"; -import bnbusd from './bnbusd'; -import bread from "./bread"; -import buck from "./bucket-protocol-buck-stablecoin"; -import cadc from "./cadc"; -import cap_cusd from './cap-cusd'; -import creal from "./celo-real-creal"; -import chadusd from "./chad-usd"; // since there is a cusd already, will use this, we did something like this for coin98 -import ckusdc from "./ckusdc"; -import classicusd from "./classic-usd"; -import cnht from './cnh-tether'; -import csusdl from "./coinshift-usdl-morpho-vault"; -import scb from "./colb-usd-stablecolb"; -import cjpy from "./convertible-jpy-token"; -import cgusd from "./cygnus-finance-global-usd"; -import dckusd from "./dackie-usd"; -import dtrinityusd from "./dtrinity-usd"; -import dyad from "./dyad"; -import ebusd from './ebusd-stablecoin'; -import deusd from "./elixir-deusd"; -import usde from "./ethena-usde"; -import euro3 from "./euro3"; -import fxbtcusd from "./f-x-btc-usd"; -import falconfinance from "./falcon-finance"; -import fdx from "./fathom-dollar"; -import feusd from './felix-feusd'; -import feth from "./feth"; -import zchf from "./frankencoin"; -import benji from './franklin-onchain-u-s-government-money-fund'; -import frxusd from "./frax-usd"; -import fxrusd from "./fx-rusd"; -import fxusd from "./fxusd"; -import usdglo from "./glo-dollar"; -import usdg from './global-dollar'; -import ggusd from './good-game-us-dollar'; -import gyd from "./gyroscope-gyd"; -import hashnote_usyc from "./hashnote-usyc"; -import hermeticausdh from "./hermetica-usdh"; -import hexdc from "./hex-dollar-coin"; -import hexusdx from './hex-trust-usdx'; -import honey from "./honey-3"; -import hydt from "./hydt"; -import hylo_hyusd from './hylo-hyusd'; -import hyperstable from './hyperstable'; -import isc from "./international-stable-currency"; -import jigsaw_usd from './jigsaw-usd'; -import bold from "./legacy-bold"; -import hai from "./let-s-get-hai"; -import lvlusd from "./level-usd"; -import liftdollar from "./lift-dollar"; -import usdl from "./liquid-loans-usdl"; -import liquityBold from './liquity-bold'; -import m from "./m-by-m^0"; -import wen from "./magma-wen"; -import msusd from './main-street-usd'; -import mead2 from './mead-2'; -import mxnt from './mexican-peso-tether'; -import mezousd from './mezo-usd'; -import mnee from './mnee-usd-stablecoin'; -import moneta from "./moneta"; -import mod from "./move-dollar"; -import myusd from "./myusd"; -import noble_dollar_usdn from "./noble-dollar-usdn"; -import noonusn from "./noon-usn"; -import uno from "./nostra-uno"; -import audd from "./novatti-australian-digital-dollar"; -import usdo from "./openeden-open-dollar"; -import tbill from './openeden-tbill'; -import opuscash from "./opus-cash"; -import usc from "./orby-network-usc-stablecoin"; -import orkiusdk from './orki-usd'; -import usdcb from "./pago-linea-usdcb"; -import parausd from './parabol-usd'; -import pausd from "./parallel-usd"; -import parallelusdp from "./parallel-usdp"; -import pinto from "./pinto"; -import plumeUsd from './plume-usd'; -import pxdc from "./powercity-pxdc"; -import ultra from "./prismalrt-ultra"; -import eurd from "./quantoz-eurd"; -import eurq from "./quantoz-eurq"; -import qusdq from "./quantoz-usdq"; -import usdq from "./quill-usd"; -import rusd1 from "./reservoir-stablecoin"; -import usr from "./resolv-usr"; -import reusd from './resupply-usd'; -import scusd from "./rings-scusd"; -import rlusd from './ripple-usd'; -import usds from "./sable-coin"; -import sagadollar from './saga-dollar'; -import satusd from "./satoshi-stablecoin"; -import europ from "./schuman-europ"; -import usdn from './smardex-usdn'; -import eurcv from "./societe-generale-forge-eurcv"; -import usdcv from './societe-generale-forge-usdcv'; -import solayerusd from "./solayer-usd"; -import solomonusdv from './solomon-usdv'; -import dllr from "./sovryn-dollar"; -import ausd from "./stable-jack-ausd"; -import stablreuro from "./stablr-euro"; -import stablrusd from "./stablr-usd"; -import standx_dusd from './standx-dusd'; -import straitsx_xusd from './straitsx-xusd'; -import syusd from "./syusd"; -import standardusds from "./thestandard-usd"; -import thusd from "./threshold-usd"; -import xy from "./tren-debt-token"; -import usdu from './unitas'; -import xsy_uty from './unity-2'; -import usnerite from './us-nerite-dollar'; -import usbd from './usbd'; -import usc2 from "./usc-2"; -import usdai from './usd-ai'; -import usdrif from "./usd-rif"; -import usd1 from './usd1-wlfi'; -import usdbblast from "./usdb"; -import usdfc from './usdfc'; -import skydollar from "./usds"; -import usdtb from "./usdtb"; -import usduFinance from './usdu'; -import usdv from "./usdv"; -import usdx0 from "./usdx-money-usdx"; -import usd0 from "./usual-usd"; -import solstice_usx from './usx'; -import vusd from './vdollar-finance'; -import vnx_british_pound from './vnx-british-pound'; -import veur from "./vnx-euro"; -import vnxau from "./vnx-gold"; -import vchf from "./vnx-swiss-franc"; -import weusd from './weusd'; -import wusd from "./worldwide-usd"; -import xbankusde from './xbanking-usde'; -import xsgd from './xsgd'; -import xusd from "./xusd-babelfish"; -import yu from './yala-stablecoin'; -import ylds from './ylds'; -import zkusd from "./zkusd"; -import zeusd from "./zoth-zeusd"; -import iausd from "./iAUSD"; - -export default { - tether, - "usd-coin": usdc, - terrausd, - "binance-usd": busd, - dai, - brz, - frax, - "true-usd": trueusd, - "liquity-usd": liquity, - "fei-usd": fei, - "magic-internet-money": mim, - "paxos-standard": pax, - neutrino, - "yusd-stablecoin": yusd, - usdd, - "nexus-usd": nusd, - "dola-usd": dola, - "parrot-usd": pai, - husd, - "gemini-dollar": gusd, - "alchemix-usd": alusd, - "flex-usd": flexusd, - nusd: susd, - "origin-dollar": ousd, - "celo-dollar": cusd, - musd, - usdk, - reserve, - vai, - tor, - doc, - spiceusd, - "sperax-usd": sperax, - usdp, - "usd-balance": usdb, - mimatic, - //"ratio-stable-coin": ratio, - "just-stablecoin": usdj, - algostable: stbl, - "volt-protocol": volt, - r, - rai, - "float-protocol-float": float, - usdx, - zusd, - "token-dforce-usd": usx, - "acala-dollar": aseed, - usd, - "dei-token": dei, - "bai-stablecoin": bai, - "goku-money-gai": gai, - usn, - "tether-eurt": eurt, - "euro-coin": eurc, - "stasis-eurs": stasis, - "celo-euro": ceur, - seur, - ageur: eura, - "par-stablecoin": par, - "parallel-usd": pausd, - "pht-stablecoin": pht, - "hedge-usd": ush, - "three-usd": threeusd, - sigmausd, - "bacon-protocol-home": home, - "fixed-income-asset-token": fiat, - "pusd-2": pusd, - "fantom-usd": fusd, - "uxd-stablecoin": uxd, - usdh, - "frax-price-index": fpi, - bean: bean2, - usdlemma, - //"pando-usd": pandousd, - digitaldollar: dusd, - "vesta-stable": vst, - "kolibri-usd": kusd, - usdtez, - "moremoney-usd": money, - "youves-uusd": uusd, - "interest-protocol": usdi, - // lugh, - note, - "helio-protocol-hay": lisusd, - //usd2, - usk, - "arable-usd": arusd, - usdw, - bob, - "real-usd": usdr, - "zunami-protocol": uzd, - zunUSD, - zunETH, - "bank-of-chain": bankofchain, - xai, - iusd, - "infinifi-usd": infniFi, - redeemable: rusd, - "iron-bank-euro": ibeur, - //composite, - baousd, - "meme-dollar": pina, - djed, - "coin98-dollar": c98dollar, - "platypus-usd": usp, - "euroe-stablecoin": euroe, - "stabl-fi": cash, - "digital-standard-unit": dsu, - "electronic-usd": electronicusd, - "high-yield-usd": hyusd, - "web-3-dollar": usd3, - "revenue-generating-usd": rgusd, - "monerium-eur-money": eure, - "offshift-anonusd": anonusd, - nxusd, - "davos-protocol": davos, - "defi-franc": defifranc, - czusd: czusd, - "dam-finance": d2o, - "eusd-27a558b0-8b5b-4225-a614-63539da936f4": eusd, - crvusd, - "overnight-dai": overnightdai, - usdtplus: usdtplus, - "silk-bcec1136-561c-4706-a42c-8b67d0d7f7d2": silk, - "clever-usd": cleverusd, - grai, - "ethos-reserve-note": ethosreservenote, - gho, - "first-digital-usd": fdusd, - "paypal-usd": pyusd, - psy, - gyen, - gusd: gateusd, - "preon-star": star, - peusd: peusd, - "eusd-v2": eusdv2, - "prisma-mkusd": prismamkusd, - "alternity-cny": lcny, - nexus1: nexus1, - "ondo-us-dollar-yield": usdy, - "savvy-usd": svusd, - uaht, - "mountain-protocol-usdm": usdm, - "num-ars": nars, - "phase-dollar": phase, - "inter-stable-token": inter, - //"e-money-eur": eeur, - "collateralized-debt-token": cdt, - "aryze-eusd": aeusd, - "aryze-eeur": aeeur, - "aryze-egbp": aegbp, //if does not work, will test without aegbp, using only coingecko but since its the terminal not sure, will keep an eye - //"aryze-esgd": aesgd, - "hydt-protocol-hydt": hydt, - "verified-usd-foundation-usdv": usdv, - "cad-coin": cadc, - "ethena-usde": usde, - "anchored-coins-eur": aeur, - myusd, //fake coingecko, replace once live - "sable-coin": usds, - "colb-usd-stablecolb": scb, - goal3: zkusd, - "liquid-loans-usdl": usdl, - "binance-peg-busd": binancebusd, - "bucket-protocol-buck-stablecoin": buck, - "glo-dollar": usdglo, - "vnx-gold": vnxau, - "vnx-euro": veur, - "vnx-swiss-franc": vchf, - "rif-us-dollar": usdrif, - "sovryn-dollar": dllr, - "quantoz-eurd": eurd, - "xusd-babelfish": xusd, - "prismalrt-ultra": ultra, - usdcb, //fake coingecko, there is nothing with that id - "novatti-australian-digital-dollar": audd, - "cygnus-finance-global-usd": cgusd, - "f-x-protocol-fractional-eth": feth, - "f-x-protocol-usd": fxusd, - euro3, //since its the real coingecko id + same symbol we good with this. I think no need to "euro3": euro3 - "let-s-get-hai": hai, - usdb: usdbblast, - "blackrock-usd-institutional-digital-liquidity-fund": buidl, - "fx-rusd": fxrusd, - "powercity-pxdc": pxdc, - "fathom-dollar": fdx, - "nostra-uno": uno, - "convertible-jpy-token": cjpy, - "bread-fake-cg": bread, - "bitcoin-usd-btcfi": btcusd, - "magma-wen": wen, - "gyroscope-gyd": gyd, - "international-stable-currency": isc, - "orby-network-usc-stablecoin": usc, - "knox-dollar": knox, - "f-x-btc-usd": fxbtcusd, - "bitsmiley-bitusd": bitusd, - "angle-usd": usda, - "usc-2": usc2, - ckusdc, //fakecg - "usual-usd": usd0, - "classic-usd": classicusd, - "resolv-usr": usr, - "stable-jack-ausd": ausd, - "hedera-swiss-franc": hchf, - "celo-real-creal": creal, - "hex-dollar-coin": hexdc, - "anzen-usdz": usdz, - "chad-usd": chadusd, - "balanced-dollars": bnusd, - "agora-dollar": ausdagora, - "opus-cash": opuscash, - dyad: dyad, - "dackie-usd": dckusd, - usds: skydollar, - "elixir-deusd": deusd, - "threshold-usd": thusd, - "move-dollar": mod, - "usdx-money-usdx": usdx0, - "m-by-m^0": m, - moneta: moneta, - "solayer-usd": solayerusd, - "reservoir-stablecoin": rusd1, - "satoshi-stablecoin": satusd, - "astherus-usdf": usdf, - "usda-2": avalon_usda, // coingecko id first, than token - usdtb, // same as coingeckoID, - "tren-debt-token": xy, - "dtrinity-usd": dtrinityusd, - "zoth-zeusd": zeusd, - frankencoin: zchf, - "legacy-bold": bold, - "level-usd": lvlusd, - "quill-usd": usdq, - "noon-usn": noonusn, - "honey-3": honey, - pinto: pinto, - "worldwide-usd": wusd, - "thestandard-usd": standardusds, - "frax-usd": frxusd, - "synnax-stablecoin": syusd, - "stablr-euro": stablreuro, - "stablr-usd": stablrusd, - "rings-scusd": scusd, - "openeden-open-dollar": usdo, - "hermetica-usdh": hermeticausdh, - "coinshift-usdl-morpho-vault": csusdl, - "lift-dollar": liftdollar, - "schuman-europ": europ, - "falcon-finance": falconfinance, - "anzens-usda": cardano_usda, - "hashnote-usyc": hashnote_usyc, - "usdfc": usdfc, - "ripple-usd": rlusd, - "aegis-yusd": aegisyusd, - "societe-generale-forge-eurcv": eurcv, - "felix-feusd": feusd, - 'standx-dusd': standx_dusd, - 'usbd': usbd, - 'resupply-usd': reusd, - 'openeden-tbill': tbill, - "arche-protocol-msd": msd, - "vdollar-finance": vusd, - 'solomon-usdv': solomonusdv, - "usd1-wlfi": usd1, - "hex-trust-usdx": hexusdx, - "plume-usd": plumeUsd, - "xbanking-usde": xbankusde, - "orki-usd": orkiusdk, - "mead-2": mead2, - "yala-stablecoin": yu, - "a7a5": a7a5, - "hyperstable": hyperstable, - "liquity-bold": liquityBold, - "franklin-onchain-u-s-government-money-fund": benji, - "avant-usd":avusd, - "quantoz-eurq": eurq, - "quantoz-usdq": qusdq, - "asymmetry-usdaf": usdaf, - "asymmetry-usdaf-2": asymmetryUsdaf2, - "ylds": ylds, - "smardex-usdn": usdn, - "weusd": weusd, - "parabol-usd": parausd, - "noble-dollar-usdn": noble_dollar_usdn, - "mexican-peso-tether": mxnt, - "cnh-tether": cnht, - "unitas": usdu, - "good-game-us-dollar": ggusd, - "mnee-usd-stablecoin": mnee, - "global-dollar": usdg, - "parallel-usdp": parallelusdp, - "us-nerite-dollar": usnerite, - "ebusd-stablecoin": ebusd, - "xsgd": xsgd, - "straitsx-xusd": straitsx_xusd, - "vnx-british-pound": vnx_british_pound, - "bnbusd": bnbusd, - "autonomint-usda+": autonomint_usd, - "cap-cusd": cap_cusd, - "main-street-usd": msusd, - "bilira" : tryb, - "jigsaw-usd": jigsaw_usd, - "mezo-usd": mezousd, - "hylo-hyusd": hylo_hyusd, - "usdu": usduFinance, - "unity-2": xsy_uty, - "societe-generale-forge-usdcv": usdcv, - "saga-dollar": sagadollar, - "usd-ai": usdai, - "usx": solstice_usx, - "iausd": iausd, -}; diff --git a/src/checkRecentDbEntries.ts b/src/checkRecentDbEntries.ts deleted file mode 100644 index aec72ddd..00000000 --- a/src/checkRecentDbEntries.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { wrapScheduledLambda } from "./utils/shared/wrap"; -import peggedAssets from "./peggedData/peggedData"; -import { - getLastRecord, - hourlyPeggedBalances, - dailyPeggedBalances, - historicalRates, - hourlyPeggedPrices, -} from "./peggedAssets/utils/getLastRecord"; -import { secondsInHour, secondsInDay } from "./utils/date"; -import { executeAndIgnoreErrors } from "./peggedAssets/storePeggedAssets/errorDb"; -import { getCurrentUnixTimestamp } from "./utils/date"; -import { StoredPeggedAssetIssuance } from "./types"; - -const chainsToIgnore = ["harmony", "acala"]; - -export const handler = async (_event: any) => { - const timestamp = getCurrentUnixTimestamp(); - await Promise.all( - peggedAssets.map(async (pegged) => { - const pegType = pegged.pegType; - const peggedID = pegged.gecko_id; - - const lastHourlyBalance = (await getLastRecord( - hourlyPeggedBalances(pegged.id) - )) as StoredPeggedAssetIssuance; - const lastDailyBalance = (await getLastRecord( - dailyPeggedBalances(pegged.id) - )) as StoredPeggedAssetIssuance; - - // checks for null or 0 circulating values in last daily balance - if (lastDailyBalance) { - Object.entries(lastDailyBalance).map(([chain, issuances]) => { - if ( - !(typeof issuances === "string") && - !(typeof issuances === "number") - ) { - if ( - !issuances.circulating?.[pegType] && - !chainsToIgnore.includes(chain) - ) { - executeAndIgnoreErrors( - "INSERT INTO `errors2` VALUES (?, ?, ?, ?)", - [ - timestamp, - `dailyBalances-${peggedID}`, - chain, - `0 or null circulating on chain in last daily balance`, - ] - ); - } - } - }); - } - - // checks if hourly balance is stale - if (lastHourlyBalance) { - const SK = lastHourlyBalance.SK; - if (typeof SK === "number") { - const lastTimestamp = SK; - if (Math.abs(timestamp - lastTimestamp) > secondsInHour) { - executeAndIgnoreErrors("INSERT INTO `stale` VALUES (?, ?, ?)", [ - timestamp, - `hourlyBalances-${peggedID}`, - lastTimestamp, - ]); - } - } - } - }) - ); - - // checks if exchange rates (for fallback prices) is stale - const lastRates = await getLastRecord(historicalRates); - if (lastRates) { - const SK = lastRates.SK; - if (typeof SK === "number") { - const lastTimestamp = SK; - if (Math.abs(timestamp - lastTimestamp) > secondsInDay) { - executeAndIgnoreErrors("INSERT INTO `stale` VALUES (?, ?, ?)", [ - timestamp, - `historicalRates`, - lastTimestamp, - ]); - } - } - } - - // checks if prices is stale - const lastPrices = await getLastRecord(hourlyPeggedPrices); - if (lastPrices) { - const SK = lastPrices.SK; - if (typeof SK === "number") { - const lastTimestamp = SK; - if (Math.abs(timestamp - lastTimestamp) > secondsInDay) { - executeAndIgnoreErrors("INSERT INTO `stale` VALUES (?, ?, ?)", [ - timestamp, - `hourlyPrices`, - lastTimestamp, - ]); - } - } - } -}; - -export default wrapScheduledLambda(handler); diff --git a/src/cli/buildRequires.ts b/src/cli/buildRequires.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/src/cli/utils.ts b/src/cli/utils.ts deleted file mode 100644 index dbe22e08..00000000 --- a/src/cli/utils.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { getBlocks } from "@defillama/sdk/build/computeTVL/blocks"; -import { lookupBlock } from "@defillama/sdk/build/util/index"; -import { getEcosystemBlocks } from "../dexVolumes/utils"; -import protocols from "../protocols/data"; -import pThrottle from "../utils/pThrottle"; - -import { Ecosystem } from "../dexVolumes/dexVolume.types"; - -export function getProtocol(name: string) { - const protocol = protocols.find( - (p) => p.name.toLowerCase() === name.toLowerCase() - ); - if (protocol === undefined) { - throw new Error("No protocol with that name"); - } - return protocol; -} - -export async function getBlocksRetry(timestamp: number) { - for (let i = 0; i < 10; i++) { - try { - return await getBlocks(timestamp); - } catch (e) { - console.log(e); - } - } - throw new Error(`Couldn't get the block numbers at timestamp ${timestamp}`); -} - -export async function getEthBlock(timestamp: number) { - return { - ethereumBlock: (await lookupBlock(timestamp, { chain: "ethereum" })).block, - chainBlocks: {}, - }; -} - -export async function getChainBlocksRetry( - timestamp: number, - chain: Ecosystem, - limit = 1000 -) { - const throttle = pThrottle({ - limit, - interval: 60000, - }); - - const throttleGetEcosystemBlock: any = throttle(getEcosystemBlocks); - - for (let i = 0; i < 10; i++) { - try { - const res: { height: number; timestamp: number } = - await throttleGetEcosystemBlock(chain, timestamp); - return { - block: res.height, - timestamp: res.timestamp, - inputTimestamp: timestamp, - }; - } catch (e) { - console.log(e); - } - } - throw new Error(`Couldn't get the block numbers at timestamp ${timestamp}`); -} - -export const date = (timestamp: number) => - "\t" + new Date(timestamp * 1000).toDateString(); diff --git a/src/getStablecoin.ts b/src/getStablecoin.ts index 75769c74..ea449a29 100644 --- a/src/getStablecoin.ts +++ b/src/getStablecoin.ts @@ -11,7 +11,6 @@ import { dailyPeggedBalances, } from "./peggedAssets/utils/getLastRecord"; import { getChainDisplayName } from "./utils/normalizeChain"; -import { importAdapter } from "./peggedAssets/utils/importAdapter"; import { wrapResponseOrRedirect } from "./utils/wrapOrRedirect"; import { fetchPrices } from "./utils/fetchPrices"; @@ -38,7 +37,7 @@ export async function craftProtocolResponse( message: "Pegged asset is not in our database", }); } - const [lastBalancesHourlyRecord, historicalPeggedBalances, module] = + const [lastBalancesHourlyRecord, historicalPeggedBalances,] = await Promise.all([ getLastRecord(hourlyPeggedBalances(peggedData.id)), getHistoricalValues( @@ -47,21 +46,11 @@ export async function craftProtocolResponse( ), 1652241600 // currently frontend does not use data before May 11, 2022 for individual stablecoins ), - importAdapter(peggedData), ]); if (!useHourlyData) { replaceLast(historicalPeggedBalances, lastBalancesHourlyRecord); } let response = peggedData as any; - if (module.methodology !== undefined) { - response.methodology = module.methodology; - } - if (module.misrepresentedTokens !== undefined) { - response.misrepresentedTokens = true; - } - if (module.hallmarks !== undefined) { - response.hallmarks = module.hallmarks; - } response.chainBalances = {}; const currentChainBalances: { [chain: string]: object } = {}; response.currentChainBalances = currentChainBalances; diff --git a/src/peggedAssets/storePeggedAssets/errorDb.ts b/src/peggedAssets/storePeggedAssets/errorDb.ts deleted file mode 100644 index c3ecd231..00000000 --- a/src/peggedAssets/storePeggedAssets/errorDb.ts +++ /dev/null @@ -1 +0,0 @@ -export function executeAndIgnoreErrors(_sql: string, _values: any) {} diff --git a/src/peggedAssets/storePeggedAssets/getAndStorePeggedAssets.ts b/src/peggedAssets/storePeggedAssets/getAndStorePeggedAssets.ts index 46ac2f38..ce958bff 100644 --- a/src/peggedAssets/storePeggedAssets/getAndStorePeggedAssets.ts +++ b/src/peggedAssets/storePeggedAssets/getAndStorePeggedAssets.ts @@ -11,7 +11,6 @@ import { dailyPeggedBalances, hourlyPeggedBalances, } from "../utils/getLastRecord"; -import { executeAndIgnoreErrors } from "./errorDb"; import storeNewPeggedBalances from "./storeNewPeggedBalances"; type ChainBlocks = { @@ -147,12 +146,6 @@ async function getPeggedAsset( console.error(`${tag} Cache fallback failed for ${peggedAsset.name} on chain ${chain} (${label}):`, cacheError); } - executeAndIgnoreErrors("INSERT INTO `errors2` VALUES (?, ?, ?, ?)", [ - getCurrentUnixTimestamp(), - peggedAsset.gecko_id, - chain, - String(e), - ]); peggedBalances[chain][issuanceType] = { [pegType]: null }; } else { await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 1000)); @@ -244,15 +237,6 @@ async function calcCirculating( console.error( `Null balance or 0 circulating error on chain ${chain}` ); - executeAndIgnoreErrors( - "INSERT INTO `errors2` VALUES (?, ?, ?, ?)", - [ - getCurrentUnixTimestamp(), - peggedAsset.gecko_id, - chain, - `Null balance or 0 circulating error`, - ] - ); return; } circulating[pegType]! -= balance; @@ -280,12 +264,6 @@ async function calcCirculating( } } } catch (_) {} - executeAndIgnoreErrors("INSERT INTO `errors2` VALUES (?, ?, ?, ?)", [ - getCurrentUnixTimestamp(), - peggedAsset.gecko_id, - chain, - `Pegged asset has negative circulating amount`, - ]); throw new Error( `Pegged asset on chain ${chain} has negative circulating amount` ); diff --git a/src/peggedAssets/storePeggedAssets/storeNewPeggedBalances.ts b/src/peggedAssets/storePeggedAssets/storeNewPeggedBalances.ts index 0565eaf4..0cedb3d0 100644 --- a/src/peggedAssets/storePeggedAssets/storeNewPeggedBalances.ts +++ b/src/peggedAssets/storePeggedAssets/storeNewPeggedBalances.ts @@ -13,7 +13,6 @@ import { sendMessage } from "../../utils/discord"; import dynamodb from "../../utils/shared/dynamodb"; import getTVLOfRecordClosestToTimestamp from "../../utils/shared/getRecordClosestToTimestamp"; import { getLastRecord } from "../utils/getLastRecord"; -import { executeAndIgnoreErrors } from "./errorDb"; import { reconcileDailyFromHourly } from "./reconcileDailyFromHourly"; type PKconverted = (id: string) => string; @@ -118,20 +117,10 @@ export default async ( lastHourlyCirculating * 5 < currentCirculating && lastHourlyCirculating > 1000000 ) { - await executeAndIgnoreErrors("INSERT INTO `errors` VALUES (?, ?, ?)", [ - unixTimestamp, - peggedID, - `Circulating has 5x (${change}) within one hour, disabling it`, - ]); const errorMessage = `Circulating for ${peggedAsset.name} has 5x (${change}) within one hour, disabling it`; await sendMessage(errorMessage, process.env.OUTDATED_WEBHOOK!); throw new Error(errorMessage); } else { - await executeAndIgnoreErrors("INSERT INTO `errors` VALUES (?, ?, ?)", [ - unixTimestamp, - peggedID, - `Circulating has >2x (${change}) within one hour`, - ]); console.error( `Circulating for ${peggedAsset.name} has >2x (${change}) within one hour`, peggedAsset.name @@ -157,11 +146,6 @@ export default async ( prevCirculating !== 0 && prevCirculating !== undefined ) { - await executeAndIgnoreErrors("INSERT INTO `errors` VALUES (?, ?, ?)", [ - unixTimestamp, - peggedID, - `Circulating has dropped to 0 on chain "${chain}" (previous circulating was ${prevCirculating})`, - ]); console.error( `Circulating has dropped to 0 on chain "${chain}" (previous circulating was ${prevCirculating})`, peggedAsset.name diff --git a/src/peggedAssets/storePeggedAssets/storePegged.ts b/src/peggedAssets/storePeggedAssets/storePegged.ts index df632f4d..73291512 100644 --- a/src/peggedAssets/storePeggedAssets/storePegged.ts +++ b/src/peggedAssets/storePeggedAssets/storePegged.ts @@ -1,7 +1,6 @@ import peggedAssets from "../../peggedData/peggedData"; import { getCurrentUnixTimestamp } from "../../utils/date"; import { importAdapter } from "../utils/importAdapter"; -import { executeAndIgnoreErrors } from "./errorDb"; import { storePeggedAsset } from "./getAndStorePeggedAssets"; const maxRetries = 3; @@ -11,11 +10,6 @@ const timeout = (prom: any, time: number, peggedID: string) => Promise.race([prom, new Promise((_r, rej) => setTimeout(rej, time))]).catch( async (err) => { console.info("storepegged timedout"); - await executeAndIgnoreErrors("INSERT INTO `errors` VALUES (?, ?, ?)", [ - getCurrentUnixTimestamp(), - peggedID, - String(err), - ]); console.error(`Could not store peggedAsset ${peggedID}`, err); } ); @@ -40,7 +34,7 @@ async function iteratePeggedAssets(peggedIndexes: number[]) { } if (peggedAsset.gecko_id === "bitcoin-usd-btcfi") peggedAsset.pegType = "peggedUSD"; - const adapterModule = importAdapter(peggedAsset); + const adapterModule = await importAdapter(peggedAsset); if (!adapterModule) console.log("No adapter found for", peggedAsset.name, peggedAsset); Object.values(adapterModule).forEach((obj: any) => { diff --git a/src/peggedAssets/utils/importAdapter.ts b/src/peggedAssets/utils/importAdapter.ts index 14328a3c..c5899fa7 100644 --- a/src/peggedAssets/utils/importAdapter.ts +++ b/src/peggedAssets/utils/importAdapter.ts @@ -1,8 +1,8 @@ import { PeggedAsset } from "../../peggedData/types"; -import * as peggedAdapters from "../../adapters/peggedAssets"; +import path from "path"; -export function importAdapter(asset: PeggedAsset) { - let key =asset.gecko_id - if (asset.id === '121') key = 'psy' // special case for psy since it is not on coingecko - return (peggedAdapters as any)["default"][key]; +export async function importAdapter(asset: PeggedAsset) { + let key = asset.module ?? asset.gecko_id + const modulePath = path.join(__dirname, '../../adapters/peggedAssets', key); + return (await import(modulePath)).default } diff --git a/src/peggedData/peggedData.ts b/src/peggedData/peggedData.ts index 1d10fcc4..75fb76fd 100644 --- a/src/peggedData/peggedData.ts +++ b/src/peggedData/peggedData.ts @@ -774,6 +774,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/algofiorg", wiki: "https://wiki.defillama.com/wiki/Algofi", + module: 'stbl', }, { id: "39", @@ -1017,6 +1018,7 @@ export default [ auditLinks: ["https://www.centre.io/usdc-transparency"], twitter: "https://twitter.com/circlepay", wiki: "https://wiki.defillama.com/wiki/EUROC", + module: 'eurc', }, { id: "51", @@ -1115,6 +1117,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/AngleProtocol", wiki: "https://wiki.defillama.com/wiki/AGEUR", + module: 'eura', }, { id: "56", @@ -1353,6 +1356,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/beanstalkfarms", wiki: "https://wiki.defillama.com/wiki/Beanstalk", + module: 'bean2', }, { id: "68", @@ -2204,6 +2208,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/LybraFinanceLSD", wiki: null, + module: 'eusd', }, { id: "110", @@ -2285,6 +2290,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/Shade_Protocol", wiki: null, + module: 'silk', }, { id: "114", @@ -2451,6 +2457,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/PSY_stablecoin", wiki: null, + module: "psy", }, { id: "122", @@ -2490,6 +2497,7 @@ export default [ auditLinks: ["https://docs.preon.finance/information/security"], twitter: "https://twitter.com/PreonFinance", wiki: "https://docs.preon.finance/", + module: 'star', }, { id: "124", @@ -2510,6 +2518,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/LybraFinanceLSD", wiki: "https://docs.lybra.finance/lybra-finance-docs/background/stablecoins-on-the-market", + module: 'peg-eusd', }, { id: "125", @@ -2530,6 +2539,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/LybraFinanceLSD", wiki: "https://docs.lybra.finance/lybra-finance-docs/background/stablecoins-on-the-market", + module: 'eusdv2', }, { id: "126", @@ -2590,6 +2600,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/Nexus_ZDex", wiki: "https://docs.zdex.tech/", + module: 'nexus', }, { id: "129", @@ -2669,6 +2680,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/MountainUSDM", wiki: "https://docs.mountainprotocol.com/reference/usdm-token", + module: 'usdm', }, { id: "133", @@ -2689,6 +2701,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/Num_Finance", wiki: "https://num.finance/transparency", + module: 'nars', }, { id: "134", @@ -2875,6 +2888,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/HydtProtocol", wiki: "https://hydtprotocol.com/#faqs", + module: 'hydt', }, { id: "143", @@ -2895,6 +2909,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/usdv_money", wiki: "https://docs.usdv.money/docs/what-is-usdv/faq", + module: 'usdv', }, { id: "144", @@ -2935,6 +2950,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/PayTrie", wiki: "https://faq.paytrie.com/help/what-is-the-cadc-address", + module: 'cadc', }, { id: "146", @@ -3055,6 +3071,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/Goal3_xyz", wiki: "https://docs.goal3.xyz/sportsbook/technical-overview/usdzkusd", + module: 'zkusd', }, { id: "152", @@ -3216,6 +3233,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/rifonchain", wiki: null, + module: 'usd-rif', }, { id: "160", @@ -3316,6 +3334,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/pagolinea", wiki: null, + module: 'pago-linea-usdcb', }, { id: "165", @@ -3375,6 +3394,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/protocol_fx", wiki: null, + module: 'feth', }, { id: "168", @@ -3395,6 +3415,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/protocol_fx", wiki: null, + module: 'fxusd', }, { id: "169", @@ -3415,6 +3436,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/goku_stable", wiki: null, + module: 'gai-stablecoin', }, { id: "170", @@ -3499,6 +3521,7 @@ export default [ auditLinks: [], twitter: "https://twitter.com/BlackRock", wiki: null, + module: 'blackrock-usd', }, { id: "174", @@ -3640,6 +3663,7 @@ export default [ auditLinks: null, twitter: "https://twitter.com/breadchain_", wiki: null, + module: 'bread', }, { id: "181", @@ -3661,6 +3685,7 @@ export default [ "https://github.com/ZunamiProtocol/ZunamiProtocolV2/tree/main/audit", twitter: "https://twitter.com/ZunamiProtocol", wiki: "https://wiki.defillama.com/wiki/Zunami_Protocol", + module: "zun-usd", }, { id: "182", @@ -3682,6 +3707,7 @@ export default [ "https://github.com/ZunamiProtocol/ZunamiProtocolV2/tree/main/audit", twitter: "https://twitter.com/ZunamiProtocol", wiki: "https://wiki.defillama.com/wiki/Zunami_Protocol", + module: "zun-eth", }, { id: "183", @@ -4442,7 +4468,8 @@ export default [ auditLinks: null, priceSource: "defillama", twitter: "https://x.com/avalonfinance_", - wiki: "https://docs.avalonfinance.xyz/cedefi-cdp-usda" + wiki: "https://docs.avalonfinance.xyz/cedefi-cdp-usda", + module: "avalon-usda" }, { id: "221", @@ -4763,6 +4790,7 @@ export default [ auditLinks: ["https://github.com/peckshield/publications/blob/master/audit_reports/PeckShield-Audit-Report-Synnax-v1.0.pdf"], twitter: "https://twitter.com/synnax_labs", wiki: "https://docs.synnax.fi", + module: 'syusd', }, { id: "237", @@ -6200,5 +6228,6 @@ export default [ auditLinks: ["https://public.inshallah.fi/iAUSD-audit-v1.pdf"], twitter: "https://x.com/inshAllahfi", wiki: "https://inshallah.gitbook.io/inshallah/iausd-stablecoin/what-is-iausd", + module: 'iAUSD', }, ] as PeggedAsset[]; diff --git a/src/peggedData/types.ts b/src/peggedData/types.ts index 88331dba..c16cf28e 100644 --- a/src/peggedData/types.ts +++ b/src/peggedData/types.ts @@ -53,6 +53,7 @@ export type PeggedAsset = { doublecounted?: boolean; deprecated?: boolean; yieldBearing?: boolean; + module?: string; // adapter module to use, defaults to gecko_id if not set }; type Bridge = {