decreaseWorkerStake.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase'
  2. import _ from 'lodash'
  3. import { apiModuleByGroup } from '../../Api'
  4. import { WorkerId } from '@joystream/types/working-group'
  5. import { Balance } from '@polkadot/types/interfaces'
  6. import { formatBalance } from '@polkadot/util'
  7. import { minMaxInt } from '../../validators/common'
  8. import chalk from 'chalk'
  9. import ExitCodes from '../../ExitCodes'
  10. import { createParamOptions } from '../../helpers/promptOptions'
  11. export default class WorkingGroupsDecreaseWorkerStake extends WorkingGroupsCommandBase {
  12. static description =
  13. 'Decreases given worker stake by an amount that will be returned to the worker role account. ' +
  14. 'Requires lead access.'
  15. static args = [
  16. {
  17. name: 'workerId',
  18. required: true,
  19. description: 'Worker ID',
  20. },
  21. ]
  22. static flags = {
  23. ...WorkingGroupsCommandBase.flags,
  24. }
  25. async run() {
  26. const { args } = this.parse(WorkingGroupsDecreaseWorkerStake)
  27. const account = await this.getRequiredSelectedAccount()
  28. // Lead-only gate
  29. await this.getRequiredLead()
  30. const workerId = parseInt(args.workerId)
  31. const groupMember = await this.getWorkerWithStakeForLeadAction(workerId)
  32. this.log(chalk.white('Current worker stake: ', formatBalance(groupMember.stake)))
  33. const balanceValidator = minMaxInt(1, groupMember.stake.toNumber())
  34. const balance = (await this.promptForParam(
  35. 'Balance',
  36. createParamOptions('amount', undefined, balanceValidator)
  37. )) as Balance
  38. await this.requestAccountDecoding(account)
  39. await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'decreaseStake', [
  40. new WorkerId(workerId),
  41. balance,
  42. ])
  43. this.log(
  44. chalk.green(
  45. `${chalk.white(formatBalance(balance))} from worker ${chalk.white(workerId)} stake ` +
  46. `has been returned to worker's role account (${chalk.white(groupMember.roleAccount.toString())})!`
  47. )
  48. )
  49. }
  50. }