watcher-ts/README.md

87 lines
2.5 KiB
Markdown
Raw Normal View History

2021-05-06 06:15:00 +00:00
# ERC20 Watcher
2021-05-06 11:52:38 +00:00
2021-05-11 11:08:30 +00:00
## Overview
2021-05-06 11:52:38 +00:00
* Create developer facing GQL schema (`erc20.graphql`) for ERC20 contracts
* GQL `queries` that return useful information
* Individual token data corresponding to the ERC20 ABI
* Aggregate data like running 1-day, 7-day & 30-day `transfer` counts and volumes
* GQL `mutation` to add a new ERC20 contract to watch
* Create a server (`erc20-info-server`) to expose the above GQL API
* Initally, the GQL resolvers will return mock data
* Create a basic `React` app (`erc20-dashboard`) that consumes the GQL API from `erc20-info-server`.
* Create a new watcher (`erc20-watcher-ts`) that is capable of watching multiple ERC20 tokens, capturing their events and state
* Update the `erc20-info-server` GQL resolver to return data by querying the lower-layer `erc20-watcher-ts` GQL API
2021-05-13 13:48:08 +00:00
* For GQL result data, at a minimum, return the request and list of CIDs/mhKeys required to generate that result.
2021-05-06 11:52:38 +00:00
* Note: This implies, for example, performing aggregation in code instead of at the SQL layer.
* Create an ERC20 watcher factory (`erc20-watcher-factory-ts`) that auto-detects ERC20 tokens created on-chain and calls `erc20-info-server` to request watching them.
2021-05-11 11:08:30 +00:00
## Setup
2021-05-13 10:19:15 +00:00
This project uses [yarn workspaces](https://classic.yarnpkg.com/en/docs/workspaces/).
Install packages (Node.JS v15.11.0):
2021-05-11 11:08:30 +00:00
```bash
yarn
```
Run the watcher:
2021-05-11 11:08:30 +00:00
```bash
cd packages/watcher
2021-05-11 11:08:30 +00:00
yarn run server
```
GQL console: http://localhost:3001/graphql
To run tests (GQL queries) against the mock server:
```
cd packages/watcher
yarn run server:mock
```
2021-05-13 13:48:08 +00:00
```bash
cd packages/watcher
2021-05-13 13:48:08 +00:00
yarn test
```
2021-05-11 11:08:30 +00:00
## Example GQL Queries
```text
{
balanceOf(blockHash: "0x671e693ec3dccc948606db8d7e65ac3e16baea80a0dd6d56a126e07ccf85231f", token: "0x1ca7c995f8eF0A2989BbcE08D5B7Efe50A584aa1", owner: "0xDC7d7A8920C8Eecc098da5B7522a5F31509b5Bfc") {
2021-05-11 11:08:30 +00:00
value
proof {
data
}
}
allowance(blockHash: "0x671e693ec3dccc948606db8d7e65ac3e16baea80a0dd6d56a126e07ccf85231f", token: "0x1ca7c995f8eF0A2989BbcE08D5B7Efe50A584aa1", owner: "0xDC7d7A8920C8Eecc098da5B7522a5F31509b5Bfc", spender: "0xCA6D29232D1435D8198E3E5302495417dD073d61") {
2021-05-11 11:08:30 +00:00
value
proof {
data
}
}
events(blockHash: "0x671e693ec3dccc948606db8d7e65ac3e16baea80a0dd6d56a126e07ccf85231f", token: "0x1ca7c995f8eF0A2989BbcE08D5B7Efe50A584aa1") {
2021-05-11 11:08:30 +00:00
event {
... on TransferEvent {
from
to
value
}
... on ApprovalEvent {
owner
spender
value
}
}
proof {
data
}
}
}
```