feat: list CL8Y DEX (dex.cl8y.com) on DeFiLlama (TVL + volume + fees) #631

Closed
opened 2026-08-25 01:55:33 +00:00 by PlasticDigits · 42 comments
PlasticDigits commented 2026-08-25 01:55:33 +00:00 (Migrated from gitlab.com)

Summary

List CL8Y DEX (https://dex.cl8y.com) on DeFiLlama as a Terra Classic DEX: TVL, spot volume, and fees/revenue. Bundle the three Llama dashboards plus the indexer/docs work they require. This is not a CoinGecko/CMC listing ticket — those already have /cg/* and /cmc/*.

Public pins (columbus-5)

Item Value
dApp https://dex.cl8y.com
Indexer https://indexer.dex.cl8y.com
Factory terra1ejpgvv7g3hj0u6fpcnxhflqp84g0w3cnaskqkg5733ygwlmf963sfchsea
Llama chain key terra (Terra Classic; same as Terraport / GarudaDeFi adapters)
Category Dexs

Current codebase

CL8Y already publishes self-hosted exchange listing APIs and an internal protocol dashboard. None of that is a DeFiLlama adapter.

What exists

Surface Role Why it is not enough for Llama
GET /cg/pairs, /cg/tickers, /cg/orderbook, /cg/historical_trades CoinGecko exchange crawler shape (docs/CG_CMC_COMPLIANCE.md, indexer/src/api/cg.rs) Llama does not poll Kujira-style /cg/*. Tickers are a trailing 24h snapshot, not UTC calendar-day dailyVolume.
GET /cmc/* CoinMarketCap exchange shape (indexer/src/api/cmc.rs) Same: CMC crawler, not Llama.
GET /api/v1/overview Protocol hub: total_liquidity_usd, trailing 24h/7d/30d volume + treasury fees (overview.rs, #550 / #569 / #586) Trailing windows + CL8Y catalog/hub USD. Llama wants on-chain raw balances for TVL and UTC-day dimensions for volume/fees.
GET /api/v1/protocol/fees?window= O(1) fee mix by source/token (protocol_fees.rs) Trailing 24h|7d|30d only. No ?timestamp= calendar bucket.
Protocol TVL rollup protocol_tvl.rs sums factory pair_reserves with P522-Q catalog + hub marks; omits book escrow, stale/same-asset/unpriced pairs (#569) Llama SDK must api.add(denom|cw20, raw_amount) and price on their side. Our USD number is a QA cross-check, not the adapter output.
Hybrid volume rules Headline volume = one swap_events row per taker swap; do not add limit_order_fills (docs/integrators-hybrid-volume.md, #216 / #189) Llama volume adapter must keep this invariant.
Factory / pair LCD TerraSwap-compatible Pairs { start_after, limit } and Pool {} (dex-common factory + pair); pagination is required (#258) This is the TVL adapter data path (Terraport pattern).
Retail gem hide Production dApp hides EMBER…PEARL (#562) On-chain gems still exist. Llama will see them unless adapters exclude the hardcoded columbus-5 gem set.

Known trap: CG liquidity_in_usd is not TVL

GET /cg/tickers field liquidity_in_usd is mislabeled 24h volume_usd (see comment in cg.rs). Protocol pool TVL is GET /api/v1/overview total_liquidity_usd. A Llama adapter that copies liquidity_in_usd will publish volume as TVL. Forbidden.

What does not exist

  • No DefiLlama-Adapters project under projects/cl8y-dex (or similar).
  • No dimension-adapters files under dexs/ or fees/.
  • No UTC-day indexer rollup / GET /api/v1/defillama/* surface.
  • No docs/ listing playbook for Llama (CG/CMC only).
  • No Llama icons/metadata PR.

Why this is needed

DeFiLlama is the default public TVL/volume/fees ledger for DEXes. Terra Classic already lists Terraport, GarudaDeFi, Loop, etc. Without adapters:

  1. dex.cl8y.com is invisible on defillama.com/chain/terra-classic and the Dexs dashboard.
  2. Third parties (research, wallets, funds) cannot compare CL8Y TVL/volume to peers with a shared methodology.
  3. Our /protocol page is first-party; Llama is the independent citation. Listing also forces us to publish a methodology that matches on-chain state (factory pools), not only indexer USD.

CG/CMC endpoints do not substitute: Llama maintainers merge open-source adapters in their repos, not a hosted /cg/tickers URL.


Constraints and guardrails

Llama process (upstream, not this repo)

  1. TVL — PR to DefiLlama-Adapters. Guide: How to write an SDK adapter. Test: node test.js projects/<slug>/index.js.
  2. DEX volume — PR to dimension-adapters dexs/<slug>. Required dimension: dailyVolume. Guide: other dashboards. Test: pnpm test dexs <slug>.
  3. Fees — same repo, fees/<slug>. Required: dailyFees, dailyRevenue; include dailySupplySideRevenue (even if 0) and breakdownMethodology. Do not export deprecated total* cumulatives.
  4. Metadata — website https://dex.cl8y.com, chain terra, category Dexs, logo via DefiLlama icons repo. Slug recommendation: cl8y-dex (avoid colliding with a future CL8Y token-only listing).
  5. Llama review + up to ~24h after merge before the UI shows data.

TVL (on-chain only)

  • Do follow Terraport: paginate factory pairs, queryContractWithRetries each pair { pool: {} }, api.add native denom / CW20 contract_addr with raw amounts (Terraport adapter).
  • Do set timetravel: false (live factory list cannot historical-query).
  • Do fail the run if pool-query error rate is high (Terraport: errors.length > poolContracts.length / 2).
  • Do paginate with start_after = last.asset_infos and a bounded limit (factory default page is small; #258).
  • Do not feed Llama our indexer USD (total_liquidity_usd, hub marks, CG liquidity_in_usd).
  • Do not count limit-book escrow, parked dust, treasury balances, UST1-window inventory, or Venus vFDUSD as DEX TVL.
  • Do not add LP share tokens (liquidity_token) — that double-counts pool assets.
  • Optional (same adapter, labeled if Llama allows): wrap-mapper native uluna/uusd balances as locked wrap collateral. If included, methodology must say so; default omit unless Llama asks (DEX category is usually pools-only).
  • Gems: factory still has soft-launch gem pairs. Default include in on-chain TVL (real locked balances) but they should be economically tiny. If a gem pool is wash-inflated, exclude via the same columbus-5 address set as #562 COLUMBUS5_GEM_ADDRESSES.
  • Pricing gap: Llama will price uluna / uusd. UST1, USTR, cLUNC, cUSTC, CL8Y, community-tax CW20s may be unpriced until CoinGecko/Llama have those contracts. Use misrepresentedTokens only with an explicit substitution table (e.g. cUSTC → USTC 1:1). Do not invent hub pegs inside the adapter. Related: token recognition #629.
  • Expected numeric drift vs /overview.total_liquidity_usd is OK (different pricers + one-sided 2× catalog vs Llama omit-unpriced). Document it; do not “fix” Llama TVL by posting our USD.

Volume

  • UTC calendar day (options.startOfDay … +86400), not trailing 24h.
  • Headline = SUM(swap_events.volume_usd) (or offer-side USD) once per swap row. Never add limit_order_fills (#216 L10).
  • Exclude: wrap/unwrap, UST1 window mint/redeem, pair-creation, limit place (not volume), community-tax extra-debit as a separate add (the pair already recorded the swap).
  • Exclude columbus-5 gem pairs from the official Llama volume number (wash / noneconomic). Same address set as production retail hide.
  • Do not serve GET /overview.total_volume_24h_usd as dailyVolume (window mismatch + includes gems unless filtered).

Fees / revenue

CL8Y pair commission goes to pair FEE_CONFIG.treasury (CMM), not to LPs. spread_amount is not a fee (protocol_fees.rs PFee / L7).

Llama dimension CL8Y mapping
dailyFees Treasury-bound: swap_amm + book_take + limit_place (+ optional wrap/unwrap/ust1_* as labeled breakdowns)
dailySupplySideRevenue 0 for billed commission (LPs earn via inventory / spread, not a transferred fee). Do not reclassify spread_amount as SSR.
dailyRevenue / dailyProtocolRevenue Same as dailyFees for the DEX fee set (protocol keeps treasury commission)
dailyHoldersRevenue Omit unless a live CL8Y-holder distribution exists

breakdownMethodology labels must match every .add() label. Community-tax extra-debit is token tax, not protocol DEX fee.

Indexer / Coolify

  • New public read APIs must be GET, cached, no swap_events full-table scan on the request path (same class as #281 / #333 / #577 overview rollups).
  • CORS stays https://dex.cl8y.com; Llama adapters are server-side (CORS irrelevant).
  • Do not bind-mount indexer/ into root Docker to compile.
  • Production RUN_MODE=prod, HTTPS only.

Out of scope

  • CoinGecko / CMC / GeckoTerminal submission (already documented).
  • Changing on-chain fee split or factory queries.
  • Burning or factory-deleting gem pairs.
  • LlamaSwap routing integration.
  • Yields / perps / options adapters (we have none).

Relevant files

This repo (implement / document)

Upstream (PRs live there; keep copies or notes under docs/ + scripts/ in this repo)

  • DefiLlama-Adapters/projects/cl8y-dex/index.js (new)
  • dimension-adapters/dexs/cl8y-dex/index.ts (new)
  • dimension-adapters/fees/cl8y-dex/index.ts (new)
  • Reference: Terraport TVL adapter; GarudaDeFi dexs/garuda-defi (Terra Classic volume via their API)

1) TVL adapter (Llama-owned, on-chain)

New projects/cl8y-dex/index.js:

  • Pin factory address.
  • getAllPairs() loop: { pairs: { limit: 30, start_after } } on chain: 'terra' until a short page.
  • Concurrent pool queries (concurrency ~10) with retries.
  • api.add each asset; skip zero amounts.
  • Export methodology, timetravel: false, terra: { tvl }.
  • Comment the gem policy and wrap-mapper omit/include decision.

No indexer dependency for TVL.

2) Indexer UTC-day rollup + public read API

Add a calendar-day rollup (refresh on the existing volume/fee loop, not on GET):

  • Table(s) keyed by date_utc (or unix start_of_day): volume_usd, trade_count, fee USD by FeeSource, priced vs unpriced flags.
  • Exclude gem pair IDs (hardcoded columbus-5 set, mirrored from COLUMBUS5_GEM_ADDRESSES).
  • Volume from swap_events only (hybrid-safe).
  • Fees from protocol_fee_events / existing ingest (PFee / L7). Fail closed: activity + unpriced → JSON null for that dimension (same contract as overview USD), never silent "0" when trades exist.

Public endpoints (names bikeshedable, keep under /api/v1/):

  • GET /api/v1/defillama/daily?timestamp=<unix_start_of_utc_day>
  • Response: { date, volume_usd, fees: { swap_amm, book_take, limit_place, wrap, unwrap, ust1_mint, ust1_redeem }, methodology }
  • 400 on non-day-aligned timestamp / future day; 404 if day not rolled yet; 200 with zeros only when the day is closed and idle.
  • Cache whole response ≥60s. Cap query range (no unbounded history dump on one GET).
  • OpenAPI/utoipa + indexer invariant row.

Dimension adapters fetch(options) HTTP GET this URL (GarudaDeFi-style), with start = first economic mainnet day (soft-launch / first non-gem swap — record the unix date in the adapter).

3) Volume + fees adapters (Llama-owned)

  • dexs/cl8y-dex: dailyVolume from volume_usd; methodology.Volume; chains: [CHAIN.TERRA].
  • fees/cl8y-dex: map sources → dailyFees / dailyRevenue / dailyProtocolRevenue; SSR 0 for commission; labeled wrap/window if included; breakdownMethodology.
  • Prefer DEX-only fees on the Dexs-adjacent fees page (swap_amm + book_take + limit_place). Put wrap/window in the same adapter as extra labels or omit until a “CL8Y Wrap” listing. Default: include as labeled breakdowns so /protocol treasury mix is not silently dropped.

4) Docs + listing pack

  • New docs/DEFILLAMA.md (or section in docs/integrators.md): methodology, endpoints, factory pin, gem exclude, hybrid volume, fee mapping, expected TVL drift vs /overview.
  • Link from docs/CG_CMC_COMPLIANCE.md (“not Llama”) and docs/README.md.
  • Agent playbook skills/AGENTS_DEFILLAMA.md + make verify-issue-NNN for indexer tests.
  • Listing pack: logo (square PNG), website, Twitter/Discord, factory address, adapter PR links.

5) Submit and operate

  • Open the three upstream PRs (TVL / dexs / fees). Icon PR if required.
  • After merge: confirm https://defillama.com/protocol/cl8y-dex (or assigned slug) shows Terra Classic TVL + volume + fees.
  • Operator: keep factory pin and gem list in adapters in sync with this repo.

Acceptance criteria

  1. TVL adapter merged (or review-ready PR) lists CL8Y under Terra Classic Dexs; node test.js returns a sane USD breakdown of pool tokens, not a single precomputed USD blob.
  2. Adapter TVL is reconstructed from factory Pairs + pair Pool only (plus documented optional wrap natives). No CG/CMC/overview USD.
  3. Volume adapter publishes dailyVolume for UTC days; numbers match GET /api/v1/defillama/daily and exclude gems, wrap, window, and fill double-counts.
  4. Fees adapter publishes dailyFees and dailyRevenue with breakdownMethodology; SSR is 0 (or documented non-zero only if a real LP transfer exists); spread_amount and community tax are not fees.
  5. Indexer daily endpoint is O(1)/rollup, capped, cached; invalid timestamp → 400; missing day → 404; idle closed day → "0"; unpriced-but-active → null for USD fields.
  6. Docs describe methodology, factory pin, gem policy, hybrid volume, and TVL drift vs #569.
  7. https://dex.cl8y.com is the website on the Llama protocol page after merge.
  8. make verify-issue-<iid> (or documented cargo/vitest set) is green for the indexer surface.

Test plan (all paths)

Indexer (Postgres)

  • Seed economic swaps + gem swaps + hybrid swap + limit fills + wrap fee + ust1 window fee on two UTC days.
  • Refresh daily rollup.
  • GET /api/v1/defillama/daily?timestamp=day0 volume = economic swap_events.volume_usd only (gem excluded; fills not added; wrap/window not in volume).
  • Fees for that day match ingested treasury events by source; hybrid book taker counted once (limit_order_fills.commission_amount, not also swap-level book_commission_amount).
  • Day with trades but volume_usd all null → volume field null, not "0".
  • Idle day after refresh → "0" volume and fees.
  • Unaligned timestamp / window=1;drop table / negative / far-future → 400.
  • Unknown day → 404.
  • Repeat GET within TTL does not rescan swap_events (cache or rollup-only EXPLAIN, same spirit as indexer_overview_global_stats).
  • Pagination/limit on any list helper is clamped.

TVL adapter (fork + node test.js)

  • Against columbus-5 LCD: pair count ≈ factory GetPairCount; each added balance is a pool reserve.
  • Kill LCD mid-run → retries; majority failure → throw (no silent $0).
  • LocalTerra factory with 2 pairs: adapter sum of raw legs matches Pool {} (unit-style fixture if we vendor a tiny query helper in-repo for CI).

Volume / fees adapters (pnpm test dexs cl8y-dex, pnpm test fees cl8y-dex)

  • Today and start day both return dimensions.
  • Methodology keys use display names (Volume, Fees, Revenue, …).
  • Labels ⊆ breakdownMethodology.

Cross-checks (columbus-5)

  • Adapter TVL vs /api/v1/overview.total_liquidity_usd: same order of magnitude; document % gap (pricing).
  • Adapter daily volume vs /overview.total_volume_24h_usd: must not be required to match (calendar vs trailing + gem filter).
  • Spot-check 3 economic pairs: reserve legs on LCD = adapter adds.

Docs / listing pack

  • Factory address in docs = on-chain factory.
  • Gem address list = COLUMBUS5_GEM_ADDRESSES.
  • Links to the three upstream PRs.

Test plan (attack, hack, abuse)

ID Vector Expectation
A1 Publish CG liquidity_in_usd (or ticker volume) as Llama TVL Rejected in review + adapter tests; docs forbid it.
A2 Double-count hybrid: swap_events + limit_order_fills in dailyVolume Rollup test fails; volume stays at parent swap only.
A3 Wash trades on gem pairs to inflate Llama volume Gem pair IDs excluded from daily volume/fees.
A4 Wash trades on a tiny economic pool Llama’s own TVL% volume filters apply; we do not loosen gem hide. Optional: document min TVL share if Llama requests.
A5 Count wrap/unwrap or UST1 mint/redeem as DEX volume Volume query excludes those sources.
A6 Count spread_amount, burn tax, gas, hook fees, community-tax extra-debit as dailyFees Fee ingest stays PFee/L7; adapter only reads rollup sources.
A7 Count limit-book escrow / treasury / window inventory as TVL Adapter only Pool {} (and documented wrap natives).
A8 Add LP CW20 liquidity_token balances Forbidden (double count).
A9 Symbol spoof (symbol=UST1 on a gem contract) TVL keys by contract/denom, not symbol. Volume exclude is by address.
A10 Compromised / lying indexer inflates dailyVolume TVL remains on-chain. Docs state volume/fees trust the indexer; rate-limit + rollup-only GET. No write methods on /defillama/*.
A11 Query injection / path traversal on timestamp Parsed as i64 unix; must be 00:00 UTC; else 400. No raw SQL interpolation.
A12 Unbounded history scrape (from=0&to=now) Single-day param only; no range dump.
A13 Incomplete factory page treated as full TVL Pagination until short page; GetPairCount cross-check recommended; high pool-error rate fails the adapter.
A14 misrepresentedTokens peg (UST1=$1, USTR=2.5×USTC) to juice TVL Forbidden unless Llama + methodology name the substitution. Default: omit unpriced.
A15 vFDUSD / CEX FDUSD oracle path leaking into TVL Same as #569 A7: Venus/CEX ticker is not a pool asset.
A16 Same-asset or zero-reserve pairs Skip zero amounts; empty pools add nothing.
A17 Flood CreatePair dust pools 100 LUNC creation fee remains the spam cost; adapter still paginates; concurrency bounded.
A18 SSRF via adapter fetching operator-controlled URL Dimension adapter pins https://indexer.dex.cl8y.com (or documented host). No user-supplied URL.
A19 CORS / browser spoof of daily API CORS allowlist unchanged; Llama is server-side. GET remains public read (same as /overview).
A20 Fee-on-transfer / migrated CW20 desync vs Pool {} On-chain pin F6 is orthogonal; adapter reports pool query, not CW20 balanceOf of the pair (unless Llama later requires it). Do not add FoT delta math.

Verification criteria

Issue is done when all of the following are true:

  1. Upstream PRs exist (linked on this issue) for TVL + dexs + fees; local test.js / pnpm test logs attached.
  2. make verify-issue-<iid> (indexer daily API + gem/hybrid/fee exclusions) passes on host Postgres (make setup-indexer-postgres).
  3. Live https://indexer.dex.cl8y.com/api/v1/defillama/daily?timestamp=<yesterday_utc> returns 200 and reconciles with a SQL check on prod-shaped data (or a redacted operator note).
  4. Live factory GetPairCount and a sample of Pool {} match the TVL adapter’s pair set / raw adds.
  5. After Llama merge (or maintainer preview): protocol page shows Terra Classic, website dex.cl8y.com, non-zero or honestly-zero TVL, and volume/fees dimensions without using CG liquidity_in_usd.
  6. Docs + skill merged on this repo; docs/README.md links the playbook.

Close is blocked if volume includes gems or fills, if TVL is sourced from the indexer USD fields, or if fees include spread_amount / token tax.


  • #216 hybrid volume
  • #189 consolidated listing fields
  • #569 protocol TVL
  • #586 / #613 / #614 treasury fee ingest
  • #562 production gem hide
  • #548 / #550 overview USD
  • #629 ecosystem token recognition (pricing coverage)
  • #224 CG/CMC re-verify (do not conflate)

Addendum — UST1 / USTR follow-up (feat/631-ust1-ustr-llama)

Implemented on feat/631-ust1-ustr-llama. Does not close this issue.

Surface Decision
UST1 unstablecoin Llama Stablecoins via peggedassets-server ust1. peggedUSD, mechanism crypto-backed (ust1-window vs vFDUSD). Circulating = CW20 token_info.total_supply / 1e6. Price is hub / Llama — never $1. Product name unstablecoin.
USTR Same daily GET as assets.ustr: DEX volume, pair fees, hub price. Not a second stablecoin. Not 2.5× USTC.
Optional later cl8y-ust1 issuer TVL vFDUSD locked in ust1-window. Category Stablecoin Issuer. Separate from DEX TVL. May be $0 until Llama prices vFDUSD (#629).
Wrap-mapper as Stablecoin Wrapper Skip — would double-count vs DEX TVL.
Yields / emissions / oracles-TVS / bridges Skip

GET /api/v1/defillama/daily now includes assets.ust1 and assets.ustr (O(1) from defillama_daily_assets). Invariants L631-10 (UST1 unstablecoin / no $1) and L631-11 (USTR reserve, not a stablecoin).

In-repo adapter copy: scripts/defillama/stablecoins/. Existing upstream: DefiLlama-Adapters#20676 (TVL), dimension-adapters#8987 (volume+fees, still draft until Coolify daily GET is live).

## Summary List **CL8Y DEX** (`https://dex.cl8y.com`) on [DeFiLlama](https://defillama.com) as a Terra Classic DEX: **TVL**, **spot volume**, and **fees/revenue**. Bundle the three Llama dashboards plus the indexer/docs work they require. This is **not** a CoinGecko/CMC listing ticket — those already have `/cg/*` and `/cmc/*`. **Public pins (columbus-5)** | Item | Value | |------|--------| | dApp | `https://dex.cl8y.com` | | Indexer | `https://indexer.dex.cl8y.com` | | Factory | `terra1ejpgvv7g3hj0u6fpcnxhflqp84g0w3cnaskqkg5733ygwlmf963sfchsea` | | Llama chain key | `terra` (Terra Classic; same as Terraport / GarudaDeFi adapters) | | Category | Dexs | --- ## Current codebase CL8Y already publishes **self-hosted exchange listing** APIs and an internal protocol dashboard. None of that is a DeFiLlama adapter. ### What exists | Surface | Role | Why it is not enough for Llama | |---------|------|--------------------------------| | `GET /cg/pairs`, `/cg/tickers`, `/cg/orderbook`, `/cg/historical_trades` | CoinGecko **exchange crawler** shape ([`docs/CG_CMC_COMPLIANCE.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docs/CG_CMC_COMPLIANCE.md), [`indexer/src/api/cg.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/cg.rs)) | Llama does not poll Kujira-style `/cg/*`. Tickers are a **trailing 24h** snapshot, not UTC calendar-day `dailyVolume`. | | `GET /cmc/*` | CoinMarketCap exchange shape ([`indexer/src/api/cmc.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/cmc.rs)) | Same: CMC crawler, not Llama. | | `GET /api/v1/overview` | Protocol hub: `total_liquidity_usd`, trailing 24h/7d/30d volume + treasury fees ([`overview.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/overview.rs), [#550](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/550) / [#569](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/569) / [#586](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/586)) | Trailing windows + CL8Y catalog/hub USD. Llama wants **on-chain raw balances** for TVL and **UTC-day** dimensions for volume/fees. | | `GET /api/v1/protocol/fees?window=` | O(1) fee mix by source/token ([`protocol_fees.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/protocol_fees.rs)) | Trailing `24h\|7d\|30d` only. No `?timestamp=` calendar bucket. | | Protocol TVL rollup | `protocol_tvl.rs` sums factory `pair_reserves` with P522-Q catalog + hub marks; omits book escrow, stale/same-asset/unpriced pairs ([#569](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/569)) | Llama SDK must `api.add(denom\|cw20, raw_amount)` and **price on their side**. Our USD number is a QA cross-check, not the adapter output. | | Hybrid volume rules | Headline volume = one `swap_events` row per taker swap; do **not** add `limit_order_fills` ([`docs/integrators-hybrid-volume.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docs/integrators-hybrid-volume.md), [#216](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/216) / [#189](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/189)) | Llama volume adapter must keep this invariant. | | Factory / pair LCD | TerraSwap-compatible `Pairs { start_after, limit }` and `Pool {}` ([`dex-common` factory + pair](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/smartcontracts/packages/dex-common/src/factory.rs)); pagination is required ([#258](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/258)) | This **is** the TVL adapter data path (Terraport pattern). | | Retail gem hide | Production dApp hides EMBER…PEARL ([#562](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/562)) | On-chain gems still exist. Llama will see them unless adapters exclude the hardcoded columbus-5 gem set. | ### Known trap: CG `liquidity_in_usd` is not TVL `GET /cg/tickers` field `liquidity_in_usd` is **mislabeled 24h `volume_usd`** (see comment in [`cg.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/cg.rs)). Protocol pool TVL is `GET /api/v1/overview` `total_liquidity_usd`. A Llama adapter that copies `liquidity_in_usd` will publish **volume as TVL**. Forbidden. ### What does not exist - No `DefiLlama-Adapters` project under `projects/cl8y-dex` (or similar). - No `dimension-adapters` files under `dexs/` or `fees/`. - No UTC-day indexer rollup / `GET /api/v1/defillama/*` surface. - No `docs/` listing playbook for Llama (CG/CMC only). - No Llama icons/metadata PR. --- ## Why this is needed DeFiLlama is the default public TVL/volume/fees ledger for DEXes. Terra Classic already lists Terraport, GarudaDeFi, Loop, etc. Without adapters: 1. `dex.cl8y.com` is invisible on [defillama.com/chain/terra-classic](https://defillama.com/chain/terra-classic) and the Dexs dashboard. 2. Third parties (research, wallets, funds) cannot compare CL8Y TVL/volume to peers with a shared methodology. 3. Our `/protocol` page is first-party; Llama is the **independent** citation. Listing also forces us to publish a methodology that matches on-chain state (factory pools), not only indexer USD. CG/CMC endpoints do not substitute: Llama maintainers merge **open-source adapters** in their repos, not a hosted `/cg/tickers` URL. --- ## Constraints and guardrails ### Llama process (upstream, not this repo) 1. **TVL** — PR to [DefiLlama-Adapters](https://github.com/DefiLlama/DefiLlama-Adapters). Guide: [How to write an SDK adapter](https://docs.llama.fi/list-your-project/how-to-write-an-sdk-adapter.md). Test: `node test.js projects/<slug>/index.js`. 2. **DEX volume** — PR to [dimension-adapters](https://github.com/DefiLlama/dimension-adapters) `dexs/<slug>`. Required dimension: `dailyVolume`. Guide: [other dashboards](https://docs.llama.fi/list-your-project/other-dashboards.md). Test: `pnpm test dexs <slug>`. 3. **Fees** — same repo, `fees/<slug>`. Required: `dailyFees`, `dailyRevenue`; include `dailySupplySideRevenue` (even if `0`) and `breakdownMethodology`. Do **not** export deprecated `total*` cumulatives. 4. **Metadata** — website `https://dex.cl8y.com`, chain `terra`, category Dexs, logo via DefiLlama icons repo. Slug recommendation: `cl8y-dex` (avoid colliding with a future CL8Y token-only listing). 5. Llama review + up to ~24h after merge before the UI shows data. ### TVL (on-chain only) - **Do** follow Terraport: paginate factory `pairs`, `queryContractWithRetries` each pair `{ pool: {} }`, `api.add` native `denom` / CW20 `contract_addr` with **raw** amounts ([Terraport adapter](https://github.com/DefiLlama/DefiLlama-Adapters/blob/main/projects/terraport/index.js)). - **Do** set `timetravel: false` (live factory list cannot historical-query). - **Do** fail the run if pool-query error rate is high (Terraport: `errors.length > poolContracts.length / 2`). - **Do** paginate with `start_after = last.asset_infos` and a bounded `limit` (factory default page is small; [#258](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/258)). - **Do not** feed Llama our indexer USD (`total_liquidity_usd`, hub marks, CG `liquidity_in_usd`). - **Do not** count limit-book escrow, parked dust, treasury balances, UST1-window inventory, or Venus vFDUSD as DEX TVL. - **Do not** add LP share tokens (`liquidity_token`) — that double-counts pool assets. - **Optional (same adapter, labeled if Llama allows):** wrap-mapper **native** `uluna`/`uusd` balances as locked wrap collateral. If included, methodology must say so; default **omit** unless Llama asks (DEX category is usually pools-only). - **Gems:** factory still has soft-launch gem pairs. Default **include in on-chain TVL** (real locked balances) but they should be economically tiny. If a gem pool is wash-inflated, exclude via the same columbus-5 address set as [#562](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/562) `COLUMBUS5_GEM_ADDRESSES`. - **Pricing gap:** Llama will price `uluna` / `uusd`. UST1, USTR, cLUNC, cUSTC, CL8Y, community-tax CW20s may be unpriced until CoinGecko/Llama have those contracts. Use `misrepresentedTokens` only with an explicit substitution table (e.g. cUSTC → USTC 1:1). Do **not** invent hub pegs inside the adapter. Related: token recognition [#629](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/629). - Expected **numeric drift** vs `/overview.total_liquidity_usd` is OK (different pricers + one-sided 2× catalog vs Llama omit-unpriced). Document it; do not “fix” Llama TVL by posting our USD. ### Volume - **UTC calendar day** (`options.startOfDay` … `+86400`), not trailing 24h. - Headline = `SUM(swap_events.volume_usd)` (or offer-side USD) **once per swap row**. Never add `limit_order_fills` ([#216](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/216) **L10**). - **Exclude:** wrap/unwrap, UST1 window mint/redeem, pair-creation, limit **place** (not volume), community-tax extra-debit **as a separate add** (the pair already recorded the swap). - **Exclude columbus-5 gem pairs** from the official Llama volume number (wash / noneconomic). Same address set as production retail hide. - Do **not** serve `GET /overview.total_volume_24h_usd` as `dailyVolume` (window mismatch + includes gems unless filtered). ### Fees / revenue CL8Y pair commission goes to pair `FEE_CONFIG.treasury` (CMM), **not** to LPs. `spread_amount` is **not** a fee ([`protocol_fees.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/indexer/protocol_fees.rs) PFee / L7). | Llama dimension | CL8Y mapping | |-----------------|--------------| | `dailyFees` | Treasury-bound: `swap_amm` + `book_take` + `limit_place` (+ optional wrap/unwrap/ust1_* as labeled breakdowns) | | `dailySupplySideRevenue` | `0` for billed commission (LPs earn via inventory / spread, not a transferred fee). Do **not** reclassify `spread_amount` as SSR. | | `dailyRevenue` / `dailyProtocolRevenue` | Same as `dailyFees` for the DEX fee set (protocol keeps treasury commission) | | `dailyHoldersRevenue` | Omit unless a live CL8Y-holder distribution exists | `breakdownMethodology` labels must match every `.add()` label. Community-tax extra-debit is **token tax**, not protocol DEX fee. ### Indexer / Coolify - New public read APIs must be **GET**, cached, no `swap_events` full-table scan on the request path (same class as `#281` / `#333` / `#577` overview rollups). - CORS stays `https://dex.cl8y.com`; Llama adapters are server-side (CORS irrelevant). - Do not bind-mount `indexer/` into root Docker to compile. - Production `RUN_MODE=prod`, HTTPS only. ### Out of scope - CoinGecko / CMC / GeckoTerminal submission (already documented). - Changing on-chain fee split or factory queries. - Burning or factory-deleting gem pairs. - LlamaSwap routing integration. - Yields / perps / options adapters (we have none). --- ## Relevant files **This repo (implement / document)** - [`indexer/src/api/overview.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/overview.rs) — trailing overview (do not reuse as Llama daily) - [`indexer/src/api/cg.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/cg.rs) — do not treat `liquidity_in_usd` as TVL - [`indexer/src/api/protocol_fees.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/protocol_fees.rs) + [`indexer/src/indexer/protocol_fees.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/indexer/protocol_fees.rs) - [`indexer/src/indexer/protocol_tvl.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/indexer/protocol_tvl.rs) - [`indexer/src/indexer/volume_aggregator.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/indexer/volume_aggregator.rs) + [`indexer/src/db/queries/volume.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/db/queries/volume.rs) - [`indexer/src/api/mod.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/indexer/src/api/mod.rs) — route table - [`smartcontracts/packages/dex-common/src/factory.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/smartcontracts/packages/dex-common/src/factory.rs) — `Pairs` / `GetPairCount` - [`smartcontracts/packages/dex-common/src/pair.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/smartcontracts/packages/dex-common/src/pair.rs) — `Pool {}` - [`smartcontracts/packages/dex-common/src/types.rs`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/smartcontracts/packages/dex-common/src/types.rs) — `PairInfo.contract_addr` - [`frontend-dapp/src/utils/pairCatalogRank.ts`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/frontend-dapp/src/utils/pairCatalogRank.ts) — `COLUMBUS5_GEM_ADDRESSES` - [`docs/CG_CMC_COMPLIANCE.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docs/CG_CMC_COMPLIANCE.md), [`docs/integrators-hybrid-volume.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docs/integrators-hybrid-volume.md), [`docs/indexer-invariants.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docs/indexer-invariants.md) - [`docs/runbooks/rotate-fee-treasury.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docs/runbooks/rotate-fee-treasury.md) — factory + CMM pins - [`docker/README.md`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/blob/main/docker/README.md) — public indexer host **Upstream (PRs live there; keep copies or notes under `docs/` + `scripts/` in this repo)** - `DefiLlama-Adapters/projects/cl8y-dex/index.js` (new) - `dimension-adapters/dexs/cl8y-dex/index.ts` (new) - `dimension-adapters/fees/cl8y-dex/index.ts` (new) - Reference: Terraport TVL adapter; GarudaDeFi `dexs/garuda-defi` (Terra Classic volume via their API) --- ## Recommended direction ### 1) TVL adapter (Llama-owned, on-chain) New `projects/cl8y-dex/index.js`: - Pin factory address. - `getAllPairs()` loop: `{ pairs: { limit: 30, start_after } }` on `chain: 'terra'` until a short page. - Concurrent `pool` queries (concurrency ~10) with retries. - `api.add` each asset; skip zero amounts. - Export `methodology`, `timetravel: false`, `terra: { tvl }`. - Comment the gem policy and wrap-mapper omit/include decision. No indexer dependency for TVL. ### 2) Indexer UTC-day rollup + public read API Add a **calendar-day** rollup (refresh on the existing volume/fee loop, not on GET): - Table(s) keyed by `date_utc` (or unix `start_of_day`): `volume_usd`, `trade_count`, fee USD by `FeeSource`, `priced` vs `unpriced` flags. - Exclude gem pair IDs (hardcoded columbus-5 set, mirrored from `COLUMBUS5_GEM_ADDRESSES`). - Volume from `swap_events` only (hybrid-safe). - Fees from `protocol_fee_events` / existing ingest (PFee / L7). Fail closed: activity + unpriced → JSON `null` for that dimension (same contract as overview USD), never silent `"0"` when trades exist. Public endpoints (names bikeshedable, keep under `/api/v1/`): - `GET /api/v1/defillama/daily?timestamp=<unix_start_of_utc_day>` - Response: `{ date, volume_usd, fees: { swap_amm, book_take, limit_place, wrap, unwrap, ust1_mint, ust1_redeem }, methodology }` - `400` on non-day-aligned timestamp / future day; `404` if day not rolled yet; `200` with zeros only when the day is closed and idle. - Cache whole response ≥60s. Cap query range (no unbounded history dump on one GET). - OpenAPI/utoipa + indexer invariant row. Dimension adapters `fetch(options)` HTTP GET this URL (GarudaDeFi-style), with `start` = first economic mainnet day (soft-launch / first non-gem swap — record the unix date in the adapter). ### 3) Volume + fees adapters (Llama-owned) - `dexs/cl8y-dex`: `dailyVolume` from `volume_usd`; `methodology.Volume`; `chains: [CHAIN.TERRA]`. - `fees/cl8y-dex`: map sources → `dailyFees` / `dailyRevenue` / `dailyProtocolRevenue`; SSR `0` for commission; labeled wrap/window if included; `breakdownMethodology`. - Prefer **DEX-only** fees on the Dexs-adjacent fees page (`swap_amm` + `book_take` + `limit_place`). Put wrap/window in the same adapter as extra labels **or** omit until a “CL8Y Wrap” listing. Default: **include as labeled breakdowns** so `/protocol` treasury mix is not silently dropped. ### 4) Docs + listing pack - New `docs/DEFILLAMA.md` (or section in `docs/integrators.md`): methodology, endpoints, factory pin, gem exclude, hybrid volume, fee mapping, expected TVL drift vs `/overview`. - Link from `docs/CG_CMC_COMPLIANCE.md` (“not Llama”) and `docs/README.md`. - Agent playbook `skills/AGENTS_DEFILLAMA.md` + `make verify-issue-NNN` for indexer tests. - Listing pack: logo (square PNG), website, Twitter/Discord, factory address, adapter PR links. ### 5) Submit and operate - Open the three upstream PRs (TVL / dexs / fees). Icon PR if required. - After merge: confirm `https://defillama.com/protocol/cl8y-dex` (or assigned slug) shows Terra Classic TVL + volume + fees. - Operator: keep factory pin and gem list in adapters in sync with this repo. --- ## Acceptance criteria 1. **TVL adapter** merged (or review-ready PR) lists CL8Y under Terra Classic Dexs; `node test.js` returns a sane USD breakdown of **pool tokens**, not a single precomputed USD blob. 2. Adapter TVL is reconstructed from factory `Pairs` + pair `Pool` only (plus documented optional wrap natives). No CG/CMC/overview USD. 3. **Volume adapter** publishes `dailyVolume` for UTC days; numbers match `GET /api/v1/defillama/daily` and **exclude** gems, wrap, window, and fill double-counts. 4. **Fees adapter** publishes `dailyFees` and `dailyRevenue` with `breakdownMethodology`; SSR is `0` (or documented non-zero only if a real LP transfer exists); `spread_amount` and community tax are not fees. 5. Indexer daily endpoint is O(1)/rollup, capped, cached; invalid timestamp → `400`; missing day → `404`; idle closed day → `"0"`; unpriced-but-active → `null` for USD fields. 6. Docs describe methodology, factory pin, gem policy, hybrid volume, and TVL drift vs `#569`. 7. `https://dex.cl8y.com` is the website on the Llama protocol page after merge. 8. `make verify-issue-<iid>` (or documented cargo/vitest set) is green for the indexer surface. --- ## Test plan (all paths) ### Indexer (Postgres) - Seed economic swaps + gem swaps + hybrid swap + limit fills + wrap fee + ust1 window fee on two UTC days. - Refresh daily rollup. - `GET /api/v1/defillama/daily?timestamp=day0` volume = economic `swap_events.volume_usd` only (gem excluded; fills not added; wrap/window not in volume). - Fees for that day match ingested treasury events by source; hybrid book taker counted once (`limit_order_fills.commission_amount`, not also swap-level `book_commission_amount`). - Day with trades but `volume_usd` all null → volume field `null`, not `"0"`. - Idle day after refresh → `"0"` volume and fees. - Unaligned timestamp / `window=1;drop table` / negative / far-future → `400`. - Unknown day → `404`. - Repeat GET within TTL does not rescan `swap_events` (cache or rollup-only EXPLAIN, same spirit as `indexer_overview_global_stats`). - Pagination/limit on any list helper is clamped. ### TVL adapter (fork + `node test.js`) - Against columbus-5 LCD: pair count ≈ factory `GetPairCount`; each added balance is a pool reserve. - Kill LCD mid-run → retries; majority failure → throw (no silent `$0`). - LocalTerra factory with 2 pairs: adapter sum of raw legs matches `Pool {}` (unit-style fixture if we vendor a tiny query helper in-repo for CI). ### Volume / fees adapters (`pnpm test dexs cl8y-dex`, `pnpm test fees cl8y-dex`) - Today and `start` day both return dimensions. - Methodology keys use display names (`Volume`, `Fees`, `Revenue`, …). - Labels ⊆ `breakdownMethodology`. ### Cross-checks (columbus-5) - Adapter TVL vs `/api/v1/overview.total_liquidity_usd`: same **order of magnitude**; document % gap (pricing). - Adapter daily volume vs `/overview.total_volume_24h_usd`: **must not** be required to match (calendar vs trailing + gem filter). - Spot-check 3 economic pairs: reserve legs on LCD = adapter adds. ### Docs / listing pack - Factory address in docs = on-chain factory. - Gem address list = `COLUMBUS5_GEM_ADDRESSES`. - Links to the three upstream PRs. --- ## Test plan (attack, hack, abuse) | ID | Vector | Expectation | |----|--------|-------------| | A1 | Publish CG `liquidity_in_usd` (or ticker volume) as Llama TVL | Rejected in review + adapter tests; docs forbid it. | | A2 | Double-count hybrid: `swap_events` + `limit_order_fills` in `dailyVolume` | Rollup test fails; volume stays at parent swap only. | | A3 | Wash trades on gem pairs to inflate Llama volume | Gem pair IDs excluded from daily volume/fees. | | A4 | Wash trades on a tiny economic pool | Llama’s own TVL% volume filters apply; we do not loosen gem hide. Optional: document min TVL share if Llama requests. | | A5 | Count wrap/unwrap or UST1 mint/redeem as DEX volume | Volume query excludes those sources. | | A6 | Count `spread_amount`, burn tax, gas, hook fees, community-tax extra-debit as `dailyFees` | Fee ingest stays PFee/L7; adapter only reads rollup sources. | | A7 | Count limit-book escrow / treasury / window inventory as TVL | Adapter only `Pool {}` (and documented wrap natives). | | A8 | Add LP CW20 `liquidity_token` balances | Forbidden (double count). | | A9 | Symbol spoof (`symbol=UST1` on a gem contract) | TVL keys by **contract/denom**, not symbol. Volume exclude is by **address**. | | A10 | Compromised / lying indexer inflates `dailyVolume` | TVL remains on-chain. Docs state volume/fees trust the indexer; rate-limit + rollup-only GET. No write methods on `/defillama/*`. | | A11 | Query injection / path traversal on `timestamp` | Parsed as i64 unix; must be 00:00 UTC; else `400`. No raw SQL interpolation. | | A12 | Unbounded history scrape (`from=0&to=now`) | Single-day param only; no range dump. | | A13 | Incomplete factory page treated as full TVL | Pagination until short page; `GetPairCount` cross-check recommended; high pool-error rate fails the adapter. | | A14 | `misrepresentedTokens` peg (UST1=$1, USTR=2.5×USTC) to juice TVL | Forbidden unless Llama + methodology name the substitution. Default: omit unpriced. | | A15 | vFDUSD / CEX FDUSD oracle path leaking into TVL | Same as `#569` A7: Venus/CEX ticker is not a pool asset. | | A16 | Same-asset or zero-reserve pairs | Skip zero amounts; empty pools add nothing. | | A17 | Flood `CreatePair` dust pools | 100 LUNC creation fee remains the spam cost; adapter still paginates; concurrency bounded. | | A18 | SSRF via adapter fetching operator-controlled URL | Dimension adapter pins `https://indexer.dex.cl8y.com` (or documented host). No user-supplied URL. | | A19 | CORS / browser spoof of daily API | CORS allowlist unchanged; Llama is server-side. GET remains public read (same as `/overview`). | | A20 | Fee-on-transfer / migrated CW20 desync vs `Pool {}` | On-chain pin F6 is orthogonal; adapter reports **pool query**, not CW20 `balanceOf` of the pair (unless Llama later requires it). Do not add FoT delta math. | --- ## Verification criteria Issue is **done** when all of the following are true: 1. Upstream PRs exist (linked on this issue) for TVL + dexs + fees; local `test.js` / `pnpm test` logs attached. 2. `make verify-issue-<iid>` (indexer daily API + gem/hybrid/fee exclusions) passes on host Postgres (`make setup-indexer-postgres`). 3. Live `https://indexer.dex.cl8y.com/api/v1/defillama/daily?timestamp=<yesterday_utc>` returns 200 and reconciles with a SQL check on prod-shaped data (or a redacted operator note). 4. Live factory `GetPairCount` and a sample of `Pool {}` match the TVL adapter’s pair set / raw adds. 5. After Llama merge (or maintainer preview): protocol page shows Terra Classic, website `dex.cl8y.com`, non-zero or honestly-zero TVL, and volume/fees dimensions without using CG `liquidity_in_usd`. 6. Docs + skill merged on this repo; `docs/README.md` links the playbook. **Close is blocked** if volume includes gems or fills, if TVL is sourced from the indexer USD fields, or if fees include `spread_amount` / token tax. --- ## Related - [#216](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/216) hybrid volume - [#189](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/189) consolidated listing fields - [#569](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/569) protocol TVL - [#586](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/586) / [#613](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/613) / [#614](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/614) treasury fee ingest - [#562](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/562) production gem hide - [#548](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/548) / [#550](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/550) overview USD - [#629](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/629) ecosystem token recognition (pricing coverage) - [#224](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/224) CG/CMC re-verify (do not conflate) --- ## Addendum — UST1 / USTR follow-up (feat/631-ust1-ustr-llama) Implemented on `feat/631-ust1-ustr-llama`. Does not close this issue. | Surface | Decision | |---------|----------| | UST1 unstablecoin | Llama Stablecoins via peggedassets-server `ust1`. `peggedUSD`, mechanism crypto-backed (ust1-window vs vFDUSD). Circulating = CW20 token_info.total_supply / 1e6. Price is hub / Llama — never $1. Product name **unstablecoin**. | | USTR | Same daily GET as `assets.ustr`: DEX volume, pair fees, hub price. Not a second stablecoin. Not 2.5× USTC. | | Optional later `cl8y-ust1` issuer TVL | vFDUSD locked in ust1-window. Category Stablecoin Issuer. Separate from DEX TVL. May be $0 until Llama prices vFDUSD (#629). | | Wrap-mapper as Stablecoin Wrapper | Skip — would double-count vs DEX TVL. | | Yields / emissions / oracles-TVS / bridges | Skip | `GET /api/v1/defillama/daily` now includes `assets.ust1` and `assets.ustr` (O(1) from `defillama_daily_assets`). Invariants **L631-10** (UST1 unstablecoin / no $1) and **L631-11** (USTR reserve, not a stablecoin). In-repo adapter copy: `scripts/defillama/stablecoins/`. Existing upstream: DefiLlama-Adapters#20676 (TVL), dimension-adapters#8987 (volume+fees, still draft until Coolify daily GET is live).
PlasticDigits commented 2026-08-25 01:55:34 +00:00 (Migrated from gitlab.com)

marked as related to #216

marked as related to #216
PlasticDigits commented 2026-08-25 01:55:34 +00:00 (Migrated from gitlab.com)

marked as related to #189

marked as related to #189
PlasticDigits commented 2026-08-25 01:55:35 +00:00 (Migrated from gitlab.com)

marked as related to #569

marked as related to #569
PlasticDigits commented 2026-08-25 01:55:36 +00:00 (Migrated from gitlab.com)

marked as related to #586

marked as related to #586
PlasticDigits commented 2026-08-25 01:55:37 +00:00 (Migrated from gitlab.com)

marked as related to #562

marked as related to #562
PlasticDigits commented 2026-08-25 01:55:38 +00:00 (Migrated from gitlab.com)

marked as related to #548

marked as related to #548
PlasticDigits commented 2026-08-25 01:55:38 +00:00 (Migrated from gitlab.com)

marked as related to #550

marked as related to #550
PlasticDigits commented 2026-08-25 01:55:39 +00:00 (Migrated from gitlab.com)

marked as related to #629

marked as related to #629
PlasticDigits commented 2026-08-25 06:06:30 +00:00 (Migrated from gitlab.com)

mentioned in merge request !1143

mentioned in merge request !1143
PlasticDigits commented 2026-08-25 06:09:35 +00:00 (Migrated from gitlab.com)

In-repo surface for this listing is in !1143:

  • GET /api/v1/defillama/daily UTC-day rollup (gem/hybrid/fee exclusions)
  • Adapter copies under scripts/defillama/
  • Playbook docs/DEFILLAMA.md + skills/AGENTS_DEFILLAMA.md
  • make verify-issue-631 green (twice)

Still needed before close: upstream DefiLlama-Adapters + dimension-adapters PRs, Coolify live daily check, and Llama UI after merge.

In-repo surface for this listing is in !1143: - `GET /api/v1/defillama/daily` UTC-day rollup (gem/hybrid/fee exclusions) - Adapter copies under `scripts/defillama/` - Playbook `docs/DEFILLAMA.md` + `skills/AGENTS_DEFILLAMA.md` - `make verify-issue-631` green (twice) Still needed before close: upstream DefiLlama-Adapters + dimension-adapters PRs, Coolify live daily check, and Llama UI after merge.
PlasticDigits commented 2026-08-25 06:17:55 +00:00 (Migrated from gitlab.com)

Upstream adapters filed

Adapter PR Status
TVL projects/cl8y-dex https://github.com/DefiLlama/DefiLlama-Adapters/pull/20676 Open. Local test: terra $13.28k (priced LUNC + USTC wraps).
Volume dexs/cl8y-dex + fees fees/cl8y-dex https://github.com/DefiLlama/dimension-adapters/pull/8987 Draft. Live indexer daily route is still 404 until GitLab !1143 is on Coolify.

This-repo MR: https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/merge_requests/425

Still blocking close

  1. Merge !1143 and Coolify-deploy GET /api/v1/defillama/daily.
  2. Mark dimension-adapters#8987 ready after pnpm test dexs cl8y-dex and pnpm test fees cl8y-dex succeed against yesterday UTC.
  3. Llama merge + UI (https://defillama.com/protocol/cl8y-dex, Terra Classic, dex.cl8y.com).
  4. Icons/metadata only if Llama asks.

Notes

  • Factory pools are CW20-only. Adapter maps cLUNC → uluna and cUSTC → uusd (named 1:1 wrap). No UST1=$1 or USTR hub peg.
  • Indexer catalog TVL (~$51k) will stay higher than Llama until those CW20s are priced (#629).
  • Twitter / external audit links were left blank on the Llama PR templates (not published in-repo).
## Upstream adapters filed | Adapter | PR | Status | |---------|----|--------| | TVL `projects/cl8y-dex` | https://github.com/DefiLlama/DefiLlama-Adapters/pull/20676 | Open. Local test: terra **\$13.28k** (priced LUNC + USTC wraps). | | Volume `dexs/cl8y-dex` + fees `fees/cl8y-dex` | https://github.com/DefiLlama/dimension-adapters/pull/8987 | **Draft.** Live indexer daily route is still 404 until GitLab !1143 is on Coolify. | This-repo MR: https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/merge_requests/425 ### Still blocking close 1. Merge !1143 and Coolify-deploy `GET /api/v1/defillama/daily`. 2. Mark dimension-adapters#8987 ready after `pnpm test dexs cl8y-dex` and `pnpm test fees cl8y-dex` succeed against yesterday UTC. 3. Llama merge + UI (`https://defillama.com/protocol/cl8y-dex`, Terra Classic, `dex.cl8y.com`). 4. Icons/metadata only if Llama asks. ### Notes - Factory pools are CW20-only. Adapter maps **cLUNC → uluna** and **cUSTC → uusd** (named 1:1 wrap). No UST1=\$1 or USTR hub peg. - Indexer catalog TVL (~\$51k) will stay higher than Llama until those CW20s are priced (#629). - Twitter / external audit links were left blank on the Llama PR templates (not published in-repo).
PlasticDigits commented 2026-08-25 06:21:45 +00:00 (Migrated from gitlab.com)

Addendum: UST1 on Stablecoins + USTR dimensions

Expanding #631 beyond the DEX adapters:

  1. UST1 unstablecoin → DeFiLlama Stablecoins (peggedassets-server, peggedUSD, crypto-backed via vFDUSD window). Circulating = CW20 total_supply. Not a $1 peg.
  2. USTR → GET /api/v1/defillama/daily assets.ustr (volume, pair fees, hub price, circulating). Reserve token — not a second stablecoin.
  3. Optional later: cl8y-ust1 issuer TVL = vFDUSD in the window (separate from DEX TVL).

Skipped: wrap-mapper wrapper listing, yields, emissions, treating USTR as USD-pegged.

Indexer + vendored adapters ship on !1143. Pegged-asset GitHub PR follows the same Coolify gate as volume/fees.

## Addendum: UST1 on Stablecoins + USTR dimensions Expanding #631 beyond the DEX adapters: 1. **UST1 unstablecoin** → DeFiLlama **Stablecoins** (`peggedassets-server`, `peggedUSD`, crypto-backed via vFDUSD window). Circulating = CW20 `total_supply`. Not a `$1` peg. 2. **USTR** → `GET /api/v1/defillama/daily` `assets.ustr` (volume, pair fees, hub price, circulating). Reserve token — **not** a second stablecoin. 3. Optional later: `cl8y-ust1` issuer TVL = vFDUSD in the window (separate from DEX TVL). Skipped: wrap-mapper wrapper listing, yields, emissions, treating USTR as USD-pegged. Indexer + vendored adapters ship on !1143. Pegged-asset GitHub PR follows the same Coolify gate as volume/fees.
PlasticDigits commented 2026-08-25 06:25:17 +00:00 (Migrated from gitlab.com)

mentioned in commit 1ae62ca38f

mentioned in commit 1ae62ca38f7d1fafa07bc0cbb9c0e265d807017d
PlasticDigits commented 2026-08-25 06:29:21 +00:00 (Migrated from gitlab.com)

!1143 merged to main (1ae62ca3) without waiting for CI.

Merge problems (resolved):

  • GitLab source branch 631-feat-list-cl8y-dex-dex-cl8y-com-on-defillama-tvl-volume-fees- was reset to old main and had no DeFiLlama commits. Real work was on feat/631-defillama (9f06e241 + wrap 1:1 follow-up). That tip was pushed onto the MR source before merge.
  • sqlx version collision with !1142: both used 20260825140000_*. DeFiLlama migration renamed to 20260825150000_defillama_daily.sql. Local dex_indexer_test that already applied the old 20260825140000 defillama checksum needs a DB recreate (VersionMismatch).

Sanity: docs + gem lockstep + cargo test --lib defillama + indexer_defillama 5/5 + node adapter tests 9/9. L631-1–L631-9 covered by make verify-issue-631 except the script tail hiccup after integration (node tests re-run clean).

Not merged (incomplete leftover in local stash wip: incomplete #631 UST1/USTR daily assets + stablecoins adapter):

  • UST1/USTR defillama_daily_assets GET fields + scripts/defillama/stablecoins/. Integration test failed: USTR-pair fees (0.08) were also attributed to UST1 (0.53 vs expected 0.45). Do not land until attribution is pair-leg-correct.

Still operator (issue stays open):

  • Coolify indexer deploy; yesterday UTC GET https://indexer.dex.cl8y.com/api/v1/defillama/daily?timestamp=<00:00_utc>.
  • Upstream Llama PRs from scripts/defillama/ (skill already links DefiLlama-Adapters#20676 and dimension-adapters#8987).
  • After Llama merge: protocol page shows Terra Classic + dex.cl8y.com.
!1143 merged to `main` (`1ae62ca3`) without waiting for CI. **Merge problems (resolved):** - GitLab source branch `631-feat-list-cl8y-dex-dex-cl8y-com-on-defillama-tvl-volume-fees-` was reset to old `main` and had **no** DeFiLlama commits. Real work was on `feat/631-defillama` (`9f06e241` + wrap 1:1 follow-up). That tip was pushed onto the MR source before merge. - sqlx version collision with !1142: both used `20260825140000_*`. DeFiLlama migration renamed to `20260825150000_defillama_daily.sql`. Local `dex_indexer_test` that already applied the old `20260825140000` defillama checksum needs a DB recreate (`VersionMismatch`). **Sanity:** docs + gem lockstep + `cargo test --lib defillama` + `indexer_defillama` **5/5** + node adapter tests **9/9**. L631-1–L631-9 covered by `make verify-issue-631` except the script tail hiccup after integration (node tests re-run clean). **Not merged (incomplete leftover in local stash `wip: incomplete #631 UST1/USTR daily assets + stablecoins adapter`):** - UST1/USTR `defillama_daily_assets` GET fields + `scripts/defillama/stablecoins/`. Integration test failed: USTR-pair fees (`0.08`) were also attributed to UST1 (`0.53` vs expected `0.45`). Do not land until attribution is pair-leg-correct. **Still operator (issue stays open):** - Coolify indexer deploy; yesterday UTC `GET https://indexer.dex.cl8y.com/api/v1/defillama/daily?timestamp=<00:00_utc>`. - Upstream Llama PRs from `scripts/defillama/` (skill already links DefiLlama-Adapters#20676 and dimension-adapters#8987). - After Llama merge: protocol page shows Terra Classic + `dex.cl8y.com`.
PlasticDigits commented 2026-08-25 06:29:43 +00:00 (Migrated from gitlab.com)

mentioned in issue #638

mentioned in issue #638
PlasticDigits commented 2026-08-25 06:29:45 +00:00 (Migrated from gitlab.com)

marked as related to #638

marked as related to #638
PlasticDigits commented 2026-08-25 06:29:56 +00:00 (Migrated from gitlab.com)

Post-merge leftovers for the !1140/!1142/!1143/!1144/!1145 pass: #638.

Post-merge leftovers for the !1140/!1142/!1143/!1144/!1145 pass: #638.
PlasticDigits commented 2026-08-25 06:43:06 +00:00 (Migrated from gitlab.com)

UST1 / USTR follow-up (implemented on feat/631-ust1-ustr-llama)

Surfaces

Surface Decision
UST1 unstablecoin Llama Stablecoins via peggedassets-server ust1. peggedUSD, mechanism crypto-backed (ust1-window vs vFDUSD). Circulating = CW20 token_info.total_supply / 1e6. Price is hub / Llama — never $1. Product name unstablecoin.
USTR Same daily GET as assets.ustr: DEX volume, pair fees, hub price. Not a second stablecoin. Not 2.5× USTC.
Optional later cl8y-ust1 issuer TVL vFDUSD locked in ust1-window. Category Stablecoin Issuer. Separate from DEX TVL. May be $0 until Llama prices vFDUSD (#629).
Wrap-mapper as Stablecoin Wrapper Skip — would double-count vs DEX TVL.
Yields / emissions / oracles-TVS / bridges Skip

Indexer

GET /api/v1/defillama/daily now includes assets.ust1 and assets.ustr (O(1) from defillama_daily_assets). Volume is UTC-day SUM(swap_events.volume_usd) on pairs whose either leg is that CW20 (gems still excluded; L10 once per swap). A UST1/USTR swap counts in both token volumes; headline DEX volume still once. UST1 fees include pair-linked PFee/L7 plus ust1_mint / ust1_redeem.

Invariants L631-10 (UST1 unstablecoin / no $1) and L631-11 (USTR reserve, not a stablecoin).

make verify-issue-631 passes on this branch.

Adapters

In-repo copies: scripts/defillama/stablecoins/ (peggedassets ust1). DEX TVL / volume / fees adapters are unchanged (UST1 circulating is not DEX TVL).

Existing upstream: DefiLlama-Adapters#20676 (TVL), dimension-adapters#8987 (volume+fees, still draft until Coolify daily GET is live).

## UST1 / USTR follow-up (implemented on feat/631-ust1-ustr-llama) ### Surfaces | Surface | Decision | |---------|----------| | UST1 unstablecoin | Llama Stablecoins via peggedassets-server `ust1`. `peggedUSD`, mechanism crypto-backed (ust1-window vs vFDUSD). Circulating = CW20 token_info.total_supply / 1e6. Price is hub / Llama — never $1. Product name **unstablecoin**. | | USTR | Same daily GET as `assets.ustr`: DEX volume, pair fees, hub price. Not a second stablecoin. Not 2.5× USTC. | | Optional later `cl8y-ust1` issuer TVL | vFDUSD locked in ust1-window. Category Stablecoin Issuer. Separate from DEX TVL. May be $0 until Llama prices vFDUSD (#629). | | Wrap-mapper as Stablecoin Wrapper | Skip — would double-count vs DEX TVL. | | Yields / emissions / oracles-TVS / bridges | Skip | ### Indexer `GET /api/v1/defillama/daily` now includes `assets.ust1` and `assets.ustr` (O(1) from `defillama_daily_assets`). Volume is UTC-day SUM(swap_events.volume_usd) on pairs whose either leg is that CW20 (gems still excluded; L10 once per swap). A UST1/USTR swap counts in both token volumes; headline DEX volume still once. UST1 fees include pair-linked PFee/L7 plus `ust1_mint` / `ust1_redeem`. Invariants **L631-10** (UST1 unstablecoin / no $1) and **L631-11** (USTR reserve, not a stablecoin). `make verify-issue-631` passes on this branch. ### Adapters In-repo copies: `scripts/defillama/stablecoins/` (peggedassets `ust1`). DEX TVL / volume / fees adapters are unchanged (UST1 circulating is not DEX TVL). Existing upstream: DefiLlama-Adapters#20676 (TVL), dimension-adapters#8987 (volume+fees, still draft until Coolify daily GET is live).
PlasticDigits commented 2026-08-25 06:43:31 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
PlasticDigits commented 2026-08-25 06:46:25 +00:00 (Migrated from gitlab.com)

peggedassets-server draft PR for UST1 unstablecoin: https://github.com/DefiLlama/peggedassets-server/pull/903

Circulating = CW20 token_info.total_supply / 1e6. peggedUSD, crypto-backed, no $1 hardcode. dimension-adapters#8987 stays draft until Coolify daily GET is live.

peggedassets-server draft PR for UST1 unstablecoin: https://github.com/DefiLlama/peggedassets-server/pull/903 Circulating = CW20 `token_info.total_supply` / 1e6. `peggedUSD`, crypto-backed, no $1 hardcode. dimension-adapters#8987 stays draft until Coolify daily GET is live.
PlasticDigits commented 2026-08-25 06:52:55 +00:00 (Migrated from gitlab.com)

mentioned in merge request !1146

mentioned in merge request !1146
PlasticDigits commented 2026-08-25 06:53:20 +00:00 (Migrated from gitlab.com)

mentioned in merge request !1147

mentioned in merge request !1147
PlasticDigits commented 2026-08-25 06:54:25 +00:00 (Migrated from gitlab.com)

mentioned in issue #639

mentioned in issue #639
PlasticDigits commented 2026-08-25 06:54:25 +00:00 (Migrated from gitlab.com)

marked as related to #639

marked as related to #639
PlasticDigits commented 2026-08-25 06:56:54 +00:00 (Migrated from gitlab.com)

mentioned in commit 23f4224b1f

mentioned in commit 23f4224b1f17385388a28a73e7ff5633383e9742
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-08-25 06:56:54 +00:00
PlasticDigits commented 2026-08-25 06:57:07 +00:00 (Migrated from gitlab.com)

!1147 merged to main

Merged !1147 (feat/631-ust1-ustr-llama → main) without automerge and without waiting for CI. GitLab reported can_be_merged / no conflicts (tip was one commit on current main).

CI: pipeline 2788033808 failed with ci_quota_exceeded on all jobs (not a code failure). Did not wait or retry.

Sanity (make verify-issue-631 on the MR tip): 5/5

  • docs / skill / L631-10–L631-11 crosslinks
  • GET is rollup-only; gems lockstep with #562; no CG liquidity_in_usd as TVL
  • lib defillama 4/4
  • integration indexer_defillama 6/6 including ust1_ustr_asset_volume_fees_and_hub_price (UST1 volume 15, USTR volume 3, UST1 fees 0.45 = pair 0.40 + redeem 0.05, other-pair fee 1.00 not leaked, USTR peg_type null / category reserve)
  • node adapter tests 11/11 (mapAsset + circulating total_supply / 1e6, never $1)

Fee attribution: the earlier stash bug (USTR-pair fees counted on UST1, 0.53 vs 0.45) is addressed in refresh_daily_assets by target_pairs (pair legs must match the ticker CW20). Headline DEX volume still counts a UST1/USTR swap once.

Not landed from local stash wip: incomplete #631 UST1/USTR daily assets + stablecoins adapter: that stash is a stale subset of !1147 (docs + helper copies). Dropping it after this merge — do not re-apply.

Test gap (non-blocking): integration does not seed a USTR-only pair + swap_amm fee. Leak protection is covered by the unrelated pair 1.00 exclusion. Optional follow-up: add a USTR-only fee row expecting UST1 0.45 / USTR >0.

Still operator (issue stays open):

  1. Coolify indexer deploy so live GET /api/v1/defillama/daily?timestamp=<yesterday_utc> includes assets.ust1 / assets.ustr (today’s live GET has no assets key).
  2. Confirm peggedassets-server#903 still matches columbus-5 UST1 pin + circulating = token_info.total_supply / 1e6 (no $1).
  3. dimension-adapters#8987 can be marked ready now that daily GET is live; after Llama merge, protocol page shows Terra Classic + dex.cl8y.com.
  4. DefiLlama-Adapters#20676 still open (TVL).

Do not close #631 until Coolify assets + Llama UI criteria in the issue body are met.

## !1147 merged to `main` Merged [`!1147`](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/merge_requests/429) (`feat/631-ust1-ustr-llama` → `main`) without automerge and without waiting for CI. GitLab reported `can_be_merged` / no conflicts (tip was one commit on current `main`). **CI:** pipeline `2788033808` failed with `ci_quota_exceeded` on all jobs (not a code failure). Did not wait or retry. **Sanity (`make verify-issue-631` on the MR tip):** 5/5 - docs / skill / L631-10–L631-11 crosslinks - GET is rollup-only; gems lockstep with #562; no CG `liquidity_in_usd` as TVL - lib `defillama` 4/4 - integration `indexer_defillama` **6/6** including `ust1_ustr_asset_volume_fees_and_hub_price` (UST1 volume 15, USTR volume 3, UST1 fees 0.45 = pair 0.40 + redeem 0.05, other-pair fee 1.00 not leaked, USTR `peg_type` null / `category` reserve) - node adapter tests **11/11** (`mapAsset` + circulating `total_supply / 1e6`, never `$1`) **Fee attribution:** the earlier stash bug (USTR-pair fees counted on UST1, `0.53` vs `0.45`) is addressed in `refresh_daily_assets` by `target_pairs` (pair legs must match the ticker CW20). Headline DEX volume still counts a UST1/USTR swap once. **Not landed from local stash** `wip: incomplete #631 UST1/USTR daily assets + stablecoins adapter`: that stash is a stale subset of !1147 (docs + helper copies). Dropping it after this merge — do not re-apply. **Test gap (non-blocking):** integration does not seed a USTR-only pair + `swap_amm` fee. Leak protection is covered by the unrelated pair `1.00` exclusion. Optional follow-up: add a USTR-only fee row expecting UST1 `0.45` / USTR `>0`. **Still operator (issue stays open):** 1. Coolify indexer deploy so live `GET /api/v1/defillama/daily?timestamp=<yesterday_utc>` includes `assets.ust1` / `assets.ustr` (today’s live GET has no `assets` key). 2. Confirm [peggedassets-server#903](https://github.com/DefiLlama/peggedassets-server/pull/903) still matches columbus-5 UST1 pin + circulating = `token_info.total_supply` / 1e6 (no `$1`). 3. [dimension-adapters#8987](https://github.com/DefiLlama/dimension-adapters/pull/8987) can be marked ready now that daily GET is live; after Llama merge, protocol page shows Terra Classic + `dex.cl8y.com`. 4. [DefiLlama-Adapters#20676](https://github.com/DefiLlama/DefiLlama-Adapters/pull/20676) still open (TVL). Do **not** close #631 until Coolify assets + Llama UI criteria in the issue body are met.
PlasticDigits commented 2026-08-25 07:09:01 +00:00 (Migrated from gitlab.com)

mentioned in issue #640

mentioned in issue #640
PlasticDigits commented 2026-08-25 07:09:21 +00:00 (Migrated from gitlab.com)

mentioned in issue #641

mentioned in issue #641
PlasticDigits commented 2026-08-25 07:09:32 +00:00 (Migrated from gitlab.com)

mentioned in issue #646

mentioned in issue #646
PlasticDigits commented 2026-08-26 01:10:54 +00:00 (Migrated from gitlab.com)

mentioned in issue #652

mentioned in issue #652
PlasticDigits commented 2026-08-26 04:18:46 +00:00 (Migrated from gitlab.com)

mentioned in issue #667

mentioned in issue #667
PlasticDigits commented 2026-08-26 04:19:24 +00:00 (Migrated from gitlab.com)

mentioned in issue #668

mentioned in issue #668
PlasticDigits commented 2026-08-27 00:17:42 +00:00 (Migrated from gitlab.com)

mentioned in issue #677

mentioned in issue #677
PlasticDigits commented 2026-08-27 01:00:19 +00:00 (Migrated from gitlab.com)

mentioned in issue #682

mentioned in issue #682
PlasticDigits commented 2026-08-27 01:00:29 +00:00 (Migrated from gitlab.com)

mentioned in issue #683

mentioned in issue #683
PlasticDigits commented 2026-08-27 04:50:03 +00:00 (Migrated from gitlab.com)

mentioned in issue #685

mentioned in issue #685
PlasticDigits commented 2026-08-27 06:03:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #687

mentioned in issue #687
PlasticDigits commented 2026-08-27 06:03:02 +00:00 (Migrated from gitlab.com)

marked as related to #687

marked as related to #687
PlasticDigits commented 2026-08-27 06:33:37 +00:00 (Migrated from gitlab.com)

mentioned in merge request !1187

mentioned in merge request !1187
PlasticDigits commented 2026-08-27 07:43:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #688

mentioned in issue #688
PlasticDigits commented 2026-08-27 09:00:11 +00:00 (Migrated from gitlab.com)

mentioned in issue #689

mentioned in issue #689
PlasticDigits commented 2026-08-28 05:22:10 +00:00 (Migrated from gitlab.com)

mentioned in issue #692

mentioned in issue #692
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
code/cl8y-dex-terraclassic#631
No description provided.