Hydra Typegen
Motivation
Hydra Typegen is a code generation tool for creating Typescript types for substrate events and extrinsics. Its primary use-case is to provide type-safe interfaces for Hydra mappings. For example, once a typescript class for the Balances.Transfer event is generated, a mapping can look like
export async function balancesTransfer(
db: DatabaseManager,
_event: SubstrateEvent
) {
const event = new Balances.TransferEvent(_event);
const transfer = new Transfer()
transfer.from = Buffer.from(event.data.accountIds[0].toHex())
transfer.to = Buffer.from(event.data.accountIds[1].toHex())
transfer.value = event.data.balance.toBn()
transfer.block = event.ctx.blockNumber
transfer.comment = `Transferred ${transfer.value} from ${transfer.from} to ${transfer.to}`
console.log(`Saving ${JSON.stringify(transfer, null, 2)}`)
await db.save<Transfer>(transfer)
}Commands
hydra-typegen help [COMMAND]
hydra-typegen help [COMMAND]display help for hydra-typegen
See code: @oclif/plugin-help
hydra-typegen typegen [CONFIG]
hydra-typegen typegen [CONFIG]Generate Typescript classes for the Substrate events
See code: src/commands/typegen/index.ts
A full sample Hydra project can be found here
Quickstart
A minimal example for generating classes for the Balances.Transfer and Treasury.Deposit events in Kusama:
It is also possible to run hydra-typegen against a manifest file:
The config file typegen.yml can look like this:
Hydra-typegen also supports config files like the one below:
Simply run hydra-typegen <path-to-config-file>
Custom types
Hydra Typegen supports custom substrate types via the --typedefs flag. The provided .json file should include type definitions for the arguments and parameters of the events and extrinsics to be generated. The type definitions file is copied to the generated sources.
In the config file, place the definition into the customTypes section. It assumes that all the custom runtime types are already available for import from a library, so that e.g. the generated import statement
is correctly resolved.
Last updated
Was this helpful?