1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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 WorkingGroupsDecreaseWorkerStake extends WorkingGroupsCommandBase {
- static description =
- 'Decreases given worker stake by an amount that will be returned to the worker role account. ' +
- 'Requires lead access.'
- static args = [
- {
- name: 'workerId',
- required: true,
- description: 'Worker ID',
- },
- ]
- static flags = {
- ...WorkingGroupsCommandBase.flags,
- }
- async run(): Promise<void> {
- const { args } = this.parse(WorkingGroupsDecreaseWorkerStake)
- // 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],
- 'decreaseStake',
- [workerId, balance]
- )
- this.log(
- chalk.green(
- `${chalk.magentaBright(formatBalance(balance))} from worker ${chalk.magentaBright(workerId)} stake ` +
- `has been returned to worker's role account (${chalk.magentaBright(groupMember.roleAccount.toString())})!`
- )
- )
- }
- }
|