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
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@
"@babel/core": "7.26.7",
"@uniswap/sdk-core": "7.12.2",
"@uniswap/v3-sdk": "3.29.2",
"@web3icons/react": "4.1.21"
"@web3icons/react": "4.1.22"
}
}
20 changes: 10 additions & 10 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion website/src/supportedNetworks/NetworkDetailsPage.tsx
Original file line number Diff line number Diff line change
@@ -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'

Expand Down
58 changes: 0 additions & 58 deletions website/src/supportedNetworks/NetworkIcon.tsx

This file was deleted.

2 changes: 1 addition & 1 deletion website/src/supportedNetworks/NetworksTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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[] }) {
Expand Down
41 changes: 14 additions & 27 deletions website/src/supportedNetworks/customContent/anubis.mdx
Original file line number Diff line number Diff line change
@@ -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:

Expand All @@ -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:

Expand Down Expand Up @@ -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:

Expand Down Expand Up @@ -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:

Expand All @@ -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.

Expand All @@ -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
{
Expand All @@ -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 = `
Expand All @@ -177,12 +173,3 @@ const res = await fetch('https://gateway.thegraph.com/api/<API_KEY>/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)
1 change: 0 additions & 1 deletion website/src/supportedNetworks/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
export * from './NetworkDetailsPage'
export * from './NetworkIcon'
export * from './NetworksTable'
export * from './utils'
29 changes: 15 additions & 14 deletions website/src/supportedNetworks/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 []
}
Expand Down Expand Up @@ -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<ReturnType<typeof getSupportedNetworks>>[number]
Expand Down
Loading