Skip to content

Commit

Permalink
feat: add wallet balance for monitor
Browse files Browse the repository at this point in the history
  • Loading branch information
ALPAC-4 committed Feb 11, 2025
1 parent 99b5d52 commit fbb7c19
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 10 deletions.
37 changes: 28 additions & 9 deletions src/workers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import {
MsgChannelOpenAck,
MsgChannelOpenConfirm,
MsgChannelOpenTry,
Coins,
} from '@initia/initia.js'
import { Config, PacketFee, KeyConfig } from 'src/lib/config'
import { env } from 'node:process'
Expand All @@ -41,6 +42,7 @@ import { RESTClient } from 'src/lib/restClient'

import { State } from '@initia/initia.proto/ibc/core/channel/v1/channel'
import { generateMsgChannelCloseConfirm } from 'src/msgs/channelCloseConfirm'
import { bech32 } from 'bech32'

export class WorkerController {
public chains: Record<string, ChainWorker> // chainId => ChainWorker
Expand Down Expand Up @@ -90,15 +92,28 @@ export class WorkerController {

for (const walletConfig of chainConfig.wallets) {
const key = createKey(walletConfig.key)
const address = bech32.encode(
chainConfig.bech32Prefix,
bech32.decode(key.accAddress).words
)
const balance = BigInt(
await rest.bank
.balanceByDenom(
address,
new Coins(rest.config.gasPrices as Coins.Input).toArray()[0].denom
)
.then((coin) => coin.amount)
)
const wallet = new WalletWorker(
chain,
this,
walletConfig.maxHandlePacket ?? 100,
new Wallet(rest, key),
balance,
walletConfig.packetFilter
)

this.wallets[`${chainConfig.chainId}::${wallet.address()}`] = wallet
this.wallets[`${chainConfig.chainId}::${address}`] = wallet
}
}
}
Expand All @@ -113,8 +128,8 @@ export class WorkerController {
}

public getStatus(): { chains: ChainStatus[] } {
const wallets = Object.values(this.wallets);
const chains: ChainStatus[] = Object.values(this.chains).map(chain => {
const wallets = Object.values(this.wallets)
const chains: ChainStatus[] = Object.values(this.chains).map((chain) => {
const syncWorkerKeys = Object.keys(chain.syncWorkers)
const syncWorkers = syncWorkerKeys.map((key) => {
const syncWorker = chain.syncWorkers[Number(key)]
Expand All @@ -125,12 +140,15 @@ export class WorkerController {
}
})

const walletWorkers = wallets.filter(wallet => wallet.chain.chainId === chain.chainId).map(wallet => {
return {
address: wallet.address(),
packetFilter: wallet.packetFilter,
}
});
const walletWorkers = wallets
.filter((wallet) => wallet.chain.chainId === chain.chainId)
.map((wallet) => {
return {
address: wallet.address(),
gasTokenBalance: wallet.gasTokenBalance.toString(),
packetFilter: wallet.packetFilter,
}
})

return {
chainId: chain.chainId,
Expand Down Expand Up @@ -324,6 +342,7 @@ interface ChainStatus {
}[]
walletWorkers: {
address: string
gasTokenBalance: string
packetFilter?: PacketFilter
}[]
}
15 changes: 14 additions & 1 deletion src/workers/wallet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import { WorkerController } from '.'
import { DB } from 'src/db'
import { Height } from 'cosmjs-types/ibc/core/client/v1/client'
import { ConnectionController } from 'src/db/controller/connection'
import { Wallet, isTxError, MsgUpdateClient } from '@initia/initia.js'
import { Wallet, isTxError, MsgUpdateClient, Coins } from '@initia/initia.js'
import { createLoggerWithPrefix } from 'src/lib/logger'
import { bech32 } from 'bech32'
import { delay } from 'bluebird'
Expand All @@ -32,6 +32,7 @@ export class WalletWorker {
public workerController: WorkerController,
private maxHandlePacket: number,
public wallet: Wallet,
public gasTokenBalance: bigint,
public packetFilter?: PacketFilter
) {
this.logger = createLoggerWithPrefix(
Expand Down Expand Up @@ -392,6 +393,18 @@ export class WalletWorker {
`Handled msgs(${msgs.length}). txhash - ${result.txhash}`
)

// update balance
this.gasTokenBalance = BigInt(
await this.wallet.rest.bank
.balanceByDenom(
this.address(),
new Coins(
this.wallet.rest.config.gasPrices as Coins.Input
).toArray()[0].denom
)
.then((coin) => coin.amount)
)

this.sequence++
} catch (e) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
Expand Down

0 comments on commit fbb7c19

Please sign in to comment.