Skip to content

hop-protocol/subgraph

Repository files navigation

Hop Subgraph

The Hop Protocol Subgraph for The Graph.

Subgraphs

Mainnet

Goerli

Development

Authenticate

npx graph auth https://api.thegraph.com/deploy/ <access-token>

The access token is found on the hosted-service dashboard.

Instructions to Add new chain config or new addresses

  1. Update scripts/mapping_config.json with the new chain network and subgraph name mapping.

  2. Update the @hop-protocol/core package version in package.json.

  3. Add the build-deploy npm script in package.json.

  4. Update .gitignore and clean.sh (this step can probably be automated).

  5. Run npm i to install the latest @hop-protocol/core package

  6. 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/core and output/override the config JSON files to config/.

  1. Install Docker

  2. After bumping the version of @hop-protocol/core in package.json and pushing to github and CircleCI 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

  1. Troubleshooting
  • If your server is unreachable from outside, ensure you enabled port 8000 with UFW
    • Disable and enable UFW after this

Pre-setup notes

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]

Troubleshooting

# 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}}"

Build and deploy

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

Clean build files:

npm run clean

Deploying locally:

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

Github Actions

Run github action build locally with act:

act --workflows .github/workflows/build.yml

License

MIT