updateWorkerReward.ts 2.2 KB

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