123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase'
- import { apiModuleByGroup } from '../../Api'
- import { Balance } from '@polkadot/types/interfaces'
- import { formatBalance } from '@polkadot/util'
- import { minMaxInt } from '../../validators/common'
- import chalk from 'chalk'
- import { createParamOptions } from '../../helpers/promptOptions'
- export default class WorkingGroupsSlashWorker extends WorkingGroupsCommandBase {
- static description = 'Slashes given worker stake. Requires lead access.'
- static args = [
- {
- name: 'workerId',
- required: true,
- description: 'Worker ID',
- },
- ]
- static flags = {
- ...WorkingGroupsCommandBase.flags,
- }
- async run(): Promise<void> {
- const { args } = this.parse(WorkingGroupsSlashWorker)
- // Lead-only gate
- const lead = await this.getRequiredLeadContext()
- const workerId = parseInt(args.workerId)
- const groupMember = await this.getWorkerWithStakeForLeadAction(workerId)
- this.log(chalk.magentaBright('Current worker stake: ', formatBalance(groupMember.stake)))
- const balanceValidator = minMaxInt(1, groupMember.stake.toNumber())
- const balance = (await this.promptForParam(
- 'Balance',
- createParamOptions('amount', undefined, balanceValidator)
- )) as Balance
- await this.sendAndFollowNamedTx(
- await this.getDecodedPair(lead.roleAccount),
- apiModuleByGroup[this.group],
- 'slashStake',
- [workerId, balance]
- )
- this.log(
- chalk.green(
- `${chalk.magentaBright(formatBalance(balance))} from worker ${chalk.magentaBright(
- workerId
- )} stake has been successfully slashed!`
- )
- )
- }
- }
|