forked from cerc-io/ipld-eth-server
01ffc80ef2
flaky test
41 lines
2.8 KiB
Markdown
41 lines
2.8 KiB
Markdown
# Custom transformers
|
|
When the capabilities of the generic `contractWatcher` are not sufficient, custom transformers tailored to a specific
|
|
purpose can be leveraged.
|
|
|
|
Individual transformers can be composed together from any number of external repositories and executed as a single process using
|
|
the `compose` and `execute` commands or the `composeAndExecute` command.
|
|
|
|
## Writing custom transformers
|
|
For help with writing different types of custom transformers for the `composeAndExecute` set of commands, please see the below:
|
|
|
|
Storage Transformers
|
|
* [Guide](../../staging/libraries/shared/factories/storage/README.md)
|
|
* [Example](../../staging/libraries/shared/factories/storage/EXAMPLE.md)
|
|
|
|
Event Transformers
|
|
* [Guide](../../staging/libraries/shared/factories/event/README.md)
|
|
* [Example 1](https://github.com/vulcanize/ens_transformers/tree/master/transformers/registar)
|
|
* [Example 2](https://github.com/vulcanize/ens_transformers/tree/master/transformers/registry)
|
|
* [Example 3](https://github.com/vulcanize/ens_transformers/tree/master/transformers/resolver)
|
|
|
|
Contract Transformers
|
|
* [Example 1](https://github.com/vulcanize/account_transformers)
|
|
* [Example 2](https://github.com/vulcanize/ens_transformers/tree/master/transformers/domain_records)
|
|
|
|
## Preparing custom transformers to work as part of a plugin
|
|
To plug in an external transformer we need to:
|
|
|
|
1. Create a package that exports a variable `TransformerInitializer`, `StorageTransformerInitializer`, or `ContractTransformerInitializer` that are of type [TransformerInitializer](../staging/libraries/shared/transformer/event_transformer.go#L33)
|
|
or [StorageTransformerInitializer](../../staging/libraries/shared/transformer/storage_transformer.go#L31),
|
|
or [ContractTransformerInitializer](../../staging/libraries/shared/transformer/contract_transformer.go#L31), respectively
|
|
2. Design the transformers to work in the context of their [event](../staging/libraries/shared/watcher/event_watcher.go#L83),
|
|
[storage](../../staging/libraries/shared/watcher/storage_watcher.go#L53),
|
|
or [contract](../../staging/libraries/shared/watcher/contract_watcher.go#L68) watcher execution modes
|
|
3. Create db migrations to run against vulcanizeDB so that we can store the transformer output
|
|
* Do not `goose fix` the transformer migrations, this is to ensure they are always ran after the core vulcanizedb migrations which are kept in their fixed form
|
|
* Specify migration locations for each transformer in the config with the `exporter.transformer.migrations` fields
|
|
* If the base vDB migrations occupy this path as well, they need to be in their `goose fix`ed form
|
|
as they are [here](../../staging/db/migrations)
|
|
|
|
To update a plugin repository with changes to the core vulcanizedb repository, run `dep ensure` to update its dependencies.
|