# Fixturenet SushiSwap Subgraph ## Setup Clone required repositories: ```bash laconic-so --stack fixturenet-sushiswap-subgraph setup-repositories --pull ``` Checkout to a non-default branch in the cloned repos if required: ```bash # Default repo base dir cd ~/cerc # Example cd graph-node git checkout && git pull # Remove the corresponding docker image if it already exists docker image rm cerc/graph-node:local # Remove any dangling images docker image prune ``` Build the container images: ```bash laconic-so --stack fixturenet-sushiswap-subgraph build-containers ``` ## Deploy Deploy the stack: ```bash laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph up # Note: Remove any existing volumes for the cluster for a fresh start ``` After all services have started: * Follow `graph-node` logs: ```bash laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph logs -f graph-node ``` * Check that the subgraphs have been deployed: ```bash laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph logs -f sushiswap-subgraph-v3 # Expected output: # . # . # sushigraph-sushiswap-subgraph-v3-1 | - Deploying to Graph node http://graph-node:8020/ # sushigraph-sushiswap-subgraph-v3-1 | Deployed to http://graph-node:8000/subgraphs/name/sushiswap/v3-lotus/graphql # sushigraph-sushiswap-subgraph-v3-1 | # sushigraph-sushiswap-subgraph-v3-1 | # sushigraph-sushiswap-subgraph-v3-1 | Subgraph endpoints: # sushigraph-sushiswap-subgraph-v3-1 | Queries (HTTP): http://graph-node:8000/subgraphs/name/sushiswap/v3-lotus # . # . # sushigraph-sushiswap-subgraph-v3-1 | - Deploying to Graph node http://graph-node:8020/ # sushigraph-sushiswap-subgraph-v3-1 | Deployed to http://graph-node:8000/subgraphs/name/sushiswap/blocks/graphql # sushigraph-sushiswap-subgraph-v3-1 | # sushigraph-sushiswap-subgraph-v3-1 | # sushigraph-sushiswap-subgraph-v3-1 | Subgraph endpoints: # sushigraph-sushiswap-subgraph-v3-1 | Queries (HTTP): http://graph-node:8000/subgraphs/name/sushiswap/blocks # sushigraph-sushiswap-subgraph-v3-1 | # sushigraph-sushiswap-subgraph-v3-1 | # sushigraph-sushiswap-subgraph-v3-1 | Done ``` After `graph-node` has fetched the latest blocks from upstream, use the subgraph (GQL) endpoints for querying: ```bash # Find out the mapped host port for the subgraph endpoint laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph port graph-node 8000 # 0.0.0.0:HOST_PORT # Blocks subgraph endpoint: http://127.0.0.1:/subgraphs/name/sushiswap/blocks/graphql # v3 subgraph endpoint: http://127.0.0.1:/subgraphs/name/sushiswap/v3-lotus/graphql ``` ## Run * Deploy an ERC20 token: ```bash docker exec -it sushigraph-sushiswap-v3-periphery-1 yarn hardhat --network docker deploy --tags TestERC20 # Deploy two tokens and set the addresses to variables TOKEN1_ADDRESS and TOKEN2_ADDRESS export TOKEN1_ADDRESS= export TOKEN2_ADDRESS= ``` * Get contract address of factory deployed: ```bash docker exec -it sushigraph-sushiswap-v3-core-1 jq -r '.address' /app/deployments/docker/UniswapV3Factory.json # Set the address to variable FACTORY_ADDRESS export FACTORY_ADDRESS= ``` * Create a pool: ```bash docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:create:docker --factory $FACTORY_ADDRESS --token0 $TOKEN1_ADDRESS --token1 $TOKEN2_ADDRESS --fee 500 # Set the created pool address to variable POOL_ADDRESS export POOL_ADDRESS= ``` * Initialize the pool: ```bash docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:initialize:docker --sqrt-price 4295128939 --pool $POOL_ADDRESS ``` * Set the recipient address to the contract deployer: ```bash export RECIPIENT=0xD375B03bd3A2434A9f675bEC4Ccd68aC5e67C743 ``` * Trigger pool `Mint` event: ```bash docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:mint:docker --pool $POOL_ADDRESS --recipient $RECIPIENT --amount 10 ``` * Trigger pool `Burn` event: ```bash docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:burn:docker --pool $POOL_ADDRESS --amount 10 ``` * Query the sushiswap v3-lotus subgraph GQL after running above commands ```graphql { _meta { block { number } deployment hasIndexingErrors } factories { poolCount id } pools { id token0 { id name symbol } mints { id owner } burns { id owner } } } ``` ## Clean up Stop all the services running in background run: ```bash laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph down ``` Clear volumes created by this stack: ```bash # List all relevant volumes docker volume ls -q --filter "name=sushigraph" # Remove all the listed volumes docker volume rm $(docker volume ls -q --filter "name=sushigraph") # WARNING: To avoid refetching the Lotus proof params on the next run, # avoid removing the corresponding volumes # To remove volumes that do not contain Lotus params docker volume rm $(docker volume ls -q --filter "name=sushigraph" | grep -v "params$") ```