* Generate default derived state for Mapping type variables * Update IPLDBlock in storage methods instead of using a private class variable * Default state flag for indexer storage methods * Helper functions to update state objects * Add checkpoint flag in Contract table and corresponding changes in existing watchers * Update codegen docs * Add examples to generated docs * Turn default state off by default * Make state parameter to indexer storage methods default to none * Add method to get prev. state in indexer |
||
|---|---|---|
| .. | ||
| src | ||
| .eslintignore | ||
| .eslintrc.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
Code Generator
Setup
-
In root of the repository:
-
Install required packages:
yarn -
Build files:
yarn build
-
Run
-
Run the following command to generate a watcher from a contract file:
yarn codegen --input-file <input-file-path> --contract-name <contract-name> --output-folder [output-folder] --mode [eth_call | storage | all] --flatten [true | false] --kind [lazy | active]input-file(alias:i): Input contract file path or an URL (required).contract-name(alias:c): Main contract name (required).output-folder(alias:o): Output folder path. (logs output usingstdoutif not provided).mode(alias:m): Code generation mode (default:all).flatten(alias:f): Flatten the input contract file (default:true).kind(alias:k): Kind of watcher (default:active).
Note: When passed an URL as
input-file, it is assumed that it points to an already flattened contract file.Examples:
Generate code in
storagemode,lazykind.yarn codegen --input-file ./test/examples/contracts/ERC721.sol --contract-name ERC721 --output-folder ../my-erc721-watcher --mode storage --kind lazyGenerate code in
eth_callmode using a contract provided by an URL.yarn codegen --input-file https://git.io/Jupci --contract-name ERC721 --output-folder ../my-erc721-watcher --mode eth_callGenerate code for
ERC721in botheth_callandstoragemode,activekind.yarn codegen --input-file ../../node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol --contract-name ERC721 --output-folder ../demo-erc721-watcher --mode all --kind activeGenerate code for
ERC20contract in botheth_callandstoragemode,activekind:yarn codegen --input-file ../../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol --contract-name ERC20 --output-folder ../demo-erc20-watcher --mode all --kind activeThis will create a folder called
demo-erc20-watchercontaining the generated code at the specified path. Follow the steps in Run Generated Watcher to setup and run the generated watcher.
Run Generated Watcher
Setup
-
Run the following command to install required packages:
yarn -
Create the databases configured in
environments/local.toml. -
Update the state checkpoint settings in
environments/local.toml.
Customize
-
Indexing on an event:
-
Edit the custom hook function
handleEvent(triggered on an event) insrc/hooks.tsto perform corresponding indexing using theIndexerobject. -
While using the indexer storage methods for indexing, pass the optional arg.
stateasdifforcheckpointif default state is desired to be generated using the state variables being indexed else passnone.
-
-
Generating state:
-
Edit the custom hook function
createInitialCheckpoint(triggered on watch-contract, checkpoint:true) insrc/hooks.tsto save an initial checkpointIPLDBlockusing theIndexerobject. -
Edit the custom hook function
createStateDiff(triggered on a block) insrc/hooks.tsto save the state in anIPLDBlockusing theIndexerobject. The default state (if exists) is updated.
-
-
The existing example hooks in
src/hooks.tsare for anERC20contract.
Run
-
Run lint:
yarn lint -
Run the watcher:
yarn server -
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] -
To fill a block range:
yarn fill --start-block <from-block> --end-block <to-block> -
To create a checkpoint for a contract:
yarn checkpoint --address <contract-address> --block-hash [block-hash]
-
Known Issues
- Currently,
node-fetch v2.6.2is being used to fetch from URLs asv3.0.0is an ESM-only module andts-nodetranspiles to import it usingrequire.