更新文档
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
|
||||
|
||||
> 供 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 { 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 { ZError } from 'common/ZError'
|
||||
import { RedisClient } from 'redis/RedisClient'
|
||||
|
||||
class ChainController extends BaseController {
|
||||
// @role('anon')
|
||||
// @router('post /chain/req')
|
||||
// async addChainRequest(req, res) {
|
||||
// // data是一个数组!!
|
||||
// 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()
|
||||
// }
|
||||
|
||||
/**
|
||||
* 活动用的接口, 检查用户是否有已claim NFT
|
||||
* 如果有,返回tokenId
|
||||
* 否则, 返回0
|
||||
*/
|
||||
@role('anon')
|
||||
@router('post /chain/query_info')
|
||||
@router('get /chain/query_info')
|
||||
|
Loading…
x
Reference in New Issue
Block a user