devInitAliceLead.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { types } from '@joystream/types'
  2. import { ApiPromise, WsProvider } from '@polkadot/api'
  3. import { SubmittableExtrinsic } from '@polkadot/api/types'
  4. import { ExtrinsicsHelper, getAlicePair } from '../src/helpers/extrinsics'
  5. async function main() {
  6. // Init api
  7. const WS_URI = process.env.WS_URI || 'ws://127.0.0.1:9944'
  8. console.log(`Initializing the api (${WS_URI})...`)
  9. const provider = new WsProvider(WS_URI)
  10. const api = await ApiPromise.create({ provider, types })
  11. const ALICE = getAlicePair()
  12. const txHelper = new ExtrinsicsHelper(api)
  13. const sudo = (tx: SubmittableExtrinsic<'promise'>) => api.tx.sudo.sudo(tx)
  14. const extrinsics: SubmittableExtrinsic<'promise'>[] = []
  15. // Create membership if not already created
  16. let aliceMemberId: number | undefined = (await api.query.members.memberIdsByControllerAccountId(ALICE.address))
  17. .toArray()[0]
  18. ?.toNumber()
  19. if (aliceMemberId === undefined) {
  20. console.log('Perparing Alice member account creation extrinsic...')
  21. aliceMemberId = (await api.query.members.nextMemberId()).toNumber()
  22. extrinsics.push(api.tx.members.buyMembership(0, 'alice', null, null))
  23. } else {
  24. console.log(`Alice member id found: ${aliceMemberId}...`)
  25. }
  26. // Set Alice as lead if lead not already set
  27. if ((await api.query.contentDirectoryWorkingGroup.currentLead()).isNone) {
  28. const newOpeningId = (await api.query.contentDirectoryWorkingGroup.nextOpeningId()).toNumber()
  29. const newApplicationId = (await api.query.contentDirectoryWorkingGroup.nextApplicationId()).toNumber()
  30. // Create curator lead opening
  31. console.log('Perparing Create Curator Lead Opening extrinsic...')
  32. extrinsics.push(
  33. sudo(
  34. api.tx.contentDirectoryWorkingGroup.addOpening(
  35. { CurrentBlock: null }, // activate_at
  36. { max_review_period_length: 9999 }, // OpeningPolicyCommitment
  37. 'api-examples curator opening', // human_readable_text
  38. 'Leader' // opening_type
  39. )
  40. )
  41. )
  42. // Apply to lead opening
  43. console.log('Perparing Apply to Curator Lead Opening as Alice extrinsic...')
  44. extrinsics.push(
  45. api.tx.contentDirectoryWorkingGroup.applyOnOpening(
  46. aliceMemberId, // member id
  47. newOpeningId, // opening id
  48. ALICE.address, // address
  49. null, // opt role stake
  50. null, // opt appl. stake
  51. 'api-examples curator opening appl.' // human_readable_text
  52. )
  53. )
  54. // Begin review period
  55. console.log('Perparing Begin Applicant Review extrinsic...')
  56. extrinsics.push(sudo(api.tx.contentDirectoryWorkingGroup.beginApplicantReview(newOpeningId)))
  57. // Fill opening
  58. console.log('Perparing Fill Opening extrinsic...')
  59. extrinsics.push(
  60. sudo(
  61. api.tx.contentDirectoryWorkingGroup.fillOpening(
  62. newOpeningId, // opening id
  63. api.createType('ApplicationIdSet', [newApplicationId]), // succesful applicants
  64. null // reward policy
  65. )
  66. )
  67. )
  68. console.log('Sending extrinsics...')
  69. await txHelper.sendAndCheck(ALICE, extrinsics, 'Failed to initialize Alice as Content Curators Lead!')
  70. } else {
  71. console.log('Curators lead already exists, skipping...')
  72. }
  73. }
  74. main()
  75. .then(() => process.exit())
  76. .catch((e) => {
  77. console.error(e)
  78. process.exit(-1)
  79. })