updateWorkerReward.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import WorkingGroupsCommandBase from '../../base/WorkingGroupsCommandBase'
  2. import { apiModuleByGroup } from '../../Api'
  3. import { WorkerId } from '@joystream/types/working-group'
  4. import { formatBalance } from '@polkadot/util'
  5. import chalk from 'chalk'
  6. import { Reward } from '../../Types'
  7. import { positiveInt } from '../../validators/common'
  8. import { createParamOptions } from '../../helpers/promptOptions'
  9. import ExitCodes from '../../ExitCodes'
  10. export default class WorkingGroupsUpdateWorkerReward extends WorkingGroupsCommandBase {
  11. static description = "Change given worker's reward (amount only). Requires lead access."
  12. static args = [
  13. {
  14. name: 'workerId',
  15. required: true,
  16. description: 'Worker ID',
  17. },
  18. ]
  19. static flags = {
  20. ...WorkingGroupsCommandBase.flags,
  21. }
  22. formatReward(reward?: Reward) {
  23. return reward
  24. ? formatBalance(reward.value) +
  25. (reward.interval && ` / ${reward.interval} block(s)`) +
  26. (reward.nextPaymentBlock && ` (next payment: #${reward.nextPaymentBlock})`)
  27. : 'NONE'
  28. }
  29. async run() {
  30. const { args } = this.parse(WorkingGroupsUpdateWorkerReward)
  31. const account = await this.getRequiredSelectedAccount()
  32. // Lead-only gate
  33. await this.getRequiredLead()
  34. const workerId = parseInt(args.workerId)
  35. // This will also make sure the worker is valid
  36. const groupMember = await this.getWorkerForLeadAction(workerId)
  37. const { reward } = groupMember
  38. if (!reward) {
  39. this.error('There is no reward relationship associated with this worker!', { exit: ExitCodes.InvalidInput })
  40. }
  41. console.log(chalk.white(`Current worker reward: ${this.formatReward(reward)}`))
  42. const newRewardValue = await this.promptForParam(
  43. 'BalanceOfMint',
  44. createParamOptions('new_amount', undefined, positiveInt())
  45. )
  46. await this.requestAccountDecoding(account)
  47. await this.sendAndFollowExtrinsic(account, apiModuleByGroup[this.group], 'updateRewardAmount', [
  48. new WorkerId(workerId),
  49. newRewardValue,
  50. ])
  51. const updatedGroupMember = await this.getApi().groupMember(this.group, workerId)
  52. this.log(chalk.green(`Worker ${chalk.white(workerId)} reward has been updated!`))
  53. this.log(chalk.green(`New worker reward: ${chalk.white(this.formatReward(updatedGroupMember.reward))}`))
  54. }
  55. }