The Hop Protocol Subgraph for The Graph.
Mainnet
Goerli
npx graph auth https://api.thegraph.com/deploy/ <access-token>
The access token is found on the hosted-service dashboard.
-
Update
scripts/mapping_config.json
with the new chain network and subgraph name mapping. -
Update the
@hop-protocol/sdk
package version inpackage.json
. -
Add the
build-deploy
npm script inpackage.json
. -
Update
.gitignore
andclean.sh
(this step can probably be automated). -
Run
npm i
to install the latest@hop-protocol/sdk
package -
Run
npm run generate-config-json
to create the updated config files
The config generation script is run automatically when building the subgraph with npm build-deploy
command and can also be ran with npm run generate-config-json
.
The generation script scripts/generate_config_json.js
will read the chain/token config from @hop-protocol/sdk
and output/override the config JSON files to config/
.
-
After bumping the version of
@hop-protocol/sdk
inpackage.json
and pushing to github and github action finishes building the docker image, run the following commands to build and deploy the subgraph locally or on a server using docker compose:
# change this values to deploy a different subgraph. Refer to `scripts/mapping_config.json` for the subgraph name
export NETWORK=base-goerli
export RPC=https://goerli.base.org
# download docker-compose file
wget https://raw.githubusercontent.com/hop-protocol/subgraph/master/docker-compose.yml
# start services
# the `-d` is used to run in background
# the `--pull=always` is used to update the image when there is one available
# NOTE: The NETWORK and RPC are redundant, but sometimes cause issues if they do not exist
sudo RPC=https://rpc.linea.build NETWORK=linea docker compose up --pull=always
After a minute or so the graph should be available at http://localhost:8000/subgraphs/name/hop-protocol/hop-base-goerli/graphql
- Troubleshooting
- If your server is unreachable from outside, ensure you enabled port
8000
with UFW- Disable and enable UFW after this
These are deprecated in favor of the local Docker instructions. Only reference these if Docker is not used.
# Required for AbortController
nvm install 16.6.1
nvm use 16.6.1
# Various requirements
sudo apt install npm
sudo apt install -y jq
npm i @graphprotocol/[email protected]
-
Depending on your NPM version, [email protected] & [email protected] appears to hang when installing NPM packages. In reality, they just take a long time to install (up to or over an hour, depending on the instance type & resources).
-
Auth key starts with 70cc
-
When setting it up locally and running a load balancer, each of these should work for debugging at various stages
-
If you get the following error, you need to run comment out two lines in
buildfile.template.sh
# Error
Failed to deploy to Graph node https://api.thegraph.com/deploy/: subgraph failure::Subgraph [hop-protocol/hop-base-mainnet] not found
# Lines to comment
npx graph auth https://api.thegraph.com/deploy/ $ACCESS_TOKEN
npx graph deploy --product hosted-service --ipfs https://api.thegraph.com/ipfs/ --node https://api.thegraph.com/deploy/ "$GITHUB_ORG/{{subgraphName}}"
npm run build-deploy:mainnet
npm run build-deploy:mainnet-subgraph-studio
npm run build-deploy:polygon
npm run build-deploy:xdai
npm run build-deploy:optimism
npm run build-deploy:arbitrum
# testnet
npm run build-deploy:goerli
npm run build-deploy:mumbai
npm run build-deploy:optimism-goerli
# local
npm run build-deploy:arbitrum-goerli
npm run build-deploy:nova
npm run build-deploy:zksync
npm run build-deploy:base-goerli
npm run build-deploy:base-mainnet
npm run build-deploy:linea
npm run build-deploy:polygonzk
By default, it will deploy under hop-protocol
github org.
Set GITHUB_ORG
to deploy another a different account.
Example:
GITHUB_ORG=<github-username> npm run build-deploy:mainnet
The following subgraphs will need to be created on the dashboard:
hop-mainnet
hop-polygon
hop-xdai
hop-optimism
hop-arbitrum
hop-goerli
hop-mumbai
hop-optimism-goerli
npm run clean
Update networks in docker-compose.yml
:
For Optimism Regenesis:
ethereum: 'optimism:https://mainnet-replica-4.optimism.io'
For Arbitrum Nova:
ethereum: 'nova:https://nova.arbitrum.io/rpc'
For zkSync:
ethereum: 'zksync:https://zksync2-testnet.zksync.dev'
For Base:
ethereum: 'base-mainnet:https://developer-access-mainnet.base.org'
For Linea:
ethereum: 'linea:https://rpc.linea.build'
For Polygonzk:
ethereum: 'polygonzk:https://zkevm-rpc.com'
For Linea (Goerli):
ethereum: 'linea-goerli:https://consensys-zkevm-goerli-prealpha.infura.io/v3/YOUR_PROJECT_ID'
For Base (Goerli):
ethereum: 'base-goerli:https://goerli.base.org'
For Arbitrum (Goerli):
ethereum: 'arbitrum-goerli:https://goerli-rollup.arbitrum.io/rpc'
Start containers:
docker-compose up
Create local subgraph (in another terminal):
For Optimism Regenesis:
npx graph create hop-protocol/hop-optimism --node http://127.0.0.1:8020
For Arbitrum Nova:
npx graph create hop-protocol/hop-nova --node http://127.0.0.1:8020
For zkSync:
npx graph create hop-protocol/hop-zksync --node http://127.0.0.1:8020
For Base:
npx graph create hop-protocol/hop-base-mainnet --node http://127.0.0.1:8020
For Base:
npx graph create hop-protocol/hop-linea --node http://127.0.0.1:8020
For Polygonzk:
npx graph create hop-protocol/hop-polygonzk --node http://127.0.0.1:8020
For Linea (Goerli):
npx graph create hop-protocol/hop-linea-goerli --node http://127.0.0.1:8020
For Base (Goerli):
npx graph create hop-protocol/hop-base-goerli --node http://127.0.0.1:8020
For Arbitrum (Goerli):
npx graph create hop-protocol/hop-arbitrum-goerli --node http://127.0.0.1:8020
Deploy subgraph after building (add this line at the bottom of buildfiles.template.sh
and comment out existing npx graph deploy
line):
For Optimism Regenesis:
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-optimism
For Arbitrum Nova:
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-nova
For zkSync:
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-zksync
For Base:
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-base-mainnet
For Linea:
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-linea
For Polygonzk:
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-polygonzk
For Linea (Goerli):
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-linea-goerli
For Base (Goerli):
npx graph deploy --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-base-goerli
For Arbitrum (Goerli):
npx graph deploy --debug --ipfs http://localhost:5001 --node http://localhost:8020 hop-protocol/hop-arbitrum-goerli
Build and deploy:
For Optimism Regenesis:
npm run build-deploy:optimism
For Arbitrum Nova:
npm run build-deploy:nova
For zkSync:
npm run build-deploy:zksync
For Base:
npm run build-deploy:base-mainnet
For Linea:
npm run build-deploy:linea
For Polygonzk:
npm run build-deploy:polygonzk
For Linea (Goerli):
npm run build-deploy:linea-goerli
For Base (Goerli):
npm run build-deploy:base-goerli
For Arbitrum (Goerli):
npm run build-deploy:arbitrum-goerli
Query subgraphs
For Optimism Regenesis:
http://localhost:8000/subgraphs/name/hop-protocol/hop-optimism
For Arbitrum Nova:
http://localhost:8000/subgraphs/name/hop-protocol/hop-nova
For zkSync:
http://localhost:8000/subgraphs/name/hop-protocol/hop-zksync
For Base:
http://localhost:8000/subgraphs/name/hop-protocol/hop-base-mainnet
For Linea:
http://localhost:8000/subgraphs/name/hop-protocol/hop-linea
For Polygonzk:
http://localhost:8000/subgraphs/name/hop-protocol/hop-polygonzk
For Linea (Goerli):
http://localhost:8000/subgraphs/name/hop-protocol/hop-linea-goerli
For Base (Goerli):
http://localhost:8000/subgraphs/name/hop-protocol/hop-base-goerli
For Arbitrum (Goerli):
http://localhost:8000/subgraphs/name/hop-protocol/hop-arbitrum-goerli
Run github action build locally with act:
act --workflows .github/workflows/build.yml