Browse Source

storage-node-v2: Add ‘dynamic bag’ types.

Shamil Gadelshin 3 years ago
parent
commit
14ddea5578

+ 8 - 0
runtime-modules/storage/src/lib.rs

@@ -2494,6 +2494,14 @@ decl_module! {
 
           Self::upload_data_objects(params)?;
         }
+
+        /// Create a dynamic bag. Development mode.
+        #[weight = 10_000_000] // TODO: adjust weight
+        pub fn sudo_create_dynamic_bag(origin, bag_id: DynamicBagId<T>) {
+          ensure_root(origin)?;
+
+          Self::create_dynamic_bag(bag_id)?;
+        }
     }
 }
 

File diff suppressed because it is too large
+ 1 - 1
types/augment-codec/all.ts


+ 1 - 1
types/augment-codec/augment-api-query.ts

@@ -976,7 +976,7 @@ declare module '@polkadot/api/types/storage' {
       /**
        * Dynamic bag storage map.
        **/
-      dynamicBags: AugmentedQuery<ApiType, (arg: DynamicBagId | AnyNumber | Uint8Array) => Observable<DynamicBag>, [DynamicBagId]>;
+      dynamicBags: AugmentedQuery<ApiType, (arg: DynamicBagId | { Member: any } | { Channel: any } | string | Uint8Array) => Observable<DynamicBag>, [DynamicBagId]>;
       /**
        * Data object id counter. Starts at zero.
        **/

+ 5 - 1
types/augment-codec/augment-api-tx.ts

@@ -3,7 +3,7 @@
 
 import type { BTreeMap, BTreeSet, Bytes, Compact, Option, Vec, bool, u16, u32, u64 } from '@polkadot/types';
 import type { AnyNumber, ITuple } from '@polkadot/types/types';
-import type { ActivateOpeningAt, Actor, AddOpeningParameters, ApplicationId, ApplicationIdSet, BagId, BalanceOfMint, CategoryId, ChannelContentType, ChannelCurationStatus, ChannelId, ChannelPublicationStatus, ClassId, ClassPermissions, ClassPermissionsType, ClassPropertyValue, ContentId, Credential, CredentialSet, CurationActor, CuratorApplicationId, CuratorApplicationIdSet, CuratorGroupId, CuratorId, CuratorOpeningId, DataObjectId, DynamicBagType, ElectionParameters, EntityController, EntityId, EntityPermissions, FillOpeningParameters, InputPropertyValue, InputValue, MemberId, MemoText, Nonce, OpeningId, OpeningPolicyCommitment, OpeningType, Operation, OperationType, OptionalText, PaidTermId, PostId, Property, PropertyId, ProposalId, ReferenceConstraint, RewardPolicy, SchemaId, StorageBucketId, TerminateRoleParameters, ThreadId, UploadParameters, VecMaxLength, VoteKind, WorkerId, WorkingGroup } from './all';
+import type { ActivateOpeningAt, Actor, AddOpeningParameters, ApplicationId, ApplicationIdSet, BagId, BalanceOfMint, CategoryId, ChannelContentType, ChannelCurationStatus, ChannelId, ChannelPublicationStatus, ClassId, ClassPermissions, ClassPermissionsType, ClassPropertyValue, ContentId, Credential, CredentialSet, CurationActor, CuratorApplicationId, CuratorApplicationIdSet, CuratorGroupId, CuratorId, CuratorOpeningId, DataObjectId, DynamicBagId, DynamicBagType, ElectionParameters, EntityController, EntityId, EntityPermissions, FillOpeningParameters, InputPropertyValue, InputValue, MemberId, MemoText, Nonce, OpeningId, OpeningPolicyCommitment, OpeningType, Operation, OperationType, OptionalText, PaidTermId, PostId, Property, PropertyId, ProposalId, ReferenceConstraint, RewardPolicy, SchemaId, StorageBucketId, TerminateRoleParameters, ThreadId, UploadParameters, VecMaxLength, VoteKind, WorkerId, WorkingGroup } from './all';
 import type { BabeEquivocationProof } from '@polkadot/types/interfaces/babe';
 import type { Extrinsic, Signature } from '@polkadot/types/interfaces/extrinsics';
 import type { GrandpaEquivocationProof, KeyOwnerProof } from '@polkadot/types/interfaces/grandpa';
@@ -1197,6 +1197,10 @@ declare module '@polkadot/api/types/submittable' {
        * Sets storage operator metadata (eg.: storage node URL).
        **/
       setStorageOperatorMetadata: AugmentedSubmittable<(workerId: WorkerId | AnyNumber | Uint8Array, storageBucketId: StorageBucketId | AnyNumber | Uint8Array, metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [WorkerId, StorageBucketId, Bytes]>;
+      /**
+       * Create a dynamic bag. Development mode.
+       **/
+      sudoCreateDynamicBag: AugmentedSubmittable<(bagId: DynamicBagId | { Member: any } | { Channel: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [DynamicBagId]>;
       /**
        * Upload new data objects. Development mode.
        **/

File diff suppressed because it is too large
+ 0 - 0
types/augment-codec/augment-types.ts


+ 20 - 4
types/augment/all/defs.json

@@ -978,7 +978,12 @@
         "max_min_diff": "u64"
     },
     "DataObjectId": "u64",
-    "DynamicBagId": "u64",
+    "DynamicBagId": {
+        "_enum": {
+            "Member": "MemberId",
+            "Channel": "u64"
+        }
+    },
     "Voucher": {
         "sizeLimit": "u64",
         "objectsLimit": "u64",
@@ -994,7 +999,12 @@
     "DynamicBagCreationPolicy": {
         "numberOfStorageBuckets": "u64"
     },
-    "DynamicBag": "u64",
+    "DynamicBag": {
+        "objects": "BTreeMap<DataObjectId,{\"accepted\":\"bool\",\"deletion_prize\":\"u128\",\"size\":\"u64\"}>",
+        "stored_by": "StorageBucketIdSet",
+        "distributed_by": "Vec<u64>",
+        "deletion_prize": "u128"
+    },
     "StaticBag": {
         "objects": "BTreeMap<DataObjectId,{\"accepted\":\"bool\",\"deletion_prize\":\"u128\",\"size\":\"u64\"}>",
         "stored_by": "StorageBucketIdSet",
@@ -1018,10 +1028,16 @@
             "WorkingGroup": "WorkingGroup"
         }
     },
+    "Dynamic": {
+        "_enum": {
+            "Member": "MemberId",
+            "Channel": "u64"
+        }
+    },
     "BagId": {
         "_enum": {
             "Static": "Static",
-            "Dynamic": "Null"
+            "Dynamic": "Dynamic"
         }
     },
     "DataObjectCreationParameters": {
@@ -1031,7 +1047,7 @@
     "BagIdType": {
         "_enum": {
             "Static": "Static",
-            "Dynamic": "Null"
+            "Dynamic": "Dynamic"
         }
     },
     "UploadParameters": {

+ 22 - 2
types/augment/all/types.ts

@@ -163,6 +163,7 @@ export interface BagId extends Enum {
   readonly isStatic: boolean;
   readonly asStatic: Static;
   readonly isDynamic: boolean;
+  readonly asDynamic: Dynamic;
 }
 
 /** @name BagIdType */
@@ -170,6 +171,7 @@ export interface BagIdType extends Enum {
   readonly isStatic: boolean;
   readonly asStatic: Static;
   readonly isDynamic: boolean;
+  readonly asDynamic: Dynamic;
 }
 
 /** @name BalanceOfMint */
@@ -463,8 +465,21 @@ export interface DiscussionThread extends Struct {
   readonly author_id: MemberId;
 }
 
+/** @name Dynamic */
+export interface Dynamic extends Enum {
+  readonly isMember: boolean;
+  readonly asMember: MemberId;
+  readonly isChannel: boolean;
+  readonly asChannel: u64;
+}
+
 /** @name DynamicBag */
-export interface DynamicBag extends u64 {}
+export interface DynamicBag extends Struct {
+  readonly objects: BTreeMap<DataObjectId, {"accepted":"bool","deletion_prize":"u128","size":"u64"}>;
+  readonly stored_by: StorageBucketIdSet;
+  readonly distributed_by: Vec<u64>;
+  readonly deletion_prize: u128;
+}
 
 /** @name DynamicBagCreationPolicy */
 export interface DynamicBagCreationPolicy extends Struct {
@@ -472,7 +487,12 @@ export interface DynamicBagCreationPolicy extends Struct {
 }
 
 /** @name DynamicBagId */
-export interface DynamicBagId extends u64 {}
+export interface DynamicBagId extends Enum {
+  readonly isMember: boolean;
+  readonly asMember: MemberId;
+  readonly isChannel: boolean;
+  readonly asChannel: u64;
+}
 
 /** @name DynamicBagType */
 export interface DynamicBagType extends Enum {

+ 1 - 1
types/augment/augment-api-query.ts

@@ -976,7 +976,7 @@ declare module '@polkadot/api/types/storage' {
       /**
        * Dynamic bag storage map.
        **/
-      dynamicBags: AugmentedQuery<ApiType, (arg: DynamicBagId | AnyNumber | Uint8Array) => Observable<DynamicBag>, [DynamicBagId]>;
+      dynamicBags: AugmentedQuery<ApiType, (arg: DynamicBagId | { Member: any } | { Channel: any } | string | Uint8Array) => Observable<DynamicBag>, [DynamicBagId]>;
       /**
        * Data object id counter. Starts at zero.
        **/

+ 5 - 1
types/augment/augment-api-tx.ts

@@ -3,7 +3,7 @@
 
 import type { BTreeMap, BTreeSet, Bytes, Compact, Option, Vec, bool, u16, u32, u64 } from '@polkadot/types';
 import type { AnyNumber, ITuple } from '@polkadot/types/types';
-import type { ActivateOpeningAt, Actor, AddOpeningParameters, ApplicationId, ApplicationIdSet, BagId, BalanceOfMint, CategoryId, ChannelContentType, ChannelCurationStatus, ChannelId, ChannelPublicationStatus, ClassId, ClassPermissions, ClassPermissionsType, ClassPropertyValue, ContentId, Credential, CredentialSet, CurationActor, CuratorApplicationId, CuratorApplicationIdSet, CuratorGroupId, CuratorId, CuratorOpeningId, DataObjectId, DynamicBagType, ElectionParameters, EntityController, EntityId, EntityPermissions, FillOpeningParameters, InputPropertyValue, InputValue, MemberId, MemoText, Nonce, OpeningId, OpeningPolicyCommitment, OpeningType, Operation, OperationType, OptionalText, PaidTermId, PostId, Property, PropertyId, ProposalId, ReferenceConstraint, RewardPolicy, SchemaId, StorageBucketId, TerminateRoleParameters, ThreadId, UploadParameters, VecMaxLength, VoteKind, WorkerId, WorkingGroup } from './all';
+import type { ActivateOpeningAt, Actor, AddOpeningParameters, ApplicationId, ApplicationIdSet, BagId, BalanceOfMint, CategoryId, ChannelContentType, ChannelCurationStatus, ChannelId, ChannelPublicationStatus, ClassId, ClassPermissions, ClassPermissionsType, ClassPropertyValue, ContentId, Credential, CredentialSet, CurationActor, CuratorApplicationId, CuratorApplicationIdSet, CuratorGroupId, CuratorId, CuratorOpeningId, DataObjectId, DynamicBagId, DynamicBagType, ElectionParameters, EntityController, EntityId, EntityPermissions, FillOpeningParameters, InputPropertyValue, InputValue, MemberId, MemoText, Nonce, OpeningId, OpeningPolicyCommitment, OpeningType, Operation, OperationType, OptionalText, PaidTermId, PostId, Property, PropertyId, ProposalId, ReferenceConstraint, RewardPolicy, SchemaId, StorageBucketId, TerminateRoleParameters, ThreadId, UploadParameters, VecMaxLength, VoteKind, WorkerId, WorkingGroup } from './all';
 import type { BabeEquivocationProof } from '@polkadot/types/interfaces/babe';
 import type { Extrinsic, Signature } from '@polkadot/types/interfaces/extrinsics';
 import type { GrandpaEquivocationProof, KeyOwnerProof } from '@polkadot/types/interfaces/grandpa';
@@ -1197,6 +1197,10 @@ declare module '@polkadot/api/types/submittable' {
        * Sets storage operator metadata (eg.: storage node URL).
        **/
       setStorageOperatorMetadata: AugmentedSubmittable<(workerId: WorkerId | AnyNumber | Uint8Array, storageBucketId: StorageBucketId | AnyNumber | Uint8Array, metadata: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [WorkerId, StorageBucketId, Bytes]>;
+      /**
+       * Create a dynamic bag. Development mode.
+       **/
+      sudoCreateDynamicBag: AugmentedSubmittable<(bagId: DynamicBagId | { Member: any } | { Channel: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [DynamicBagId]>;
       /**
        * Upload new data objects. Development mode.
        **/

File diff suppressed because it is too large
+ 0 - 0
types/augment/augment-types.ts


+ 29 - 5
types/src/storage.ts

@@ -1,6 +1,7 @@
 import { Null, u128, u64, Text, Vec, bool, GenericAccountId as AccountId, BTreeSet, BTreeMap } from '@polkadot/types'
 import { RegistryTypes } from '@polkadot/types/types'
 import { JoyBTreeSet, JoyEnum, JoyStructDecorated, WorkingGroup } from './common'
+import { MemberId } from './members'
 
 export class BalanceOf extends u128 {}
 export class DataObjectId extends u64 {}
@@ -18,10 +19,6 @@ export class StorageBucketsPerBagValueConstraint
   })
   implements StorageBucketsPerBagValueConstraintType {}
 
-//TODO: implement these types
-export class DynamicBagId extends u64 {}
-export class DynamicBag extends u64 {}
-
 export type DataObjectType = {
   accepted: bool
   deletion_prize: BalanceOf
@@ -56,6 +53,22 @@ export class StaticBag
   })
   implements StaticBagType {}
 
+export type DynamicBagTypeDef = {
+  objects: DataObjectIdMap
+  stored_by: StorageBucketIdSet
+  distributed_by: DistributionBucketSet
+  deletion_prize: BalanceOf
+}
+
+export class DynamicBag
+  extends JoyStructDecorated({
+    objects: DataObjectIdMap,
+    stored_by: StorageBucketIdSet,
+    distributed_by: DistributionBucketSet,
+    deletion_prize: BalanceOf,
+  })
+  implements DynamicBagTypeDef {}
+
 export type DynamicBagCreationPolicyType = {
   numberOfStorageBuckets: u64
 }
@@ -82,9 +95,19 @@ export class StaticBagId extends JoyEnum(StaticBagIdDef) {}
 
 export class Static extends StaticBagId {}
 
+export class ChannelId extends u64 {}
+export const DynamicBagIdDef = {
+  Member: MemberId,
+  Channel: ChannelId,
+} as const
+export type DynamicBagIdKey = keyof typeof DynamicBagIdDef
+export class DynamicBagId extends JoyEnum(DynamicBagIdDef) {}
+
+export class Dynamic extends DynamicBagId {}
+
 export const BagIdDef = {
   Static,
-  Dynamic: Null, //TODO: implement dynamic type
+  Dynamic,
 } as const
 export type BagIdKey = keyof typeof BagIdDef
 export class BagId extends JoyEnum(BagIdDef) {}
@@ -176,6 +199,7 @@ export const storageTypes: RegistryTypes = {
   StorageBucket,
   StaticBagId,
   Static,
+  Dynamic,
   BagId,
   DataObjectCreationParameters,
   BagIdType,

Some files were not shown because too many files changed in this diff