Skip to content

Commit

Permalink
feat(apps/whale-api): add updatemasternode indexer (#1869)
Browse files Browse the repository at this point in the history
#### What this PR does / why we need it:

Add `UpdateMasternodeIndexer extends DfTxIndexer<UpdateMasternode>` to
update the masternode index when the DfTx UpdaterMasternode transaction
is created.

#### Which issue(s) does this PR fixes?:

Fixes part of #1842

Signed-off-by: Isaac Yong <dev@infinia.space>
Signed-off-by: Kven Ho <kven@cakedefi.com>
Signed-off-by: Fuxing Loh <4266087+fuxingloh@users.noreply.github.com>
Co-authored-by: Mark Tan <marktanrj@gmail.com>
Co-authored-by: Mark Tan <35588098+marktanrj@users.noreply.github.com>
Co-authored-by: Shoham Chakraborty <shhmchk@gmail.com>
Co-authored-by: Dilshan Madushanka <helloscoopz@gmail.com>
Co-authored-by: Isaac Yong <dev@infinia.space>
Co-authored-by: Fuxing Loh <4266087+fuxingloh@users.noreply.github.com>
  • Loading branch information
7 people committed Dec 12, 2022
1 parent 6b26368 commit 97aeb47
Show file tree
Hide file tree
Showing 7 changed files with 432 additions and 5 deletions.
3 changes: 3 additions & 0 deletions apps/whale-api/src/module.indexer/model/dftx.indexer.ts
Expand Up @@ -9,6 +9,7 @@ import { SetOracleDataIndexer } from './dftx/set.oracle.data'
import { SetOracleDataIntervalIndexer } from './dftx/set.oracle.data.interval'
import { CreateMasternodeIndexer } from './dftx/create.masternode'
import { ResignMasternodeIndexer } from './dftx/resign.masternode'
import { UpdateMasternodeIndexer } from './dftx/update.masternode'
import { Injectable, Logger } from '@nestjs/common'
import { DfTxIndexer, DfTxTransaction } from './dftx/_abstract'
import { PoolSwapIndexer } from './dftx/pool.swap'
Expand All @@ -30,6 +31,7 @@ export class MainDfTxIndexer extends Indexer {
setOracleDataInterval: SetOracleDataIntervalIndexer,
createMasternode: CreateMasternodeIndexer,
resignMasternode: ResignMasternodeIndexer,
updateMasternode: UpdateMasternodeIndexer,
poolSwapIndexer: PoolSwapIndexer,
compositeSwapIndexer: CompositeSwapIndexer,
poolSwapIntervalIndexer: PoolSwapAggregatedIndexer,
Expand All @@ -45,6 +47,7 @@ export class MainDfTxIndexer extends Indexer {
setOracleDataInterval,
createMasternode,
resignMasternode,
updateMasternode,
poolSwapIndexer,
compositeSwapIndexer,
poolSwapIntervalIndexer,
Expand Down
2 changes: 2 additions & 0 deletions apps/whale-api/src/module.indexer/model/dftx/_module.ts
Expand Up @@ -6,6 +6,7 @@ import { SetOracleDataIndexer } from './set.oracle.data'
import { SetOracleDataIntervalIndexer } from './set.oracle.data.interval'
import { CreateMasternodeIndexer } from './create.masternode'
import { ResignMasternodeIndexer } from './resign.masternode'
import { UpdateMasternodeIndexer } from './update.masternode'
import { NetworkName } from '@defichain/jellyfish-network'
import { ConfigService } from '@nestjs/config'
import { PoolSwapIndexer } from './pool.swap'
Expand All @@ -23,6 +24,7 @@ const indexers = [
UpdateOracleIndexer,
CreateMasternodeIndexer,
ResignMasternodeIndexer,
UpdateMasternodeIndexer,
PoolSwapIndexer,
PoolSwapAggregatedIndexer,
CompositeSwapIndexer,
Expand Down
Expand Up @@ -114,6 +114,7 @@ describe('create masternode (pre eunos paya)', () => {
expect(masternode?.creationHeight).toStrictEqual(masternodeRPCInfo.creationHeight)
expect(masternode?.resignHeight).toStrictEqual(masternodeRPCInfo.resignHeight)
expect(masternode?.mintedBlocks).toStrictEqual(masternodeRPCInfo.mintedBlocks)
expect(masternode?.history).toStrictEqual(undefined)
})
})

Expand Down
17 changes: 12 additions & 5 deletions apps/whale-api/src/module.indexer/model/dftx/create.masternode.ts
Expand Up @@ -30,11 +30,7 @@ export class CreateMasternodeIndexer extends DfTxIndexer<CreateMasternode> {

// This is actually the operatorPubKeyHash but jellyfish deserializes like so
if (data.operatorPubKeyHash !== undefined) {
if (data.operatorType === MasternodeKeyType.PKHashType) {
operatorAddress = P2PKH.to(this.network, data.operatorPubKeyHash).utf8String
} else { // WitV0KeyHashType
operatorAddress = P2WPKH.to(this.network, data.operatorPubKeyHash).utf8String
}
operatorAddress = CreateMasternodeIndexer.getAddress(this.network, data.operatorType, data.operatorPubKeyHash) ?? ''
}

await this.masternodeMapper.put({
Expand Down Expand Up @@ -92,6 +88,17 @@ export class CreateMasternodeIndexer extends DfTxIndexer<CreateMasternode> {
async invalidateBlockStart (block: RawBlock): Promise<void> {
await this.masternodeStatsMapper.delete(block.height)
}

public static getAddress (network: NetworkName, type: MasternodeKeyType, addressPubKeyHash: string): string | undefined {
if (type === MasternodeKeyType.PKHashType) {
return P2PKH.to(network, addressPubKeyHash).utf8String
}

if (type === MasternodeKeyType.WitV0KeyHashType) {
return P2WPKH.to(network, addressPubKeyHash).utf8String
}
return undefined
}
}

enum MasternodeKeyType {
Expand Down

0 comments on commit 97aeb47

Please sign in to comment.