Ensure the monorepo’s dependencies are installed:
cd ../.. && yarn && cd packages/govern-subgraph
You can build and deploy the subgraph using a single yarn deploy-<network>
command:
GRAPH_KEY=<GRAPH_KEY> yarn deploy-<DESIRED_NETWORK> <THEGRAPH_USERNAME> <SUBGRAPH_NAME> <DESIRED_NETWORK>
Replace the placeholders by the following:
<GRAPH_KEY>
: The Graph key (this is only needed when deploying on The Graph).<THEGRAPH_USERNAME>
: username of your subgraph (usually your GitHub username).<SUBGRAPH_NAME>
: name of the subgraph.<DESIRED_NETWORK>
: one of the available networks (see package.json).
Generate the subgraph.yaml
file corresponding to your network:
yarn manifest-<DESIRED_NETWORK>
Replacing <DESIRED_NETWORK>
by one of the available networks (see package.json).
You can now run the build
command, which will generate the types and compile the subgraph:
yarn build
You are now ready to deploy the subgraph using the graph deploy
command.
You have the option to deploy your subgraph locally, this is how you can do it.
Clone the Graph node repository somewhere on your computer:
git clone [email protected]:graphprotocol/graph-node.git
Edit the file graph-node/docker/docker-compose.yml
to make the ethereum
field point to the Ethereum node of your choice. Make sure this node is connected to the same Ethereum network than the one expected by your subgraph.
Run the Graph node using docker-compose. It will start the Graph node itself, but also a PostgreSQL database and an IPFS, which are used by the Graph node.
cd graph-node/docker
docker-compose up
You are now ready to deploy your subgraph.
Go back to the subgraph directory (packages/govern-subgraph
), and create the subgraph on your local node:
graph create aragon/aragon-govern-<DESIRED_NETWORK> \
--node http://localhost:8020
Then deploy it:
graph deploy aragon/aragon-govern<DESIRED_NETWORK> \
--ipfs http://localhost:5001 \
--node http://localhost:8020
To stop the Graph node, go back to its directory and run docker-compose down
. It will also create a data
directory: remember to delete it if you want to start again.
See the Graph documentation for more details on how to run The Graph locally.
This subgraph can be used for Aragon Govern on mainnet, and all testnets. In order to run it for a testnet, the subgraph.yaml file will need to have the contract addresses changed to point to the correct address for each respective network. Aragon One will have a history of deployments that you'll be able to use for this, but you can also deploy it yourself using the tasks set up in the govern-core
package.
Borrowing ideas from the original aragonOS subgraphs, we took the approach of leveraging data source templates and mustache templates for dynamically generating different subgraph configurations for different networks. The manifest
folder contains both the data needed for filling the addresses for these environments (located inside the data
) folder, and the templates needed for auto-filling the actual structure for the yaml files that define the contract entities. These all get funneled into the subgraph.template.yaml
file, which moustache will take as template, and create the actual subgraph.yaml
file needed for deployment.
Govern contracts are small and simple compared to aragonOS, meaning that indexing activity is much easier. However, if you deployed your Govern DAO using proxies, it means that you must try and index every instance of the upgraded contract. If you're using one of the official Aragon Govern Factories this shouldn't be an issue, but if you can't find your ugpradeable DAO, don't hesitate to get in touch so we can index it, or just fork the repo and add the contract instance.
As of right now, all contract events are ingested by the Graph Node, but over time we might leave some out due to not having useful information. The following is the list of contracts we index along with their events:
Tracked:
Executed
Frozen
Granted
Revoked
Left out:
ETHDeposited
Tracked:
Configured
Frozen
Granted
Scheduled
Executed
Challenged
Vetoed
Resolved
Revoked
Ruled
Left out: None.
Tracked:
Registered
SetMetadata
Left out: None