diff --git a/benchmarks/l1-finality.yml b/benchmarks/l1-finality.yml index 900374f5..9f3dc0b1 100644 --- a/benchmarks/l1-finality.yml +++ b/benchmarks/l1-finality.yml @@ -21,7 +21,7 @@ faq: - 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 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." + a: "Gram's BAG consensus (the network formerly branded TON, with native token renamed Toncoin → Gram in June 2026) pushes masterchain finality to {{p50:gram}} (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?" @@ -54,10 +54,10 @@ per_chain_explainer: h2: "SUI finality time" 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 + - slug: gram h2: "Gram finality time" body: | - 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. + Gram's BAG consensus (the chain formerly branded TON, native token renamed Toncoin → Gram in June 2026) pushes masterchain finality to {{p50:gram}} (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: | @@ -187,18 +187,22 @@ providers: sample_size: increase(l1_finality_wallclock_samples_total{chain="sui"}[24h]) series: l1_finality_wallclock_lag_milliseconds{chain="sui"} - - slug: ton + - slug: gram name: Gram tag: Masterchain commit, polled via tonapi.io 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." + # Prom selectors straddle ton|gram during the harness relabel window. + # The harness on Railway still emits chain="ton"; once it redeploys + # with chain="gram", the regex keeps matching both. Drop the ton + # branch after ~7 days of clean gram-labelled data. 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]) - p99: quantile_over_time(0.99, l1_finality_wallclock_lag_milliseconds{chain="ton"}[24h]) - mean: avg_over_time(l1_finality_wallclock_lag_milliseconds{chain="ton"}[24h]) - success: avg_over_time(l1_finality_wallclock_health{chain="ton"}[24h]) - sample_size: increase(l1_finality_wallclock_samples_total{chain="ton"}[24h]) - series: l1_finality_wallclock_lag_milliseconds{chain="ton"} + p50: quantile_over_time(0.50, l1_finality_wallclock_lag_milliseconds{chain=~"ton|gram"}[24h]) + p90: quantile_over_time(0.90, l1_finality_wallclock_lag_milliseconds{chain=~"ton|gram"}[24h]) + p99: quantile_over_time(0.99, l1_finality_wallclock_lag_milliseconds{chain=~"ton|gram"}[24h]) + mean: avg_over_time(l1_finality_wallclock_lag_milliseconds{chain=~"ton|gram"}[24h]) + success: avg_over_time(l1_finality_wallclock_health{chain=~"ton|gram"}[24h]) + sample_size: increase(l1_finality_wallclock_samples_total{chain=~"ton|gram"}[24h]) + series: l1_finality_wallclock_lag_milliseconds{chain=~"ton|gram"} - slug: stellar name: Stellar diff --git a/benchmarks/network-fees.yml b/benchmarks/network-fees.yml index 6a32477e..368b822a 100644 --- a/benchmarks/network-fees.yml +++ b/benchmarks/network-fees.yml @@ -63,10 +63,10 @@ per_chain_explainer: h2: "Sui transaction fee" 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 + - slug: gram h2: "Gram transaction fee" body: | - 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. + Gram (formerly TON) native transfer fee is {{p50:gram}} (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: | @@ -265,18 +265,21 @@ providers: success: avg_over_time(tx_fee_health{chain="sui"}[24h]) series: tx_fee_native_transfer_usd{chain="sui",tier="std"} - - slug: ton + - slug: gram name: Gram layer: l1 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." + # Straddle the ton/gram chain label during the harness relabel + # window. The harness Railway service currently emits chain="ton"; + # the regex keeps matching once it redeploys with chain="gram". 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]) - p99: quantile_over_time(0.99, tx_fee_native_transfer_usd{chain="ton",tier="single"}[24h]) - mean: avg_over_time(tx_fee_native_transfer_usd{chain="ton",tier="single"}[24h]) - success: avg_over_time(tx_fee_health{chain="ton"}[24h]) - series: tx_fee_native_transfer_usd{chain="ton",tier="single"} + p50: quantile_over_time(0.50, tx_fee_native_transfer_usd{chain=~"ton|gram",tier="single"}[24h]) + p90: quantile_over_time(0.90, tx_fee_native_transfer_usd{chain=~"ton|gram",tier="single"}[24h]) + p99: quantile_over_time(0.99, tx_fee_native_transfer_usd{chain=~"ton|gram",tier="single"}[24h]) + mean: avg_over_time(tx_fee_native_transfer_usd{chain=~"ton|gram",tier="single"}[24h]) + success: avg_over_time(tx_fee_health{chain=~"ton|gram"}[24h]) + series: tx_fee_native_transfer_usd{chain=~"ton|gram",tier="single"} - slug: stellar name: Stellar diff --git a/benchmarks/wallet-labels-coverage.yml b/benchmarks/wallet-labels-coverage.yml index 7655cddb..cfef9907 100644 --- a/benchmarks/wallet-labels-coverage.yml +++ b/benchmarks/wallet-labels-coverage.yml @@ -86,7 +86,7 @@ per_chain_explainer: h2: "Best wallet labeling API on Solana" 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 + - slug: gram h2: "Best wallet labeling API on Gram" body: | 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. @@ -163,6 +163,10 @@ dimensions: - { value: arbitrum, label: Arbitrum } - { value: polygon, label: Polygon } - { value: optimism, label: Optimism } + # Dimension value kept as `ton` (the Prom label the wallet-labels + # harness emits). The dropdown shows "Gram" via label. Once the + # harness redeploys with chain="gram", flip value to `gram` and add + # the straddle to every selector in this file. - { value: ton, label: Gram } - { value: stellar, label: Stellar } - { value: xrp, label: XRP } diff --git a/next.config.ts b/next.config.ts index 434328c4..5fec030c 100644 --- a/next.config.ts +++ b/next.config.ts @@ -131,7 +131,7 @@ const nextConfig: NextConfig = { "bnb", "avalanche", "sui", - "ton", + "gram", "stellar", "tron", "cardano", @@ -163,6 +163,26 @@ const nextConfig: NextConfig = { destination: "/benchmarks/rpc-capabilities", permanent: true, }, + // TON → Gram token rebrand (June 2026). Chain slug renamed + // ton → gram across CHAINS, PROVIDER_REGISTRY, per_chain_explainer + // and bench provider entries. Pin permanent 308 redirects from the + // old paths so inbound links + Google SERP entries land on the new + // canonical without losing rank signal. + { + source: "/chains/ton", + destination: "/chains/gram", + permanent: true, + }, + { + source: "/products/ton", + destination: "/chains/gram", + permanent: true, + }, + { + source: "/benchmarks/:slug/ton", + destination: "/benchmarks/:slug/gram", + permanent: true, + }, ...chainRedirects, ]; }, diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index 80e6719b..da1d3083 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -344,7 +344,7 @@ export const PROVIDER_REGISTRY: Record = { "Move-based L1 using Mysticeti BFT consensus over a DAG. Owned-object transactions bypass consensus via Fast Path. Deterministic finality under one second.", twitter: "@SuiNetwork", }, - ton: { + gram: { url: "https://ton.org", description: "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.", diff --git a/src/lib/brand.ts b/src/lib/brand.ts index ab3198c3..f4f18c2f 100644 --- a/src/lib/brand.ts +++ b/src/lib/brand.ts @@ -26,7 +26,7 @@ const BRANDS: Record = { tron: { color: "#E50914" }, sui: { color: "#4DA2FF" }, stellar: { color: "#08B5E5" }, - ton: { color: "#30A1F5" }, + gram: { color: "#30A1F5" }, cardano: { color: "#0033AD", dark: true }, litecoin: { color: "#345D9D", dark: true }, monero: { color: "#FF6600" }, diff --git a/src/lib/chain-kpis.ts b/src/lib/chain-kpis.ts index 28db974e..aaf55427 100644 --- a/src/lib/chain-kpis.ts +++ b/src/lib/chain-kpis.ts @@ -110,7 +110,7 @@ const DEFILLAMA_CHAIN_NAME: Record = { bnb: "BSC", avalanche: "Avalanche", sui: "Sui", - ton: "TON", + gram: "TON", // DefiLlama API still uses "TON" as the chain name (verified live) stellar: "Stellar", tron: "Tron", cardano: "Cardano", diff --git a/src/lib/chains.ts b/src/lib/chains.ts index 7744d872..875a073f 100644 --- a/src/lib/chains.ts +++ b/src/lib/chains.ts @@ -76,7 +76,7 @@ export const CHAINS: ChainEntry[] = [ "Mysticeti DAG-BFT consensus, reference gas price model, deterministic sub-second finality.", }, { - slug: "ton", + slug: "gram", label: "Gram", category: "L1", nativeSymbol: "GRAM", diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 53ed943b..68765d06 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.svg", + gram: "/logos/ton.svg", cardano: "/logos/cardano.png", litecoin: "/logos/litecoin.png", monero: "/logos/monero.png", diff --git a/src/lib/providers.ts b/src/lib/providers.ts index c90e5155..2c049a6b 100644 --- a/src/lib/providers.ts +++ b/src/lib/providers.ts @@ -30,6 +30,11 @@ const PRODUCT_ALIASES: Record = { // Sub-products → parent brand "helius-sender": "helius", "publicnode-feehistory": "publicnode", + // TON → Gram rebrand (June 2026). Stale inbound references to slug + // "ton" resolve to canonical "gram" so older links, search hits, and + // any external citation that still says ton/Toncoin lands on the + // correct page. + ton: "gram", // Chain official RPC → chain brand "arbitrum-official": "arbitrum", "avalanche-official": "avalanche", @@ -76,6 +81,12 @@ const CANONICAL_NAMES: Record = { coinpaprika: "CoinPaprika", coingecko: "CoinGecko", coinstats: "CoinStats", + // Gram (formerly Toncoin). Without explicit casing, the title-case + // fallback would render the slug-renamed entry as "Gram" already, but + // the API surface for TonAPI (the provider, NOT the chain) keeps its + // brand casing. + gram: "Gram", + tonapi: "TonAPI", }; function titleCaseSlug(s: string): string {