storage.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. import {
  2. Null,
  3. u64,
  4. Bytes,
  5. Vec,
  6. bool,
  7. GenericAccountId as AccountId,
  8. BTreeSet,
  9. BTreeMap,
  10. Option,
  11. u32,
  12. u128,
  13. Tuple,
  14. } from '@polkadot/types'
  15. import { Balance } from '@polkadot/types/interfaces'
  16. import { RegistryTypes } from '@polkadot/types/types'
  17. import { JoyEnum, JoyStructDecorated, WorkingGroup, BalanceOf } from './common'
  18. import { MemberId } from './members'
  19. import { WorkerId } from './working-group'
  20. export class DataObjectId extends u64 {}
  21. export class StorageBucketId extends u64 {}
  22. export type IStorageBucketsPerBagValueConstraint = {
  23. min: u64
  24. max_min_diff: u64
  25. }
  26. export class StorageBucketsPerBagValueConstraint
  27. extends JoyStructDecorated({
  28. min: u64,
  29. max_min_diff: u64,
  30. })
  31. implements IStorageBucketsPerBagValueConstraint {}
  32. export type IDataObject = {
  33. accepted: bool
  34. deletion_prize: BalanceOf
  35. size: u64
  36. ipfsContentId: Bytes
  37. }
  38. export class DataObject
  39. extends JoyStructDecorated({
  40. accepted: bool,
  41. deletion_prize: BalanceOf,
  42. size: u64,
  43. ipfsContentId: Bytes,
  44. })
  45. implements IDataObject {}
  46. export class DataObjectIdSet extends BTreeSet.with(DataObjectId) {}
  47. export class DataObjectIdMap extends BTreeMap.with(DataObjectId, DataObject) {}
  48. export class DistributionBucketIndex extends u64 {}
  49. export class DistributionBucketFamilyId extends u64 {}
  50. export class StorageBucketIdSet extends BTreeSet.with(StorageBucketId) {}
  51. export class DistributionBucketIndexSet extends BTreeSet.with(DistributionBucketIndex) {}
  52. export type IDistributionBucketId = {
  53. distribution_bucket_family_id: DistributionBucketFamilyId
  54. distribution_bucket_index: DistributionBucketIndex
  55. }
  56. export class DistributionBucketId
  57. extends JoyStructDecorated({
  58. distribution_bucket_family_id: DistributionBucketFamilyId,
  59. distribution_bucket_index: DistributionBucketIndex,
  60. })
  61. implements IDistributionBucketId {}
  62. export type IDynamicBagDeletionPrize = {
  63. account_id: AccountId
  64. prize: BalanceOf
  65. }
  66. export class DynamicBagDeletionPrize
  67. extends JoyStructDecorated({
  68. account_id: AccountId,
  69. prize: BalanceOf,
  70. })
  71. implements IDynamicBagDeletionPrize {}
  72. export class DynamicBagDeletionPrizeRecord extends DynamicBagDeletionPrize {}
  73. export type IBag = {
  74. stored_by: BTreeSet<StorageBucketId>
  75. distributed_by: BTreeSet<DistributionBucketId>
  76. deletion_prize: Option<Balance>
  77. objects_total_size: u64
  78. objects_number: u64
  79. }
  80. export class Bag
  81. extends JoyStructDecorated({
  82. stored_by: BTreeSet.with(StorageBucketId),
  83. distributed_by: BTreeSet.with(DistributionBucketId),
  84. deletion_prize: Option.with(u128),
  85. objects_total_size: u64,
  86. objects_number: u64,
  87. })
  88. implements IBag {}
  89. export type IDynamicBagCreationPolicy = {
  90. numberOfStorageBuckets: u64
  91. families: BTreeMap<DistributionBucketFamilyId, u32>
  92. }
  93. export class DynamicBagCreationPolicy
  94. extends JoyStructDecorated({
  95. numberOfStorageBuckets: u64,
  96. families: BTreeMap.with(DistributionBucketFamilyId, u32),
  97. })
  98. implements IDynamicBagCreationPolicy {}
  99. export const DynamicBagTypeDef = {
  100. Member: Null,
  101. Channel: Null,
  102. } as const
  103. export type DynamicBagTypeKey = keyof typeof DynamicBagTypeDef
  104. export class DynamicBagType extends JoyEnum(DynamicBagTypeDef) {}
  105. export const StaticBagIdDef = {
  106. Council: Null,
  107. WorkingGroup: WorkingGroup,
  108. } as const
  109. export class StaticBagId extends JoyEnum(StaticBagIdDef) {}
  110. export class Static extends StaticBagId {}
  111. // This type should be imported from content-directory/common types once the Olympia release is merged.
  112. export class ChannelId extends u64 {}
  113. export const DynamicBagIdDef = {
  114. Member: MemberId,
  115. Channel: ChannelId,
  116. } as const
  117. export class DynamicBagId extends JoyEnum(DynamicBagIdDef) {}
  118. export class Dynamic extends DynamicBagId {}
  119. export const BagIdDef = {
  120. Static,
  121. Dynamic,
  122. } as const
  123. export class BagId extends JoyEnum(BagIdDef) {}
  124. // Alias
  125. export class BagIdType extends BagId {}
  126. export type IVoucher = {
  127. sizeLimit: u64
  128. objectsLimit: u64
  129. sizeUsed: u64
  130. objectsUsed: u64
  131. }
  132. export class Voucher
  133. extends JoyStructDecorated({
  134. sizeLimit: u64,
  135. objectsLimit: u64,
  136. sizeUsed: u64,
  137. objectsUsed: u64,
  138. })
  139. implements IVoucher {}
  140. export const StorageBucketOperatorStatusDef = {
  141. Missing: Null,
  142. InvitedStorageWorker: WorkerId,
  143. StorageWorker: Tuple.with([WorkerId, AccountId]),
  144. } as const
  145. export class StorageBucketOperatorStatus extends JoyEnum(StorageBucketOperatorStatusDef) {}
  146. export type IStorageBucket = {
  147. operator_status: StorageBucketOperatorStatus
  148. accepting_new_bags: bool
  149. voucher: Voucher
  150. }
  151. export class StorageBucket
  152. extends JoyStructDecorated({
  153. operator_status: StorageBucketOperatorStatus,
  154. accepting_new_bags: bool,
  155. voucher: Voucher,
  156. })
  157. implements IStorageBucket {}
  158. export type IDataObjectCreationParameters = {
  159. size: u64
  160. ipfsContentId: Bytes
  161. }
  162. export class DataObjectCreationParameters
  163. extends JoyStructDecorated({
  164. size: u64,
  165. ipfsContentId: Bytes,
  166. })
  167. implements IDataObjectCreationParameters {}
  168. export type IUploadParameters = {
  169. bagId: BagId
  170. objectCreationList: Vec<DataObjectCreationParameters>
  171. deletionPrizeSourceAccountId: AccountId
  172. expectedDataSizeFee: BalanceOf
  173. }
  174. export class UploadParameters
  175. extends JoyStructDecorated({
  176. bagId: BagId,
  177. objectCreationList: Vec.with(DataObjectCreationParameters),
  178. deletionPrizeSourceAccountId: AccountId,
  179. expectedDataSizeFee: BalanceOf,
  180. })
  181. implements IUploadParameters {}
  182. export class Cid extends Bytes {}
  183. export class ContentIdSet extends BTreeSet.with(Cid) {}
  184. export type IDistributionBucket = {
  185. accepting_new_bags: bool
  186. distributing: bool
  187. pending_invitations: BTreeSet<WorkerId>
  188. operators: BTreeSet<WorkerId>
  189. assigned_bags: u64
  190. }
  191. export class DistributionBucket
  192. extends JoyStructDecorated({
  193. accepting_new_bags: bool,
  194. distributing: bool,
  195. pending_invitations: BTreeSet.with(WorkerId),
  196. operators: BTreeSet.with(WorkerId),
  197. assigned_bags: u64,
  198. })
  199. implements IDistributionBucket {}
  200. export type IDistributionBucketFamily = {
  201. next_distribution_bucket_index: DistributionBucketIndex
  202. }
  203. export class DistributionBucketFamily
  204. extends JoyStructDecorated({
  205. next_distribution_bucket_index: DistributionBucketIndex,
  206. })
  207. implements IDistributionBucketFamily {}
  208. export class DynamicBagCreationPolicyDistributorFamiliesMap extends BTreeMap.with(DistributionBucketFamilyId, u32) {}
  209. export const storageTypes: RegistryTypes = {
  210. StorageBucketId,
  211. StorageBucketsPerBagValueConstraint,
  212. DataObjectId,
  213. DynamicBagId,
  214. Voucher,
  215. DynamicBagType,
  216. DynamicBagCreationPolicy,
  217. DynamicBagDeletionPrize,
  218. DynamicBagDeletionPrizeRecord,
  219. Bag,
  220. StorageBucket,
  221. StaticBagId,
  222. Static,
  223. Dynamic,
  224. BagId,
  225. DataObjectCreationParameters,
  226. BagIdType,
  227. UploadParameters,
  228. StorageBucketIdSet,
  229. DataObjectIdSet,
  230. ContentIdSet,
  231. Cid,
  232. StorageBucketOperatorStatus,
  233. DataObject,
  234. DistributionBucketId,
  235. DistributionBucketIndex,
  236. DistributionBucketFamilyId,
  237. DistributionBucket,
  238. DistributionBucketFamily,
  239. // Utility types:
  240. DataObjectIdMap,
  241. DistributionBucketIndexSet,
  242. DynamicBagCreationPolicyDistributorFamiliesMap,
  243. }
  244. export default storageTypes