Browse Source

Merge branch 'storage_node_v2' into storagev2-query-node

Leszek Wiesner 3 years ago
parent
commit
7b58aa18a1
33 changed files with 737 additions and 127 deletions
  1. 142 11
      storage-node-v2/README.md
  2. 1 1
      storage-node-v2/scripts/init-dev-bucket.sh
  3. 13 5
      storage-node-v2/scripts/run-all-commands.sh
  4. 1 1
      storage-node-v2/src/commands/dev/verify-bag-id.ts
  5. 1 1
      storage-node-v2/src/commands/leader/cancel-invite.ts
  6. 1 1
      storage-node-v2/src/commands/leader/delete-bucket.ts
  7. 1 1
      storage-node-v2/src/commands/leader/invite-operator.ts
  8. 1 1
      storage-node-v2/src/commands/leader/remove-operator.ts
  9. 39 0
      storage-node-v2/src/commands/leader/set-uploading-block.ts
  10. 1 1
      storage-node-v2/src/commands/leader/update-bag-limit.ts
  11. 2 2
      storage-node-v2/src/commands/leader/update-bag.ts
  12. 44 0
      storage-node-v2/src/commands/leader/update-blacklist.ts
  13. 1 1
      storage-node-v2/src/commands/leader/update-data-fee.ts
  14. 56 0
      storage-node-v2/src/commands/leader/update-dynamic-bag-policy.ts
  15. 2 2
      storage-node-v2/src/commands/leader/update-voucher-limits.ts
  16. 5 5
      storage-node-v2/src/commands/operator/accept-invitation.ts
  17. 60 0
      storage-node-v2/src/commands/operator/set-bucket-limits.ts
  18. 52 0
      storage-node-v2/src/commands/operator/set-metadata.ts
  19. 57 0
      storage-node-v2/src/commands/operator/update-bucket-status.ts
  20. 8 1
      storage-node-v2/src/services/helpers/bagTypes.ts
  21. 114 4
      storage-node-v2/src/services/runtime/extrinsics.ts
  22. 1 1
      storage-node-v2/src/services/webApi/controllers/publicApi.ts
  23. 1 1
      types/augment-codec/all.ts
  24. 1 1
      types/augment-codec/augment-api-query.ts
  25. 6 2
      types/augment-codec/augment-api-tx.ts
  26. 0 0
      types/augment-codec/augment-types.ts
  27. 17 4
      types/augment/all/defs.json
  28. 15 3
      types/augment/all/types.ts
  29. 1 1
      types/augment/augment-api-query.ts
  30. 6 2
      types/augment/augment-api-tx.ts
  31. 0 0
      types/augment/augment-types.ts
  32. 85 65
      types/src/storage.ts
  33. 2 9
      yarn.lock

+ 142 - 11
storage-node-v2/README.md

