This document provides a detailed technical specification for the Rollups Activity Rank system. This system is designed to evaluate and rank blockchain rollups built on Celestia based on their on-chain activity, development momentum, and total value locked (TVL) growth.
The final score is a weighted aggregation of several normalized metrics, calculated periodically to provide a near-real-time assessment of rollup performance.
The final Activity Rank Score for a rollup is calculated as a weighted sum of its normalized metric scores.
Where:
The system operates on a multi-tiered refresh schedule due to limitations of various data sources:
blobs_count and mb_price are updated hourly.This means that while the overall rank is refreshed hourly, the components of that rank change at different intervals.
For metrics requiring a comparative maximum or minimum value (e.g., maxValue, minValue), these values are calculated dynamically at the time of the rank computation. They are derived from the set of all active rollups.
maxValue = The maximum value observed for that metric across all rollups.minValue = The minimum value observed for that metric across all rollups.Note: Rank Volatility This dynamic approach makes the ranking highly competitive and relative. A rollup's rank can change not only due to its own activity but also due to significant changes in the activity of its peers. This creates a volatile environment where ranks are a direct reflection of performance relative to the current ecosystem.
Metrics are normalized using one of the following functions. The output of each function is multiplied by 100 to produce the final metric score
| Type | Formula | SQL Implementation Notes |
|---|---|---|
| Quantitative | LEAST(value / maxValue, 1) | |
| Logarithmic | LOG(value) / LOG(maxValue). Handles value <= 0 by returning 0. | |
| Reciprocal Quant. | LEAST((maxValue - value) / (maxValue - minValue), 1) | |
| Time-Based | EXP(-(EXTRACT(EPOCH FROM (reference - value)) / delay)) |
The final score is composed of the following six metrics.
| Metric | Type | Coeff. (K) | Normalization Details & Formulas |
|---|---|---|---|
| Price for Mb | Reciprocal Quant. | 0.20 | value = mb_price. maxValue and minValue are dynamic. A lower price gives a higher score. |
| Blobs | Logarithmic | 0.20 | value = blobs_count. maxValue is dynamic. Uses base-10 logarithm. |
| Last Activity | Time-Based | 0.20 | value = last_message_time. referenceValue = now(). delay = 43,200 (12 hours). |
| TVL | Custom (Growth & Stability) | 0.30 | The score is pre-calculated based on a 7-day TVL analysis. See Section 5 for details. |
| Last Commit | Time-Based | 0.05 | value = last_pushed_at. referenceValue = MAX(last_pushed_at) across all rollups. delay = 2,419,200 (4 weeks). |
| Commits | Quantitative | 0.05 | value = commits_weekly. maxValue is dynamic. |
Note:
Last CommitReference TheLast Commitmetric uses a relative time reference (MAX(last_pushed_at)) instead ofnow(). This was an intentional choice to measure development activity relative to the most "fresh" project in the ecosystem, preventing universal score decay during periods of low global activity (e.g., holidays).
The TVL score (tvl_rank) constitutes 30% of the total rank. Its objective is to reward stable, sustained TVL growth.
For each eligible rollup, a raw_score is computed to balance total growth against day-to-day volatility.
diffs):diff[i] = TVL[day i] - TVL[day i-1]diffs array is calculated to quantify the volatility of the TVL changes.volatility = standard_deviation(diffs)change = TVL[last day] - TVL[first day]Note: TVL Score Behavior This formula is designed to reward high growth while actively penalizing instability. A rollup with massive but erratic TVL swings will have a high
volatility, significantly reducing its score. A rollup with lower but smooth, consistent growth may achieve a higher score. This prioritizes the quality and sustainability of growth over short-term hype.
The raw scores are normalized to the final 0, 100 range.
min_score and max_score from the set of all calculated raw_scores.max_score == min_score, all rollups receive a score of 100.The final rank is computed by summing the weighted scores of all metrics. Null or failed metric calculations are treated as 0.