Skip to content

Commit 97aeb47

Browse files
Kven Homarktanrjshohamc1helloscoopainfinia-yzl
authored
feat(apps/whale-api): add updatemasternode indexer (#1869)
#### 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 <[email protected]> Signed-off-by: Kven Ho <[email protected]> Signed-off-by: Fuxing Loh <[email protected]> Co-authored-by: Mark Tan <[email protected]> Co-authored-by: Mark Tan <[email protected]> Co-authored-by: Shoham Chakraborty <[email protected]> Co-authored-by: Dilshan Madushanka <[email protected]> Co-authored-by: Isaac Yong <[email protected]> Co-authored-by: Fuxing Loh <[email protected]>
1 parent 6b26368 commit 97aeb47

File tree

7 files changed

+432
-5
lines changed

7 files changed

+432
-5
lines changed

apps/whale-api/src/module.indexer/model/dftx.indexer.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { SetOracleDataIndexer } from './dftx/set.oracle.data'
99
import { SetOracleDataIntervalIndexer } from './dftx/set.oracle.data.interval'
1010
import { CreateMasternodeIndexer } from './dftx/create.masternode'
1111
import { ResignMasternodeIndexer } from './dftx/resign.masternode'
12+
import { UpdateMasternodeIndexer } from './dftx/update.masternode'
1213
import { Injectable, Logger } from '@nestjs/common'
1314
import { DfTxIndexer, DfTxTransaction } from './dftx/_abstract'
1415
import { PoolSwapIndexer } from './dftx/pool.swap'
@@ -30,6 +31,7 @@ export class MainDfTxIndexer extends Indexer {
3031
setOracleDataInterval: SetOracleDataIntervalIndexer,
3132
createMasternode: CreateMasternodeIndexer,
3233
resignMasternode: ResignMasternodeIndexer,
34+
updateMasternode: UpdateMasternodeIndexer,
3335
poolSwapIndexer: PoolSwapIndexer,
3436
compositeSwapIndexer: CompositeSwapIndexer,
3537
poolSwapIntervalIndexer: PoolSwapAggregatedIndexer,
@@ -45,6 +47,7 @@ export class MainDfTxIndexer extends Indexer {
4547
setOracleDataInterval,
4648
createMasternode,
4749
resignMasternode,
50+
updateMasternode,
4851
poolSwapIndexer,
4952
compositeSwapIndexer,
5053
poolSwapIntervalIndexer,

apps/whale-api/src/module.indexer/model/dftx/_module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { SetOracleDataIndexer } from './set.oracle.data'
66
import { SetOracleDataIntervalIndexer } from './set.oracle.data.interval'
77
import { CreateMasternodeIndexer } from './create.masternode'
88
import { ResignMasternodeIndexer } from './resign.masternode'
9+
import { UpdateMasternodeIndexer } from './update.masternode'
910
import { NetworkName } from '@defichain/jellyfish-network'
1011
import { ConfigService } from '@nestjs/config'
1112
import { PoolSwapIndexer } from './pool.swap'
@@ -23,6 +24,7 @@ const indexers = [
2324
UpdateOracleIndexer,
2425
CreateMasternodeIndexer,
2526
ResignMasternodeIndexer,
27+
UpdateMasternodeIndexer,
2628
PoolSwapIndexer,
2729
PoolSwapAggregatedIndexer,
2830
CompositeSwapIndexer,

apps/whale-api/src/module.indexer/model/dftx/create.masternode.spec.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ describe('create masternode (pre eunos paya)', () => {
114114
expect(masternode?.creationHeight).toStrictEqual(masternodeRPCInfo.creationHeight)
115115
expect(masternode?.resignHeight).toStrictEqual(masternodeRPCInfo.resignHeight)
116116
expect(masternode?.mintedBlocks).toStrictEqual(masternodeRPCInfo.mintedBlocks)
117+
expect(masternode?.history).toStrictEqual(undefined)
117118
})
118119
})
119120

apps/whale-api/src/module.indexer/model/dftx/create.masternode.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,7 @@ export class CreateMasternodeIndexer extends DfTxIndexer<CreateMasternode> {
3030

3131
// This is actually the operatorPubKeyHash but jellyfish deserializes like so
3232
if (data.operatorPubKeyHash !== undefined) {
33-
if (data.operatorType === MasternodeKeyType.PKHashType) {
34-
operatorAddress = P2PKH.to(this.network, data.operatorPubKeyHash).utf8String
35-
} else { // WitV0KeyHashType
36-
operatorAddress = P2WPKH.to(this.network, data.operatorPubKeyHash).utf8String
37-
}
33+
operatorAddress = CreateMasternodeIndexer.getAddress(this.network, data.operatorType, data.operatorPubKeyHash) ?? ''
3834
}
3935

4036
await this.masternodeMapper.put({
@@ -92,6 +88,17 @@ export class CreateMasternodeIndexer extends DfTxIndexer<CreateMasternode> {
9288
async invalidateBlockStart (block: RawBlock): Promise<void> {
9389
await this.masternodeStatsMapper.delete(block.height)
9490
}
91+
92+
public static getAddress (network: NetworkName, type: MasternodeKeyType, addressPubKeyHash: string): string | undefined {
93+
if (type === MasternodeKeyType.PKHashType) {
94+
return P2PKH.to(network, addressPubKeyHash).utf8String
95+
}
96+
97+
if (type === MasternodeKeyType.WitV0KeyHashType) {
98+
return P2WPKH.to(network, addressPubKeyHash).utf8String
99+
}
100+
return undefined
101+
}
95102
}
96103

97104
enum MasternodeKeyType {

0 commit comments

Comments
 (0)