forked from dukedaily/solidity-expert
-
Notifications
You must be signed in to change notification settings - Fork 0
/
01_概述.md
123 lines (75 loc) · 3.58 KB
/
01_概述.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# 第1节:subgraph
> 本文收录于我的开源项目:https://github.com/dukedaily/solidity-expert ,欢迎star转发,文末加V入群。
## 概述
subgraph是DAPP领域最重要的基建之一,主流协议都在使用,其功能为:
- 链下监听事件,逻辑处理,存储到数据库中,供前端调用;
- 常用于:统计历史信息等,仅做展示相关,可以节约链上存储成本,且响应更快;
- 请求subgraph的时候使用[graphql](https://thegraph.com/docs/en/querying/graphql-api/)语言,而非sql语句。
下图的是uniswapV3的面板信息,其中绝大多数内容都取自subgraph服务。
![image-20221006102831823](assets/image-20221006102831823.png)
## 举例
- uniswap v3的[token功能](https://info.uniswap.org/#/tokens)主要是从subgraph中读取的
- 问:uniswapV3 查询当前有哪些pool?
- Url:https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3
- 请求语句:
```js
{
pools(
first: 50
orderBy: totalValueLockedUSD
orderDirection: desc
subgraphError: allow) {
id
__typename
}
}
```
- 请求结果:(部分)
```js
{
"data": {
"pools": [
{
"id": "0x277667eb3e34f134adf870be9550e9f323d0dc24",
"__typename": "Pool"
},
{
"id": "0xa850478adaace4c08fc61de44d8cf3b64f359bec",
"__typename": "Pool"
},
{
"id": "0x8c0411f2ad5470a66cb2e9c64536cfb8dcd54d51",
"__typename": "Pool"
},
{
"id": "0x055284a4ca6532ecc219ac06b577d540c686669d",
"__typename": "Pool"
}
]
}
}
```
## 原理
1. 用户从合约侧发起交易;
2. 合约发送事件;
3. 由subgraph监听到该事件,并在内部执行逻辑(我们根据业务需求,自定义),处理后入库;
4. 用户(前端)从subgraph的数据空中读取数据,完成展示。
![subgraph流程图](assets/subgraph流程图.jpg)
## 可选资源
subgraph一共有三种模式可以使用,具体如下(我们使用第三种):
1. the graph官方提供的host serivce模式([已经废弃了](https://thegraph.com/blog/sunsetting-hosted-service/))
2. the graph官方提供的去中心化网络:[subgraph studio](https://thegraph.com/docs/en/deploying/subgraph-studio/)(需要token支持,激励别人帮忙加速索引,请自行尝试)
3. 使用the graph官方提供的开源代码自己搭建:**(推荐,[官方指导](https://thegraph.academy/developers/local-development/))**
1. 先试用docker创建一个:graph node
2. 在graph node上部署subgraph
## 关系梳理
graph node和subgraph的关系如下,在graph node上可以部署多个subgraph,每个subgraph可以服务多个不同的项目。官方的host service(已经废弃),就是帮我们创建了一个graph node。
![graphnode](assets/graphnode.jpg)
## 小结
1. subgraph是DAPP必要基建
2. 目前最佳实践是自行搭建graph node,使用docker
3. [subgraph](https://thegraph.com/docs/en/developing/creating-a-subgraph/)部署在graph node之上,编程语言为:WASM ([WebAssembly](https://webassembly.org/))
4. 使用graphql查询
下一节我们聊一聊如何进行使用docker搭建graphnode并部署自己的subgraph。
加V入群:Adugii,公众号:阿杜在新加坡,一起抱团拥抱web3,下期见!
> 关于作者:国内第一批区块链布道者;2017年开始专注于区块链教育(btc, eth, fabric),目前base新加坡,专注海外defi,dex,元宇宙等业务方向。