fetchMembersData.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import createApi from './api'
  2. import { ApiPromise } from '@polkadot/api'
  3. import { MemberId, Membership } from '@joystream/sumer-types/augment/all'
  4. import { BlockHash } from '@polkadot/types/interfaces'
  5. import { MemberJson } from '../types'
  6. import fs from 'fs'
  7. import path from 'path'
  8. async function main() {
  9. const api = await createApi()
  10. const blockNumner = parseInt(process.env.AT_BLOCK_NUMBER || '')
  11. const hash = process.env.AT_BLOCK_NUMBER ? await api.rpc.chain.getBlockHash(blockNumner) : undefined
  12. if (!hash) {
  13. console.warn('No AT_BLOCK_NUMBER was specified! Exporting from current block...')
  14. }
  15. const members = await getAllMembers(api, hash)
  16. fs.writeFileSync(path.resolve(__dirname, '../data/members.json'), JSON.stringify(members, undefined, 4))
  17. console.log(`${members.length} members exported & saved!`)
  18. await api.disconnect()
  19. }
  20. async function getAllMembers(api: ApiPromise, hash?: BlockHash): Promise<any[]> {
  21. const memberStorageEntries = hash
  22. ? await api.query.members.membershipById.entriesAt(hash)
  23. : await api.query.members.membershipById.entries()
  24. const memberEntries: [MemberId, Membership][] = memberStorageEntries.map(([{ args: [memberId] }, member]) => [
  25. memberId,
  26. member,
  27. ])
  28. const members: MemberJson[] = memberEntries.map(([memberId, member]) => ({
  29. memberId: memberId.toString(),
  30. rootAccount: member.root_account.toString(),
  31. controllerAccount: member.controller_account.toString(),
  32. handle: member.handle.toString(),
  33. avatarUri: member.avatar_uri.toString(),
  34. about: member.about.toString(),
  35. registeredAtTime: member.registered_at_time.toNumber(),
  36. }))
  37. return members
  38. }
  39. main()
  40. .then(() => process.exit())
  41. .catch(console.error)