| * Refactor fill CLI to cli package * Refactor method to fill-state to graph-node * Refactor fill-state CLI to cli package * Move subgraph state utils to a separate file * Refactor subgraph state helper methods to graph-node * Update mock indexer * Move watcher job-runner to util * Remove mock server and data from erc20-watcher * Import watcher job-runner from util | ||
|---|---|---|
| .. | ||
| environments | ||
| src | ||
| .eslintignore | ||
| .eslintrc.json | ||
| .gitignore | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
Example Watcher
Setup
- 
Run the following command to install required packages: yarn
- 
Create a postgres12 database for the watcher: sudo su - postgres createdb graph-test-watcher
- 
If the watcher is an activewatcher:Create database for the job queue and enable the pgcryptoextension on them (https://github.com/timgit/pg-boss/blob/master/docs/usage.md#intro):createdb graph-test-watcher-job-queuepostgres@tesla:~$ psql -U postgres -h localhost graph-test-watcher-job-queue Password for user postgres: psql (12.7 (Ubuntu 12.7-1.pgdg18.04+1)) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. graph-test-watcher-job-queue=# CREATE EXTENSION pgcrypto; CREATE EXTENSION graph-test-watcher-job-queue=# exit
- 
In the config file: - 
Update the database connection settings. 
- 
Update the upstreamconfig and provide theipld-eth-serverGQL API endpoint.
- 
Update the serverconfig with state checkpoint settings.
 
- 
Customize
- 
Indexing on an event: - 
Edit the custom hook function handleEvent(triggered on an event) in hooks.ts to perform corresponding indexing using theIndexerobject.
- 
While using the indexer storage methods for indexing, pass diffas true if default state is desired to be generated using the state variables being indexed.
 
- 
- 
Generating state: - 
Edit the custom hook function createInitialState(triggered if the watcher passes the start block, checkpoint:true) in hooks.ts to save an initialStateusing theIndexerobject.
- 
Edit the custom hook function createStateDiff(triggered on a block) in hooks.ts to save the state in adiffStateusing theIndexerobject. The default state (if exists) is updated.
- 
Edit the custom hook function createStateCheckpoint(triggered just before default and CLI checkpoint) in hooks.ts to save the state in acheckpointStateusing theIndexerobject.
 
- 
- 
The existing example hooks in hooks.ts are for an ERC20contract.
Run
- 
Run the watcher: yarn server
GQL console: http://localhost:3008/graphql
- 
If the watcher is an activewatcher:- 
Run the job-runner: yarn job-runner
- 
To watch a contract: yarn watch:contract --address <contract-address> --kind <contract-kind> --checkpoint <true | false> --starting-block [block-number]- address: Address or identifier of the contract to be watched.
- kind: Kind of the contract.
- checkpoint: Turn checkpointing on (- true|- false).
- starting-block: Starting block for the contract (default:- 1).
 Examples: Watch a contract with its address and checkpointing on: yarn watch:contract --address 0x1F78641644feB8b64642e833cE4AFE93DD6e7833 --kind ERC20 --checkpoint trueWatch a contract with its identifier and checkpointing on: yarn watch:contract --address MyProtocol --kind protocol --checkpoint true
- 
To fill a block range: yarn fill --start-block <from-block> --end-block <to-block>- start-block: Block number to start filling from.
- end-block: Block number till which to fill.
 
- 
To create a checkpoint for a contract: yarn checkpoint create --address <contract-address> --block-hash [block-hash]- address: Address or identifier of the contract for which to create a checkpoint.
- block-hash: Hash of a block (in the pruned region) at which to create the checkpoint (default: latest canonical block hash).
 
- 
To verify a checkpoint: yarn checkpoint verify --cid <checkpoint-cid>cid: CID of the checkpoint for which to verify.
- 
To reset the watcher to a previous block number: - 
Reset watcher: yarn reset watcher --block-number <previous-block-number>
- 
Reset job-queue: yarn reset job-queue --block-number <previous-block-number>
- 
Reset state: yarn reset state --block-number <previous-block-number>
- 
block-number: Block number to which to reset the watcher.
 
- 
- 
To export and import the watcher state: - 
In source watcher, export watcher state: yarn export-state --export-file [export-file-path] --block-number [snapshot-block-height]- export-file: Path of file to which to export the watcher data.
- block-number: Block height at which to take snapshot for export.
 
- 
In target watcher, run job-runner: yarn job-runner
- 
Import watcher state: yarn import-state --import-file <import-file-path>- import-file: Path of file from which to import the watcher data.
 
- 
Run server: yarn server
 
- 
- 
To inspect a CID: yarn inspect-cid --cid <cid>- cid: CID to be inspected.
 
 
-