Migration to Hydra v2
A guide for migrating your mapping from Hydra v1 to Hydra v2
Versioning
All 0.x Hydra packages (a bit counter-intuitively) are considered Hydra v1. Since Hydra v2 (that is, versions 2.x) all Hydra packages (hydra-cli
, hydra-common
, hydra-typegen
etc) recieve the same version on each release. So, say, Hydra version 2.0.1 means that all the packages together with the Docker images hydra-indexer
and hydra-indexer-gateway
are taged 2.0.1
What's new in Hydra v2
The key differences to keep in mind while migrating from v1 to v2:
Hydra Processor is NOT generated by
hydra-cli
in v2Hydra Processor is run against a manifest file
manifest.yml
Mappings should be transpiled into a JS module
hydra-indexer
andhydra-indexer-gateway
should be updated to v2
See examples of Hydra v2 in action here
Migration
Install the latest
hydra-cli
v2Run
hydra-cli scaffold --silent
to generate a stub of a v2 Hydra projectRun
yarn
Codegen
Nothing new here. Simply run yarn codegen
Typegen for events
Update typegen section in manifest.yml
List events and calls to which the types should be generated
Add
customTypes
if needed:lib
: from where the generated classes should import additional substrate typestypedefsLoc
: path the type definitions
Install the types library: cd mappings && yarn add <type library>
Run yarn typegen
Mapping files
Change mappings arguments: DB
should be converted to DatabaseManager
imported from @dzlzv/hydra-db-utils
Replace event: SubstrateEvent
with a typed class generated by typegen in the previous step. The event data is now available at event.data
Whenever the corresponding extrinsic data is needed, use event.ctx.extrinsic
and create a type-safe Call
class out of it. Here is an example:
Add and install all the necessary dependencies for the mappings (e.g. the types library) and build the mappings:
Manifest file
Inspect and update the default manifest.yml
(Optional) Update
dataSource.chain
For each mapping, update the function name and the event it is handling
Add
extrinsicHandlers
if needed
Indexer and Indexer-Gateway
Use the latest v2.x Docker images (2.0.1-beta.9 at the time of writing). Check the indexer status by running the following GraphQL query:
Last updated