-
Notifications
You must be signed in to change notification settings - Fork 148
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Three Source Example #889
base: main
Are you sure you want to change the base?
Three Source Example #889
Changes from 3 commits
bb8a5ac
c63874b
9da75df
04ccf09
6a4a940
332e1f1
886474c
1b83f28
87c9d08
0d03bd4
28979b1
d5cd007
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,124 @@ | ||||||||||
--- | ||||||||||
title: Aggregate Data Using Subgraph Composition | ||||||||||
sidebarTitle: 'Build a Composable Subgraph with Multiple Subgraphs' | ||||||||||
--- | ||||||||||
|
||||||||||
Optimize your Subgraph by merging data from three independent, source Subgraphs into a single composable Subgraph to enhance data aggregation. | ||||||||||
|
||||||||||
> Important Reminders: | ||||||||||
> | ||||||||||
> - Subgraph composition is built into the CLI, and you can deploy with [Subgraph Studio](https://thegraph.com/studio/). | ||||||||||
> - This feature requires `specVersion` 1.3.0. | ||||||||||
|
||||||||||
## Overview | ||||||||||
|
||||||||||
Subgraph composition empowers you use one Subgraph as a data source for another, allowing it to consume and respond to entity changes. Instead of fetching on-chain data directly, a Subgraph can listen for updates from another Subgraph and react to changes. This is useful for aggregating data from multiple Subgraphs or triggering actions based on external updates. | ||||||||||
|
||||||||||
## Prerequisites | ||||||||||
|
||||||||||
To deploy **all** Subgraphs locally, you must have the following: | ||||||||||
|
||||||||||
- A [graph-node](https://github.com/graphprotocol/graph-node) instance running locally | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nitpick, but I feel like if we write it "graph-node" it should be inline code, but if we write it "Graph Node" it should be regular text. What do you think? So I'm proposing either:
Suggested change
or
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (Note that we use "Graph Node" below, on line 34.) |
||||||||||
- An [IPFS](https://docs.ipfs.tech/) instance running locally | ||||||||||
- [Node.js.](https://nodejs.org/en) and npm | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
## Get Started | ||||||||||
|
||||||||||
The following guide provides examples for defining three source Subgraphs to create one powerful composed Subgraph. | ||||||||||
|
||||||||||
### Specifics | ||||||||||
|
||||||||||
- To keep this example simple, all source Subgraphs use only block handlers. However, in a real environment, each source Subgraph will use data from different smart contracts. | ||||||||||
- The examples below show how to import and extend the schema of another Subgraph to enhance its functionality. | ||||||||||
- Each source Subgraph is optimized with a specific entity. | ||||||||||
- All the commands listed install the necessary dependencies, generate code based on the GraphQL schema, build the Subgraph, and deploy it to your local Graph Node instance. | ||||||||||
|
||||||||||
### Step 1. Deploy Block Time Source Subgraph | ||||||||||
|
||||||||||
This first source Subgraph calculates the block time for each block. | ||||||||||
|
||||||||||
- It imports schemas from other Subgraphs and adds a `block` entity with a `timestamp` field, representing the time each block was mined. | ||||||||||
- It listens to time-related blockchain events (e.g., block timestamps) and processes this data to update the Subgraph's entities accordingly. | ||||||||||
|
||||||||||
To deploy this Subgraph locally, run the following commands: | ||||||||||
|
||||||||||
```bash | ||||||||||
npm install | ||||||||||
npm run codegen | ||||||||||
npm run build | ||||||||||
npm run create-local | ||||||||||
npm run deploy-local | ||||||||||
``` | ||||||||||
|
||||||||||
### Step 1. Deploy Block Cost Source Subgraph | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
This second source Subgraph indexes the cost of each block. | ||||||||||
|
||||||||||
#### Key Functions | ||||||||||
|
||||||||||
- It imports schemas from other Subgraphs and adds a `block` entity with cost-related fields. | ||||||||||
- It listens to blockchain events related to costs (e.g. gas fees, transaction costs) and processes this data to update the Subgraph's entities accordingly. | ||||||||||
|
||||||||||
To deploy this Subgraph locally, run the following commands: | ||||||||||
|
||||||||||
```bash | ||||||||||
npm install | ||||||||||
npm run codegen | ||||||||||
npm run build | ||||||||||
npm run create-local | ||||||||||
npm run deploy-local | ||||||||||
``` | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
### Step 2. Define Block Size in Source Subgraph | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
This third source Subgraph indexes the size of each block. | ||||||||||
|
||||||||||
#### Key Functions | ||||||||||
|
||||||||||
- It imports existing schemas from other Subgraphs and adds a `Block` entity with a `size` field representing each block's size. | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
- It listens to blockchain events related to block sizes (e.g., storage or volume) and processes this data to update the Subgraph's entities accordingly. | ||||||||||
|
||||||||||
To deploy this Subgraph locally, run the following commands: | ||||||||||
|
||||||||||
```bash | ||||||||||
npm install | ||||||||||
npm run codegen | ||||||||||
npm run build | ||||||||||
npm run create-local | ||||||||||
npm run deploy-local | ||||||||||
``` | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
### Step 3. Combine Into Block Stats Subgraph | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
This composed Subgraph combines and aggregates the information from the three source Subgraphs above, providing a unified view of block statistics. | ||||||||||
|
||||||||||
> NOTE: | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
> | ||||||||||
> - Any change to a source Subgraph will likely generate a new deployment ID. | ||||||||||
> - Be sure to update the deployment ID in the data source address of the Subgraph manifest to take advantage of the latest changes. | ||||||||||
> - All source Subgraphs should be deployed before the composed Subgraph is deployed. | ||||||||||
|
||||||||||
#### Key Functions | ||||||||||
|
||||||||||
- It provides a consolidated data model that encompasses all relevant block metrics. | ||||||||||
- It combines data from three source Subgraphs, and provides a comprehensive view of block statistics, enabling more complex queries and analyses. To deploy this Subgraph locally, run the following commands: | ||||||||||
|
||||||||||
```bash | ||||||||||
npm install | ||||||||||
npm run codegen | ||||||||||
npm run build | ||||||||||
npm run create-local | ||||||||||
npm run deploy-local | ||||||||||
``` | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
|
||||||||||
## Key Takeaways | ||||||||||
|
||||||||||
- This powerful tool will scale your Subgraph development and allow you to combine multiple Subgraphs. | ||||||||||
- The setup includes the deployment of three source Subgraphs and one final deployment of the composed Subgraph. | ||||||||||
- This feature unlocks scalability, simplifying both development and maintenance efficiency. | ||||||||||
|
||||||||||
## Additional Resources | ||||||||||
|
||||||||||
- Check out all the code for this example in [the Github repo](https://github.com/isum/subgraph-composition-example). | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
- Add advanced features in your Subgraph. Check out [Subgraph advance features](/developing/creating/advanced/). | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||
- To learn more about aggregations, check out Subgraph [advanced features](https://thegraph.com/docs/en/subgraphs/developing/creating/advanced/#timeseries-and-aggregations). | ||||||||||
MichaelMacaulay marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
export default { | ||
'subgraph-composition-three-sources': '', | ||
'subgraph-debug-forking': '', | ||
near: '', | ||
arweave: '', | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is "empowers you use" correct? Should it be "empowers you to use"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, I think we use "onchain" instead of "on-chain", but I'm not 100% sure.