From 097b9ccb33e85c83c66b850202bd5e2d818a435c Mon Sep 17 00:00:00 2001 From: Brandon Kramer Date: Mon, 14 Sep 2026 20:45:28 -0400 Subject: [PATCH 1/2] resolved inconsistencies in extended blocks model for supported networks table --- website/src/supportedNetworks/utils.ts | 29 +++++++++++++------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/website/src/supportedNetworks/utils.ts b/website/src/supportedNetworks/utils.ts index f016b16a111a..953fd7461767 100644 --- a/website/src/supportedNetworks/utils.ts +++ b/website/src/supportedNetworks/utils.ts @@ -30,8 +30,11 @@ export async function getSupportedNetworks() { return registry.networks .flatMap((network) => { const [subgraphsSupportLevel, subgraphsProvider] = getSubgraphsSupportLevelAndProvider(network) - const substreamsSupportLevel = getSubstreamsSupportLevel(network) - const firehoseSupportLevel = getFirehoseSupportLevel(network) + // Substreams and Firehose share one combined signal (see getFirehoseSubstreamsSupportLevel); + // both columns render the same mark. + const firehoseSubstreamsSupportLevel = getFirehoseSubstreamsSupportLevel(network) + const substreamsSupportLevel = firehoseSubstreamsSupportLevel + const firehoseSupportLevel = firehoseSubstreamsSupportLevel if (subgraphsSupportLevel === 'none' && substreamsSupportLevel === 'none' && firehoseSupportLevel === 'none') { return [] } @@ -75,18 +78,16 @@ function getSubgraphsSupportLevelAndProvider(network: Network): ['none' | 'basic return ['none', null] } -function getSubstreamsSupportLevel(network: Network): 'none' | 'basic' | 'full' { - const providerCount = network.services.substreams?.length || 0 - if (providerCount >= 2) return 'full' - if (providerCount === 1) return 'basic' - return 'none' -} - -function getFirehoseSupportLevel(network: Network): 'none' | 'basic' | 'full' { - const providerCount = network.services.firehose?.length || 0 - if (providerCount >= 2) return 'full' - if (providerCount === 1) return 'basic' - return 'none' +// Substreams and Firehose share a single support signal. Both are powered by the same +// Firehose block data, so the table's "Base" vs "Extended (EVM only)" mark reflects the +// network's block model, not how many providers serve the data. +// - 'none' -> no Firehose or Substreams provider is serving the network +// - 'basic' -> base blocks + at least one Firehose or Substreams provider (renders as a single check) +// - 'full' -> extended (EVM) blocks + at least one Firehose or Substreams provider (renders as a double check) +function getFirehoseSubstreamsSupportLevel(network: Network): 'none' | 'basic' | 'full' { + const hasProvider = (network.services.substreams?.length || 0) > 0 || (network.services.firehose?.length || 0) > 0 + if (!hasProvider) return 'none' + return network.firehose?.evmExtendedModel ? 'full' : 'basic' } export type SupportedNetwork = Awaited>[number] From 6a776156bfefacc4c86759696b3ccde757d83e8e Mon Sep 17 00:00:00 2001 From: Brandon Kramer Date: Tue, 15 Sep 2026 14:41:32 -0400 Subject: [PATCH 2/2] bumped web3icons version, removed anubis icon workaround, customized anubis landing page --- .../supportedNetworks/NetworkDetailsPage.tsx | 2 +- website/src/supportedNetworks/NetworkIcon.tsx | 58 ------------------- .../src/supportedNetworks/NetworksTable.tsx | 2 +- .../customContent/anubis.mdx | 41 +++++-------- website/src/supportedNetworks/index.ts | 1 - 5 files changed, 16 insertions(+), 88 deletions(-) delete mode 100644 website/src/supportedNetworks/NetworkIcon.tsx diff --git a/website/src/supportedNetworks/NetworkDetailsPage.tsx b/website/src/supportedNetworks/NetworkDetailsPage.tsx index e92dfc218cd5..f9f3131f3c08 100644 --- a/website/src/supportedNetworks/NetworkDetailsPage.tsx +++ b/website/src/supportedNetworks/NetworkDetailsPage.tsx @@ -1,10 +1,10 @@ import { ExperimentalCopyButton, ExperimentalDescriptionList, ExperimentalLink } from '@edgeandnode/gds' +import { NetworkIcon } from '@edgeandnode/go' import { Card, TimeIcon } from '@/components' import { useI18n } from '@/i18n' import { customNetworkContent } from './customContent' -import { NetworkIcon } from './NetworkIcon' import { evmCards, evmSubgraphsOnlyCards, nonEvmCards } from './ResourceCards' import { type SupportedNetwork } from './utils' diff --git a/website/src/supportedNetworks/NetworkIcon.tsx b/website/src/supportedNetworks/NetworkIcon.tsx deleted file mode 100644 index 4a18106f234e..000000000000 --- a/website/src/supportedNetworks/NetworkIcon.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import type { ComponentProps } from 'react' - -import { ExperimentalIcon } from '@edgeandnode/gds' -import { NetworkIcon as GdsNetworkIcon } from '@edgeandnode/go' - -/** - * Supported Networks icon. - * - * Delegates to the shared `@edgeandnode/go` `NetworkIcon`, which resolves a - * network's logo from the hard-coded icon set (keyed by CAIP-2 id) and, as a - * fallback, from web3icons. Some networks in the registry are in neither set, - * so that component renders an empty icon slot for them. - * - * This wrapper fills those gaps with a locally bundled brand mark. Anubis - * (`eip155:6714` mainnet, `eip155:2526` testnet) is the first such network. - * Add future local-only marks the same way: draw the badge and match on its - * CAIP-2 id (or registry `id`) below. - */ - -type Props = ComponentProps - -const ANUBIS_CAIP2_IDS = new Set(['eip155:6714', 'eip155:2526']) - -function isAnubis(network: Props['network']): boolean { - if (ANUBIS_CAIP2_IDS.has(network.caip2Id)) return true - const id = (network as { id?: string }).id ?? '' - return id === 'anubis' || id.startsWith('anubis-') -} - -/** - * Anubis brand mark on a brand-green badge. The mark artwork lives in - * graph-gtm-kit (design/templates/anubis-chain); the dark "Logo Mark Light" - * ink (#191818) is paired with the brand-green (#87DB00) surface, and the - * paths below are that mark centered in a 40x40 badge. - */ -function AnubisIcon({ alt, size, className, style }: Omit, 'children'>) { - return ( - - - - ) -} - -export function NetworkIcon({ network, ...props }: Props) { - if (isAnubis(network)) { - return - } - return -} -NetworkIcon.isGdsIcon = true diff --git a/website/src/supportedNetworks/NetworksTable.tsx b/website/src/supportedNetworks/NetworksTable.tsx index fd5eb0cc123d..800f81d1052a 100644 --- a/website/src/supportedNetworks/NetworksTable.tsx +++ b/website/src/supportedNetworks/NetworksTable.tsx @@ -13,11 +13,11 @@ import { useDebounce, } from '@edgeandnode/gds' import { Check, Checks, EyeClosed } from '@edgeandnode/gds/icons' +import { NetworkIcon } from '@edgeandnode/go' import { Callout, Table } from '@/components' import { useI18n } from '@/i18n' -import { NetworkIcon } from './NetworkIcon' import { type SupportedNetwork } from './utils' export function NetworksTable({ networks }: { networks: SupportedNetwork[] }) { diff --git a/website/src/supportedNetworks/customContent/anubis.mdx b/website/src/supportedNetworks/customContent/anubis.mdx index 8dd054cf3d3f..0b52a4f84cd5 100644 --- a/website/src/supportedNetworks/customContent/anubis.mdx +++ b/website/src/supportedNetworks/customContent/anubis.mdx @@ -1,20 +1,16 @@ -## Indexing Anubis with Subgraphs +### Getting Started on Anubis -Getting historical data off a smart contract is hard. You write your own indexer, run your own database, and handle chain reorganizations yourself. The Graph removes that work. It gives you an open API, called a Subgraph, that you query with GraphQL. +Anubis Chain is a privacy-focused, EVM-compatible Layer 1 that pairs base-layer privacy (PLONK ZK proofs and selective disclosure) with publicly verifiable onchain data, live on mainnet since April 2026 and already running 1M+ transactions a day across a growing DeFi ecosystem (RocketSwap, AWAKE). A subgraph could index that onchain activity — DEX swaps, pools, and liquidity; lending and RWA positions; token transfers and holder balances; and contract events — and serve it via GraphQL. That powers DeFi frontends, analytics dashboards, block explorers, portfolio trackers, and onchain agents without teams having to run their own indexing infrastructure. -Anubis is EVM-compatible, so the Subgraph workflow is the same as on most EVM chains. You point a Subgraph at your Anubis contract, define the entities you want, and Indexers on The Graph Network keep those entities current and queryable. +Importantly, Anubis is a selective-privacy chain. A Subgraph can only index data that is public on-chain. Transparent transactions, and the events they emit, are fully indexable. Data inside shielded (PLONK ZK) transactions is not visible on-chain, so it cannot be indexed. Design your contract's public events with this in mind if you want that data to be queryable. -> [!NOTE] Anubis is a selective-privacy chain. A Subgraph can only index data that is public on-chain. Transparent transactions, and the events they emit, are fully indexable. Data inside shielded (PLONK ZK) transactions is not visible on-chain, so it cannot be indexed. Design your contract's public events with this in mind if you want that data to be queryable. +### Indexing Anubis with Subgraphs -## Anubis network reference +Getting historical data off a smart contract is hard. You write your own indexer, run your own database, and handle chain reorganizations yourself. The Graph removes that work. It gives you an open API, called a Subgraph, that you query with GraphQL. -| Parameter | Mainnet | Testnet | -| ------------ | --------------------- | ---------------- | -| Network name | ANUBIS Mainnet | ANUBIS Testnet | -| Chain ID | `6714` (`0x1a3a`) | `2526` (`0x9de`) | -| Gas token | `gasDAI` (DAI-pegged) | `ANUBI` | +Anubis is EVM-compatible, so the Subgraph workflow is the same as on most EVM chains. You point a Subgraph at your Anubis contract, define the entities you want, and Indexers on The Graph Network keep those entities current and queryable. -## Quick start +### Quick Start Building a Subgraph for Anubis takes three steps: @@ -26,7 +22,7 @@ See the [Subgraph pricing page](https://thegraph.com/studio-pricing/) for curren > [!NOTE] Anubis is supported on The Graph Network, but does not currently have Subgraph Studio testing/staging support. Skip the standard `graph deploy` and Studio playground path. Instead, you can validate your Subgraph locally (see below) or publish directly to The Graph Network, where a decentralized Indexer that supports Anubis indexes it. -### Step 1: Initialize your Subgraph project +#### Step 1: Initialize your Subgraph project Install the Graph CLI with the package manager you prefer: @@ -64,7 +60,7 @@ The CLI walks you through a set of prompts. Anubis is a custom EVM network, so p > [!NOTE] The `network` value you enter (`anubis`) must match the network identifier that The Graph has registered for Anubis. If `graph init` does not recognize the network, scaffold with any EVM network and set the `network` field manually in `subgraph.yaml` (next step). -### Step 2: Write and build your Subgraph +#### Step 2: Write and build your Subgraph You work with three files: @@ -109,7 +105,7 @@ graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 my-anubi Query the local endpoint until your entities look right, then publish. -### Step 3: Publish to The Graph Network +#### Step 3: Publish to The Graph Network This is the recommended path for Anubis. Publishing is an on-chain action that: @@ -128,7 +124,7 @@ A browser window opens. Connect your wallet, add metadata (name, description, im > [!TIP] During the publish transaction, you can add 500 GRT in curation signal to save on gas fees. Signal tells Indexers that your Subgraph is worth indexing. Any Subgraph with 500 GRT or more signal will automatically be indexed; without signal, no Indexer is incentivized to pick up your Subgraph. -### Step 4: Query your Subgraph +#### Step 4: Query your Subgraph After you publish, open your Subgraph in [Graph Explorer](https://thegraph.com/explorer/) and copy its query URL from the **Query** button. @@ -137,9 +133,9 @@ After you publish, open your Subgraph in [Graph Explorer](https://thegraph.com/e See the [Subgraph pricing page](https://thegraph.com/studio-pricing/) for query rates, and [Querying The Graph](/subgraphs/querying/introduction/) for the full query API. -## Appendix +### Appendix -### Sample GraphQL query +#### Sample GraphQL query ```graphql { @@ -153,7 +149,7 @@ See the [Subgraph pricing page](https://thegraph.com/studio-pricing/) for query } ``` -### Querying from JavaScript +#### Querying from JavaScript ```js const query = ` @@ -177,12 +173,3 @@ const res = await fetch('https://gateway.thegraph.com/api//subgraphs/id const { data } = await res.json() console.log(data.transfers) ``` - -### Resources - -- [The Graph: Subgraphs overview](/subgraphs/developing/introduction/) -- [Creating a Subgraph](/subgraphs/developing/creating/starting-your-subgraph/) -- [Publishing a Subgraph](/subgraphs/developing/publishing/publishing-a-subgraph/) -- [Querying The Graph](/subgraphs/querying/introduction/) -- [Graph Explorer](https://thegraph.com/explorer/) -- [Anubis Network docs](https://anubis-network.gitbook.io/anubis-network) and [ChainList (6714)](https://chainlist.org/chain/6714) diff --git a/website/src/supportedNetworks/index.ts b/website/src/supportedNetworks/index.ts index b8534517c703..538545e9a757 100644 --- a/website/src/supportedNetworks/index.ts +++ b/website/src/supportedNetworks/index.ts @@ -1,4 +1,3 @@ export * from './NetworkDetailsPage' -export * from './NetworkIcon' export * from './NetworksTable' export * from './utils'