Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/daostack/subgraph
A DAOstack subgraph for graph-node
https://github.com/daostack/subgraph
blockchain cache ethereum graphql
Last synced: 22 days ago
JSON representation
A DAOstack subgraph for graph-node
- Host: GitHub
- URL: https://github.com/daostack/subgraph
- Owner: daostack
- License: gpl-3.0
- Created: 2018-10-16T08:59:39.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2023-11-16T20:01:07.000Z (about 1 year ago)
- Last Synced: 2024-12-08T04:32:08.884Z (about 1 month ago)
- Topics: blockchain, cache, ethereum, graphql
- Language: TypeScript
- Size: 6.02 MB
- Stars: 45
- Watchers: 13
- Forks: 36
- Open Issues: 45
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
***DEVELOPMENT OF THIS PACKAGE HAS MOVED TO: https://github.com/daostack/alchemy-monorepo/tree/dev/packages/subgraph***
# DAOstack SubgraphDAOstack subgraph for [TheGraph](https://thegraph.com/) project. A feature article is available [here](https://thegraph.com/blog/daostack-alchemy).
![image](https://github.com/pat-daostack/subgraph/blob/master/images/arcgraph.jpg)
Our latest gratest [master branch subgraph](https://thegraph.com/explorer/subgraph/daostack/master).
## Getting started
1. `git clone https://github.com/daostack/subgraph.git && cd subgraph`
2. `npm install`## Testing
Run the tests in the host container:
```sh
npm run docker:run
npm run test
npm run docker:stop
```The tests are run with jest, which takes a number of options that may be useful when developing:
```sh
npm run test -- --watch # re-run the tests after each change
npm run test -- test/integration/Avatar.spec.js # run a single test file
```## Commands
1. `migrate` - migrate contracts to ganache and write result to `migration.json`.
2. `codegen` - (requires `migration.json`) automatically generate abi, subgraph, schema and type definitions for
required contracts.
3. `test` - run integration test.
4. `deploy` - deploy subgraph.
5. `deploy:watch` - redeploy on file change.Docker commands (requires installing [`docker`](https://docs.docker.com/v17.12/install/) and
[`docker-compose`](https://docs.docker.com/compose/install/)):1. `docker ` - start a command running inside the docker container. Example: `npm run docker test` (run
intergation tests).
2. `docker:stop` - stop all running docker services.
3. `docker:rebuild ` - rebuild the docker container after changes to `package.json`.
4. `docker:logs ` - display logs from a running docker service.
5. `docker:run` - run all services in detached mode (i.e. in the background).## Exposed endpoints
After running a command with docker-compose, the following endpoints will be exposed on your local machine:
- `http://localhost:8000/subgraphs/name/daostack` - GraphiQL graphical user interface.
- `http://localhost:8000/subgraphs/name/daostack/graphql` - GraphQL api endpoint.
- `http://localhost:8001/subgraphs/name/daostack` - graph-node's websockets endpoint
- `http://localhost:8020` - graph-node's RPC endpoint
- `http://localhost:5001` - ipfs endpoint.
- (if using development) `http://localhost:8545` - ganache RPC endpoint.
- `http://localhost:5432` - postgresql connection endpoint.## Add a new contract tracker
In order to add support for a new contract follow these steps:
1. Create a new directory `src/mappings//`
2. Create 4 files:1. `src/mappings//mapping.ts` - mapping code.
2. `src/mappings//schema.graphql` - GraphQL schema for that contract.
3. `src/mappings//datasource.yaml` - a yaml fragment with:
1. `abis` - optional - list of contract names that are required by the mapping.
2. [`entities`](https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#1521-ethereum-events-mapping) -
list of entities that are written by the the mapping.
3. [`eventHandlers`](https://github.com/graphprotocol/graph-node/blob/master/docs/subgraph-manifest.md#1522-eventhandler) -
map of solidity event signatures to event handlers in mapping code.
4. `test/integration/.spec.ts`3. Add your contract to `ops/mappings.json`. Under the JSON object for the network your contract is located at, under the `"mappings"` JSON array, add the following.
1. If your contract information is in the `migration.json` file specified (default is the file under `@daostack/migration` folder, as defined in the `ops/settings.js` file):
```json
{
"name": "",
"contractName": "",
"dao": "",
"mapping": "",
"arcVersion": ""
},
```2. If your contract does not appear in the migration file:
```json
{
"name": "",
"dao": "address",
"mapping": "",
"arcVersion": "",
"address": ""
},
```4. (Optionally) add a deployment step for your contract in `ops/migrate.js` that will run before testing.
## Add a new dao tracker
To index a DAO please follow the instructions here: [https://github.com/daostack/subgraph/blob/master/documentations/Deployment.md#indexing-a-new-dao](https://github.com/daostack/subgraph/blob/master/documentations/Deployment.md#indexing-a-new-dao)
## Add a new datasource template
Datasource templates allow you to index blockchain data from addresses the subgraph finds out about at runtime. This is used to dynamically index newly deployed DAOs. To add a new contract ABI that can be used as a template within your mappings, modify the `ops/templates.json` file like so:
```json
{
"templates": [
...,
{
"name": "",
"mapping": "",
"start_arcVersion": "",
"end_arcVersion": "(optional) if not given, all future versions of this `name`'s contract ABI will be added as a template for this mapping"
}
]
}
```## Deploy Subgraph
To deploy the subgraph, please follow the instructions below:
1. If you are deploying to The Graph for the first time, start with installing the Graph CLI:
`npm install -g @graphprotocol/graph-cli`
Then follow this by logging into your Graph Explorer account using:
`graph auth https://api.thegraph.com/deploy/ `It is also recommended to read this guide: [https://thegraph.com/docs/deploy-a-subgraph](https://thegraph.com/docs/deploy-a-subgraph)
2. Create a `.env` file containing the following:
```bash
network=""
subgraph=""# Not necessary for Docker deployment
graph_node="https://api.thegraph.com/deploy/"
ipfs_node="https://api.thegraph.com/ipfs/"
access_token=# Not necessary for The Graph server
postgres_password=
ethereum_node="https://.infura.io/"
start_block= (default is 0)
```3. Run: ``npm run deploy``
## Release subgraph images on docker hub
The repository provides a `release.sh` script that will:
- (re)start the docker containers and deploy the subgraph
- commit the images for ipfs and postgres and push these to docker hubThe docker images are available as:
`daostack/subgraph-postgres:${network}-${migration-version}-${subgraph-version}`
`daostack/subgraph-ipfs:${network}-${migration-version}-${subgraph-version}`## Blacklist a malicious DAO
Add the DAO's Avatar address to the `ops/blacklist.json` file in the proper network array. For example, blacklisting `0xF7074b67B4B7830694a6f58Df06375F00365d2c2` on mainnet would look like:
```json
{
"private": [],
"kovan": [],
"rinkeby": [],
"mainnet": [
"0xF7074b67B4B7830694a6f58Df06375F00365d2c2"
]
}
```