Getting Started with The Graph
You can use The Graph indexing protocol to create subgraphs on SKALE Chain data. You can reach out to the Graph community to request a Graph node, or you may run your own Graph node. These instructions assume you are using a Testnet or Mainnet SKALE Chain and are running your own graph node.
| For proper compatibility, you must point a Graph node to a SKALE Archive node. | 
- 
Install Prerequisites - 
docker 
- 
docker-compose 
- 
nodejs 
- 
npm 
- 
yarn 
- 
truffle 
 
- 
- 
Get a SKALE Endpoint Follow instructions here to access the SKALE Chaos Testnet endpoint OR use your your own dedicated or hub chain as available. 
- 
Configure a Graph Node git clone https://github.com/graphprotocol/graph-node/ cd graph-node/dockerThen modify the docker-compose.ymlfile:ethereum: 'skale:http://host.docker.internal:15000' (1) ... extra_hosts: - "host.docker.internal:host-gateway" (2)1 Replace with your SKALE Chain endpoint if not using the SKALE-IMA-SDK. 2 Add this if using host.docker.internalon a Linux machine.
- 
Start the Graph Node docker-compose up -dTo follow the container output, run docker logs docker_graph-node_1 --follow
- 
Prepare the Subgraph test In another terminal on the same machine, execute: git clone https://github.com/skalenetwork/se-integrations/ cd se-integrations/graph-protocol/Modify the .env file. SKALE_CHAIN=https://YOURSKALECHAINIP:PORT ACCOUNT=yourAccountFromMetamask PRIVATE_KEY=<PRIVATE_KEY> CONTRACT_ADDRESS=<CONTRACT_ADDRESS> (1)1 You will add the contract address in step 7. 
- 
Deploy Test contract npm install truffle compile truffle migrate
- 
Add deployed MyToken Contract address to subgraph.yaml ... dataSources: - kind: ethereum/contract name: MyToken network: skale (1) source: address: 'CONTRACT_ADDRESS' (2) abi: MyToken ...1 Change from mainnettoskaleto match docker-compose.yml in graph-node.2 Replace with deployed contract address. 
- 
Add deployed MyToken contract address to .env file 
- 
Execute yarn yarn && yarn codegen
- 
Create local Subgraph yarn create-localExpected output: Created subgraph: skaleToken Done in 1.04s.Expected output in Graph-node container: Dec 17 23:18:38.892 INFO Received subgraph_create request, params: SubgraphCreateParams { name: SubgraphName("skaleToken") }, component: JsonRpcServer
- 
Deploy to Local yarn deploy-local
- 
Verify graph-node terminal Expected output in graph-node container: graph-node_1 | Apr 23 20:20:58.952 INFO Scanning blocks [0, 0], range_size: 1, subgraph_id: QmbWZiRDpGb95WkA1QH8UM3wsUMZeBmr6ZW2UJaMtGZADB, component: SubgraphInstanceManager > BlockStream
- 
Execute graph test truffle test --network skale test/myToken.test.forgraph.jsExpected output: MyToken ... ✓ In the test (237ms) 1 passing (242ms)
- 
Execute token test truffle test --network skale test/myToken.test.jsOutput: ... MyBalance ✓ enough account balance MyToken ✓ deploys a contract ✓ has a default token value (1042ms) ✓ can update token value (1042ms) 4 passing (3s)
- 
Check your GraphQL: 
- 
Perform a test query: { myTokens(orderBy: tokenValue, orderDirection: asc) { id owner } }Expected output: { "data": { "myTokens": [ { "id": "0x2", "owner": "..." }... ] } }