diff --git a/defi/src/cli/check_gecko_overlap.js b/defi/src/cli/check_gecko_overlap.js new file mode 100644 index 0000000000..93bc53439b --- /dev/null +++ b/defi/src/cli/check_gecko_overlap.js @@ -0,0 +1,166 @@ +// HELPER FUNCTION LOOKS FOR DUPLIATE GECKO_ID BETWEEN DATA1/2/3/4 & parentProtocols +// OUPUTS TO JSON OBJECT- DOESNT MODIFY FILES + +// node src/cli/check_gecko_overlap.js + +const fs = require('fs'); +const path = require('path'); + +function stripComments(ts) { + // Remove block comments /* ... */ and line comments // ... + return ts + .replace(/\/\*[\s\S]*?\*\//g, '') + .replace(/(^|[^:])\/\/.*$/gm, '$1'); +} + +function extractNameGeckoPairs(filePath) { + const raw = fs.readFileSync(filePath, 'utf8'); + const content = stripComments(raw); + const pairs = []; + // Find all gecko_id occurrences and capture nearby name + const geckoRegex = /gecko_id\s*:\s*["']([^"']+)["']/g; + let match; + while ((match = geckoRegex.exec(content)) !== null) { + const geckoId = match[1]; + // Extract the object block that encloses this gecko_id occurrence + const block = getEnclosingObjectBlock(content, match.index); + let name = '(unknown)'; + if (block) { + const obj = content.slice(block.start, block.end); + const nameMatch = obj.match(/name\s*:\s*["']([^"']+)["']/); + if (nameMatch) name = nameMatch[1]; + } + // compute line number + const before = content.slice(0, match.index); + const line = before.split('\n').length; + pairs.push({ name, gecko_id: geckoId, file: filePath, line }); + } + return pairs; +} + +// Attempts to find the start and end indices of the object literal enclosing a given index +function getEnclosingObjectBlock(text, idx) { + // Find '{' going backwards, tracking brace balance to avoid landing inside nested blocks + let start = -1; + let i = idx; + let braceDepth = 0; + // Move backward to find the matching '{' + for (i = idx; i >= 0; i--) { + const ch = text[i]; + if (ch === '}') braceDepth++; + else if (ch === '{') { + if (braceDepth === 0) { start = i; break; } + braceDepth--; + } + } + if (start === -1) return null; + // From start, find the matching '}' going forward + let end = -1; + braceDepth = 0; + let inString = false; + let stringQuote = ''; + for (i = start; i < text.length; i++) { + const ch = text[i]; + const prev = i > 0 ? text[i - 1] : ''; + if (inString) { + if (ch === stringQuote && prev !== '\\') inString = false; + continue; + } + if (ch === '"' || ch === '\'') { + inString = true; stringQuote = ch; continue; + } + if (ch === '{') braceDepth++; + else if (ch === '}') { + braceDepth--; + if (braceDepth === 0) { end = i + 1; break; } + } + } + if (end === -1) return null; + return { start, end }; +} + +const protocolsFiles = ['data1.ts', 'data2.ts', 'data3.ts', 'data4.ts'].map(f => path.join(__dirname, '../protocols', f)); +const parentFile = path.join(__dirname, '../protocols/parentProtocols.ts'); + +const parentPairs = extractNameGeckoPairs(parentFile); +const protocolPairs = protocolsFiles.flatMap(extractNameGeckoPairs); + +const parentByGecko = new Map(); +for (const p of parentPairs) { + if (typeof p.gecko_id === 'string') parentByGecko.set(p.gecko_id, p.name); +} + +// Build parent vs data overlaps +const parentDataOverlaps = []; +for (const p of protocolPairs) { + const parentName = parentByGecko.get(p.gecko_id); + if (parentName) { + const parentEntry = parentPairs.find(x => x.gecko_id === p.gecko_id); + parentDataOverlaps.push({ + gecko_id: p.gecko_id, + protocol: { name: p.name, file: p.file, line: p.line }, + parent: parentEntry ? { name: parentEntry.name, file: parentEntry.file, line: parentEntry.line } : { name: parentName } + }); + } +} + +// Build data vs data overlaps (duplicate gecko_ids across data files) +const byGecko = new Map(); +for (const p of protocolPairs) { + if (!byGecko.has(p.gecko_id)) byGecko.set(p.gecko_id, []); + byGecko.get(p.gecko_id).push(p); +} +const dataDataOverlaps = []; +for (const [gid, entries] of byGecko.entries()) { + if (entries.length > 1) { + dataDataOverlaps.push({ + gecko_id: gid, + protocols: entries.map(e => ({ name: e.name, file: e.file, line: e.line })) + }); + } +} + +// Optional: auto-fix by removing gecko_id from child protocol files (data1..4) +if (process.env.FIX_CHILD_GECKO === '1' && overlaps.length) { + const byFile = new Map(); + for (const o of overlaps) { + const file = o.protocol.file; + if (!byFile.has(file)) byFile.set(file, new Set()); + byFile.get(file).add(o.gecko_id); + } + for (const [file, idSet] of byFile.entries()) { + let content = fs.readFileSync(file, 'utf8'); + for (const id of idSet) { + // remove patterns like: gecko_id: "id", + const patternWithComma = new RegExp(`\\s*gecko_id\\s*:\\s*["']${id}["']\\s*,`, 'g'); + const patternLast = new RegExp(`,?\\s*gecko_id\\s*:\\s*["']${id}["']`, 'g'); + content = content.replace(patternWithComma, ''); + content = content.replace(patternLast, ''); + } + fs.writeFileSync(file, content); + } +} + +// Prepare compact output +function shortFile(filePath) { + const base = path.basename(filePath); + return base; // e.g., data1.ts +} + +const compact = { + parent_data_overlaps: parentDataOverlaps.map(o => ({ + gecko_id: o.gecko_id, + protocol: { name: o.protocol.name, file: shortFile(o.protocol.file) }, + parent: { name: o.parent.name } + })), + data_data_overlaps: dataDataOverlaps.map(item => ({ + gecko_id: item.gecko_id, + protocols: item.protocols.map(p => ({ name: p.name, file: shortFile(p.file) })) + })) +}; + +const outPath = path.join(__dirname, 'temp/gecko_id_overlaps.json'); +fs.writeFileSync(outPath, JSON.stringify(compact, null, 2)); +console.log(`Written overlaps to ${outPath}. parent_data_overlaps=${compact.parent_data_overlaps.length}, data_data_overlaps=${compact.data_data_overlaps.length}`); + + diff --git a/defi/src/cli/coingeckoUpdater.ts b/defi/src/cli/coingeckoUpdater.ts index f8290749c8..3c346bc275 100644 --- a/defi/src/cli/coingeckoUpdater.ts +++ b/defi/src/cli/coingeckoUpdater.ts @@ -1,7 +1,9 @@ import fs from 'fs'; import path from 'path'; -const DATA_FILE = 'data'; +const DATA_FILE = 'data4'; + +const COINGECKO_API_KEY = undefined; interface Protocol { id: string; @@ -44,7 +46,7 @@ async function searchCoingecko(tokenSymbol: string): Promise { method: 'GET', headers: { accept: 'application/json', - 'x-cg-pro-api-key': process.env.CG_API_KEY! + 'x-cg-pro-api-key': COINGECKO_API_KEY || '' } }); const json = await response.json(); @@ -68,7 +70,7 @@ async function fetchCoinDetails( method: 'GET', headers: { accept: 'application/json', - 'x-cg-pro-api-key': process.env.CG_API_KEY! + 'x-cg-pro-api-key': COINGECKO_API_KEY || '' } }); const data = await response.json(); @@ -119,37 +121,25 @@ async function fetchCoinDetails( } async function updateProtocolsData() { - const dataPath = path.join(__dirname, '../protocols', `${DATA_FILE}.ts`); - console.log('Working with file:', dataPath); - - const fileContent = fs.readFileSync(dataPath, 'utf8'); - - // Import baseIconsUrl from the constants file - const { baseIconsUrl } = require('../constants'); - - const regex = new RegExp(`const ${DATA_FILE}: Protocol\\[\\] = (\\[[\\s\\S]*?\\]);`, 'm'); - const match = fileContent.match(regex); - if (!match) { - console.error('Could not find protocols data in file'); + if (!COINGECKO_API_KEY) { + console.error('Error: COINGECKO_API_KEY variable is required'); return; } + + console.log('Loading protocols data...'); let protocols: Protocol[]; try { - const code = ` - const baseIconsUrl = "${baseIconsUrl}"; - return ${match[1]}; - `; - const fn = new Function(code); - protocols = fn(); - console.log('Successfully parsed protocols:', protocols.length); + // Import the data directly + protocols = require(`../protocols/${DATA_FILE}`).default; + console.log('Successfully loaded protocols:', protocols.length); } catch (error) { - console.error('Failed to parse protocols data:', error); + console.error('Failed to load protocols data:', error); return; } // Track updates for final report - const updatedProtocols: { name: string; symbol: string; gecko_id: string }[] = []; + const updatedProtocols: { name: string; twitter: string; gecko_id: string }[] = []; // Collect existing gecko_ids protocols.forEach((protocol) => { @@ -195,14 +185,13 @@ async function updateProtocolsData() { protocol.url ); if (coingeckoId) { - protocol.gecko_id = coingeckoId; usedGeckoIds.add(coingeckoId); updatedProtocols.push({ name: protocol.name, - symbol: protocol.symbol, + twitter: protocol.twitter, gecko_id: coingeckoId }); - console.log(`Added gecko_id ${coingeckoId} to ${protocol.name}\n`); + console.log(`Found gecko_id ${coingeckoId} for ${protocol.name}\n`); foundMatch = true; break; } @@ -216,16 +205,29 @@ async function updateProtocolsData() { await new Promise((resolve) => setTimeout(resolve, 250)); } - console.log('\n=== Update Summary ==='); - if (updatedProtocols.length === 0) { - console.log('No protocols were updated with new gecko_ids'); - } else { - console.log('The following protocols were updated with gecko_ids:'); - updatedProtocols.forEach((p) => { - console.log(`- ${p.name} (${p.symbol}): ${p.gecko_id}`); - }); + // Write results to a new file + const outputPath = path.join(__dirname, 'temp', `${DATA_FILE}_new_gecko_id.json`); + const outputData = { + timestamp: new Date().toISOString(), + totalFound: updatedProtocols.length, + protocols: updatedProtocols + }; + + try { + fs.writeFileSync(outputPath, JSON.stringify(outputData, null, 2)); + console.log(`\n=== Results Summary ===`); + console.log(`Found ${updatedProtocols.length} new gecko_ids`); + console.log(`Results written to: ${outputPath}`); + if (updatedProtocols.length > 0) { + console.log('\nFound gecko_ids:'); + updatedProtocols.forEach((p) => { + console.log(`- ${p.name} (@${p.twitter}): ${p.gecko_id}`); + }); + } + console.log('=====================\n'); + } catch (error) { + console.error('Error writing output file:', error); } - console.log('===================\n'); } updateProtocolsData().catch(console.error); diff --git a/defi/src/protocols/data1.ts b/defi/src/protocols/data1.ts index 22dbd737a1..3cea1fb296 100644 --- a/defi/src/protocols/data1.ts +++ b/defi/src/protocols/data1.ts @@ -107,7 +107,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/aave-v2.png`, audits: "2", audit_note: null, - gecko_id: "aave", + gecko_id: null, cmcId: "7278", category: "Lending", chains: ["Ethereum", "Polygon", "Avalanche"], @@ -334,7 +334,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/sushiswap.png`, audits: "3", audit_note: null, - gecko_id: "sushi", + gecko_id: null, cmcId: "6758", category: "Dexs", chains: [ @@ -400,7 +400,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/cream-finance.png`, audits: "3", audit_note: null, - gecko_id: "cream-2", + gecko_id: null, cmcId: "6193", category: "Lending", chains: ["Ethereum", "Binance", "Polygon"], @@ -2879,7 +2879,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/metronome-v1.jpg`, audits: "2", audit_note: null, - gecko_id: "metronome", + gecko_id: null, cmcId: "2873", category: "Yield", chains: ["Ethereum"], @@ -4523,7 +4523,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/quickswap-dex.jpg`, audits: "3", audit_note: null, - gecko_id: "quickswap", + gecko_id: null, cmcId: "19966", category: "Dexs", chains: ["Polygon"], @@ -7317,7 +7317,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/tranchess-yield.png`, audits: "2", audit_note: null, - gecko_id: "tranchess", + gecko_id: null, cmcId: "10974", category: "Yield", chains: ["Binance"], @@ -7458,7 +7458,7 @@ const data: Protocol[] = [ logo: `${baseIconsUrl}/sun.io.png`, audits: "2", audit_note: null, - gecko_id: "sun-token", + gecko_id: null, cmcId: "10529", category: "Dexs", chains: ["Tron"], @@ -8263,7 +8263,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/benqi-lending.jpg`, audits: "2", audit_note: null, - gecko_id: "benqi", + gecko_id: null, cmcId: "9288", category: "Lending", chains: ["Avalanche"], @@ -8458,7 +8458,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/yield-yak-aggregator.png`, audits: "0", audit_note: null, - gecko_id: "yield-yak", + gecko_id: null, cmcId: "11415", category: "Yield Aggregator", chains: ["Avalanche"], @@ -9026,7 +9026,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/polycat.png`, audits: "2", audit_note: null, - gecko_id: "polycat-finance", + gecko_id: null, cmcId: "10134", category: "Farm", chains: ["Polygon"], @@ -9354,7 +9354,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/quipuswap.png`, audits: "2", audit_note: null, - gecko_id: "quipuswap-governance-token", + gecko_id: null, cmcId: "13316", category: "Dexs", chains: ["Tezos"], @@ -11332,7 +11332,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/value-liquid.jpg`, audits: "2", audit_note: null, - gecko_id: "value-liquidity", + gecko_id: null, cmcId: "7404", category: "Dexs", chains: ["Ethereum"], @@ -14238,7 +14238,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/handle.fi.png`, audits: "2", audit_note: null, - gecko_id: "handle-fi", + gecko_id: null, cmcId: "11794", category: "CDP", chains: ["Arbitrum"], @@ -25069,7 +25069,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/voltswap.png`, audits: "0", audit_note: null, - gecko_id: "voltswap", + gecko_id: null, cmcId: "19160", category: "Dexs", chains: ["Meter", "Theta"], @@ -26440,7 +26440,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/omnidex-swap.jpg`, audits: "0", audit_note: null, - gecko_id: "omnidex", + gecko_id: null, cmcId: null, category: "Dexs", chains: ["Telos"], @@ -26501,7 +26501,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/beamswap-classic.jpg`, audits: "2", audit_note: null, - gecko_id: "beamswap", + gecko_id: null, cmcId: "17035", category: "Dexs", chains: ["Moonbeam"], @@ -27294,7 +27294,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/magik-finance.png`, audits: "0", audit_note: null, - gecko_id: "magik", + gecko_id: null, cmcId: "17941", category: "Algo-Stables", chains: ["Fantom"], @@ -28477,7 +28477,7 @@ The eWIT token is a custodial, wrapped version of the Witnet coin managed by the logo: `${baseIconsUrl}/based-v1.jpg`, audits: "2", audit_note: null, - gecko_id: "based-finance", + gecko_id: null, cmcId: "17954", category: "Algo-Stables", chains: ["Fantom"], diff --git a/defi/src/protocols/data2.ts b/defi/src/protocols/data2.ts index 6901e27a06..5943e0e111 100644 --- a/defi/src/protocols/data2.ts +++ b/defi/src/protocols/data2.ts @@ -724,7 +724,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/cropper.png`, audits: "2", audit_note: null, - gecko_id: "cropperfinance", + gecko_id: null, cmcId: "11387", category: "Dexs", chains: ["Solana"], @@ -1232,7 +1232,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/pegasys-v2.png`, audits: "0", audit_note: null, - gecko_id: "pegasys", + gecko_id: null, cmcId: null, category: "Dexs", chains: ["Syscoin"], @@ -1483,7 +1483,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/onering-v1.jpg`, audits: "0", audit_note: null, - gecko_id: "onering", + gecko_id: null, cmcId: "17786", category: "Yield", chains: ["Polygon", "Fantom"], @@ -1768,7 +1768,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/claimswap-v1.jpg`, audits: "0", audit_note: null, - gecko_id: "claimswap", + gecko_id: null, cmcId: "18371", category: "Dexs", chains: ["Klaytn"], @@ -4288,7 +4288,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/izumi-liquidbox.png`, audits: "2", audit_note: null, - gecko_id: "izumi-finance", + gecko_id: null, cmcId: "16305", category: "Yield", chains: ["Ethereum"], @@ -4981,7 +4981,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/sphere-finance.png`, audits: "0", audit_note: null, - gecko_id: "sphere-finance", + gecko_id: null, cmcId: "18945", category: "Yield", chains: ["Polygon"], @@ -6414,7 +6414,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/scrub.png`, audits: "2", audit_note: null, - gecko_id: "lion-scrub-finance", + gecko_id: null, cmcId: "19410", category: "Algo-Stables", chains: ["Cronos", "Kava"], @@ -10382,7 +10382,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/nirvana.png`, audits: "0", audit_note: null, - gecko_id: "nirvana-ana", + gecko_id: null, cmcId: "19513", category: "CDP", chains: ["Solana"], @@ -12128,7 +12128,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/taiga-protocol.png`, audits: "0", audit_note: null, - gecko_id: "taiga", + gecko_id: null, cmcId: null, category: "Synthetics", chains: ["Karura"], @@ -14194,7 +14194,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/mycelium-perpetual-swaps.png`, audits: "0", audit_note: null, - gecko_id: "mycelium", + gecko_id: null, cmcId: "21437", category: "Derivatives", chains: ["Arbitrum"], @@ -17800,7 +17800,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/jupiter-aggregator.jpg`, audits: "0", audit_note: null, - gecko_id: "jupiter-exchange-solana", + gecko_id: null, cmcId: "29210", category: "DEX Aggregator", chains: ["Solana"], @@ -18411,7 +18411,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/lfgswap.png`, audits: "0", audit_note: null, - gecko_id: "lfgswap-finance", + gecko_id: null, cmcId: "21967", category: "Dexs", chains: ["EthereumPoW"], @@ -20390,7 +20390,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/starfish-finance.jpg`, audits: "0", audit_note: null, - gecko_id: "starfish-finance", + gecko_id: null, cmcId: "22002", category: "Dexs", chains: ["Astar"], @@ -24338,7 +24338,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/blur-bids.png`, audits: "0", audit_note: null, - gecko_id: "blur", + gecko_id: null, cmcId: null, category: "NFT Marketplace", chains: ["Ethereum"], @@ -24405,7 +24405,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/thena-v1.jpg`, audits: "0", audit_note: null, - gecko_id: "thena", + gecko_id: null, cmcId: "23335", category: "Dexs", chains: ["Binance"], @@ -24777,7 +24777,7 @@ const data2: Protocol[] = [ audits: "2", //Bug Bounty contest on Code4rena with 198 white-hat eyes on it and 140 reports audit_note: null, - gecko_id: "inverse-finance", + gecko_id: null, cmcId: "8720", category: "CDP", chains: ["Ethereum"], @@ -25299,7 +25299,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/bunni-v1.jpg`, audits: "3", audit_note: null, - gecko_id: "bunni", + gecko_id: null, cmcId: null, category: "Liquidity manager", chains: ["Ethereum", "Arbitrum", "Optimism", "Polygon"], @@ -30639,7 +30639,7 @@ const data2: Protocol[] = [ logo: `${baseIconsUrl}/arbitrum-exchange-v2.jpg`, audits: "2", audit_note: null, - gecko_id: "arbitrum-exchange", + gecko_id: null, cmcId: null, category: "Dexs", chains: ["Arbitrum"], diff --git a/defi/src/protocols/data3.ts b/defi/src/protocols/data3.ts index cc0b26f7c3..af7b3a7847 100644 --- a/defi/src/protocols/data3.ts +++ b/defi/src/protocols/data3.ts @@ -2220,7 +2220,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/thalaswap.png`, audits: "2", audit_note: null, - gecko_id: "thala", + gecko_id: null, cmcId: "24268", category: "Dexs", chains: ["Aptos"], @@ -4982,7 +4982,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/aboard-exchange.jpg`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "aboard", cmcId: null, category: "Derivatives", chains: ["Arbitrum", "Avalanche"], @@ -6522,7 +6522,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/merkl.png`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "angle-protocol", cmcId: null, category: "Yield", chains: ["Ethereum", "Polygon", "Arbitrum", "Optimism"], @@ -7372,7 +7372,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/unifi-protocol-staking.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "unifi-protocol-dao", cmcId: null, category: "Staking Pool", chains: ["Harmony", "Ontology"], @@ -8882,7 +8882,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/fathom-amm.jpg`, audits: "0", audit_note: null, - gecko_id: "fathom-protocol", + gecko_id: null, cmcId: "29056", category: "Dexs", chains: ["XDC"], @@ -14940,7 +14940,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/baseswap-v2.jpg`, audits: "0", audit_note: null, - gecko_id: "baseswap", + gecko_id: null, cmcId: "27764", category: "Dexs", chains: ["Base"], @@ -18805,7 +18805,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/ekubo.png`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "ekubo-protocol", cmcId: null, category: "Dexs", chains: ["Starknet"], @@ -34226,7 +34226,7 @@ const data3_1: Protocol[] = [ logo: `${baseIconsUrl}/kpk.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "kpk", cmcId: null, category: "Treasury Manager", chains: ["Ethereum"], @@ -39735,7 +39735,7 @@ const data3_2: Protocol[] = [ logo: `${baseIconsUrl}/powercity-core-protocol.png`, audits: "0", audit_note: null, - gecko_id: "powercity-watt", + gecko_id: null, cmcId: null, category: "Farm", chains: ["Pulse"], @@ -59033,7 +59033,7 @@ const data3_2: Protocol[] = [ logo: `${baseIconsUrl}/infinite-trading-protocol.png`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "infinite-trading-protocol", cmcId: null, category: "AI Agents", chains: ["Optimism"], @@ -65856,7 +65856,7 @@ const data3_2: Protocol[] = [ logo: `${baseIconsUrl}/vinuswap.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "vinuchain", cmcId: null, category: "Dexs", chains: ["VinuChain"], diff --git a/defi/src/protocols/data4.ts b/defi/src/protocols/data4.ts index 79087bea7a..e5d6b73b9c 100644 --- a/defi/src/protocols/data4.ts +++ b/defi/src/protocols/data4.ts @@ -1328,7 +1328,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/vinunft.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "vinuchain", cmcId: null, category: "NFT Marketplace", chains: ["VinuChain"], @@ -3280,7 +3280,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/cyber.png`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "cyberconnect", cmcId: null, category: "Chain", chains: ["Ethereum"], @@ -3381,7 +3381,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/orderly-chain.png`, audits: "0", audit_note: null, - gecko_id: "orderly-network", + gecko_id: null, cmcId: null, category: "Canonical Bridge", chains: ["Ethereum"], @@ -4388,7 +4388,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/enso.png`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "enso", cmcId: null, category: "DEX Aggregator", chains: ["Ethereum"], @@ -7821,7 +7821,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/csigma-finance.jpg`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "csigma-finance", cmcId: null, category: "RWA Lending", chains: ["Arbitrum", "Ethereum", "Base"], @@ -9584,7 +9584,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/corepound.jpg`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "corepound", cmcId: null, category: "Yield", chains: ["CORE"], @@ -10736,7 +10736,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/hard-swap.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "kava-lend", cmcId: null, category: "Dexs", chains: ["Kava"], @@ -14344,7 +14344,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/alphalend.png`, audits: "0", audit_note: null, - gecko_id: "bluefin", + gecko_id: null, cmcId: "12114", category: "Lending", chains: ["Sui"], @@ -14506,7 +14506,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/palm-economy.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "palm-economy", cmcId: null, category: "Farm", chains: ["Cardano"], @@ -17323,7 +17323,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/stellar-dex.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "stellar", cmcId: null, category: "Dexs", chains: ["Stellar"], @@ -17750,7 +17750,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/ao-bridge.png`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "ao-computer", cmcId: null, category: "Canonical Bridge", chains: ["Ethereum"], @@ -19284,7 +19284,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/hlp0.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "hlp0", cmcId: null, category: "Yield", chains: ["Arbitrum"], @@ -19476,7 +19476,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/crocodile-finance.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "crocodile-finance", cmcId: null, category: "Algo-Stables", chains: ["Avalanche"], @@ -19645,7 +19645,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/auro-finance.jpg`, audits: "2", audit_note: null, - gecko_id: null, + gecko_id: "auro-finance", cmcId: null, category: "CDP", chains: ["Aptos"], @@ -21035,7 +21035,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/vies-token.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "vies-token", cmcId: null, category: "Ponzi", chains: ["Cronos"], @@ -25561,7 +25561,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/livepeer.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "livepeer", cmcId: null, category: "Video Infrastructure", chains: ["Arbitrum"], @@ -26841,7 +26841,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/sqd.ai.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "subsquid", cmcId: null, category: "Developer Tools", chains: ["Arbitrum"], @@ -28254,7 +28254,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/somnia-exchange.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "nia-2", cmcId: null, category: "Dexs", chains: ["Somnia"], @@ -29322,7 +29322,7 @@ const data4: Protocol[] = [ logo: `${baseIconsUrl}/fuseon.jpg`, audits: "0", audit_note: null, - gecko_id: null, + gecko_id: "fuseon", cmcId: null, category: "Dexs", chains: ["Plasma"],