UNPKG

@divstake-nestjs/consensus

Version:

NestJS Consensus Layer API Module for Lido Finance projects. Part of [DivStake NestJS Modules](https://github.com/skaibaLab/divstake-nestjs-modules/#readme)

206 lines (161 loc) 7.7 kB
# Consensus Layer API Module NestJS Consensus Layer API Module for Lido Finance projects. Part of [DivStake NestJS Modules](https://github.com/skaibaLab/divstake-nestjs-modules/#readme) ## Install ```bash yarn add @divstake-nestjs/consensus ``` ## Update types The types used in the API methods are based on [Eth2Spec](https://ethereum.github.io/beacon-APIs/). To update them use the script: ```bash ./generate.sh ``` ## Usage This module depends on `FetchModule` from `@divstake-nestjs/fetch`, so you need to provide it as a global module or import it into `ConsensusModule`. ```ts // Import import { Module } from '@nestjs/common'; import { ConsensusModule } from '@divstake-nestjs/consensus'; import { FetchModule } from '@divstake-nestjs/fetch'; import { MyService } from './my.service'; @Module({ imports: [ConsensusModule.forFeature({ imports: [FetchModule] })], providers: [MyService], exports: [MyService], }) export class MyModule {} // Usage import { ConsensusService } from '@divstake-nestjs/consensus'; export class MyService { constructor(private consensusService: ConsensusService) {} async myMethod() { return await this.consensusService.getGenesis(); } } ``` ### Global usage ```ts import { Module } from '@nestjs/common'; import { ConsensusModule } from '@divstake-nestjs/consensus'; import { FetchModule } from '@divstake-nestjs/fetch'; @Module({ imports: [FetchModule.forRoot(), ConsensusModule.forRoot()], }) export class MyModule {} ``` ### Async usage ```ts import { Module } from '@nestjs/common'; import { ConsensusModule } from '@divstake-nestjs/consensus'; import { FetchModule } from '@divstake-nestjs/fetch'; import { ConfigModule, ConfigService } from './my.service'; @Module({ imports: [ ConfigModule.forRoot(), FetchModule.forRoot(), ConsensusModule.forRootAsync({ async useFactory(configService: ConfigService) { return { pollingInterval: configService.pollingInterval }; }, inject: [ConfigService], }), ], }) export class MyModule {} ``` ### Fetch options Methods support fetch `options`: ```ts // Usage import { ConsensusService } from '@divstake-nestjs/consensus'; export class MyService { constructor(private consensusService: ConsensusService) {} async myMethod() { return await this.consensusService.getGenesis({ options: { headers: { 'x-header-foo': 'bar' } }, }); } } ``` ### Subscription Subscribe to head blocks: ```ts import { ConsensusService } from '@divstake-nestjs/consensus'; export class MyService { constructor(private consensusService: ConsensusService) { this.consensusService.subscribe((error, data) => { console.log(error, data); }); } } ``` Subscribe to finalized blocks: ```ts import { ConsensusService } from '@divstake-nestjs/consensus'; export class MyService { constructor(private consensusService: ConsensusService) { this.consensusService.subscribe( (error, data) => { console.log(error, data); }, { blockId: 'finalized' }, ); } } ``` ## Methods ### Beacon - [getGenesis](https://ethereum.github.io/beacon-APIs/#/Beacon/getGenesis) - [getStateRoot](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) - [getStateFork](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateFork) - [getStateFinalityCheckpoints](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateFinalityCheckpoints) - [getStateValidators](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateValidators) - [getStateValidator](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateValidator) - [getStateValidatorBalances](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateValidatorBalances) - [getEpochCommittees](https://ethereum.github.io/beacon-APIs/#/Beacon/getEpochCommittees) - [getEpochSyncCommittees](https://ethereum.github.io/beacon-APIs/#/Beacon/getEpochSyncCommittees) - [getBlockHeaders](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlockHeaders) - [getBlockHeader](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlockHeader) - [publishBlock](https://ethereum.github.io/beacon-APIs/#/Beacon/publishBlock) - [getBlockV2](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlockV2) - [getBlockRoot](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlockRoot) - [getBlockAttestations](https://ethereum.github.io/beacon-APIs/#/Beacon/getBlockAttestations) - [getPoolAttestations](https://ethereum.github.io/beacon-APIs/#/Beacon/getPoolAttestations) - [submitPoolAttestations](https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolAttestations) - [getPoolAttesterSlashings](https://ethereum.github.io/beacon-APIs/#/Beacon/getPoolAttesterSlashings) - [submitPoolAttesterSlashings](https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolAttesterSlashings) - [getPoolProposerSlashings](https://ethereum.github.io/beacon-APIs/#/Beacon/getPoolProposerSlashings) - [submitPoolProposerSlashings](https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolProposerSlashings) - [submitPoolSyncCommitteeSignatures](https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolSyncCommitteeSignatures) - [getPoolVoluntaryExits](https://ethereum.github.io/beacon-APIs/#/Beacon/getPoolVoluntaryExits) - [submitPoolVoluntaryExit](https://ethereum.github.io/beacon-APIs/#/Beacon/submitPoolVoluntaryExit) ### Config - [getForkSchedule](https://ethereum.github.io/beacon-APIs/#/Config/getForkSchedule) - [getSpec](https://ethereum.github.io/beacon-APIs/#/Config/getSpec) - [getDepositContract](https://ethereum.github.io/beacon-APIs/#/Config/getDepositContract) ### Debug - [getStateV2](https://ethereum.github.io/beacon-APIs/#/Debug/getStateV2) - [getDebugChainHeadsV2](https://ethereum.github.io/beacon-APIs/#/Debug/getDebugChainHeadsV2) ### Events - [eventstream](https://ethereum.github.io/beacon-APIs/#/Events/eventstream) ### Node - [getNetworkIdentity](https://ethereum.github.io/beacon-APIs/#/Node/getNetworkIdentity) - [getPeers](https://ethereum.github.io/beacon-APIs/#/Node/getPeers) - [getPeer](https://ethereum.github.io/beacon-APIs/#/Node/getPeer) - [getPeerCount](https://ethereum.github.io/beacon-APIs/#/Node/getPeerCount) - [getNodeVersion](https://ethereum.github.io/beacon-APIs/#/Node/getNodeVersion) - [getSyncingStatus](https://ethereum.github.io/beacon-APIs/#/Node/getSyncingStatus) - [getHealth](https://ethereum.github.io/beacon-APIs/#/Node/getHealth) ### Validator - [getAttesterDuties](https://ethereum.github.io/beacon-APIs/#/Validator/getAttesterDuties) - [getProposerDuties](https://ethereum.github.io/beacon-APIs/#/Validator/getProposerDuties) - [getSyncCommitteeDuties](https://ethereum.github.io/beacon-APIs/#/Validator/getSyncCommitteeDuties) - [getAggregatedAttestationV2](https://ethereum.github.io/beacon-APIs/#/Validator/getAggregatedAttestationV2) - [produceBlockV3](https://ethereum.github.io/beacon-APIs/#/Validator/produceBlockV3) - [produceAttestationData](https://ethereum.github.io/beacon-APIs/#/Validator/produceAttestationData) - [getAggregatedAttestation](https://ethereum.github.io/beacon-APIs/#/Validator/getAggregatedAttestation) - [publishAggregateAndProofs](https://ethereum.github.io/beacon-APIs/#/Validator/publishAggregateAndProofs) - [prepareBeaconCommitteeSubnet](https://ethereum.github.io/beacon-APIs/#/Validator/prepareBeaconCommitteeSubnet) - [prepareSyncCommitteeSubnets](https://ethereum.github.io/beacon-APIs/#/Validator/prepareSyncCommitteeSubnets) - [produceSyncCommitteeContribution](https://ethereum.github.io/beacon-APIs/#/Validator/produceSyncCommitteeContribution) - [publishContributionAndProofs](https://ethereum.github.io/beacon-APIs/#/Validator/publishContributionAndProofs)