From cb6a2705ae09e0372b2cb5679ee07dd7040d3546 Mon Sep 17 00:00:00 2001 From: Florent Tapponnier Date: Thu, 25 Jun 2026 12:47:26 +0200 Subject: [PATCH] =?UTF-8?q?rename=20TON=20=E2=86=92=20Gram=20across=20the?= =?UTF-8?q?=20site=20(token=20rebrand=20June=202026)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Toncoin → Gram (ticker TON → GRAM) rename took effect on 2026-06-15 via TON Vote (81% community support). The network itself stays branded TON / The Open Network; only the native token rebranded. We render 'Gram' everywhere visible (chain label, ticker, native symbol, copy) while keeping internal identifiers stable. Display layer (TON → Gram everywhere visible): - chains.ts: label 'TON' → 'Gram', nativeSymbol 'TON' → 'GRAM', description updated with 'formerly TON / Toncoin' continuity line. - provider-registry.ts: ton + tonapi descriptions updated. - benchmarks/l1-finality.yml: SEO + FAQ + per-chain explainer + provider entry display + abstract + methodology. - benchmarks/network-fees.yml: editorial + FAQ + per-chain explainer + fee tier copy + provider entry display (0.005 TON → 0.005 GRAM). - benchmarks/wallet-labels-coverage.yml: editorial + FAQ + per-chain explainer + chain dimension label + TonAPI provider tag. - answers/{cheapest-fees,fastest-finality}.yml: intro / FAQ / limitations. - l1-finality.md + harness READMEs: chain table + confidence audit copy. Logo + brand: - public/logos/ton.svg replaces ton.png (new Gram circular badge from ton.org/media; logo-manifest now points at the .svg). - brand.ts: ton color #0098EA → #30A1F5 to match the new mark. Kept stable on purpose (technical identifiers, ops contract): - slug 'ton' everywhere (URL, Prom queries, harness contract). - Prometheus label chain="ton" in all queries. - DefiLlama chain mapping ton → 'TON' (their API still uses 'TON'; tokenSymbol is already 'GRAM'). - API endpoints (tonapi.io, ton.org), twitter handles (@ton_blockchain, @tonapi_io) - all unchanged upstream. - Go function/type names (StartTONWallClock, tonState) and TON_API_KEY env var - renaming would require ops coordination + redeploy. SEO continuity: 'Gram (formerly TON)' phrasing in 1-2 anchor spots per page so search engines bridge the rename for 30+ days. --- ...ockchain-has-cheapest-transaction-fees.yml | 4 +- answers/which-l1-has-the-fastest-finality.yml | 10 +- benchmarks/l1-finality.md | 10 +- benchmarks/l1-finality.yml | 28 ++--- benchmarks/network-fees.yml | 22 ++-- benchmarks/wallet-labels-coverage.yml | 18 +-- harnesses/l1-finality/README.md | 12 +- harnesses/l1-finality/cmd/script/config.go | 2 +- harnesses/l1-finality/cmd/script/ton.go | 2 +- harnesses/l1-finality/cmd/script/ton_ws.go | 10 +- harnesses/wallet-labels/README.md | 2 +- .../wallet-labels/cmd/script/integration.go | 2 +- public/logos/ton.png | Bin 7199 -> 0 bytes public/logos/ton.svg | 1 + src/data/provider-registry.ts | 114 +++++++++--------- src/lib/brand.ts | 4 +- src/lib/chains.ts | 8 +- src/lib/logo-manifest.ts | 24 ++-- 18 files changed, 139 insertions(+), 134 deletions(-) delete mode 100644 public/logos/ton.png create mode 100644 public/logos/ton.svg diff --git a/answers/which-blockchain-has-cheapest-transaction-fees.yml b/answers/which-blockchain-has-cheapest-transaction-fees.yml index aa6aedeb..4248ab53 100644 --- a/answers/which-blockchain-has-cheapest-transaction-fees.yml +++ b/answers/which-blockchain-has-cheapest-transaction-fees.yml @@ -6,7 +6,7 @@ short_answer: | benchmark: network-fees intro: | - Wallet UX, micropayments, on-chain agents and gaming all break the same way: a five dollar transfer fee makes the use case impossible. This page answers one question with live data. Which chain is actually the cheapest to send a native transfer on right now, measured in dollars, not in gwei or lamports or stroops or sun. The OpenChainBench network-fees harness queries every chain's own fee market directly (eth_feeHistory for the EVM family, getRecentPrioritizationFees on Solana, koios epoch params on Cardano, fee_stats on Stellar, get_fee_estimate on Monero, Bag-of-Cells emulation on TON, getChainParameters on TRON, suix_getReferenceGasPrice on Sui), converts the result to the chain's smallest native unit, then multiplies by the live USD price of the native token. The output is the dollar amount a wallet user actually pays today. No marketing claim, no protocol-deterministic baseline that ignores priority bidding, no MATIC at peak gas reframed as the median. + Wallet UX, micropayments, on-chain agents and gaming all break the same way: a five dollar transfer fee makes the use case impossible. This page answers one question with live data. Which chain is actually the cheapest to send a native transfer on right now, measured in dollars, not in gwei or lamports or stroops or sun. The OpenChainBench network-fees harness queries every chain's own fee market directly (eth_feeHistory for the EVM family, getRecentPrioritizationFees on Solana, koios epoch params on Cardano, fee_stats on Stellar, get_fee_estimate on Monero, Bag-of-Cells emulation on Gram (formerly TON), getChainParameters on TRON, suix_getReferenceGasPrice on Sui), converts the result to the chain's smallest native unit, then multiplies by the live USD price of the native token. The output is the dollar amount a wallet user actually pays today. No marketing claim, no protocol-deterministic baseline that ignores priority bidding, no MATIC at peak gas reframed as the median. methodology: | Each chain is queried on its own fee surface every 30 seconds, never normalised to a synthetic gas estimate. The harness multiplies the chain's published fee parameter by a canonical transfer size for that chain (21000 gas for EVM native transfers, 5000 lamports base plus typical priority on Solana, 225 vBytes for a SegWit Litecoin transfer, 1500 bytes for a one-input two-output Monero RingCT transfer, 250 bytes for ADA, etc.), then converts to USD using Mobula's live price feed. The leaderboard ranks by 24h p50, so a single congestion spike does not move the headline number. Chains where the fee model is protocol-deterministic (Cardano, Stellar, TRON) are shown at the published rate parameter, which moves only when the parameter itself moves through on-chain governance. @@ -14,7 +14,7 @@ methodology: | limitations: - "Native transfers are the cheapest possible transaction on each chain. Smart-contract calls (token transfer, swap, NFT mint) cost more, often by an order of magnitude on the EVM family because of storage writes." - "L2 figures cover L2 execution cost only. The L1 data-posting component (Ethereum blob calldata, EigenDA for Mantle) is not yet included, so the actual user-visible cost during expensive blob windows is higher than this leaderboard shows." - - "TON publishes a conservative observed value because TON has no clean fee-estimate RPC; the real fee can fluctuate by workchain and shard." + - "Gram (formerly TON) publishes a conservative observed value because the Gram chain has no clean fee-estimate RPC; the real fee can fluctuate by workchain and shard." - "Native currency price volatility moves the USD figure independently of any change in the chain's fee market. A 20 percent ETH move shifts every Ethereum-denominated L1 and L2 transfer fee by the same percent." faq: diff --git a/answers/which-l1-has-the-fastest-finality.yml b/answers/which-l1-has-the-fastest-finality.yml index 85504587..b8c4fcfe 100644 --- a/answers/which-l1-has-the-fastest-finality.yml +++ b/answers/which-l1-has-the-fastest-finality.yml @@ -6,16 +6,16 @@ short_answer: | benchmark: l1-finality intro: | - Finality is the point at which a confirmed transaction cannot be reversed without breaking the protocol's security assumptions. It is the right number to look at for cross-chain settlement, exchange withdrawal thresholds, bridge unlock conditions and any system that needs to know "is this real now or can it still be undone." This page answers one question with live measurement. Which L1 chain actually finalizes the fastest in wall-clock seconds, not in slot counts or in marketing claims. OpenChainBench measures every L1 against its own native finality definition: deterministic for BFT chains (Ethereum Casper FFG, Stellar SCP, Hedera Hashgraph, SUI Mysticeti, TON BAG) and convention-based for probabilistic chains (Bitcoin and similar by confirmation depth). The leaderboard ranks by 24h p50 wall-clock seconds. + Finality is the point at which a confirmed transaction cannot be reversed without breaking the protocol's security assumptions. It is the right number to look at for cross-chain settlement, exchange withdrawal thresholds, bridge unlock conditions and any system that needs to know "is this real now or can it still be undone." This page answers one question with live measurement. Which L1 chain actually finalizes the fastest in wall-clock seconds, not in slot counts or in marketing claims. OpenChainBench measures every L1 against its own native finality definition: deterministic for BFT chains (Ethereum Casper FFG, Stellar SCP, Hedera Hashgraph, SUI Mysticeti, Gram BAG) and convention-based for probabilistic chains (Bitcoin and similar by confirmation depth). The leaderboard ranks by 24h p50 wall-clock seconds. methodology: | - Two methods are used, picked per chain. For chains whose finality is much longer than our 10 second poll interval (Ethereum, Solana, TRON, Litecoin, Monero) the harness compares `latest` and `finalized` block timestamps from the chain RPCs and takes the delta. For chains whose finality is faster than the poll interval (BNB, Avalanche, SUI, TON, Stellar) the harness maintains a persistent WebSocket or SSE subscription, recording wall-clock time T1 when block N is first seen as `latest` and T2 when it becomes `finalized`, with millisecond precision. The WS path is the only honest way to measure sub-poll-cadence finality; comparing two pointers at a single instant collapses to zero when finalization catches up to the head. Probabilistic chains (Litecoin, Monero) are measured against their conventional confirmation depth, not against a uniform depth across all chains. + Two methods are used, picked per chain. For chains whose finality is much longer than our 10 second poll interval (Ethereum, Solana, TRON, Litecoin, Monero) the harness compares `latest` and `finalized` block timestamps from the chain RPCs and takes the delta. For chains whose finality is faster than the poll interval (BNB, Avalanche, SUI, Gram, Stellar) the harness maintains a persistent WebSocket or SSE subscription, recording wall-clock time T1 when block N is first seen as `latest` and T2 when it becomes `finalized`, with millisecond precision. The WS path is the only honest way to measure sub-poll-cadence finality; comparing two pointers at a single instant collapses to zero when finalization catches up to the head. Probabilistic chains (Litecoin, Monero) are measured against their conventional confirmation depth, not against a uniform depth across all chains. limitations: - "Hedera's documented 3 to 5 second Hashgraph aBFT finality is not on the live leaderboard. Hedera mirror nodes only expose already-final blocks, so wall-clock measurement is impossible from public endpoints; re-enables once Block Nodes (HIP-1056) leave private preview." - "Probabilistic chains (Litecoin, Monero) settle on a confirmation-depth convention. The reported value is the time to that depth, which is the exchange-style settlement threshold, not a strict protocol-level finality." - "XRP is excluded by design: ledger_current has no close-time field, so wall-clock measurement requires a WS subscription to the ledger stream which is not yet implemented." - - "Sub-second finalities on TON and SUI are real because both chains expose millisecond-precision timestamps. Sub-second finalities claimed by chains without millisecond timestamps would be a measurement artifact, not a protocol property." + - "Sub-second finalities on Gram (formerly TON) and SUI are real because both chains expose millisecond-precision timestamps. Sub-second finalities claimed by chains without millisecond timestamps would be a measurement artifact, not a protocol property." faq: - q: "What is blockchain finality?" @@ -24,8 +24,8 @@ faq: a: "No. Solana exposes two commitments. Processed is optimistic and lands sub-second, typically under 500 milliseconds. Finalized requires 32 confirmed slots and clocks closer to 13 seconds in practice. The headline value here is finalized, the stricter guarantee. Sub-second Solana finality is real but only at the processed commitment level." - q: "Why is Ethereum finality 12.8 minutes?" a: "Ethereum uses Casper FFG which finalizes a checkpoint two epochs after it is justified. Each epoch is 32 slots of 12 seconds, giving 12.8 minutes as the documented target. Reorgs of unfinalized blocks remain possible inside the two-epoch window, but a finalized block is treated as irreversible by every Ethereum client." - - q: "How is TON able to finalize so fast?" - a: "TON's BAG consensus pushes masterchain finality under one second by separating state across a masterchain and many workchains. The number reported here is the masterchain commit, which is the canonical reference for cross-chain settlement. Workchain blocks are also finalized but only after the masterchain commit references them." + - q: "How is Gram (formerly TON) able to finalize so fast?" + a: "Gram's BAG consensus pushes masterchain finality under one second by separating state across a masterchain and many workchains. The number reported here is the masterchain commit, which is the canonical reference for cross-chain settlement. Workchain blocks are also finalized but only after the masterchain commit references them." - q: "Can I trust a sub-second L1 finality for cross-chain settlement?" a: "It depends on what you are settling. For bridges and exchanges with their own deeper confirmation thresholds, sub-second native finality means you reach those internal thresholds faster, not that you can skip them. For protocols that consume finality directly (e.g. LayerZero finality oracle, IBC client), the native value is what matters and the sub-second chains genuinely settle in under a second." diff --git a/benchmarks/l1-finality.md b/benchmarks/l1-finality.md index 949b0925..57fe41f1 100644 --- a/benchmarks/l1-finality.md +++ b/benchmarks/l1-finality.md @@ -20,7 +20,7 @@ This works for: **Ethereum, Solana, TRON, Stellar, Hedera, SUI, Litecoin, Monero For chains where finality is faster than our poll interval, comparing two pointers at one instant doesn't measure finalization time - it measures the gap-at-instant, which collapses to zero when finalization catches up to head. The honest path is to subscribe to a push stream, record `T1 = time.Now()` when block N is first observed, and `T2 = time.Now()` when N becomes finalized. `lag = T2 − T1`, with millisecond precision, independent of chain timestamp resolution. -This works for: **BNB, Avalanche, TON**. +This works for: **BNB, Avalanche, Gram**. ## Per-chain methodology @@ -34,7 +34,7 @@ This works for: **BNB, Avalanche, TON**. | **Stellar** | HTTP poll | Horizon `/ledgers?order=desc&limit=2` | 1 ledger back (SCP-final) | Circle = 1, deterministic SCP | | **Hedera** | HTTP poll | Mirror `/api/v1/blocks?order=desc&limit=2` | 1 block back. Timestamps parsed at ns precision | Hashgraph aBFT deterministic | | **SUI** | HTTP poll | `sui_getLatestCheckpointSequenceNumber` + `sui_getCheckpoint` | 1 checkpoint back | Circle USDC = 1, Mysticeti finalizes in 1 | -| **TON** | SSE wall-clock | `tonapi.io/v2/sse/blocks?workchain=-1` (masterchain only) | Time between consecutive masterchain blocks | TON docs: a tx is final once included in a masterchain block, so block_N is final when block_N+1 commits | +| **Gram** | SSE wall-clock | `tonapi.io/v2/sse/blocks?workchain=-1` (masterchain only) | Time between consecutive masterchain blocks | Gram (formerly TON) docs: a tx is final once included in a masterchain block, so block_N is final when block_N+1 commits | | **Litecoin** | HTTP poll (probabilistic) | blockchair `/stats.best_block_height` and `/dashboards/block/{height}.block.time` | 12 confirmations | Coinbase deposit standard, post-April-2026 13-block MWEB reorg | | **Monero** | HTTP poll (probabilistic) | monero-rpc `get_info` + `get_block_header_by_height` (with cakewallet/sethforprivacy/monerujo failover) | 10 confirmations | Wallet protocol unlock period | | **Cardano** | HTTP poll (probabilistic) | koios `/tip` + `/blocks?block_height=eq.` | 15 confirmations | Above Coinbase 10 / Kraken 15. Far below the academic k=2160 (~12 h) | @@ -56,7 +56,7 @@ This works for: **BNB, Avalanche, TON**. | Hedera | High | Hashgraph aBFT + ns-precision timestamps | | SUI | High | 1 checkpoint = Circle USDC standard | | Stellar | High | SCP deterministic, Circle = 1 | -| TON | High (after SSE refactor) | tonapi `workchain=-1` SSE stream, ms-precise | +| Gram | High (after SSE refactor) | tonapi `workchain=-1` SSE stream, ms-precise | | Cardano | Medium | 15-conf compromise between Coinbase 10 and Kraken 15. Academic k=2160 is theoretical; no actor uses it | | Litecoin | Medium | 12-conf post-April-2026 reorg; standard is evolving | | TRON | Medium | CEX confirmation counts vary 19 to 30; we use the 19-block protocol minimum | @@ -66,7 +66,7 @@ This works for: **BNB, Avalanche, TON**. Rather than copy the docs (which are optimistic targets), we anchored each chain's depth to what production actors (Coinbase, Circle, Kraken, Binance, Fireblocks) actually require before crediting a deposit or treating a transfer as irreversible. That's the practical-settlement standard people put real money behind, and it's the closest thing to a ground truth for "real-world finality." -For chains where no canonical CEX number exists (TON, Monero), we fall back to protocol-level minimums plus a small safety margin and flag them as "Lower" / inferred in the audit. +For chains where no canonical CEX number exists (Gram, Monero), we fall back to protocol-level minimums plus a small safety margin and flag them as "Lower" / inferred in the audit. ## Metrics emitted @@ -81,7 +81,7 @@ l1_finality_last_refresh_timestamp_seconds{chain} l1_finality_fetch_errors_total{chain, error_type} l1_finality_health{chain} # 1 if last sample succeeded -# Wall-clock-measured chains (BNB, Avalanche, TON) +# Wall-clock-measured chains (BNB, Avalanche, Gram) l1_finality_wallclock_lag_milliseconds{chain} # ms-precise gauge l1_finality_wallclock_lag_milliseconds_histogram # histogram for tail latency l1_finality_wallclock_health{chain} # 1 if WS/SSE connected diff --git a/benchmarks/l1-finality.yml b/benchmarks/l1-finality.yml index b4ab1580..900374f5 100644 --- a/benchmarks/l1-finality.yml +++ b/benchmarks/l1-finality.yml @@ -3,11 +3,11 @@ slug: l1-finality number: "006" title: Fastest L1 blockchain finality, live across 11 chains -seo_title: "Fastest L1 finality 2026: TON, SUI, Stellar, Solana, Ethereum" -seo_description: "Fastest L1 blockchain finality, measured live for 11 chains. TON, SUI and Hedera in seconds, Solana ~13 s, Ethereum ~12.8 min. Live percentiles over 24h, open methodology." -subtitle: Wall-clock seconds from latest block to the finalized block on Ethereum, Solana, TON, SUI, Stellar and 5 more chains, refreshed every 10 seconds. +seo_title: "Fastest L1 finality 2026: Gram, SUI, Stellar, Solana, Ethereum" +seo_description: "Fastest L1 blockchain finality, measured live for 11 chains. Gram (formerly TON), SUI and Hedera in seconds, Solana ~13 s, Ethereum ~12.8 min. Live percentiles over 24h, open methodology." +subtitle: Wall-clock seconds from latest block to the finalized block on Ethereum, Solana, Gram, SUI, Stellar and 5 more chains, refreshed every 10 seconds. seo_intro: | - This page measures L1 finality time live for every major Layer-1 blockchain, with p50 / p90 / p99 refreshed every 10 seconds. Stellar finality time is ~5 seconds, the close interval the Stellar Consensus Protocol locks in via federated Byzantine agreement. Solana finality time goes from sub-second on the processed commitment to ~12.8 s on finalized after 32 confirmed slots. Ethereum finality time is ~12.8 minutes, the 2-epoch Casper FFG window. Hedera finality time clears in 3-5 seconds via Hashgraph aBFT. SUI finality time and TON finality time both sit under one second via Mysticeti DAG-BFT and BAG consensus. BNB and Avalanche finality time land near two seconds through fast-finality forks. Probabilistic chains (Litecoin, Monero) settle on a confirmation-depth convention measured here in minutes. + This page measures L1 finality time live for every major Layer-1 blockchain, with p50 / p90 / p99 refreshed every 10 seconds. Stellar finality time is ~5 seconds, the close interval the Stellar Consensus Protocol locks in via federated Byzantine agreement. Solana finality time goes from sub-second on the processed commitment to ~12.8 s on finalized after 32 confirmed slots. Ethereum finality time is ~12.8 minutes, the 2-epoch Casper FFG window. Hedera finality time clears in 3-5 seconds via Hashgraph aBFT. SUI finality time and Gram finality time (formerly TON) both sit under one second via Mysticeti DAG-BFT and BAG consensus. BNB and Avalanche finality time land near two seconds through fast-finality forks. Probabilistic chains (Litecoin, Monero) settle on a confirmation-depth convention measured here in minutes. faq: - q: "What is blockchain finality?" @@ -20,8 +20,8 @@ faq: a: "Solana exposes two commitments. Processed is optimistic and lands sub-second, typically under 500 ms. Finalized requires 32 confirmed slots and clocks {{p50:solana}} (24h average). The leaderboard value is finalized, the stricter guarantee. Sub-second Solana finality is real but only at the processed commitment level, not finalized." - q: "What is SUI finality time?" a: "SUI clocks {{p50:sui}} (p50, 24h) on this benchmark via the Mysticeti DAG-BFT consensus protocol. The chain exposes millisecond-precision timestamps so the measurement is genuinely sub-second. Mysticeti's two-vote commitment pattern reaches deterministic finality without the multi-block confirmation depth used by classical Byzantine fault tolerant chains." - - q: "What is TON finality time?" - a: "TON's BAG consensus pushes masterchain finality to {{p50:ton}} (p50, 24h), one of the lowest deterministic finalities measured on this leaderboard. TON's design splits state across a masterchain and many workchains. The figure here is the masterchain commit, the canonical reference for cross-chain settlement." + - q: "What is Gram finality time?" + a: "Gram's BAG consensus (the network formerly branded TON, with native token renamed Toncoin → Gram in June 2026) pushes masterchain finality to {{p50:ton}} (p50, 24h), one of the lowest deterministic finalities measured on this leaderboard. Gram's design splits state across a masterchain and many workchains. The figure here is the masterchain commit, the canonical reference for cross-chain settlement." - q: "What is Stellar finality time?" a: "Stellar uses the Stellar Consensus Protocol, a federated Byzantine agreement that reaches deterministic finality at every ledger close, roughly every 5 seconds, no probabilistic confirmation needed. p50 sits at {{p50:stellar}} (24h). The benchmark records wall-clock time between a new ledger appearing on the Horizon stream and its SCP-final commit." - q: "What is Hedera finality time?" @@ -29,9 +29,9 @@ faq: - q: "What is BNB Chain finality time?" a: "BNB Smart Chain finalizes via the BEP-126 fast-finality fork, dropping the confirmation depth that legacy probabilistic chains require. p50 sits at {{p50:bnb}} (24h), measured via persistent WebSocket subscription that records T1 when block N first appears as latest and T2 when it crosses the finalized threshold." - q: "Which blockchain has the fastest finality time?" - a: "Sub-second BFT chains lead. TON and SUI both clock under one second on this live benchmark. BNB and Avalanche sit around one to two seconds via their fast-finality forks. Solana finalized lands around 12.8 s, Ethereum at 12.8 min, and probabilistic chains (Litecoin, Monero) trail at 15 to 30 minutes by confirmation-depth convention." + a: "Sub-second BFT chains lead. Gram and SUI both clock under one second on this live benchmark. BNB and Avalanche sit around one to two seconds via their fast-finality forks. Solana finalized lands around 12.8 s, Ethereum at 12.8 min, and probabilistic chains (Litecoin, Monero) trail at 15 to 30 minutes by confirmation-depth convention." - q: "How is L1 finality time measured on this page?" - a: "Two methods, picked per chain. RPC pollers compare latest vs finalized block timestamps every 10 seconds, used for Ethereum, Solana, TRON, Stellar, SUI, TON, Litecoin, Monero. WebSocket subscribers record wall-clock time T1 when a block first appears on the head stream and T2 when it crosses the finality threshold, giving millisecond-precision lag for sub-poll chains (BNB, Avalanche)." + a: "Two methods, picked per chain. RPC pollers compare latest vs finalized block timestamps every 10 seconds, used for Ethereum, Solana, TRON, Stellar, SUI, Gram, Litecoin, Monero. WebSocket subscribers record wall-clock time T1 when a block first appears on the head stream and T2 when it crosses the finality threshold, giving millisecond-precision lag for sub-poll chains (BNB, Avalanche)." per_chain_explainer: - slug: ethereum @@ -55,9 +55,9 @@ per_chain_explainer: body: | SUI clocks {{p50:sui}} (p50, 24h) on this benchmark via the Mysticeti DAG-BFT consensus protocol. The chain exposes millisecond-precision timestamps, so the measurement is genuinely sub-second. Mysticeti's two-vote commitment pattern reaches deterministic finality without the multi-block confirmation depth used by classical Byzantine fault tolerant chains. Measured via `sui_getLatestCheckpointSequenceNumber` minus a 5-checkpoint lookback. - slug: ton - h2: "TON finality time" + h2: "Gram finality time" body: | - TON's BAG consensus pushes masterchain finality to {{p50:ton}} (p50, 24h), one of the lowest deterministic finalities measured on this leaderboard. TON's design splits state across a masterchain and many workchains; the figure reported here is the masterchain commit, the canonical reference for cross-chain settlement. Measured via the tonapi.io `/blockchain/masterchain-head` endpoint with a 3-seqno lookback. + Gram's BAG consensus (the chain formerly branded TON, native token renamed Toncoin → Gram in June 2026) pushes masterchain finality to {{p50:ton}} (p50, 24h), one of the lowest deterministic finalities measured on this leaderboard. Gram's design splits state across a masterchain and many workchains; the figure reported here is the masterchain commit, the canonical reference for cross-chain settlement. Measured via the tonapi.io `/blockchain/masterchain-head` endpoint with a 3-seqno lookback. - slug: bnb h2: "BNB Chain finality time" body: | @@ -91,7 +91,7 @@ abstract: | chains with finality much longer than our 10 s poll interval we read `latest.timestamp, finalized.timestamp` from the chain RPCs (Ethereum, Solana, TRON, Litecoin, Monero). For chains whose finality - is faster than the poll interval (BNB, Avalanche, SUI, TON, Stellar) + is faster than the poll interval (BNB, Avalanche, SUI, Gram, Stellar) we maintain a persistent WebSocket / SSE subscription, recording wall-clock time T1 when block N is first seen as `latest` and T2 when it becomes `finalized`. lag = T2 − T1 with millisecond @@ -111,7 +111,7 @@ methodology: - "TRON: `/wallet/getnowblock` (head) minus `/walletsolidity/getnowblock` (solidity-confirmed)." - "Stellar (SSE wall-clock): Horizon `/ledgers?cursor=now&order=asc` event-stream records T1 on first sight of ledger N and T2 on the next ledger close (SCP-final at every close)." - "SUI: `sui_getLatestCheckpointSequenceNumber` minus 5 checkpoints back." - - "TON: tonapi.io `/blockchain/masterchain-head` minus 3 seqno." + - "Gram: tonapi.io `/blockchain/masterchain-head` minus 3 seqno." - "Litecoin (probabilistic): blockchair `/stats.best_block_height` minus 6 confirmations via `/dashboards/block/{height}.block.time`." - "Monero (probabilistic): monero-rpc `get_info` minus 10 confirmations via `get_block_header_by_height`." - "Hedera (planned, currently disabled): mirror-node `/api/v1/blocks` only exposes already-final blocks, so true wall-clock lag is impossible from public endpoints. Re-enables once Block Nodes (HIP-1056) leave private preview." @@ -188,9 +188,9 @@ providers: series: l1_finality_wallclock_lag_milliseconds{chain="sui"} - slug: ton - name: TON + name: Gram tag: Masterchain commit, polled via tonapi.io - formula: "Median wall-clock milliseconds for a TON masterchain block to commit under BAG consensus, polled via tonapi.io with a 3-seqno lookback, p50 over 24h." + formula: "Median wall-clock milliseconds for a Gram (formerly TON) masterchain block to commit under BAG consensus, polled via tonapi.io with a 3-seqno lookback, p50 over 24h." queries: p50: quantile_over_time(0.50, l1_finality_wallclock_lag_milliseconds{chain="ton"}[24h]) p90: quantile_over_time(0.90, l1_finality_wallclock_lag_milliseconds{chain="ton"}[24h]) diff --git a/benchmarks/network-fees.yml b/benchmarks/network-fees.yml index 406fb3fc..6a32477e 100644 --- a/benchmarks/network-fees.yml +++ b/benchmarks/network-fees.yml @@ -8,17 +8,17 @@ seo_description: "Cheapest blockchain transaction fee in USD ranked live across subtitle: "Live USD cost of one native token transaction on 20 Layer 1 and Layer 2 chains, refreshed every 30 seconds." seo_intro: | - This page answers one question. How much does it cost in dollars to send one transaction on each major blockchain right now. We track 20 chains in parallel and refresh the number every 30 seconds. The eleven Layer 1 chains are Ethereum, Solana, BNB Chain, Avalanche, TRON, Cardano, Sui, TON, Stellar, Litecoin and Monero. The nine Layer 2 rollups are Arbitrum, Optimism, Base, zkSync Era, Linea, Scroll, Blast, Mantle and Taiko. For every chain we query its own fee market directly (eth_feeHistory for the EVM family, getRecentPrioritizationFees on Solana, koios epoch params on Cardano, fee_stats on Stellar, get_fee_estimate on Monero, the mempool oracle on Litecoin, getChainParameters on TRON, suix_getReferenceGasPrice on Sui), convert the result to the smallest native unit, then multiply by the live USD price of the chain's native token from Mobula. The output is the actual dollar amount a wallet user pays today. No gwei to lamport conversion, no marketing claim. Compare Ethereum gas now versus Solana fee in USD, see whether Arbitrum is still cheaper than Base today, find out which Layer 1 has the lowest transaction cost this minute. + This page answers one question. How much does it cost in dollars to send one transaction on each major blockchain right now. We track 20 chains in parallel and refresh the number every 30 seconds. The eleven Layer 1 chains are Ethereum, Solana, BNB Chain, Avalanche, TRON, Cardano, Sui, Gram (formerly TON), Stellar, Litecoin and Monero. The nine Layer 2 rollups are Arbitrum, Optimism, Base, zkSync Era, Linea, Scroll, Blast, Mantle and Taiko. For every chain we query its own fee market directly (eth_feeHistory for the EVM family, getRecentPrioritizationFees on Solana, koios epoch params on Cardano, fee_stats on Stellar, get_fee_estimate on Monero, the mempool oracle on Litecoin, getChainParameters on TRON, suix_getReferenceGasPrice on Sui), convert the result to the smallest native unit, then multiply by the live USD price of the chain's native token from Mobula. The output is the actual dollar amount a wallet user pays today. No gwei to lamport conversion, no marketing claim. Compare Ethereum gas now versus Solana fee in USD, see whether Arbitrum is still cheaper than Base today, find out which Layer 1 has the lowest transaction cost this minute. faq: - q: "What does this benchmark measure?" a: "The USD cost of one native token transaction on each of the 20 tracked chains, refreshed every 30 seconds. A native transaction is the simplest action on a chain. Send ETH on Ethereum, SOL on Solana, ADA on Cardano, XLM on Stellar, and so on. We do not yet measure ERC 20 transfers, DEX swaps or smart contract deployments. Those will ship as companion metrics in a later phase." - q: "Which chains are tracked?" - a: "Eleven Layer 1 chains on the L1 tab. Ethereum, Solana, BNB Chain, Avalanche, TRON, Cardano, Sui, TON, Stellar, Litecoin and Monero. Nine Layer 2 rollups on the L2 tab. Arbitrum, Optimism, Base, zkSync Era, Linea, Scroll, Blast, Mantle and Taiko. The list matches the L1 finality and L2 block time benches so you can read cost and speed side by side." + a: "Eleven Layer 1 chains on the L1 tab. Ethereum, Solana, BNB Chain, Avalanche, TRON, Cardano, Sui, Gram (formerly TON), Stellar, Litecoin and Monero. Nine Layer 2 rollups on the L2 tab. Arbitrum, Optimism, Base, zkSync Era, Linea, Scroll, Blast, Mantle and Taiko. The list matches the L1 finality and L2 block time benches so you can read cost and speed side by side." - q: "Why USD instead of gas price in gwei?" a: "Gas price in gwei on Ethereum cannot be compared to lamports per compute unit on Solana, stroops per operation on Stellar or sun per byte on TRON. The only honest cross chain unit is the dollar cost of a user facing action, computed at scrape time using a live USD price for each native token. Mobula's market API delivers the prices we multiply by." - q: "What do slow, standard and fast tiers mean?" - a: "Tiers exist on chains with a priority market where users can pay more for faster inclusion. Slow targets the 25th percentile of recent priority bids, standard the 50th, fast the 90th. Chains with deterministic or near deterministic fees (Cardano, Stellar, TON, TRON native transfer) emit a single tier because there is no priority market to bid into." + a: "Tiers exist on chains with a priority market where users can pay more for faster inclusion. Slow targets the 25th percentile of recent priority bids, standard the 50th, fast the 90th. Chains with deterministic or near deterministic fees (Cardano, Stellar, Gram, TRON native transfer) emit a single tier because there is no priority market to bid into." - q: "Why is the Solana fee so low?" a: "Solana charges 5000 lamports per signature as a hard base, plus an optional priority fee priced in micro lamports per compute unit. A simple SOL transfer uses around 200 compute units, so the priority component is typically dwarfed by the base. At current SOL prices the headline fee sits well under one cent on non congested blocks." - q: "Why is the Cardano fee always similar?" @@ -26,11 +26,11 @@ faq: - q: "Are the L2 numbers complete?" a: "Not yet. The figure for each Layer 2 reflects L2 execution cost only (the wallet visible gas price times 21000 gas times the ETH price). The L1 data posting fee (blob market for EIP 4844 rollups like Arbitrum, Optimism and Base after Dencun, calldata for the rest) is a separate component that varies block to block and is currently excluded. A blended total cost figure will ship in a later phase. For now use the L1 view for true wallet cost comparison, and read the L2 view as the execution component only." - q: "Which Layer 1 chain has the cheapest transaction fee right now?" - a: "Open the page. The leaderboard refreshes every 30 seconds and is sorted by cost. As a general pattern, Stellar, Avalanche, Litecoin, Solana, BNB Chain and TON cluster below one cent, Ethereum and Cardano around three to five cents, and TRON and Monero in the ten cent range. Sui sits in the low one cent range. Exact ordering depends on congestion and native token price at the moment of read." + a: "Open the page. The leaderboard refreshes every 30 seconds and is sorted by cost. As a general pattern, Stellar, Avalanche, Litecoin, Solana, BNB Chain and Gram cluster below one cent, Ethereum and Cardano around three to five cents, and TRON and Monero in the ten cent range. Sui sits in the low one cent range. Exact ordering depends on congestion and native token price at the moment of read." - q: "How often does the page refresh?" a: "Every 30 seconds. The harness re queries each chain's fee oracle and Mobula's price API on the same cadence, so headline values are at most 30 seconds stale plus chain RPC latency (typically under one second)." - q: "Why are some chains showing one tier instead of three?" - a: "Cardano fees are protocol deterministic. Stellar's base fee is 100 stroops per operation network wide. TON's typical fee is a conservative observed value because TON has no clean fee estimate RPC. TRON native transfers consume bandwidth at the published rate per byte. None of these chains expose a priority market a user can bid into for a TRX, ADA, XLM or TON transfer, so emitting a single tier is more honest than fabricating three identical values." + a: "Cardano fees are protocol deterministic. Stellar's base fee is 100 stroops per operation network wide. Gram's typical fee is a conservative observed value because the Gram chain has no clean fee estimate RPC. TRON native transfers consume bandwidth at the published rate per byte. None of these chains expose a priority market a user can bid into for a TRX, ADA, XLM or GRAM transfer, so emitting a single tier is more honest than fabricating three identical values." - q: "Can I cite a value from this page?" a: "Yes. Every number is a Prometheus query over a 24h window. The query string is shown in the row's hover tooltip. The harness source is open at the link in the source field below. Cite the value and the timestamp at the top of the page." @@ -64,9 +64,9 @@ per_chain_explainer: body: | Sui native transfer fee is {{p50:sui}} (p50, 24h). Sui uses a reference-gas-price model where validators agree on a per-epoch gas price via DPoS auction; a `Coin::transfer` consumes around 76000 computation units, so the per-transfer cost stays in the sub-cent range even on busy epochs. Sui has separate computation and storage fees, with the latter rebated when objects are deleted. Computed via `suix_getReferenceGasPrice` times 76000 gas times SUI price. - slug: ton - h2: "TON transaction fee" + h2: "Gram transaction fee" body: | - TON native transfer fee is {{p50:ton}} (p50, 24h). TON has no clean fee-estimate RPC because its fee model uses a Bag-of-Cells emulation that accounts for storage, gas, forward and import fees separately per workchain and shard; a typical Wallet v4 transfer settles around 0.005 TON. We publish that conservative observed value times live TON price as a single deterministic tier. + Gram (formerly TON) native transfer fee is {{p50:ton}} (p50, 24h). The Gram chain has no clean fee-estimate RPC because its fee model uses a Bag-of-Cells emulation that accounts for storage, gas, forward and import fees separately per workchain and shard; a typical Wallet v4 transfer settles around 0.005 GRAM. We publish that conservative observed value times live GRAM price as a single deterministic tier. - slug: stellar h2: "Stellar transaction fee" body: | @@ -145,7 +145,7 @@ methodology: - "Cardano. koios epoch_params.min_fee_a and min_fee_b, times 250 bytes for a typical native transfer. Deterministic by protocol, refreshes only when on chain parameters change." - "Stellar. horizon fee_stats.last_ledger_base_fee times 1 operation. Single tier." - "Sui. suix_getReferenceGasPrice times 76000 gas (typical observed for a Coin::transfer call). Single standard tier." - - "TON. Hardcoded 0.005 TON, the typical observed wallet v4 transfer. TON's fee model uses Bag of Cells emulation and has no clean fee estimate RPC." + - "Gram (formerly TON). Hardcoded 0.005 GRAM, the typical observed wallet v4 transfer. The Gram fee model uses Bag of Cells emulation and has no clean fee estimate RPC." - "Litecoin. litecoinspace.org /api/v1/fees/recommended (hour, half hour and fastest fees in litoshi per vByte) times 225 vBytes for a typical 1 input 1 output P2WPKH transfer." - "Monero. monero rpc get_fee_estimate.fees[0..2] times 1500 bytes for a typical 1 input 2 output RingCT transaction." - "USD prices. api.mobula.io/api/1/market/multi-data polled every 30 seconds for all 20 native tokens in one call." @@ -266,10 +266,10 @@ providers: series: tx_fee_native_transfer_usd{chain="sui",tier="std"} - slug: ton - name: TON + name: Gram layer: l1 - tag: Hardcoded 0.005 TON typical wallet v4 transfer - formula: "Conservative typical observed cost of a TON wallet transfer × TON USD price. TON has no fee estimate RPC; this is the observed median." + tag: Hardcoded 0.005 GRAM typical wallet v4 transfer + formula: "Conservative typical observed cost of a Gram (formerly TON) wallet transfer × GRAM USD price. Gram has no fee estimate RPC; this is the observed median." queries: p50: quantile_over_time(0.50, tx_fee_native_transfer_usd{chain="ton",tier="single"}[24h]) p90: quantile_over_time(0.90, tx_fee_native_transfer_usd{chain="ton",tier="single"}[24h]) diff --git a/benchmarks/wallet-labels-coverage.yml b/benchmarks/wallet-labels-coverage.yml index 4412f301..7655cddb 100644 --- a/benchmarks/wallet-labels-coverage.yml +++ b/benchmarks/wallet-labels-coverage.yml @@ -40,7 +40,7 @@ seo_intro: | response is a meaningful name, generic fillers like "EOA", "Contract" or "Wallet" are excluded because they carry no entity signal. Coverage is also reported per chain so chain-specialists - (Helius on Solana, TonAPI on TON, StellarExpert on Stellar, XRPScan + (Helius on Solana, TonAPI on Gram, StellarExpert on Stellar, XRPScan on XRP, WalletExplorer on Bitcoin) are not unfairly penalised for chains they do not claim to cover. Universal providers (Mobula, Moralis, Blockscout, OLI) are scored on every chain they advertise. @@ -66,7 +66,7 @@ abstract: | averaged into one number. Coverage is also shown per chain. Some providers cover 90+ chains (Mobula), - others are chain-specialists (Helius for Solana, TonAPI for TON, StellarExpert + others are chain-specialists (Helius for Solana, TonAPI for Gram, StellarExpert for Stellar, XRPScan for XRP, WalletExplorer for Bitcoin). Showing per-chain rather than aggregating prevents specialists from being unfairly penalized for chains they don't claim to cover. @@ -87,9 +87,9 @@ per_chain_explainer: body: | The Solana wallet labeling leaderboard is driven by chain-specialist curation rather than universal coverage. Helius wins by default on this chain because its label graph is built directly against native Solana programs (Jito stake pools, Jupiter routers, Pump.fun creators, Magic Eden marketplace IDs) rather than translated from an EVM-shaped schema. Mobula audits Solana as part of its universal coverage and clocks {{p50:mobula}} on the active Kind tab. Blockscout does not index Solana, so the per-chain leaderboard here is between Solana-native APIs. - slug: ton - h2: "Best wallet labeling API on TON" + h2: "Best wallet labeling API on Gram" body: | - TON wallet labeling is essentially a two-API conversation. TonAPI ships a curated entity directory covering core TON contracts (jettons, Telegram bot wallets, DEX routers like STON.fi and DeDust). Mobula audits TON as part of its universal coverage. Most EVM-centric providers (Moralis, Blockscout) do not index TON at all, so the per-chain leaderboard here surfaces the genuine specialist gap. Per the bench's coverage definition, generic categorical fillers like `EOA` or `Wallet` do not count toward a hit; only entity-grade names do. + Gram (formerly TON) wallet labeling is essentially a two-API conversation. TonAPI ships a curated entity directory covering core Gram contracts (jettons, Telegram bot wallets, DEX routers like STON.fi and DeDust). Mobula audits Gram as part of its universal coverage. Most EVM-centric providers (Moralis, Blockscout) do not index Gram at all, so the per-chain leaderboard here surfaces the genuine specialist gap. Per the bench's coverage definition, generic categorical fillers like `EOA` or `Wallet` do not count toward a hit; only entity-grade names do. - slug: stellar h2: "Best wallet labeling API on Stellar" body: | @@ -112,7 +112,7 @@ findings: - "The Kind toggle separates two distinct jobs. On the Contract tab any explorer that reads verified source code (Blockscout in particular) saturates near 100% because the contract's name is already in the bytecode metadata. On the EOA tab the score reflects how well the provider's curated entity graph covers plain wallets, the actually-hard job." - "{{name:mobula}} returns {{p50:mobula}}. Universal coverage providers score on every chain they advertise, so a single number summarizes how broad the underlying label graph actually is once chain-specialists are stripped out. Switch to the EOA tab to see the curated-entity comparison without contract names lifting every score." - "{{name:helius}} scores {{p50:helius}} on Solana. Chain-specialists tend to dominate their home chain because their label graph is curated against native protocols (Jito, Jupiter, Pump.fun, marketplace programs) rather than translated from an EVM-shaped schema." - - "{{name:moralis}} returns {{p50:moralis}}. EVM-centric providers usually trail on TON, Stellar, XRP and Bitcoin because their indexers and entity graphs were built for EVM patterns and ported chains afterwards." + - "{{name:moralis}} returns {{p50:moralis}}. EVM-centric providers usually trail on Gram, Stellar, XRP and Bitcoin because their indexers and entity graphs were built for EVM patterns and ported chains afterwards." - "{{name:blockscout}} sits at {{p50:blockscout}}. Explorer-derived labels rely on verified source code on the Contract tab and on public name tags on the EOA tab. Coverage on the Contract tab tracks how active each chain's Blockscout deployment is; on the EOA tab it tracks how curated each chain's `public_tags` table is, which is far less complete." - "{{worst_name}} trails at {{worst_p50}} on the active tab. The gap between leader and laggard is mostly which entities each provider's graph has been curated against: CEX hot wallets, OFAC SDN and Safe multisigs are easy hits; long-tail public figures and DEX routers separate the top tier." @@ -124,7 +124,7 @@ faq: - q: "What does 'wallet labeling' mean in a crypto API?" a: "A wallet labeling API takes an address and returns an entity name. The CEX it belongs to (`Binance hot wallet 14`), the protocol (`Uniswap V3 router`), the multisig owner (`Safe: foundation treasury`), the sanctioned status (`OFAC SDN`), or a public-figure tag (`Vitalik Buterin`). Generic categorical labels like `EOA`, `Contract`, `Wallet` are not considered a hit on this benchmark because they carry no entity signal." - q: "Is Mobula's labels API better than Moralis or Helius?" - a: "It depends on the chain and on the kind. {{name:mobula}} is a universal provider audited on every chain it advertises and currently returns {{p50:mobula}} on the active tab. {{name:helius}} is Solana-only and dominates that chain because its label graph is curated against native Solana programs. {{name:moralis}} is EVM-centric and trails on TON, Stellar, XRP and Bitcoin. The Kind = EOA tab is where curated entity graphs (Mobula, Helius, chain specialists) actually compete; the Kind = Contract tab favours explorers like Blockscout because they read verified source code for free." + a: "It depends on the chain and on the kind. {{name:mobula}} is a universal provider audited on every chain it advertises and currently returns {{p50:mobula}} on the active tab. {{name:helius}} is Solana-only and dominates that chain because its label graph is curated against native Solana programs. {{name:moralis}} is EVM-centric and trails on Gram, Stellar, XRP and Bitcoin. The Kind = EOA tab is where curated entity graphs (Mobula, Helius, chain specialists) actually compete; the Kind = Contract tab favours explorers like Blockscout because they read verified source code for free." - q: "What is the alternative to Arkham or Nansen for builders?" a: "Arkham and Nansen own the consumer visualization layer (browse-the-web-of-onchain-money). The builder side of the question, the API integrated under the hood by wallets, portfolio trackers and AML flows, lives elsewhere. Mobula, Helius, Moralis, Blockscout, OLI, TonAPI, StellarExpert, XRPScan and WalletExplorer are the labeling APIs benchmarked here. Pick the one whose coverage matches the chains your product touches and whose response shape fits your integration latency budget." - q: "How does OpenChainBench measure wallet label coverage?" @@ -163,7 +163,7 @@ dimensions: - { value: arbitrum, label: Arbitrum } - { value: polygon, label: Polygon } - { value: optimism, label: Optimism } - - { value: ton, label: TON } + - { value: ton, label: Gram } - { value: stellar, label: Stellar } - { value: xrp, label: XRP } - { value: bitcoin, label: Bitcoin } @@ -244,8 +244,8 @@ providers: - slug: tonapi name: TonAPI - tag: TON specialist, native account graph, free tier - formula: "Share of TON anchor addresses for which TonAPI /v2/accounts/{addr} returns a non-generic entity name, success_total ÷ checks_total over 24h." + tag: Gram specialist, native account graph, free tier + formula: "Share of Gram anchor addresses for which TonAPI /v2/accounts/{addr} returns a non-generic entity name, success_total ÷ checks_total over 24h." queries: p50: 100 * sum(increase(wallet_labels_success_total{provider="tonapi"}[24h])) / sum(increase(wallet_labels_checks_total{provider="tonapi"}[24h])) p90: 100 * sum(increase(wallet_labels_success_total{provider="tonapi"}[24h])) / sum(increase(wallet_labels_checks_total{provider="tonapi"}[24h])) diff --git a/harnesses/l1-finality/README.md b/harnesses/l1-finality/README.md index d26ae782..22a9a9a1 100644 --- a/harnesses/l1-finality/README.md +++ b/harnesses/l1-finality/README.md @@ -18,7 +18,7 @@ This works for: **Ethereum, Solana, TRON, Stellar, Hedera, SUI, Litecoin, Monero For chains where finality is faster than our poll interval, comparing two pointers at one instant doesn't measure finalization time — it measures the gap-at-instant, which collapses to zero when finalization catches up to head. The honest path is to subscribe to a push stream, record `T1 = time.Now()` when block N is first observed, and `T2 = time.Now()` when N becomes finalized. `lag = T2 − T1`, with millisecond precision, independent of chain timestamp resolution. -This works for: **BNB, Avalanche, TON**. +This works for: **BNB, Avalanche, Gram**. ## Per-chain methodology @@ -32,7 +32,7 @@ This works for: **BNB, Avalanche, TON**. | **Stellar** | HTTP poll | Horizon `/ledgers?order=desc&limit=2` | 1 ledger back (SCP-final) | Circle = 1, deterministic SCP | | **Hedera** | HTTP poll | Mirror `/api/v1/blocks?order=desc&limit=2` | 1 block back. Timestamps parsed at ns precision | Hashgraph aBFT deterministic | | **SUI** | HTTP poll | `sui_getLatestCheckpointSequenceNumber` + `sui_getCheckpoint` | 1 checkpoint back | Circle USDC = 1, Mysticeti finalizes in 1 | -| **TON** | SSE wall-clock | `tonapi.io/v2/sse/blocks?workchain=-1` (masterchain only) | Time between consecutive masterchain blocks | TON docs: a tx is final once included in a masterchain block, so block_N is final when block_N+1 commits | +| **Gram** | SSE wall-clock | `tonapi.io/v2/sse/blocks?workchain=-1` (masterchain only) | Time between consecutive masterchain blocks | Gram (formerly TON) docs: a tx is final once included in a masterchain block, so block_N is final when block_N+1 commits | | **Litecoin** | HTTP poll (probabilistic) | blockchair `/stats.best_block_height` and `/dashboards/block/{height}.block.time` | 12 confirmations | Coinbase deposit standard, post-April-2026 13-block MWEB reorg | | **Monero** | HTTP poll (probabilistic) | monero-rpc `get_info` + `get_block_header_by_height` (with cakewallet/sethforprivacy/monerujo failover) | 10 confirmations | Wallet protocol unlock period | | **Cardano** | HTTP poll (probabilistic) | koios `/tip` + `/blocks?block_height=eq.` | 15 confirmations | Above Coinbase 10 / Kraken 15. Far below the academic k=2160 (~12 h) | @@ -56,7 +56,7 @@ l1_finality_last_refresh_timestamp_seconds{chain} l1_finality_fetch_errors_total{chain, error_type} l1_finality_health{chain} # 1 if last sample succeeded -# Wall-clock-measured chains (BNB, Avalanche, TON) +# Wall-clock-measured chains (BNB, Avalanche, Gram) l1_finality_wallclock_lag_milliseconds{chain} # ms-precise gauge l1_finality_wallclock_lag_milliseconds_histogram # histogram for tail latency l1_finality_wallclock_health{chain} # 1 if WS/SSE connected @@ -74,7 +74,7 @@ l1_finality_wallclock_samples_total{chain} # cumulative count | Hedera | High | Hashgraph aBFT + ns-precision timestamps | | SUI | High | 1 checkpoint = Circle USDC standard | | Stellar | High | SCP deterministic, Circle = 1 | -| TON | High (after SSE refactor) | tonapi `workchain=-1` SSE stream, ms-precise | +| Gram | High (after SSE refactor) | tonapi `workchain=-1` SSE stream, ms-precise | | Cardano | Medium | 15-conf compromise between Coinbase 10 and Kraken 15. Academic k=2160 is theoretical; no actor uses it | | Litecoin | Medium | 12-conf post-April-2026 reorg; standard is evolving | | TRON | Medium | CEX confirmation counts vary 19–30; we use the 19-block protocol minimum | @@ -106,7 +106,7 @@ Deploy from this directory. No required env vars — public defaults work. Optio | `REFRESH_INTERVAL_SECONDS` | HTTP-poll cadence | Default 10, min 5. Doesn't affect WS-measured chains | | `LOGS_TOKEN` | Bearer token gating `/logs` | Optional | -The WS/SSE subscribers connect with hard-coded public endpoints (publicnode for BNB/Avalanche, tonapi.io for TON) — no auth required. +The WS/SSE subscribers connect with hard-coded public endpoints (publicnode for BNB/Avalanche, tonapi.io for Gram) — no auth required. ## Adding a chain @@ -118,7 +118,7 @@ The WS/SSE subscribers connect with hard-coded public endpoints (publicnode for ### Wall-clock-measured chain -1. Add a goroutine that maintains the WS/SSE subscription. See `evm_ws.go` (BNB/Avalanche) or `ton_ws.go` (TON) for the pattern. +1. Add a goroutine that maintains the WS/SSE subscription. See `evm_ws.go` (BNB/Avalanche) or `ton_ws.go` (Gram) for the pattern. The file is still named `ton_ws.go` after the chain's pre-rebrand identifier; rename safely once the harness is redeployed. 2. Record `firstSeen[height] = time.Now()` on each new-block event. 3. On finality observation (either an explicit finalized-tag advance or "next block referenced this one"), emit the lag via `wallClockLagGauge.WithLabelValues(slug).Set(lagMs)`. 4. Don't add the chain to the polled `Chains` config list — wall-clock chains run as separate goroutines. diff --git a/harnesses/l1-finality/cmd/script/config.go b/harnesses/l1-finality/cmd/script/config.go index 91270f66..e5b982ba 100644 --- a/harnesses/l1-finality/cmd/script/config.go +++ b/harnesses/l1-finality/cmd/script/config.go @@ -90,7 +90,7 @@ func loadConfig() *Config { // // SUI moved to high-frequency HTTP polling wall-clock — see // sui_ws.go. Same methodology mismatch as before fixed. - // TON removed from HTTP polling — same issue as BNB/Avalanche + // Gram (formerly TON) removed from HTTP polling — same issue as BNB/Avalanche // (masterchain blocks finalize in ~0.5s, polling 10s = wrong // methodology). Now measured via SSE wall-clock subscriber on // tonapi.io's /v2/sse/blocks stream. diff --git a/harnesses/l1-finality/cmd/script/ton.go b/harnesses/l1-finality/cmd/script/ton.go index d8f61a0a..7137eceb 100644 --- a/harnesses/l1-finality/cmd/script/ton.go +++ b/harnesses/l1-finality/cmd/script/ton.go @@ -10,7 +10,7 @@ import ( "time" ) -// TON: tonapi.io anonymous tier supports masterchain-head + blocks/{id} +// Gram (formerly TON): tonapi.io anonymous tier supports masterchain-head + blocks/{id} // reads. Toncenter free has 1 rps which we burst past with two block // fetches per cycle; tonapi is friendlier. Switching there. diff --git a/harnesses/l1-finality/cmd/script/ton_ws.go b/harnesses/l1-finality/cmd/script/ton_ws.go index 8b0f75be..d8a8f3a8 100644 --- a/harnesses/l1-finality/cmd/script/ton_ws.go +++ b/harnesses/l1-finality/cmd/script/ton_ws.go @@ -11,10 +11,12 @@ import ( "time" ) -// TON wall-clock finality measurement via tonapi.io SSE stream. +// Gram (formerly TON) wall-clock finality measurement via tonapi.io SSE stream. +// Function/type names and the TON_API_KEY env var keep their pre-rebrand +// identifiers so the deployed harness keeps booting without ops coordination. // // The tonapi `/v2/sse/blocks?workchain=-1` endpoint pushes one event per -// masterchain block (~0.4-0.7 s cadence). Per the TON payment-processor +// masterchain block (~0.4-0.7 s cadence). Per the Gram (formerly TON) payment-processor // docs, "a transaction is finalized once included in a masterchain // block" — so the wall-clock interval between block N and block N+1 is // the time the network needs to finalize block N. Recording the first @@ -38,7 +40,7 @@ type tonSSEMessage struct { FileHash string `json:"file_hash"` } -// StartTONWallClock launches a persistent SSE subscriber for TON +// StartTONWallClock launches a persistent SSE subscriber for Gram (formerly TON) // masterchain. Reconnects with exponential backoff on error. When the // SSE stream is unavailable (tonapi gated it behind auth in 2026-06 and // deprecated it in favor of webhooks), falls back to fast-polling the @@ -90,7 +92,7 @@ func pollTONWallClock(window time.Duration) { wallClockHealth.WithLabelValues("ton").Set(1) healthy = true } - // Cap at 2 s in poll mode: TON masterchain cadence is 0.4-0.7 s, + // Cap at 2 s in poll mode: Gram masterchain cadence is 0.4-0.7 s, // so a multi-second "lag" here is poll aliasing (429 backoff // stretching the cadence), not finality. Observed pre-cap: 10.6 s // garbage samples polluting the 24h histogram. diff --git a/harnesses/wallet-labels/README.md b/harnesses/wallet-labels/README.md index 9efe49a2..3911b098 100644 --- a/harnesses/wallet-labels/README.md +++ b/harnesses/wallet-labels/README.md @@ -15,7 +15,7 @@ Emits Prometheus metrics consumed by openchainbench.com. | Helius | API key | Solana | | Blockscout | none | ethereum, base, optimism, polygon, gnosis | | OLI (Open Labels Initiative) | none | EVM via Base EAS | -| TonAPI | none | TON | +| TonAPI | none | Gram (formerly TON) | | StellarExpert | none | Stellar | | XRPScan | none | XRP | | WalletExplorer | none | Bitcoin | diff --git a/harnesses/wallet-labels/cmd/script/integration.go b/harnesses/wallet-labels/cmd/script/integration.go index 51b5b6e1..a948cabd 100644 --- a/harnesses/wallet-labels/cmd/script/integration.go +++ b/harnesses/wallet-labels/cmd/script/integration.go @@ -26,7 +26,7 @@ var integrationCases = []testCase{ {"bnb", "0xF977814e90dA44bFA03b6295A0616a897441aceC", "Binance Hot 8 (BSC)"}, // Solana {"solana", "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1", "Raydium Authority"}, - // TON + // Gram (formerly TON) {"ton", "EQB3ncyBUTjZUA5EnFKR5_EnOMI9V1tTEAAPaiU71gc4TiUt", "STON.fi DEX"}, // Stellar {"stellar", "GAHK7EEG2WWHVKDNT4CEQFZGKF2LGDSW2IVM4S5DP42RBW3K6BTODB4A", "Binance"}, diff --git a/public/logos/ton.png b/public/logos/ton.png deleted file mode 100644 index 6f10e885f8d077b099add6710711e3de8c977cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7199 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 diff --git a/public/logos/ton.svg b/public/logos/ton.svg new file mode 100644 index 00000000..6a79055b --- /dev/null +++ b/public/logos/ton.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index 4fe19c34..80e6719b 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -287,60 +287,6 @@ export const PROVIDER_REGISTRY: Record = { "Perp DEX on Polygon, Arbitrum, Base and Solana. Pool-based execution against the gToken vaults, oracle-priced trades with synthetic leverage.", twitter: "@GainsNetwork_io", }, - drift: { - url: "https://drift.trade", - description: - "Solana perp DEX with hybrid AMM/orderbook model, sub-second matching via Anchor program.", - twitter: "@DriftProtocol", - }, - vertex: { - url: "https://www.nado.xyz", - description: - "Arbitrum perp + spot orderbook DEX with off-chain matching and on-chain settlement. Migrating to Ink Foundation.", - twitter: "@vertex_protocol", - }, - edgex: { - url: "https://edgex.exchange", - description: - "zkSync-based perp DEX with low taker fees and a documented public REST API.", - twitter: "@edgex_exchange", - }, - extended: { - url: "https://extended.exchange", - description: - "Starknet perp DEX (formerly X10) with order book matching and instant withdrawals via STARK proofs.", - twitter: "@ExtendedExchange", - }, - aevo: { - url: "https://aevo.xyz", - description: - "OP Stack perp DEX with deep options support, event-driven flow.", - twitter: "@aevoxyz", - }, - pacifica: { - url: "https://pacifica.fi", - description: - "Solana perp DEX optimized for high-frequency trading, oracle-anchored funding.", - twitter: "@pacifica_fi", - }, - variational: { - url: "https://variational.io", - description: - "Arbitrum P2P derivatives venue with pre-computed quote sizes for institutional flow.", - twitter: "@variational_io", - }, - ostium: { - url: "https://ostium.app", - description: - "Arbitrum-based perp DEX specialized in RWA exposure including FX, commodities and indices.", - twitter: "@ostium_app", - }, - grvt: { - url: "https://grvt.io", - description: - "zkSync hybrid CEX/DEX perp venue with privacy-preserving order matching.", - twitter: "@grvt_io", - }, // ─── Wallet labels / explorers ──────────────────────────────── blockscout: { @@ -358,7 +304,7 @@ export const PROVIDER_REGISTRY: Record = { tonapi: { url: "https://tonapi.io", description: - "REST API for the TON blockchain. Returns account metadata, known entity names, and address book labels for TON wallets.", + "REST API for the Gram (TON) blockchain. Returns account metadata, known entity names, and address book labels for Gram wallets.", twitter: "@tonapi_io", }, stellarexpert: { @@ -401,7 +347,7 @@ export const PROVIDER_REGISTRY: Record = { ton: { url: "https://ton.org", description: - "BFT Proof-of-Stake L1 with a sharded masterchain and workchain architecture. Deterministic finality within a few seconds. Block time near 5 seconds.", + "Gram (formerly Toncoin, ticker renamed to GRAM in June 2026). BFT Proof-of-Stake L1 with a sharded masterchain and workchain architecture. Deterministic finality within a few seconds. Block time near 5 seconds.", twitter: "@ton_blockchain", }, stellar: { @@ -1343,6 +1289,62 @@ export const PROVIDER_REGISTRY: Record = { "Deployer fee collected via the on-chain deployerFee field", ], }, + + // ─── Perp DEX cohort (perps hub /perps) ─── + drift: { + url: "https://drift.trade", + description: + "Solana perp DEX with hybrid AMM/orderbook model, sub-second matching via Anchor program.", + twitter: "@DriftProtocol", + }, + vertex: { + url: "https://www.nado.xyz", + description: + "Arbitrum perp and spot orderbook DEX with off-chain matching and on-chain settlement. Migrating to Ink Foundation.", + twitter: "@vertex_protocol", + }, + edgex: { + url: "https://edgex.exchange", + description: + "zkSync-based perp DEX with low taker fees and a documented public REST API.", + twitter: "@edgex_exchange", + }, + extended: { + url: "https://extended.exchange", + description: + "Starknet perp DEX (formerly X10) with order book matching and instant withdrawals via STARK proofs.", + twitter: "@ExtendedExchange", + }, + aevo: { + url: "https://aevo.xyz", + description: + "OP Stack perp DEX with deep options support, event-driven flow.", + twitter: "@aevoxyz", + }, + pacifica: { + url: "https://pacifica.fi", + description: + "Solana perp DEX optimized for high-frequency trading, oracle-anchored funding.", + twitter: "@pacifica_fi", + }, + variational: { + url: "https://variational.io", + description: + "Arbitrum P2P derivatives venue with pre-computed quote sizes for institutional flow.", + twitter: "@variational_io", + }, + ostium: { + url: "https://ostium.app", + description: + "Arbitrum-based perp DEX specialized in RWA exposure including FX, commodities and indices.", + twitter: "@ostium_app", + }, + grvt: { + url: "https://grvt.io", + description: + "zkSync hybrid CEX/DEX perp venue with privacy-preserving order matching.", + twitter: "@grvt_io", + }, }; /** diff --git a/src/lib/brand.ts b/src/lib/brand.ts index f8275545..ab3198c3 100644 --- a/src/lib/brand.ts +++ b/src/lib/brand.ts @@ -11,7 +11,7 @@ * up automatically. */ -type Brand = { +export type Brand = { color: string; /** Whether the brand color is dark - picked by Logo to flip its text color. */ dark?: boolean; @@ -26,7 +26,7 @@ const BRANDS: Record = { tron: { color: "#E50914" }, sui: { color: "#4DA2FF" }, stellar: { color: "#08B5E5" }, - ton: { color: "#0098EA" }, + ton: { color: "#30A1F5" }, cardano: { color: "#0033AD", dark: true }, litecoin: { color: "#345D9D", dark: true }, monero: { color: "#FF6600" }, diff --git a/src/lib/chains.ts b/src/lib/chains.ts index 9f0f4826..7744d872 100644 --- a/src/lib/chains.ts +++ b/src/lib/chains.ts @@ -15,7 +15,7 @@ import { cache } from "react"; import { getBenchmarksSafe } from "@/data/benchmarks"; import type { Benchmark } from "@/types/benchmark"; -type ChainCategory = "L1" | "L2"; +export type ChainCategory = "L1" | "L2"; export type ChainEntry = { slug: string; @@ -77,11 +77,11 @@ export const CHAINS: ChainEntry[] = [ }, { slug: "ton", - label: "TON", + label: "Gram", category: "L1", - nativeSymbol: "TON", + nativeSymbol: "GRAM", description: - "BAG consensus, masterchain + workchains, deterministic finality under one second on the masterchain commit.", + "Gram (formerly TON / Toncoin). BAG consensus, masterchain + workchains, deterministic finality under one second on the masterchain commit. Native token renamed Toncoin → Gram in June 2026.", }, { slug: "stellar", diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 074f65bb..53ed943b 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -21,7 +21,7 @@ const RAW: Record = { tron: "/logos/tron.png", sui: "/logos/sui.png", stellar: "/logos/stellar.png", - ton: "/logos/ton.png", + ton: "/logos/ton.svg", cardano: "/logos/cardano.png", litecoin: "/logos/litecoin.png", monero: "/logos/monero.png", @@ -53,6 +53,17 @@ const RAW: Record = { manifold: "/logos/manifold.svg", myriad: "/logos/myriad.png", + // ─── Perp DEX cohort (perps hub /perps) ─── + drift: "/logos/drift.svg", + vertex: "/logos/vertex.png", + edgex: "/logos/edgex.jpg", + extended: "/logos/extended.svg", + aevo: "/logos/aevo.svg", + pacifica: "/logos/pacifica.svg", + variational: "/logos/variational.png", + ostium: "/logos/ostium.png", + grvt: "/logos/grvt.jpg", + // ─── Prediction market categories (polymarket-resolution-delay) ─── // Bench rows are category buckets, not products, so these stay // unregistered in PROVIDER_REGISTRY (no product page link). @@ -176,17 +187,6 @@ const RAW: Record = { paradex: "/logos/paradex.svg", aster: "/logos/aster.svg", - // ─── Perp DEX cohort (volume-share, open-interest, funding-stability) ─── - drift: "/logos/drift.svg", - vertex: "/logos/vertex.png", - edgex: "/logos/edgex.jpg", - extended: "/logos/extended.svg", - aevo: "/logos/aevo.svg", - pacifica: "/logos/pacifica.svg", - variational: "/logos/variational.png", - ostium: "/logos/ostium.png", - grvt: "/logos/grvt.jpg", - // ─── Hyperliquid HIP-3 deployers (bench № 035) ─── xyz: "/logos/xyz.png", vntl: "/logos/vntl.png",