devInitAliceLead.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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(
  23. api.tx.members.buyMembership({
  24. root_account: ALICE.address,
  25. controller_account: ALICE.address,
  26. name: 'Alice',
  27. handle: 'Alice',
  28. })
  29. )
  30. } else {
  31. console.log(`Alice member id found: ${aliceMemberId}...`)
  32. }
  33. // Set Alice as lead if lead not already set
  34. if ((await api.query.contentDirectoryWorkingGroup.currentLead()).isNone) {
  35. const newOpeningId = (await api.query.contentDirectoryWorkingGroup.nextOpeningId()).toNumber()
  36. const newApplicationId = (await api.query.contentDirectoryWorkingGroup.nextApplicationId()).toNumber()
  37. // Create curator lead opening
  38. console.log('Perparing Create Curator Lead Opening extrinsic...')
  39. extrinsics.push(sudo(api.tx.contentDirectoryWorkingGroup.addOpening('init-alice-lead', 'Leader', null, null)))
  40. // Apply to lead opening
  41. console.log('Perparing Apply to Curator Lead Opening as Alice extrinsic...')
  42. extrinsics.push(
  43. api.tx.contentDirectoryWorkingGroup.applyOnOpening({
  44. member_id: aliceMemberId,
  45. opening_id: newOpeningId,
  46. role_account_id: ALICE.address,
  47. reward_account_id: ALICE.address,
  48. description: 'api-examples curator opening appl.',
  49. stake_parameters: null,
  50. })
  51. )
  52. // Fill opening
  53. console.log('Perparing Fill Opening extrinsic...')
  54. extrinsics.push(
  55. sudo(
  56. api.tx.contentDirectoryWorkingGroup.fillOpening(
  57. newOpeningId,
  58. api.createType('ApplicationIdSet', [newApplicationId])
  59. )
  60. )
  61. )
  62. console.log('Sending extrinsics...')
  63. await txHelper.sendAndCheck(ALICE, extrinsics, 'Failed to initialize Alice as Content Curators Lead!')
  64. } else {
  65. console.log('Curators lead already exists, skipping...')
  66. }
  67. }
  68. main()
  69. .then(() => process.exit())
  70. .catch((e) => console.error(e))