Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 15 additions & 11 deletions benchmarks/l1-finality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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?"
Expand Down Expand Up @@ -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: |
Expand Down Expand Up @@ -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
Expand Down
21 changes: 12 additions & 9 deletions benchmarks/network-fees.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand Down Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion benchmarks/wallet-labels-coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 }
Expand Down
22 changes: 21 additions & 1 deletion next.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ const nextConfig: NextConfig = {
"bnb",
"avalanche",
"sui",
"ton",
"gram",
"stellar",
"tron",
"cardano",
Expand Down Expand Up @@ -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,
];
},
Expand Down
2 changes: 1 addition & 1 deletion src/data/provider-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ export const PROVIDER_REGISTRY: Record<string, ProviderRegistryEntry> = {
"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.",
Expand Down
2 changes: 1 addition & 1 deletion src/lib/brand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ const BRANDS: Record<string, Brand> = {
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" },
Expand Down
2 changes: 1 addition & 1 deletion src/lib/chain-kpis.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ const DEFILLAMA_CHAIN_NAME: Record<string, string> = {
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",
Expand Down
2 changes: 1 addition & 1 deletion src/lib/chains.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
2 changes: 1 addition & 1 deletion src/lib/logo-manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const RAW: Record<string, string> = {
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",
Expand Down
11 changes: 11 additions & 0 deletions src/lib/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ const PRODUCT_ALIASES: Record<string, string> = {
// 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",
Expand Down Expand Up @@ -76,6 +81,12 @@ const CANONICAL_NAMES: Record<string, string> = {
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 {
Expand Down
Loading