@@ -38,11 +38,17 @@ USAGE
 * [`storage-node leader:delete-bucket`](#storage-node-leaderdelete-bucket)
 * [`storage-node leader:invite-operator`](#storage-node-leaderinvite-operator)
 * [`storage-node leader:remove-operator`](#storage-node-leaderremove-operator)
+* [`storage-node leader:set-uploading-block`](#storage-node-leaderset-uploading-block)
 * [`storage-node leader:update-bag`](#storage-node-leaderupdate-bag)
 * [`storage-node leader:update-bag-limit`](#storage-node-leaderupdate-bag-limit)
-* [`storage-node leader:update-data-fee [FILE]`](#storage-node-leaderupdate-data-fee-file)
+* [`storage-node leader:update-blacklist [FILE]`](#storage-node-leaderupdate-blacklist-file)
+* [`storage-node leader:update-data-fee`](#storage-node-leaderupdate-data-fee)
+* [`storage-node leader:update-dynamic-bag-policy`](#storage-node-leaderupdate-dynamic-bag-policy)
 * [`storage-node leader:update-voucher-limits`](#storage-node-leaderupdate-voucher-limits)
 * [`storage-node operator:accept-invitation`](#storage-node-operatoraccept-invitation)
+* [`storage-node operator:set-bucket-limits`](#storage-node-operatorset-bucket-limits)
+* [`storage-node operator:set-metadata`](#storage-node-operatorset-metadata)
+* [`storage-node operator:update-bucket-status`](#storage-node-operatorupdate-bucket-status)
 * [`storage-node server [FILE]`](#storage-node-server-file)
 
 ## `storage-node dev:init`
@@ -158,7 +164,7 @@ _See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v3.0.1
 
 ## `storage-node leader:cancel-invite`
 
-Cancels a storage bucket operator invite. Requires storage working group leader permissions.
+Cancel a storage bucket operator invite. Requires storage working group leader permissions.
 
 ```
 USAGE
@@ -199,7 +205,7 @@ _See code: [src/commands/leader/create-bucket.ts](https://github.com/Joystream/j
 
 ## `storage-node leader:delete-bucket`
 
-Deletes a storage bucket. Requires storage working group leader permissions.
+Delete a storage bucket. Requires storage working group leader permissions.
 
 ```
 USAGE
@@ -218,7 +224,7 @@ _See code: [src/commands/leader/delete-bucket.ts](https://github.com/Joystream/j
 
 ## `storage-node leader:invite-operator`
 
-Invites a storage bucket operator. Requires storage working group leader permissions.
+Invite a storage bucket operator. Requires storage working group leader permissions.
 
 ```
 USAGE
@@ -238,7 +244,7 @@ _See code: [src/commands/leader/invite-operator.ts](https://github.com/Joystream
 
 ## `storage-node leader:remove-operator`
 
-Removes a storage bucket operator. Requires storage working group leader permissions.
+Remove a storage bucket operator. Requires storage working group leader permissions.
 
 ```
 USAGE
@@ -255,6 +261,26 @@ OPTIONS
 
 _See code: [src/commands/leader/remove-operator.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/leader/remove-operator.ts)_
 
+## `storage-node leader:set-uploading-block`
+
+Set global uploading block. Requires storage working group leader permissions.
+
+```
+USAGE
+  $ storage-node leader:set-uploading-block
+
+OPTIONS
+  -d, --disable            Disables global uploading block.
+  -e, --enable             Enables global uploading block (default).
+  -h, --help               show CLI help
+  -k, --keyfile=keyfile    Key file for the account. Mandatory in non-dev environment.
+  -m, --dev                Use development mode
+  -p, --password=password  Key file password (optional).
+  -u, --apiUrl=apiUrl      Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
+```
+
+_See code: [src/commands/leader/set-uploading-block.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/leader/set-uploading-block.ts)_
+
 ## `storage-node leader:update-bag`
 
 Add/remove a storage bucket from a bag (adds by default).
@@ -304,7 +330,7 @@ _See code: [src/commands/leader/update-bag.ts](https://github.com/Joystream/joys
 
 ## `storage-node leader:update-bag-limit`
 
-Updates StorageBucketsPerBagLimit variable in the Joystream node storage.
+Update StorageBucketsPerBagLimit variable in the Joystream node storage.
 
 ```
 USAGE
@@ -321,13 +347,13 @@ OPTIONS
 
 _See code: [src/commands/leader/update-bag-limit.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/leader/update-bag-limit.ts)_
 
-## `storage-node leader:update-data-fee [FILE]`
+## `storage-node leader:update-blacklist [FILE]`
 
 describe the command here
 
 ```
 USAGE
-  $ storage-node leader:update-data-fee [FILE]
+  $ storage-node leader:update-blacklist [FILE]
 
 OPTIONS
   -f, --force
@@ -335,11 +361,51 @@ OPTIONS
   -n, --name=name  name to print
 ```
 
+_See code: [src/commands/leader/update-blacklist.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/leader/update-blacklist.ts)_
+
+## `storage-node leader:update-data-fee`
+
+Update data size fee. Requires storage working group leader permissions.
+
+```
+USAGE
+  $ storage-node leader:update-data-fee
+
+OPTIONS
+  -f, --fee=fee            (required) New data size fee
+  -h, --help               show CLI help
+  -k, --keyfile=keyfile    Key file for the account. Mandatory in non-dev environment.
+  -m, --dev                Use development mode
+  -p, --password=password  Key file password (optional).
+  -u, --apiUrl=apiUrl      Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
+```
+
 _See code: [src/commands/leader/update-data-fee.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/leader/update-data-fee.ts)_
 
+## `storage-node leader:update-dynamic-bag-policy`
+
+Update number of storage buckets used in the dynamic bag creation policy.
+
+```
+USAGE
+  $ storage-node leader:update-dynamic-bag-policy
+
+OPTIONS
+  -c, --channel            Channel dynamic bag type
+  -e, --member             Member dynamic bag type (default)
+  -h, --help               show CLI help
+  -k, --keyfile=keyfile    Key file for the account. Mandatory in non-dev environment.
+  -m, --dev                Use development mode
+  -n, --number=number      (required) New storage buckets number
+  -p, --password=password  Key file password (optional).
+  -u, --apiUrl=apiUrl      Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
+```
+
+_See code: [src/commands/leader/update-dynamic-bag-policy.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/leader/update-dynamic-bag-policy.ts)_
+
 ## `storage-node leader:update-voucher-limits`
 
-Updates VoucherMaxObjectsSizeLimit and VoucherMaxObjectsNumberLimit the Joystream node storage.
+Update VoucherMaxObjectsSizeLimit and VoucherMaxObjectsNumberLimit for the Joystream node storage.
 
 ```
 USAGE
@@ -366,17 +432,82 @@ USAGE
   $ storage-node operator:accept-invitation
 
 OPTIONS
-  -b, --bucket=bucket      (required) Storage bucket ID
   -h, --help               show CLI help
+  -i, --bucketId=bucketId  (required) Storage bucket ID
   -k, --keyfile=keyfile    Key file for the account. Mandatory in non-dev environment.
   -m, --dev                Use development mode
   -p, --password=password  Key file password (optional).
   -u, --apiUrl=apiUrl      Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
-  -w, --worker=worker      (required) Storage operator worker ID
+  -w, --workerId=workerId  (required) Storage operator worker ID
 ```
 
 _See code: [src/commands/operator/accept-invitation.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/operator/accept-invitation.ts)_
 
+## `storage-node operator:set-bucket-limits`
+
+Set VoucherObjectsSizeLimit and VoucherObjectsNumberLimit for the storage bucket.
+
+```
+USAGE
+  $ storage-node operator:set-bucket-limits
+
+OPTIONS
+  -h, --help               show CLI help
+  -i, --bucketId=bucketId  (required) Storage bucket ID
+  -k, --keyfile=keyfile    Key file for the account. Mandatory in non-dev environment.
+  -m, --dev                Use development mode
+  -o, --objects=objects    (required) New 'voucher object number limit' value
+  -p, --password=password  Key file password (optional).
+  -s, --size=size          (required) New 'voucher object size limit' value
+  -u, --apiUrl=apiUrl      Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
+  -w, --workerId=workerId  (required) Storage operator worker ID
+```
+
+_See code: [src/commands/operator/set-bucket-limits.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/operator/set-bucket-limits.ts)_
+
+## `storage-node operator:set-metadata`
+
+Accept pending storage bucket invitation.
+
+```
+USAGE
+  $ storage-node operator:set-metadata
+
+OPTIONS
+  -h, --help                   show CLI help
+  -i, --bucketId=bucketId      (required) Storage bucket ID
+  -k, --keyfile=keyfile        Key file for the account. Mandatory in non-dev environment.
+  -m, --dev                    Use development mode
+  -m, --metadata=metadata      Storage bucket operator metadata
+  -p, --password=password      Key file password (optional).
+  -u, --apiUrl=apiUrl          Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
+  -w, --operatorId=operatorId  (required) Storage bucket operator ID (storage group worker ID)
+```
+
+_See code: [src/commands/operator/set-metadata.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/operator/set-metadata.ts)_
+
+## `storage-node operator:update-bucket-status`
+
+Update storage bucket status (accepting new bags).
+
+```
+USAGE
+  $ storage-node operator:update-bucket-status
+
+OPTIONS
+  -d, --disable            Disables accepting new bags.
+  -e, --enable             Enables accepting new bags (default).
+  -h, --help               show CLI help
+  -i, --bucketId=bucketId  (required) Storage bucket ID
+  -k, --keyfile=keyfile    Key file for the account. Mandatory in non-dev environment.
+  -m, --dev                Use development mode
+  -p, --password=password  Key file password (optional).
+  -u, --apiUrl=apiUrl      Runtime API URL. Mandatory in non-dev environment. Default is ws://localhost:9944
+  -w, --workerId=workerId  (required) Storage operator worker ID
+```
+
+_See code: [src/commands/operator/update-bucket-status.ts](https://github.com/Joystream/joystream/blob/v0.1.0/src/commands/operator/update-bucket-status.ts)_
+
 ## `storage-node server [FILE]`
 
 Starts the storage node server.

+ 1 - 1
storage-node-v2/scripts/init-dev-bucket.sh

@@ -8,5 +8,5 @@ yarn storage-node dev:init
 yarn storage-node leader:update-bag-limit -l 7 --dev
 yarn storage-node leader:update-voucher-limits -o 100 -s 10000000 --dev
 yarn storage-node leader:create-bucket -i=0 -a -n=100 -s=10000000  --dev 
-yarn storage-node operator:accept-invitation -w=0 -b=0 --dev
+yarn storage-node operator:accept-invitation -w=0 -i=0 --dev
 yarn storage-node leader:update-bag -b=0 -i static:council --dev 

+ 13 - 5
storage-node-v2/scripts/run-all-commands.sh

@@ -7,14 +7,18 @@
 # Set Alice as leader
 yarn storage-node dev:init # leader workerId = 0
 
-# Update limits
+# Update limits and constants
 yarn storage-node leader:update-bag-limit -l 7 --dev
 yarn storage-node leader:update-voucher-limits -o 100 -s 10000000 --dev
+yarn storage-node leader:update-data-fee -f 10000 --dev
 
 # Create and configure a bucket.
-yarn storage-node leader:create-bucket -i=0 -a -n=100 -s=10000000  --dev # bucketId = 0
-yarn storage-node operator:accept-invitation -w=0 -b=0 --dev
+yarn storage-node leader:create-bucket -i=0 --dev # bucketId = 0
+yarn storage-node operator:accept-invitation -w=0 -i=0 --dev
+yarn storage-node operator:set-bucket-limits -w=0 -i=0 -o=100 -s=10000000 --dev
+yarn storage-node operator:update-bucket-status -w=0 -i=0 --enable --dev
 yarn storage-node leader:update-bag -b=0 -i static:council --dev 
+yarn storage-node operator:set-metadata -w=0 -i=0 -m=http://google.com --dev
 
 # Create and delete a bucket
 yarn storage-node leader:create-bucket -a -n=100 -s=10000000  --dev # bucketId = 1
@@ -25,5 +29,9 @@ yarn storage-node leader:create-bucket -a -n=100 -s=10000000  --dev # bucketId =
 yarn storage-node leader:invite-operator -i=2 -w=0  --dev 
 yarn storage-node leader:cancel-invite -i=2   --dev 
 yarn storage-node leader:invite-operator -i=2 -w=0  --dev 
-yarn storage-node operator:accept-invitation -w=0 -b=2 --dev
-yarn storage-node leader:remove-operator -i=2   --dev 
+yarn storage-node operator:accept-invitation -w=0 -i=2 --dev
+yarn storage-node leader:remove-operator -i=2   --dev 
+
+# Toggle uploading block.
+yarn storage-node leader:set-uploading-block --enable --dev 
+yarn storage-node leader:set-uploading-block --disable --dev 

+ 1 - 1
storage-node-v2/src/commands/dev/verify-bag-id.ts

@@ -1,6 +1,6 @@
 import { flags } from '@oclif/command'
 import ApiCommandBase from '../../command-base/ApiCommandBase'
-import { parseBagId } from '../../services/helpers/bagIdParser'
+import { parseBagId } from '../../services/helpers/bagTypes'
 import logger from '../../services/logger'
 
 export default class DevVerifyBagId extends ApiCommandBase {

+ 1 - 1
storage-node-v2/src/commands/leader/cancel-invite.ts

@@ -4,7 +4,7 @@ import ApiCommandBase from '../../command-base/ApiCommandBase'
 import logger from '../../services/logger'
 
 export default class LeaderCancelInvite extends ApiCommandBase {
-  static description = `Cancels a storage bucket operator invite. Requires storage working group leader permissions.`
+  static description = `Cancel a storage bucket operator invite. Requires storage working group leader permissions.`
 
   static flags = {
     bucketId: flags.integer({

+ 1 - 1
storage-node-v2/src/commands/leader/delete-bucket.ts

@@ -4,7 +4,7 @@ import ApiCommandBase from '../../command-base/ApiCommandBase'
 import logger from '../../services/logger'
 
 export default class LeaderDeleteBucket extends ApiCommandBase {
-  static description = `Deletes a storage bucket. Requires storage working group leader permissions.`
+  static description = `Delete a storage bucket. Requires storage working group leader permissions.`
 
   static flags = {
     bucketId: flags.integer({

+ 1 - 1
storage-node-v2/src/commands/leader/invite-operator.ts

@@ -4,7 +4,7 @@ import ApiCommandBase from '../../command-base/ApiCommandBase'
 import logger from '../../services/logger'
 
 export default class LeaderInviteOperator extends ApiCommandBase {
-  static description = `Invites a storage bucket operator. Requires storage working group leader permissions.`
+  static description = `Invite a storage bucket operator. Requires storage working group leader permissions.`
 
   static flags = {
     bucketId: flags.integer({

+ 1 - 1
storage-node-v2/src/commands/leader/remove-operator.ts

@@ -4,7 +4,7 @@ import ApiCommandBase from '../../command-base/ApiCommandBase'
 import logger from '../../services/logger'
 
 export default class LeaderRemoveOperator extends ApiCommandBase {
-  static description = `Removes a storage bucket operator. Requires storage working group leader permissions.`
+  static description = `Remove a storage bucket operator. Requires storage working group leader permissions.`
 
   static flags = {
     bucketId: flags.integer({

+ 39 - 0
storage-node-v2/src/commands/leader/set-uploading-block.ts

@@ -0,0 +1,39 @@
+import { updateUploadingBlockedStatus } from '../../services/runtime/extrinsics'
+import { flags } from '@oclif/command'
+import ApiCommandBase from '../../command-base/ApiCommandBase'
+import logger from '../../services/logger'
+
+export default class LeaderSetUploadingBlock extends ApiCommandBase {
+  static description = `Set global uploading block. Requires storage working group leader permissions.`
+
+  static flags = {
+    enable: flags.boolean({
+      char: 'e',
+      description: 'Enables global uploading block (default).',
+    }),
+    disable: flags.boolean({
+      char: 'd',
+      description: 'Disables global uploading block.',
+    }),
+    ...ApiCommandBase.flags,
+  }
+
+  async run(): Promise<void> {
+    const { flags } = this.parse(LeaderSetUploadingBlock)
+
+    const disable = flags.disable
+    const newStatus = !disable
+
+    logger.info('Setting global uploading block...')
+    if (flags.dev) {
+      await this.ensureDevelopmentChain()
+    }
+
+    const account = this.getAccount(flags)
+    const api = await this.getApi()
+
+    const success = await updateUploadingBlockedStatus(api, account, newStatus)
+
+    this.exitAfterRuntimeCall(success)
+  }
+}

+ 1 - 1
storage-node-v2/src/commands/leader/update-bag-limit.ts

@@ -5,7 +5,7 @@ import logger from '../../services/logger'
 
 export default class LeaderUpdateBagLimit extends ApiCommandBase {
   static description =
-    'Updates StorageBucketsPerBagLimit variable in the Joystream node storage.'
+    'Update StorageBucketsPerBagLimit variable in the Joystream node storage.'
 
   static flags = {
     limit: flags.integer({

+ 2 - 2
storage-node-v2/src/commands/leader/update-bag.ts

@@ -1,7 +1,7 @@
 import { flags } from '@oclif/command'
 import { updateStorageBucketsForBag } from '../../services/runtime/extrinsics'
 import ApiCommandBase from '../../command-base/ApiCommandBase'
-import { parseBagId } from '../../services/helpers/bagIdParser'
+import { parseBagId } from '../../services/helpers/bagTypes'
 import logger from '../../services/logger'
 
 export default class LeaderUpdateBag extends ApiCommandBase {
@@ -43,7 +43,7 @@ export default class LeaderUpdateBag extends ApiCommandBase {
 
     const bucket = flags.bucket ?? 0
 
-    logger.info('Update bag - add/remove storage buckets...')
+    logger.info('Updating the bag...')
     if (flags.dev) {
       await this.ensureDevelopmentChain()
     }

+ 44 - 0
storage-node-v2/src/commands/leader/update-blacklist.ts

@@ -0,0 +1,44 @@
+import { flags } from '@oclif/command'
+import { updateBlacklist } from '../../services/runtime/extrinsics'
+import ApiCommandBase from '../../command-base/ApiCommandBase'
+import logger from '../../services/logger'
+
+export default class LeaderUpdateBlacklist extends ApiCommandBase {
+  static description =
+    'Add/remove a content ID from the blacklist (adds by default).'
+
+  static flags = {
+    cid: flags.string({
+      char: 'c',
+      required: true,
+      description: 'Content ID',
+    }),
+    remove: flags.boolean({
+      char: 'r',
+      description: 'Remove a content ID from the blaclist',
+    }),
+    ...ApiCommandBase.flags,
+  }
+
+  async run(): Promise<void> {
+    const { flags } = this.parse(LeaderUpdateBlacklist)
+
+    logger.info('Updating blacklist...')
+    if (flags.dev) {
+      await this.ensureDevelopmentChain()
+    }
+
+    const account = this.getAccount(flags)
+    const api = await this.getApi()
+
+    const success = await updateBlacklist(
+      api,
+      account,
+      flags.cid,
+      flags.remove
+    )
+
+    this.exitAfterRuntimeCall(success)
+  }
+}
+

+ 1 - 1
storage-node-v2/src/commands/leader/update-data-fee.ts

@@ -4,7 +4,7 @@ import ApiCommandBase from '../../command-base/ApiCommandBase'
 import logger from '../../services/logger'
 
 export default class LeaderUpdateDataFee extends ApiCommandBase {
-  static description = `Updates data size fee. Requires storage working group leader permissions.`
+  static description = `Update data size fee. Requires storage working group leader permissions.`
 
   static flags = {
     fee: flags.integer({

+ 56 - 0
storage-node-v2/src/commands/leader/update-dynamic-bag-policy.ts

@@ -0,0 +1,56 @@
+import ApiCommandBase from '../../command-base/ApiCommandBase'
+import { updateNumberOfStorageBucketsInDynamicBagCreationPolicy } from '../../services/runtime/extrinsics'
+import { flags } from '@oclif/command'
+import logger from '../../services/logger'
+import { parseDynamicBagType } from '../../services/helpers/bagTypes'
+
+export default class LeaderUpdateDynamicBagPolicy extends ApiCommandBase {
+  static description =
+    'Update number of storage buckets used in the dynamic bag creation policy.'
+
+  static flags = {
+    number: flags.integer({
+      char: 'n',
+      required: true,
+      description: 'New storage buckets number',
+    }),
+    member: flags.boolean({
+      char: 'e',
+      description: 'Member dynamic bag type (default)',
+    }),
+    channel: flags.boolean({
+      char: 'c',
+      description: 'Channel dynamic bag type',
+    }),
+    ...ApiCommandBase.flags,
+  }
+
+  async run(): Promise<void> {
+    const { flags } = this.parse(LeaderUpdateDynamicBagPolicy)
+
+    logger.info('Update "Storage buckets per bag" number limit....')
+    if (flags.dev) {
+      await this.ensureDevelopmentChain()
+    }
+
+    const account = this.getAccount(flags)
+    const newNumber = flags.number ?? 0
+
+    let dynamicBagTypeString: 'Member' | 'Channel' = 'Member' // Default
+    if (flags.channel) {
+      dynamicBagTypeString = 'Channel'
+    }
+
+    const api = await this.getApi()
+    const dynamicBagType = parseDynamicBagType(api, dynamicBagTypeString)
+    const success =
+      await updateNumberOfStorageBucketsInDynamicBagCreationPolicy(
+        api,
+        account,
+        dynamicBagType,
+        newNumber
+      )
+
+    this.exitAfterRuntimeCall(success)
+  }
+}

+ 2 - 2
storage-node-v2/src/commands/leader/update-voucher-limits.ts

@@ -5,7 +5,7 @@ import logger from '../../services/logger'
 
 export default class LeaderUpdateVoucherLimits extends ApiCommandBase {
   static description =
-    'Updates VoucherMaxObjectsSizeLimit and VoucherMaxObjectsNumberLimit the Joystream node storage.'
+    'Update VoucherMaxObjectsSizeLimit and VoucherMaxObjectsNumberLimit for the Joystream node storage.'
 
   static flags = {
     objects: flags.integer({
@@ -24,7 +24,7 @@ export default class LeaderUpdateVoucherLimits extends ApiCommandBase {
   async run(): Promise<void> {
     const { flags } = this.parse(LeaderUpdateVoucherLimits)
 
-    logger.info('Update "Storage buckets per bag" number limit....')
+    logger.info('Updating global storage bucket voucher limits....')
     if (flags.dev) {
       await this.ensureDevelopmentChain()
     }

+ 5 - 5
storage-node-v2/src/commands/operator/accept-invitation.ts

@@ -7,13 +7,13 @@ export default class OperatorAcceptInvitation extends ApiCommandBase {
   static description = 'Accept pending storage bucket invitation.'
 
   static flags = {
-    worker: flags.integer({
+    workerId: flags.integer({
       char: 'w',
       required: true,
       description: 'Storage operator worker ID',
     }),
-    bucket: flags.integer({
-      char: 'b',
+    bucketId: flags.integer({
+      char: 'i',
       required: true,
       description: 'Storage bucket ID',
     }),
@@ -23,8 +23,8 @@ export default class OperatorAcceptInvitation extends ApiCommandBase {
   async run(): Promise<void> {
     const { flags } = this.parse(OperatorAcceptInvitation)
 
-    const worker = flags.worker ?? 0
-    const bucket = flags.bucket ?? 0
+    const worker = flags.workerId ?? 0
+    const bucket = flags.bucketId ?? 0
 
     logger.info('Accepting pending storage bucket invitation...')
     if (flags.dev) {

+ 60 - 0
storage-node-v2/src/commands/operator/set-bucket-limits.ts

@@ -0,0 +1,60 @@
+import ApiCommandBase from '../../command-base/ApiCommandBase'
+import { setStorageBucketVoucherLimits } from '../../services/runtime/extrinsics'
+import { flags } from '@oclif/command'
+import logger from '../../services/logger'
+
+export default class LeaderSetBucketLimits extends ApiCommandBase {
+  static description =
+    'Set VoucherObjectsSizeLimit and VoucherObjectsNumberLimit for the storage bucket.'
+
+  static flags = {
+    workerId: flags.integer({
+      char: 'w',
+      required: true,
+      description: 'Storage operator worker ID',
+    }),
+    bucketId: flags.integer({
+      char: 'i',
+      required: true,
+      description: 'Storage bucket ID',
+    }),
+    objects: flags.integer({
+      char: 'o',
+      required: true,
+      description: `New 'voucher object number limit' value`,
+    }),
+    size: flags.integer({
+      char: 's',
+      required: true,
+      description: `New 'voucher object size limit' value`,
+    }),
+    ...ApiCommandBase.flags,
+  }
+
+  async run(): Promise<void> {
+    const { flags } = this.parse(LeaderSetBucketLimits)
+
+    logger.info('Setting storage bucket limits....')
+    if (flags.dev) {
+      await this.ensureDevelopmentChain()
+    }
+
+    const account = this.getAccount(flags)
+    const worker = flags.workerId ?? 0
+    const bucket = flags.bucketId ?? 0
+    const objectsLimit = flags.objects ?? 0
+    const sizeLimit = flags.size ?? 0
+
+    const api = await this.getApi()
+    const success = await setStorageBucketVoucherLimits(
+      api,
+      account,
+      worker,
+      bucket,
+      sizeLimit,
+      objectsLimit
+    )
+
+    this.exitAfterRuntimeCall(success)
+  }
+}

+ 52 - 0
storage-node-v2/src/commands/operator/set-metadata.ts

@@ -0,0 +1,52 @@
+import { flags } from '@oclif/command'
+import { setStorageOperatorMetadata } from '../../services/runtime/extrinsics'
+import ApiCommandBase from '../../command-base/ApiCommandBase'
+import logger from '../../services/logger'
+
+export default class OperatorSetMetadata extends ApiCommandBase {
+  static description = 'Accept pending storage bucket invitation.'
+
+  static flags = {
+    bucketId: flags.integer({
+      char: 'i',
+      required: true,
+      description: 'Storage bucket ID',
+    }),
+    operatorId: flags.integer({
+      char: 'w',
+      required: true,
+      description: 'Storage bucket operator ID (storage group worker ID)',
+    }),
+    metadata: flags.string({
+      char: 'm',
+      description: 'Storage bucket operator metadata',
+    }),
+    ...ApiCommandBase.flags,
+  }
+
+  async run(): Promise<void> {
+    const { flags } = this.parse(OperatorSetMetadata)
+
+    const operator = flags.operatorId ?? 0
+    const bucket = flags.bucketId ?? 0
+    const metadata = flags.metadata ?? ''
+
+    logger.info('Setting the storage operator metadata...')
+    if (flags.dev) {
+      await this.ensureDevelopmentChain()
+    }
+
+    const account = this.getAccount(flags)
+
+    const api = await this.getApi()
+    const success = await setStorageOperatorMetadata(
+      api,
+      account,
+      operator,
+      bucket,
+      metadata
+    )
+
+    this.exitAfterRuntimeCall(success)
+  }
+}

+ 57 - 0
storage-node-v2/src/commands/operator/update-bucket-status.ts

@@ -0,0 +1,57 @@
+import { flags } from '@oclif/command'
+import { updateStorageBucketStatus } from '../../services/runtime/extrinsics'
+import ApiCommandBase from '../../command-base/ApiCommandBase'
+import logger from '../../services/logger'
+
+export default class OperatorUpdateStorageBucketStatus extends ApiCommandBase {
+  static description = 'Update storage bucket status (accepting new bags).'
+
+  static flags = {
+    workerId: flags.integer({
+      char: 'w',
+      required: true,
+      description: 'Storage operator worker ID',
+    }),
+    bucketId: flags.integer({
+      char: 'i',
+      required: true,
+      description: 'Storage bucket ID',
+    }),
+    enable: flags.boolean({
+      char: 'e',
+      description: 'Enables accepting new bags (default).',
+    }),
+    disable: flags.boolean({
+      char: 'd',
+      description: 'Disables accepting new bags.',
+    }),
+    ...ApiCommandBase.flags,
+  }
+
+  async run(): Promise<void> {
+    const { flags } = this.parse(OperatorUpdateStorageBucketStatus)
+
+    const worker = flags.workerId ?? 0
+    const bucket = flags.bucketId ?? 0
+    const disable = flags.disable
+    const newStatus = !disable
+
+    logger.info('Updating the storage bucket status...')
+    if (flags.dev) {
+      await this.ensureDevelopmentChain()
+    }
+
+    const account = this.getAccount(flags)
+
+    const api = await this.getApi()
+    const success = await updateStorageBucketStatus(
+      api,
+      account,
+      worker,
+      bucket,
+      newStatus
+    )
+
+    this.exitAfterRuntimeCall(success)
+  }
+}

+ 8 - 1
storage-node-v2/src/services/helpers/bagIdParser.ts → storage-node-v2/src/services/helpers/bagTypes.ts

@@ -1,4 +1,4 @@
-import { BagId, Static } from '@joystream/types/storage'
+import { BagId, DynamicBagType, Static } from '@joystream/types/storage'
 import { ApiPromise } from '@polkadot/api'
 import ExitCodes from '../../command-base/ExitCodes'
 import { CLIError } from '@oclif/errors'
@@ -51,3 +51,10 @@ function parseDynamicBagId(): BagId {
     exit: ExitCodes.InvalidParameters,
   })
 }
+
+export function parseDynamicBagType(
+  api: ApiPromise,
+  bagType: 'Member' | 'Channel'
+): DynamicBagType {
+  return api.createType('DynamicBagType', bagType)
+}

+ 114 - 4
storage-node-v2/src/services/runtime/extrinsics.ts

@@ -3,7 +3,7 @@ import { getAlicePair } from './accounts'
 import { KeyringPair } from '@polkadot/keyring/types'
 import { CodecArg } from '@polkadot/types/types'
 import { ApiPromise } from '@polkadot/api'
-import { BagId } from '@joystream/types/storage'
+import { BagId, DynamicBagType } from '@joystream/types/storage'
 import logger from '../../services/logger'
 
 export async function createStorageBucket(
@@ -238,11 +238,121 @@ export async function removeStorageBucketOperator(
 export async function updateDataSizeFee(
   api: ApiPromise,
   account: KeyringPair,
-  bucketId: number
+  fee: number
 ): Promise<boolean> {
   return extrinsicWrapper(() =>
-    sendAndFollowNamedTx(api, account, 'storage', 'updateDataSizeFee', [
-      bucketId,
+    sendAndFollowNamedTx(api, account, 'storage', 'updateDataSizeFee', [fee])
+  )
+}
+
+export async function setStorageOperatorMetadata(
+  api: ApiPromise,
+  account: KeyringPair,
+  operatorId: number,
+  bucketId: number,
+  metadata: string
+): Promise<boolean> {
+  return extrinsicWrapper(() =>
+    sendAndFollowNamedTx(
+      api,
+      account,
+      'storage',
+      'setStorageOperatorMetadata',
+      [operatorId, bucketId, metadata]
+    )
+  )
+}
+
+export async function updateUploadingBlockedStatus(
+  api: ApiPromise,
+  account: KeyringPair,
+  newStatus: boolean
+): Promise<boolean> {
+  return extrinsicWrapper(() =>
+    sendAndFollowNamedTx(
+      api,
+      account,
+      'storage',
+      'updateUploadingBlockedStatus',
+      [newStatus]
+    )
+  )
+}
+
+export async function updateStorageBucketStatus(
+  api: ApiPromise,
+  account: KeyringPair,
+  workerId: number,
+  storageBucketId: number,
+  newStatus: boolean
+): Promise<boolean> {
+  return await extrinsicWrapper(() =>
+    sendAndFollowNamedTx(api, account, 'storage', 'updateStorageBucketStatus', [
+      workerId,
+      storageBucketId,
+      newStatus,
     ])
   )
 }
+
+export async function setStorageBucketVoucherLimits(
+  api: ApiPromise,
+  account: KeyringPair,
+  workerId: number,
+  storageBucketId: number,
+  newSizeLimit: number,
+  newObjectLimit: number
+): Promise<boolean> {
+  return await extrinsicWrapper(() =>
+    sendAndFollowNamedTx(
+      api,
+      account,
+      'storage',
+      'setStorageBucketVoucherLimits',
+      [workerId, storageBucketId, newSizeLimit, newObjectLimit]
+    )
+  )
+}
+
+export async function updateNumberOfStorageBucketsInDynamicBagCreationPolicy(
+  api: ApiPromise,
+  account: KeyringPair,
+  dynamicBagType: DynamicBagType,
+  newNumber: number
+): Promise<boolean> {
+  return await extrinsicWrapper(() =>
+    sendAndFollowNamedTx(
+      api,
+      account,
+      'storage',
+      'updateNumberOfStorageBucketsInDynamicBagCreationPolicy',
+      [dynamicBagType, newNumber]
+    )
+  )
+}
+
+export async function updateBlacklist(
+  api: ApiPromise,
+  account: KeyringPair,
+  cid: string,
+  removeCid: boolean
+): Promise<boolean> {
+  return await extrinsicWrapper(() => {
+    let addHashes: CodecArg
+    let removeHashes: CodecArg
+
+    if (removeCid) {
+      removeHashes = api.createType('ContentIdSet', [cid])
+    } else {
+      addHashes = api.createType('ContentIdSet', [cid])
+    }
+
+    return sendAndFollowNamedTx(
+      api,
+      account,
+      'storage',
+      'updateBlacklist',
+      [removeHashes, addHashes]
+    )
+  })
+}

+ 1 - 1
storage-node-v2/src/services/webApi/controllers/publicApi.ts

@@ -10,7 +10,7 @@ import {
   createNonce,
   TokenExpirationPeriod,
 } from '../../../services/helpers/tokenNonceKeeper'
-import { parseBagId } from '../../../services/helpers/bagIdParser'
+import { parseBagId } from '../../helpers/bagTypes'
 
 import FileType from 'file-type'
 import readChunk from 'read-chunk'

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


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

@@ -972,7 +972,7 @@ declare module '@polkadot/api/types/storage' {
       /**
        * DynamicBagCreationPolicy by bag type storage map.
        **/
-      dynamicBagCreationPolicies: AugmentedQuery<ApiType, (arg: DynamicBagType | AnyNumber | Uint8Array) => Observable<DynamicBagCreationPolicy>, [DynamicBagType]>;
+      dynamicBagCreationPolicies: AugmentedQuery<ApiType, (arg: DynamicBagType | 'Member' | 'Channel' | number | Uint8Array) => Observable<DynamicBagCreationPolicy>, [DynamicBagType]>;
       /**
        * Dynamic bag storage map.
        **/

+ 6 - 2
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, 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, 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]>;
+      /**
+       * Upload new data objects. Development mode.
+       **/
+      sudoUploadDataObjects: AugmentedSubmittable<(params: UploadParameters | { authenticationKey?: any; bagId?: any; objectCreationList?: any; deletionPrizeSourceAccountId?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [UploadParameters]>;
       /**
        * Add and remove hashes to the current blacklist.
        **/
@@ -1208,7 +1212,7 @@ declare module '@polkadot/api/types/submittable' {
       /**
        * Update number of storage buckets used in given dynamic bag creation policy.
        **/
-      updateNumberOfStorageBucketsInDynamicBagCreationPolicy: AugmentedSubmittable<(dynamicBagType: DynamicBagType | AnyNumber | Uint8Array, numberOfStorageBuckets: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [DynamicBagType, u64]>;
+      updateNumberOfStorageBucketsInDynamicBagCreationPolicy: AugmentedSubmittable<(dynamicBagType: DynamicBagType | 'Member' | 'Channel' | number | Uint8Array, numberOfStorageBuckets: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [DynamicBagType, u64]>;
       /**
        * Update whether new bags are being accepted for storage.
        **/

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


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

@@ -985,8 +985,15 @@
         "sizeUsed": "u64",
         "objectsUsed": "u64"
     },
-    "DynamicBagType": "u64",
-    "DynamicBagCreationPolicy": "u64",
+    "DynamicBagType": {
+        "_enum": [
+            "Member",
+            "Channel"
+        ]
+    },
+    "DynamicBagCreationPolicy": {
+        "numberOfStorageBuckets": "u64"
+    },
     "DynamicBag": "u64",
     "StaticBag": "u64",
     "StorageBucket": "u64",
@@ -1012,7 +1019,12 @@
         "size": "u64",
         "ipfsContentId": "Text"
     },
-    "BagIdType": "u64",
+    "BagIdType": {
+        "_enum": {
+            "Static": "Static",
+            "Dynamic": "Null"
+        }
+    },
     "UploadParameters": {
         "authenticationKey": "Text",
         "bagId": "BagId",
@@ -1020,5 +1032,6 @@
         "deletionPrizeSourceAccountId": "GenericAccountId"
     },
     "StorageBucketIdSet": "BTreeSet<StorageBucketId>",
-    "DataObjectIdSet": "BTreeSet<DataObjectId>"
+    "DataObjectIdSet": "BTreeSet<DataObjectId>",
+    "ContentIdSet": "BTreeSet<Text>"
 }

+ 15 - 3
types/augment/all/types.ts

@@ -166,7 +166,11 @@ export interface BagId extends Enum {
 }
 
 /** @name BagIdType */
-export interface BagIdType extends u64 {}
+export interface BagIdType extends Enum {
+  readonly isStatic: boolean;
+  readonly asStatic: Static;
+  readonly isDynamic: boolean;
+}
 
 /** @name BalanceOfMint */
 export interface BalanceOfMint extends u128 {}
@@ -284,6 +288,9 @@ export interface ClassPropertyValue extends Null {}
 /** @name ContentId */
 export interface ContentId extends U8aFixed {}
 
+/** @name ContentIdSet */
+export interface ContentIdSet extends BTreeSet<Text> {}
+
 /** @name CreateEntityOperation */
 export interface CreateEntityOperation extends Struct {
   readonly class_id: ClassId;
@@ -460,13 +467,18 @@ export interface DiscussionThread extends Struct {
 export interface DynamicBag extends u64 {}
 
 /** @name DynamicBagCreationPolicy */
-export interface DynamicBagCreationPolicy extends u64 {}
+export interface DynamicBagCreationPolicy extends Struct {
+  readonly numberOfStorageBuckets: u64;
+}
 
 /** @name DynamicBagId */
 export interface DynamicBagId extends u64 {}
 
 /** @name DynamicBagType */
-export interface DynamicBagType extends u64 {}
+export interface DynamicBagType extends Enum {
+  readonly isMember: boolean;
+  readonly isChannel: boolean;
+}
 
 /** @name ElectionParameters */
 export interface ElectionParameters extends Struct {

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

@@ -972,7 +972,7 @@ declare module '@polkadot/api/types/storage' {
       /**
        * DynamicBagCreationPolicy by bag type storage map.
        **/
-      dynamicBagCreationPolicies: AugmentedQuery<ApiType, (arg: DynamicBagType | AnyNumber | Uint8Array) => Observable<DynamicBagCreationPolicy>, [DynamicBagType]>;
+      dynamicBagCreationPolicies: AugmentedQuery<ApiType, (arg: DynamicBagType | 'Member' | 'Channel' | number | Uint8Array) => Observable<DynamicBagCreationPolicy>, [DynamicBagType]>;
       /**
        * Dynamic bag storage map.
        **/

+ 6 - 2
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, 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, 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]>;
+      /**
+       * Upload new data objects. Development mode.
+       **/
+      sudoUploadDataObjects: AugmentedSubmittable<(params: UploadParameters | { authenticationKey?: any; bagId?: any; objectCreationList?: any; deletionPrizeSourceAccountId?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [UploadParameters]>;
       /**
        * Add and remove hashes to the current blacklist.
        **/
@@ -1208,7 +1212,7 @@ declare module '@polkadot/api/types/submittable' {
       /**
        * Update number of storage buckets used in given dynamic bag creation policy.
        **/
-      updateNumberOfStorageBucketsInDynamicBagCreationPolicy: AugmentedSubmittable<(dynamicBagType: DynamicBagType | AnyNumber | Uint8Array, numberOfStorageBuckets: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [DynamicBagType, u64]>;
+      updateNumberOfStorageBucketsInDynamicBagCreationPolicy: AugmentedSubmittable<(dynamicBagType: DynamicBagType | 'Member' | 'Channel' | number | Uint8Array, numberOfStorageBuckets: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [DynamicBagType, u64]>;
       /**
        * Update whether new bags are being accepted for storage.
        **/

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


+ 85 - 65
types/src/storage.ts

@@ -1,34 +1,49 @@
-import {Null, u64, Text, Vec, GenericAccountId as AccountId} from "@polkadot/types";
-import {RegistryTypes} from "@polkadot/types/types";
-import {JoyBTreeSet, JoyEnum, JoyStructDecorated} from './common'
+import { Null, u64, Text, Vec, GenericAccountId as AccountId, BTreeSet } from '@polkadot/types'
+import { RegistryTypes } from '@polkadot/types/types'
+import { JoyBTreeSet, JoyEnum, JoyStructDecorated } from './common'
 
 export class DataObjectId extends u64 {}
 export class StorageBucketId extends u64 {}
 
 export type StorageBucketsPerBagValueConstraintType = {
-    min: u64,
-    max_min_diff: u64,
+  min: u64
+  max_min_diff: u64
 }
 
 export class StorageBucketsPerBagValueConstraint
-    extends JoyStructDecorated({
-        min: u64,
-        max_min_diff: u64,
-    })
-    implements StorageBucketsPerBagValueConstraintType {}
+  extends JoyStructDecorated({
+    min: u64,
+    max_min_diff: u64,
+  })
+  implements StorageBucketsPerBagValueConstraintType {}
 
 //TODO: implement these types
 export class DynamicBagId extends u64 {}
-export class DynamicBagType extends u64 {}
-export class DynamicBagCreationPolicy extends u64 {}
 export class DynamicBag extends u64 {}
 export class StaticBag extends u64 {}
 export class StorageBucket extends u64 {}
 //
 
+export type DynamicBagCreationPolicyType = {
+  numberOfStorageBuckets: u64
+}
+
+export class DynamicBagCreationPolicy
+  extends JoyStructDecorated({
+    numberOfStorageBuckets: u64,
+  })
+  implements DynamicBagCreationPolicyType {}
+
+export const DynamicBagTypeDef = {
+  Member: Null,
+  Channel: Null,
+} as const
+export type DynamicBagTypeKey = keyof typeof DynamicBagTypeDef
+export class DynamicBagType extends JoyEnum(DynamicBagTypeDef) {}
+
 export const StaticBagIdDef = {
-    Council: Null,
-    WorkingGroup: Null,
+  Council: Null,
+  WorkingGroup: Null,
 } as const
 export type StaticBagIdKey = keyof typeof StaticBagIdDef
 export class StaticBagId extends JoyEnum(StaticBagIdDef) {}
@@ -36,81 +51,86 @@ export class StaticBagId extends JoyEnum(StaticBagIdDef) {}
 export class Static extends StaticBagId {}
 
 export const BagIdDef = {
-    Static,
-    Dynamic: Null,//TODO: implement dynamic type
+  Static,
+  Dynamic: Null, //TODO: implement dynamic type
 } as const
 export type BagIdKey = keyof typeof BagIdDef
 export class BagId extends JoyEnum(BagIdDef) {}
 
+// Alias
+export class BagIdType extends BagId {}
+
 export type VoucherType = {
+  sizeLimit: u64
+  objectsLimit: u64
+  sizeUsed: u64
+  objectsUsed: u64
+}
+
+export class Voucher
+  extends JoyStructDecorated({
     sizeLimit: u64,
     objectsLimit: u64,
     sizeUsed: u64,
     objectsUsed: u64,
-}
-
-export class Voucher
-    extends JoyStructDecorated({
-        sizeLimit: u64,
-        objectsLimit: u64,
-        sizeUsed: u64,
-        objectsUsed: u64,
-    })
-    implements VoucherType {}
+  })
+  implements VoucherType {}
 
 export class StorageBucketIdSet extends JoyBTreeSet(StorageBucketId) {}
 
 export class DataObjectIdSet extends JoyBTreeSet(DataObjectId) {}
 
-export class BagIdType extends u64 {}
-
 export type DataObjectCreationParametersType = {
-    size: u64,
-    ipfsContentId: Text,
+  size: u64
+  ipfsContentId: Text
 }
 
 export class DataObjectCreationParameters
-    extends JoyStructDecorated({
-        size: u64,
-        ipfsContentId: Text,
-    })
-    implements DataObjectCreationParametersType {}
+  extends JoyStructDecorated({
+    size: u64,
+    ipfsContentId: Text,
+  })
+  implements DataObjectCreationParametersType {}
 
 export type UploadParametersType = {
-    authenticationKey: Text,
-    bagId: BagId,
-    objectCreationList: Vec<DataObjectCreationParameters>,
-    deletionPrizeSourceAccountId: AccountId,
+  authenticationKey: Text
+  bagId: BagId
+  objectCreationList: Vec<DataObjectCreationParameters>
+  deletionPrizeSourceAccountId: AccountId
 }
 
 export class UploadParameters
-    extends JoyStructDecorated({
-        authenticationKey: Text,
-        bagId: BagId,
-        objectCreationList: Vec.with(DataObjectCreationParameters),
-        deletionPrizeSourceAccountId: AccountId,
-    })
-    implements UploadParametersType {}
+  extends JoyStructDecorated({
+    authenticationKey: Text,
+    bagId: BagId,
+    objectCreationList: Vec.with(DataObjectCreationParameters),
+    deletionPrizeSourceAccountId: AccountId,
+  })
+  implements UploadParametersType {}
 
+export class ContentId extends Text {}
+export class ContentIdSet extends BTreeSet.with(ContentId) {}
 
 export const storageTypes: RegistryTypes = {
-    StorageBucketId,
-    StorageBucketsPerBagValueConstraint,
-    DataObjectId,
-    DynamicBagId,
-    Voucher,
-    DynamicBagType,
-    DynamicBagCreationPolicy,
-    DynamicBag,
-    StaticBag,
-    StorageBucket,
-    StaticBagId,
-    Static,
-    BagId,
-    DataObjectCreationParameters,
-    BagIdType,
-    UploadParameters,
-    StorageBucketIdSet,
-    DataObjectIdSet,
+  StorageBucketId,
+  StorageBucketsPerBagValueConstraint,
+  DataObjectId,
+  DynamicBagId,
+  Voucher,
+  DynamicBagType,
+  DynamicBagCreationPolicy,
+  DynamicBag,
+  StaticBag,
+  StorageBucket,
+  StaticBagId,
+  Static,
+  BagId,
+  DataObjectCreationParameters,
+  BagIdType,
+  UploadParameters,
+  StorageBucketIdSet,
+  DataObjectIdSet,
+  ContentIdSet,
+  ContentId
 }
-export default storageTypes
+export default storageTypes

+ 2 - 9
yarn.lock

@@ -4044,13 +4044,6 @@
   dependencies:
     "@babel/runtime" "^7.13.9"
 
-"@polkadot/networks@^6.10.1":
-  version "6.10.1"
-  resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-6.10.1.tgz#e0a53f9860729ac77759a6983af0e0b527560d04"
-  integrity sha512-/zJMryxivseJ0gJ1nmYKpUWE3eIH5TaMMCyGFM7XvyaYpBmRxLWDYDrwxINJXTxKj6iBHKKB0ylQ8BXgCokSIg==
-  dependencies:
-    "@babel/runtime" "^7.14.6"
-
 "@polkadot/react-identicon@^0.57.3":
   version "0.57.3"
   resolved "https://registry.yarnpkg.com/@polkadot/react-identicon/-/react-identicon-0.57.3.tgz#f2f1a9b57faa66e1df47a0238daa9607f76d946c"
@@ -4199,7 +4192,7 @@
     "@babel/runtime" "^7.10.5"
     color "^3.1.2"
 
-"@polkadot/util-crypto@6.0.5", "@polkadot/util-crypto@^3.0.1", "@polkadot/util-crypto@^6.0.5", "@polkadot/util-crypto@^6.10.1":
+"@polkadot/util-crypto@6.0.5", "@polkadot/util-crypto@^3.0.1", "@polkadot/util-crypto@^6.0.5":
   version "6.0.5"
   resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-6.0.5.tgz#347ea2bf051d34087766cb43004062358cd43800"
   integrity sha512-NlzmZzJ1vq2bjnQUU0MUocaT9vuIBGTlB/XCrCw94MyYqX19EllkOKLVMgu6o89xhYeP5rmASRQvTx9ZL9EzRw==
@@ -4221,7 +4214,7 @@
     tweetnacl "^1.0.3"
     xxhashjs "^0.2.2"
 
-"@polkadot/util@6.0.5", "@polkadot/util@^3.0.1", "@polkadot/util@^6.0.5", "@polkadot/util@^6.10.1":
+"@polkadot/util@6.0.5", "@polkadot/util@^3.0.1", "@polkadot/util@^6.0.5":
   version "6.0.5"
   resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.0.5.tgz#aa52995d3fe998eed218d26b243832a7a3e2944d"
   integrity sha512-0EnYdGAXx/Y2MLgCKtlfdKVcURV+Twx+M+auljTeMK8226pR7xMblYuVuO5bxhPWBa1W7+iQloEZ0VRQrIoMDw==

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