This repository was created for EVM Expeditions #03, where Felix gave an intro to subgraph development. You can find the video here:
Structurewise this is an example project that should show how to setup a local Subgraph Environment. This repo is based on the setup manual from The Graph directly: https://thegraph.academy/developers/local-development/
The following packeges and tools have to be installed for the setup to be working:
https://www.npmjs.com/package/npm
https://book.getfoundry.sh/getting-started/installation
https://docs.docker.com/get-started/#download-and-install-docker
For the usage of docker-compose you might have to install the cli tool seperately. For my Ubuntu-Linux System I used apt install:
apt install docker-compose
# NPM
npm install -g @graphprotocol/graph-cli
# Yarn
yarn global add @graphprotocol/graph-cli
The following steps should be followed in the given order to set up the local Test Setup.
Navigate in Terminal to the basicSubgraph folder
npm install
Installs all necessary dependecies needed for subgraph development.
Set up a local Chain with Anvil. In Terminal:
anvil --host 0.0.0.0
I'm not entirely sure why we host at the 0.0.0.0 IP-Address, but it took me hours to get this to work, so I wont question the machine gods any further.
Maybe as a note: I dont know what happens in the underlying prcess, but it seems to forward the IP to some 127.?.0.1 address and the setup script of the graph-node (./graph-node/docker/setup.sh) then picks up the address to implement it in the correct docker-compose file
In a new Terminal navigate to contractExample folder:
cd contractExample
Use forge to push the contract via the given script to the local Chain.
forge script script/DataMapping.s.sol:DataMappingScript --fork-url http://localhost:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --broadcast
Set up local Graph node with graph-cli.
In new Terminal navigate to the docker folder:
cd graph-node/docker
Then run:
./setup.sh
This adapts the local docker-compose file of the graph-node to link to the local chain, that we host with anvil.
docker-compose up
Starts the graph-node that should link up to the local chain automatically.
Note: For linux users you might have to use sudo
for the script and docker commands.
In new Terminal navigate to the subgraph folder:
cd basicSubgraph
Create the subgraph via:
graph codegen
Register subgraph name in the graph-node:
graph create basicSubgraph --node http://127.0.0.1:8020
Deploy the subgraph to the local graph-node:
graph deploy basicSubgraph --ipfs http://127.0.0.1:5001 --node http://127.0.0.1:8020
With this Website we can directly send GraphQl Requests to the Graph Node and test it.
For this change the endpoint of the website to the given endpoint by the appropriate graph node ip-address (its shown in the terminal when a subgraph is deployed).
The answer to the following request should represent the state of the exampleContract that we deployed via the exampleContractDeploymentScript in @todo reference ### Push contract to the chain.
query{datas(subgraphError: allow){id,data}}