bootstrap.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { DatabaseManager, StoreContext } from '@joystream/hydra-common'
  2. import BN from 'bn.js'
  3. import {
  4. StorageSystemParameters,
  5. MembershipSystemSnapshot,
  6. WorkingGroup,
  7. ElectedCouncil,
  8. ElectionRound,
  9. MembershipEntryGenesis,
  10. CouncilStageUpdate,
  11. CouncilStageAnnouncing,
  12. } from 'query-node/dist/model'
  13. import { storageSystemData, membershipSystemData, workingGroupsData, membersData } from './bootstrap-data'
  14. import { createNewMember } from './membership'
  15. import { CURRENT_NETWORK } from './common'
  16. import { MembershipMetadata } from '@joystream/metadata-protobuf'
  17. export async function bootstrapData({ store }: StoreContext): Promise<void> {
  18. await initMembershipSystem(store)
  19. await initMembers(store)
  20. await initStorageSystem(store)
  21. await initWorkingGroups(store)
  22. await initFirstElectionRound(store)
  23. }
  24. async function initMembershipSystem(store: DatabaseManager): Promise<void> {
  25. await store.save<MembershipSystemSnapshot>(
  26. new MembershipSystemSnapshot({
  27. createdAt: new Date(0),
  28. updatedAt: new Date(0),
  29. snapshotBlock: 0,
  30. ...membershipSystemData,
  31. membershipPrice: new BN(membershipSystemData.membershipPrice),
  32. invitedInitialBalance: new BN(membershipSystemData.invitedInitialBalance),
  33. })
  34. )
  35. }
  36. async function initStorageSystem(store: DatabaseManager): Promise<void> {
  37. // Storage system
  38. await store.save<StorageSystemParameters>(
  39. new StorageSystemParameters({
  40. ...storageSystemData,
  41. storageBucketMaxObjectsCountLimit: new BN(storageSystemData.storageBucketMaxObjectsCountLimit),
  42. storageBucketMaxObjectsSizeLimit: new BN(storageSystemData.storageBucketMaxObjectsSizeLimit),
  43. dataObjectFeePerMb: new BN(storageSystemData.dataObjectFeePerMb),
  44. })
  45. )
  46. }
  47. async function initWorkingGroups(store: DatabaseManager): Promise<void> {
  48. await Promise.all(
  49. workingGroupsData.map(async (group) =>
  50. store.save<WorkingGroup>(
  51. new WorkingGroup({
  52. createdAt: new Date(0),
  53. updatedAt: new Date(0),
  54. id: group.name,
  55. name: group.name,
  56. budget: new BN(group.budget),
  57. })
  58. )
  59. )
  60. )
  61. }
  62. async function initFirstElectionRound(store: DatabaseManager): Promise<void> {
  63. const electedCouncil = new ElectedCouncil({
  64. councilMembers: [],
  65. updates: [],
  66. electedAtBlock: 0,
  67. electedAtTime: new Date(0),
  68. electedAtNetwork: CURRENT_NETWORK,
  69. councilElections: [],
  70. nextCouncilElections: [],
  71. isResigned: false,
  72. })
  73. await store.save<ElectedCouncil>(electedCouncil)
  74. const initialElectionRound = new ElectionRound({
  75. cycleId: 0,
  76. isFinished: false,
  77. castVotes: [],
  78. electedCouncil,
  79. candidates: [],
  80. })
  81. await store.save<ElectionRound>(initialElectionRound)
  82. const stage = new CouncilStageAnnouncing()
  83. stage.candidatesCount = new BN(0)
  84. const initialStageUpdate = new CouncilStageUpdate({
  85. stage,
  86. electedCouncil,
  87. changedAt: new BN(0),
  88. })
  89. await store.save<CouncilStageUpdate>(initialStageUpdate)
  90. }
  91. async function initMembers(store: DatabaseManager) {
  92. for (const member of membersData) {
  93. await createNewMember(
  94. store,
  95. new Date(0),
  96. member.member_id.toString(),
  97. new MembershipEntryGenesis(),
  98. member.root_account,
  99. member.controller_account,
  100. member.handle,
  101. 0,
  102. new MembershipMetadata({
  103. about: member.about,
  104. avatarUri: member.avatar_uri,
  105. })
  106. )
  107. }
  108. }