|
| 1 | +import { manualCliff } from "../adapters/manual"; |
| 2 | +import { LinearAdapterResult, Protocol } from "../types/adapters"; |
| 3 | +import { periodToSeconds, readableToSeconds } from "../utils/time"; |
| 4 | +import { queryAggregatedDailyLogsAmounts } from "../utils/queries"; |
| 5 | + |
| 6 | +const start = 1755129600; |
| 7 | +const total = 1_000_000_000; // Maximum supply cap of 1B tokens |
| 8 | + |
| 9 | +const emissions = async (): Promise<LinearAdapterResult[]> => { |
| 10 | + const result: LinearAdapterResult[] = []; |
| 11 | + |
| 12 | + const data = await queryAggregatedDailyLogsAmounts({ |
| 13 | + address: "0x0b6d3b42861ee8abfcaac818033694e758ecc3eb", |
| 14 | + topic0: "0x0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885", |
| 15 | + startDate: "2025-08-14", |
| 16 | + }) |
| 17 | + |
| 18 | + data.sort((a, b) => readableToSeconds(a.date) - readableToSeconds(b.date)); |
| 19 | + |
| 20 | + for (let i = 0; i < data.length; i++) { |
| 21 | + const currentTimestamp = readableToSeconds(data[i].date); |
| 22 | + const nextTimestamp = i < data.length - 1 |
| 23 | + ? readableToSeconds(data[i + 1].date) |
| 24 | + : currentTimestamp + periodToSeconds.week; |
| 25 | + |
| 26 | + result.push({ |
| 27 | + type: "linear", |
| 28 | + start: currentTimestamp, |
| 29 | + end: nextTimestamp, |
| 30 | + amount: Number(data[i].amount) / 1e18, |
| 31 | + }); |
| 32 | + } |
| 33 | + |
| 34 | + return result; |
| 35 | +} |
| 36 | + |
| 37 | +const etherex: Protocol = { |
| 38 | + // Initial REX token allocations (percentages of initial 350M supply, calculated from 1B total) |
| 39 | + "Treasury": manualCliff(start, total * 0.0875), // 8.75% of 1B = 87.5M REX (25% of initial supply) |
| 40 | + "Linea/Consensys": manualCliff(start, total * 0.0875), // 8.75% of 1B = 87.5M REX (25% of initial supply) |
| 41 | + "veNILE Migrators": manualCliff(start, total * 0.0875), // 8.75% of 1B = 87.5M REX (25% of initial supply) |
| 42 | + "LP Treasury Support": manualCliff(start, total * 0.0525), // 5.25% of 1B = 52.5M REX (15% of initial supply) |
| 43 | + "CEX Listings & Market Makers": manualCliff(start, total * 0.0175), // 1.75% of 1B = 17.5M REX (5% of initial supply) |
| 44 | + "Ecosystem Partners": manualCliff(start, total * 0.0175), // 1.75% of 1B = 17.5M REX (5% of initial supply) |
| 45 | + |
| 46 | + "Gauge Emissions": emissions, |
| 47 | + |
| 48 | + meta: { |
| 49 | + notes: [ |
| 50 | + "Initial supply: 350M REX tokens with maximum cap of 1B tokens", |
| 51 | + "Initial weekly emissions: 3.5M REX tokens", |
| 52 | + "Emissions can be modified by up to ±25% per epoch through governance", |
| 53 | + "100% of emissions are distributed to gauges", |
| 54 | + "No team allocation - fully community focused", |
| 55 | + "Emission schedule: +20% epoch 1, +10% epoch 2, +9% epoch 3, -16% epoch 4, -25% epoch 5, then -1% decay per epoch", |
| 56 | + "Projected total supply after 10 years: approximately 683M tokens", |
| 57 | + ], |
| 58 | + token: `coingecko:etherex`, |
| 59 | + sources: [ |
| 60 | + "https://docs.etherex.finance/pages/tokenomics", |
| 61 | + "https://etherscan.io/address/0x0b6d3B42861eE8aBFCaaC818033694E758ECC3eb" |
| 62 | + ], |
| 63 | + protocolIds: ["parent#etherex"] |
| 64 | + }, |
| 65 | + categories: { |
| 66 | + insiders: ["Linea/Consensys"], |
| 67 | + noncirculating: ["veNILE Migrators", "Ecosystem Partners", "Treasury"], |
| 68 | + farming: ["Gauge Emissions"], |
| 69 | + liquidity: ["CEX Listings & Market Makers", "LP Treasury Support"] |
| 70 | + } |
| 71 | +}; |
| 72 | + |
| 73 | +export default etherex; |
0 commit comments