.. | ||
environments | ||
src | ||
test | ||
.eslintignore | ||
.eslintrc.json | ||
.gitignore | ||
demo.md | ||
hardhat.config.ts | ||
package.json | ||
README.md | ||
tsconfig.json |
erc721-watcher
Setup
-
Run the following command to install required packages:
yarn
-
Create a postgres12 database for the watcher:
sudo su - postgres createdb erc721-watcher
-
If the watcher is an
active
watcher:Create database for the job queue and enable the
pgcrypto
extension on them (https://github.com/timgit/pg-boss/blob/master/docs/usage.md#intro):createdb erc721-watcher-job-queue
postgres@tesla:~$ psql -U postgres -h localhost erc721-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. erc721-watcher-job-queue=# CREATE EXTENSION pgcrypto; CREATE EXTENSION erc721-watcher-job-queue=# exit
-
The following core services should be setup and running on localhost:
-
vulcanize/go-ethereum
v1.10.18-statediff-4.0.2-alpha on port 8545 -
vulcanize/ipld-eth-server
v4.0.3-alpha with native GQL API enabled, on port 8082
-
-
In the config file:
-
Update the database connection settings.
-
Update the
upstream
config and provide theipld-eth-server
GQL API endpoint. -
Update the
server
config 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 theIndexer
object. -
While using the indexer storage methods for indexing, pass
diff
as 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 initialState
using theIndexer
object. -
Edit the custom hook function
createStateDiff
(triggered on a block) in hooks.ts to save the state in adiff
State
using theIndexer
object. 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 acheckpoint
State
using theIndexer
object.
-
Run
Follow the steps below or follow the Demo
-
Run the watcher:
-
If the watcher is a
lazy
watcher:-
Run the server:
yarn server
GQL console: http://localhost:3006/graphql
-
-
If the watcher is an
active
watcher:-
Run the job-runner:
yarn job-runner
-
Run the server:
yarn server
GQL console: http://localhost:3012/graphql
-
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 ERC721 --checkpoint true
Watch 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 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
-
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.
-