> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Tenderly Node RPC पर Graph Node चलाएँ

> Public networks पर subgraphs index करने के लिए self-hosted Graph Node को Tenderly Node RPC पर point करें, trace_filter वाले call handlers सहित।

Graph Node किसी भी Ethereum JSON-RPC endpoint से subgraphs को index करता है। Event handlers, call handlers, और mappings में contract calls के साथ किसी public network को index करने के लिए, उसे [Node RPC](/node-rpc/overview) endpoint पर point करें।

यह पेज Ethereum mainnet पर Graph Node 0.45.0 के साथ test किया गया था: एक event handler, USDC `transfer(address,uint256)` पर एक call handler, और अपनी mapping में एक `balanceOf` call वाले subgraph ने हाल के एक block से indexing की और chain head से एक block के भीतर बना रहा। इसके बजाय किसी network की forked copy को index करने के लिए, देखें [The Graph से Virtual Environment को index करें](/virtual-environments/develop/thegraph)।

## शुरू करने से पहले

* आपके network के लिए एक Node RPC URL, जो [Tenderly Dashboard](https://dashboard.tenderly.co) में Node RPC के **Integrate** view में मिलता है
* एक subgraph और वह `docker-compose.yml` जो `graph init` उसके लिए generate करता है (देखें [Graph Node और subgraph सेट करें](/virtual-environments/develop/thegraph#set-up-graph-node-and-the-subgraph); public network के लिए scaffolding steps वही हैं)

## Ethereum provider configure करें

Generated `docker-compose.yml` में, `graph-node` service में `ethereum` को `<network>:archive,traces:<Node RPC URL>` पर सेट करें। पहले colon से पहले का network नाम `subgraph.yaml` में `network` से match होना चाहिए।

```yaml title="docker-compose.yml (graph-node environment)" highlight={7} theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
    environment:
      postgres_host: postgres
      postgres_user: graph-node
      postgres_pass: let-me-in
      postgres_db: graph-node
      ipfs: "ipfs:5001"
      ethereum: "mainnet:archive,traces:https://mainnet.gateway.tenderly.co/${TENDERLY_NODE_ACCESS_KEY}"
      GRAPH_LOG: info
```

Docker Compose `${TENDERLY_NODE_ACCESS_KEY}` को आपके shell से substitute करता है, इसलिए access key file से बाहर रहती है:

```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
export TENDERLY_NODE_ACCESS_KEY=<your-access-key>
docker compose up -d
docker compose logs -f graph-node
```

Startup पर, Graph Node provider के लिए `capabilities: archive, traces` और `Provider supports block receipts` log करता है, जिसका अर्थ है कि वह किसी block की सभी receipts एक `eth_getBlockReceipts` request से fetch करता है।

| Capability | सक्षम करता है | Node RPC methods |
| - | - | - |
| `archive` | Historical blocks पर mappings में contract calls (`ethereum.call`) | Block hash पर `eth_call`, `eth_getBalance`, `eth_getCode` |
| `traces` | Call handlers (`callHandlers`) और `call` filter वाले block handlers | `trace_filter` |

जब `ethereum` मान में कोई capability नहीं होती (`mainnet:<url>`), तब Graph Node दोनों capabilities मान लेता है। उन्हें स्पष्ट रूप से declare करें ताकि configuration में दिखे कि subgraph किन पर निर्भर है।

Public networks पर `ETHEREUM_REORG_THRESHOLD` को उसके डिफ़ॉल्ट `250` पर रखें। Network के reorganize होने पर Graph Node blocks को roll back करने के लिए इसका उपयोग करता है, इसलिए Virtual Environment setup से `1` का मान copy न करें।

## जाँचें कि आपका network trace\_filter serve करता है

Call handlers को `trace_filter` की आवश्यकता होती है, जिसे Node RPC पर हर network serve नहीं करता। एक हाल का block request करें:

```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
URL=https://mainnet.gateway.tenderly.co/$TENDERLY_NODE_ACCESS_KEY
BLOCK=$(cast block-number --rpc-url $URL)
curl -s $URL \
  -H 'content-type: application/json' \
  -d "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"trace_filter\",\"params\":[{\"fromBlock\":\"$(cast to-hex $BLOCK)\",\"toBlock\":\"$(cast to-hex $BLOCK)\"}]}"
```

`result` में array का अर्थ है कि उस network पर call handlers काम करते हैं। `the method trace_filter does not exist/is not available` या `Method not found` जैसी error का अर्थ है कि वे काम नहीं करते; ऐसे में contract के events को `eventHandlers` के साथ index करें। Block numbers को hex में pass करें, क्योंकि `trace_filter` `latest` tag को `Invalid params` के साथ अस्वीकार करता है।

## Graph Node द्वारा भेजे जाने वाले requests

Graph Node लगातार Node RPC को poll करता है, इसलिए हर indexed network requests का उपयोग करता है, तब भी जब किसी subgraph में नए events न हों। हर request category की लागत के लिए [Node RPC pricing](/node-rpc/pricing) देखें।

| Graph Node गतिविधि | Methods |
| - | - |
| हर `ETHEREUM_POLLING_INTERVAL` (डिफ़ॉल्ट `1000` ms) पर latest block के लिए poll करना | `eth_getBlockByNumber` |
| नए blocks और उनकी receipts load करना | `eth_getBlockByHash`, `eth_getBlockReceipts` |
| Event handlers के लिए events खोजना | `eth_getLogs` |
| Mappings में contract calls | `eth_call` (Compute) |
| Call handlers और `call` block filters | `trace_filter` (Debug and Trace) |

Node RPC पर एक सामान्य subgraph का सबसे महंगा हिस्सा call handlers होते हैं, क्योंकि एक trace request की लागत एक read या contract call से अधिक होती है। जब contract उसी action के लिए एक event emit करता है, तो उसके बजाय event को index करें। जब indexing में कुछ सेकंड की देरी स्वीकार्य हो, तो कम बार poll करने के लिए `ETHEREUM_POLLING_INTERVAL` बढ़ाएँ।

## समस्या निवारण

| लक्षण | कारण | समाधान |
| - | - | - |
| `Trying again after trace_filter RPC call ... failed` और subgraph आगे बढ़ना बंद कर देता है | Network `trace_filter` serve नहीं करता। | [Trace support जाँचें](#जाँचें-कि-आपका-network-trace_filter-serve-करता-है) और जिन networks पर यह उपलब्ध नहीं है, उन पर event handlers का उपयोग करें। |
| `graph deploy` पर `network not supported by registrar: no network base found on chain ethereum` | `subgraph.yaml` में `network`, `ethereum` में दिए गए network नाम से match नहीं करता। | दोनों में एक ही नाम का उपयोग करें। |
| एक ही block के लिए `Receipt for tx ... unavailable, block was likely uncled` बार-बार दिखता है | Graph Node block की receipts load नहीं कर सका। | Graph Node अपने आप retry करता है। यदि वही block बार-बार fail होता है, तो network और block hash के साथ `support@tenderly.co` पर email करें। |

## यह भी देखें

* [Node RPC overview](/node-rpc/overview)
* [Node RPC pricing](/node-rpc/pricing)
* `trace_filter` के लिए [RPC reference](/node-rpc/rpc-reference?method=trace_filter)
* किसी forked network को index करने के लिए [The Graph से Virtual Environment को index करें](/virtual-environments/develop/thegraph)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.