更新文档
This commit is contained in:
parent
9e633c3440
commit
9a675dd663
62
README.md
62
README.md
@ -1,5 +1,65 @@
|
|||||||
# 链相关的 GraphQL API
|
# 说明
|
||||||
|
|
||||||
|
该项目包含 2 部分功能, 链上事件爬取和链上数据查询接口(GraphQL 和普通接口)
|
||||||
|
|
||||||
|
# 一. 链上数据查询
|
||||||
|
|
||||||
## 1. 验证地址是否是指定 NFT 的 holder
|
## 1. 验证地址是否是指定 NFT 的 holder
|
||||||
|
|
||||||
> 供 galxe.com 的任务系统使用
|
> 供 galxe.com 的任务系统使用
|
||||||
|
|
||||||
|
```
|
||||||
|
endpoint: https://chianquery.cebggame.com/graphql
|
||||||
|
|
||||||
|
网页访问: https://chianquery.cebggame.com/graphiql
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. 普通接口
|
||||||
|
|
||||||
|
### 1. 检查用户是否有已 claim NFT
|
||||||
|
|
||||||
|
1. Method: POST|GET
|
||||||
|
2. URI: /chain/query_info
|
||||||
|
3. HOST: https://chianquery.cebggame.com
|
||||||
|
|
||||||
|
> 参数, body(json, x-www-form-urlencoded) 或 querystring 都可
|
||||||
|
|
||||||
|
| 字段 | 说明 |
|
||||||
|
| --------- | --------------------- |
|
||||||
|
| \*address | 用户钱包地址 |
|
||||||
|
| contract | ClaimFactory 合约地址 |
|
||||||
|
|
||||||
|
3. Response: JSON
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"errcode": 1, // 此字段只有在出错时才会有
|
||||||
|
"errmsg": "error", // 此字段只有在出错时才会有
|
||||||
|
"id": 0
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
# 二. 链上事件爬取
|
||||||
|
|
||||||
|
## 说明
|
||||||
|
|
||||||
|
NFT 和 FT 的`Transfer`事件分布记录在 src/models/FtTransfer.ts 和 src/models/NftTransfer.ts 中
|
||||||
|
NFT 事件记录后, 更新 NftHolder 表, 该表记录最新的 Nft 持有情况
|
||||||
|
其他事件记录在 src/models/UniversalEvent.ts 中
|
||||||
|
|
||||||
|
## 配置
|
||||||
|
|
||||||
|
需要爬取的事件在 src/config/events.json 中配置
|
||||||
|
|
||||||
|
```js
|
||||||
|
;[
|
||||||
|
{
|
||||||
|
address: '0x3F13F83E6363D97d0353cAAfACA08B05D9BF3637', // 合约地址
|
||||||
|
chain: 42161, // 链 id
|
||||||
|
event: 'Transfer', // 事件名
|
||||||
|
abi: 'ERC721', // 合约使用的abi, 在src/abis中定义, 这里取文件名
|
||||||
|
fromBlock: 105016690, // 开始块高
|
||||||
|
eventProcesser: 'NftTransferEvent', // 事件处理器
|
||||||
|
},
|
||||||
|
]
|
||||||
|
```
|
||||||
|
@ -1,47 +1,15 @@
|
|||||||
import BaseController from 'common/base.controller'
|
import BaseController from 'common/base.controller'
|
||||||
import { role, router } from 'decorators/router'
|
import { role, router } from 'decorators/router'
|
||||||
import { ChainTask, ChainTaskClass } from 'models/ChainTask'
|
|
||||||
import { RequestTask } from 'models/RequestTask'
|
|
||||||
import { ChainQueue } from 'queue/chain.queue'
|
|
||||||
import { DocumentType } from '@typegoose/typegoose'
|
|
||||||
import { BlockChain } from 'chain/BlockChain'
|
import { BlockChain } from 'chain/BlockChain'
|
||||||
import { ZError } from 'common/ZError'
|
import { ZError } from 'common/ZError'
|
||||||
import { RedisClient } from 'redis/RedisClient'
|
import { RedisClient } from 'redis/RedisClient'
|
||||||
|
|
||||||
class ChainController extends BaseController {
|
class ChainController extends BaseController {
|
||||||
// @role('anon')
|
/**
|
||||||
// @router('post /chain/req')
|
* 活动用的接口, 检查用户是否有已claim NFT
|
||||||
// async addChainRequest(req, res) {
|
* 如果有,返回tokenId
|
||||||
// // data是一个数组!!
|
* 否则, 返回0
|
||||||
// const { data, source, cb, taskId, force, max } = req.params
|
*/
|
||||||
// console.log(`income chain request:: taskId: ${taskId}, source: ${source}, cb: ${cb}`)
|
|
||||||
// console.log(JSON.stringify(data))
|
|
||||||
// let maxTryCount = max !== undefined ? parseInt(max) : parseInt(process.env.CHAIN_MAX_TRY)
|
|
||||||
// let chainTask: DocumentType<ChainTaskClass> = await ChainTask.insertOrUpdate(
|
|
||||||
// { taskId },
|
|
||||||
// { source, taskData: data, cb },
|
|
||||||
// )
|
|
||||||
|
|
||||||
// if ((!chainTask.newRecord && force) || chainTask.newRecord) {
|
|
||||||
// for (let sub of data) {
|
|
||||||
// let subType = sub.type
|
|
||||||
// let subTask = new RequestTask({
|
|
||||||
// taskId,
|
|
||||||
// chainTaskId: chainTask.id,
|
|
||||||
// taskType: subType,
|
|
||||||
// reqData: sub,
|
|
||||||
// maxTryCount,
|
|
||||||
// })
|
|
||||||
// await subTask.save()
|
|
||||||
// chainTask.tasks.pushOnce(subTask.id)
|
|
||||||
// new ChainQueue().addTaskToQueue(subTask)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// chainTask.newRecord = false
|
|
||||||
// await chainTask.save()
|
|
||||||
// return chainTask.toJson()
|
|
||||||
// }
|
|
||||||
|
|
||||||
@role('anon')
|
@role('anon')
|
||||||
@router('post /chain/query_info')
|
@router('post /chain/query_info')
|
||||||
@router('get /chain/query_info')
|
@router('get /chain/query_info')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user