Browse Source

Merge branch 'olympia' into olympia-readme

Leszek Wiesner 3 years ago
parent
commit
3868a0d543
32 changed files with 1976 additions and 1018 deletions
  1. 217 4
      metadata-protobuf/compiled/index.d.ts
  2. 526 15
      metadata-protobuf/compiled/index.js
  3. 13 0
      metadata-protobuf/proto/Bounty.proto
  4. 4 1
      metadata-protobuf/proto/Membership.proto
  5. 66 31
      query-node/mappings/src/council.ts
  6. 13 4
      query-node/mappings/src/membership.ts
  7. 21 5
      query-node/schemas/council.graphql
  8. 16 16
      query-node/schemas/forumEvents.graphql
  9. 13 1
      query-node/schemas/membership.graphql
  10. 1 3
      runtime-modules/forum/src/benchmarking.rs
  11. 4 12
      runtime-modules/forum/src/lib.rs
  12. 4 6
      runtime-modules/forum/src/mock.rs
  13. 30 30
      runtime-modules/forum/src/tests.rs
  14. 1 1
      tests/integration-tests/src/Api.ts
  15. 529 366
      tests/integration-tests/src/graphql/generated/schema.ts
  16. 4 4
      types/augment-codec/augment-api-consts.ts
  17. 12 12
      types/augment-codec/augment-api-errors.ts
  18. 6 6
      types/augment-codec/augment-api-events.ts
  19. 4 4
      types/augment-codec/augment-api-query.ts
  20. 52 52
      types/augment-codec/augment-api-rpc.ts
  21. 49 49
      types/augment-codec/augment-api-tx.ts
  22. 100 100
      types/augment-codec/augment-types.ts
  23. 0 2
      types/augment/all/defs.json
  24. 64 66
      types/augment/all/types.ts
  25. 4 4
      types/augment/augment-api-consts.ts
  26. 12 12
      types/augment/augment-api-errors.ts
  27. 6 6
      types/augment/augment-api-events.ts
  28. 4 4
      types/augment/augment-api-query.ts
  29. 52 52
      types/augment/augment-api-rpc.ts
  30. 49 49
      types/augment/augment-api-tx.ts
  31. 100 100
      types/augment/augment-types.ts
  32. 0 1
      types/src/forum.ts

+ 217 - 4
metadata-protobuf/compiled/index.d.ts

@@ -1,5 +1,209 @@
 import { Long } from 'long'
 import * as $protobuf from "protobufjs";
+/** Properties of a BountyMetadata. */
+export interface IBountyMetadata {
+
+    /** BountyMetadata title */
+    title?: (string|null);
+
+    /** BountyMetadata description */
+    description?: (string|null);
+
+    /** BountyMetadata discussionThread */
+    discussionThread?: (number|null);
+
+    /** BountyMetadata bannerImageUri */
+    bannerImageUri?: (string|null);
+}
+
+/** Represents a BountyMetadata. */
+export class BountyMetadata implements IBountyMetadata {
+
+    /**
+     * Constructs a new BountyMetadata.
+     * @param [properties] Properties to set
+     */
+    constructor(properties?: IBountyMetadata);
+
+    /** BountyMetadata title. */
+    public title: string;
+
+    /** BountyMetadata description. */
+    public description: string;
+
+    /** BountyMetadata discussionThread. */
+    public discussionThread: number;
+
+    /** BountyMetadata bannerImageUri. */
+    public bannerImageUri: string;
+
+    /**
+     * Creates a new BountyMetadata instance using the specified properties.
+     * @param [properties] Properties to set
+     * @returns BountyMetadata instance
+     */
+    public static create(properties?: IBountyMetadata): BountyMetadata;
+
+    /**
+     * Encodes the specified BountyMetadata message. Does not implicitly {@link BountyMetadata.verify|verify} messages.
+     * @param message BountyMetadata message or plain object to encode
+     * @param [writer] Writer to encode to
+     * @returns Writer
+     */
+    public static encode(message: IBountyMetadata, writer?: $protobuf.Writer): $protobuf.Writer;
+
+    /**
+     * Encodes the specified BountyMetadata message, length delimited. Does not implicitly {@link BountyMetadata.verify|verify} messages.
+     * @param message BountyMetadata message or plain object to encode
+     * @param [writer] Writer to encode to
+     * @returns Writer
+     */
+    public static encodeDelimited(message: IBountyMetadata, writer?: $protobuf.Writer): $protobuf.Writer;
+
+    /**
+     * Decodes a BountyMetadata message from the specified reader or buffer.
+     * @param reader Reader or buffer to decode from
+     * @param [length] Message length if known beforehand
+     * @returns BountyMetadata
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): BountyMetadata;
+
+    /**
+     * Decodes a BountyMetadata message from the specified reader or buffer, length delimited.
+     * @param reader Reader or buffer to decode from
+     * @returns BountyMetadata
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): BountyMetadata;
+
+    /**
+     * Verifies a BountyMetadata message.
+     * @param message Plain object to verify
+     * @returns `null` if valid, otherwise the reason why it is not
+     */
+    public static verify(message: { [k: string]: any }): (string|null);
+
+    /**
+     * Creates a BountyMetadata message from a plain object. Also converts values to their respective internal types.
+     * @param object Plain object
+     * @returns BountyMetadata
+     */
+    public static fromObject(object: { [k: string]: any }): BountyMetadata;
+
+    /**
+     * Creates a plain object from a BountyMetadata message. Also converts values to other types if specified.
+     * @param message BountyMetadata
+     * @param [options] Conversion options
+     * @returns Plain object
+     */
+    public static toObject(message: BountyMetadata, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+    /**
+     * Converts this BountyMetadata to JSON.
+     * @returns JSON object
+     */
+    public toJSON(): { [k: string]: any };
+}
+
+/** Properties of a BountyWorkData. */
+export interface IBountyWorkData {
+
+    /** BountyWorkData title */
+    title?: (string|null);
+
+    /** BountyWorkData description */
+    description?: (string|null);
+}
+
+/** Represents a BountyWorkData. */
+export class BountyWorkData implements IBountyWorkData {
+
+    /**
+     * Constructs a new BountyWorkData.
+     * @param [properties] Properties to set
+     */
+    constructor(properties?: IBountyWorkData);
+
+    /** BountyWorkData title. */
+    public title: string;
+
+    /** BountyWorkData description. */
+    public description: string;
+
+    /**
+     * Creates a new BountyWorkData instance using the specified properties.
+     * @param [properties] Properties to set
+     * @returns BountyWorkData instance
+     */
+    public static create(properties?: IBountyWorkData): BountyWorkData;
+
+    /**
+     * Encodes the specified BountyWorkData message. Does not implicitly {@link BountyWorkData.verify|verify} messages.
+     * @param message BountyWorkData message or plain object to encode
+     * @param [writer] Writer to encode to
+     * @returns Writer
+     */
+    public static encode(message: IBountyWorkData, writer?: $protobuf.Writer): $protobuf.Writer;
+
+    /**
+     * Encodes the specified BountyWorkData message, length delimited. Does not implicitly {@link BountyWorkData.verify|verify} messages.
+     * @param message BountyWorkData message or plain object to encode
+     * @param [writer] Writer to encode to
+     * @returns Writer
+     */
+    public static encodeDelimited(message: IBountyWorkData, writer?: $protobuf.Writer): $protobuf.Writer;
+
+    /**
+     * Decodes a BountyWorkData message from the specified reader or buffer.
+     * @param reader Reader or buffer to decode from
+     * @param [length] Message length if known beforehand
+     * @returns BountyWorkData
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): BountyWorkData;
+
+    /**
+     * Decodes a BountyWorkData message from the specified reader or buffer, length delimited.
+     * @param reader Reader or buffer to decode from
+     * @returns BountyWorkData
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): BountyWorkData;
+
+    /**
+     * Verifies a BountyWorkData message.
+     * @param message Plain object to verify
+     * @returns `null` if valid, otherwise the reason why it is not
+     */
+    public static verify(message: { [k: string]: any }): (string|null);
+
+    /**
+     * Creates a BountyWorkData message from a plain object. Also converts values to their respective internal types.
+     * @param object Plain object
+     * @returns BountyWorkData
+     */
+    public static fromObject(object: { [k: string]: any }): BountyWorkData;
+
+    /**
+     * Creates a plain object from a BountyWorkData message. Also converts values to other types if specified.
+     * @param message BountyWorkData
+     * @param [options] Conversion options
+     * @returns Plain object
+     */
+    public static toObject(message: BountyWorkData, options?: $protobuf.IConversionOptions): { [k: string]: any };
+
+    /**
+     * Converts this BountyWorkData to JSON.
+     * @returns JSON object
+     */
+    public toJSON(): { [k: string]: any };
+}
+
 /** Properties of a ChannelMetadata. */
 export interface IChannelMetadata {
 
@@ -615,8 +819,11 @@ export interface IMembershipMetadata {
     /** MembershipMetadata name */
     name?: (string|null);
 
-    /** MembershipMetadata avatar */
-    avatar?: (number|null);
+    /** MembershipMetadata avatarObject */
+    avatarObject?: (number|null);
+
+    /** MembershipMetadata avatarUri */
+    avatarUri?: (string|null);
 
     /** MembershipMetadata about */
     about?: (string|null);
@@ -634,12 +841,18 @@ export class MembershipMetadata implements IMembershipMetadata {
     /** MembershipMetadata name. */
     public name: string;
 
-    /** MembershipMetadata avatar. */
-    public avatar: number;
+    /** MembershipMetadata avatarObject. */
+    public avatarObject?: (number|null);
+
+    /** MembershipMetadata avatarUri. */
+    public avatarUri?: (string|null);
 
     /** MembershipMetadata about. */
     public about: string;
 
+    /** MembershipMetadata avatar. */
+    public avatar?: ("avatarObject"|"avatarUri");
+
     /**
      * Creates a new MembershipMetadata instance using the specified properties.
      * @param [properties] Properties to set

+ 526 - 15
metadata-protobuf/compiled/index.js

@@ -9,6 +9,470 @@ var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.ut
 // Exported root namespace
 var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
 
+$root.BountyMetadata = (function() {
+
+    /**
+     * Properties of a BountyMetadata.
+     * @exports IBountyMetadata
+     * @interface IBountyMetadata
+     * @property {string|null} [title] BountyMetadata title
+     * @property {string|null} [description] BountyMetadata description
+     * @property {number|null} [discussionThread] BountyMetadata discussionThread
+     * @property {string|null} [bannerImageUri] BountyMetadata bannerImageUri
+     */
+
+    /**
+     * Constructs a new BountyMetadata.
+     * @exports BountyMetadata
+     * @classdesc Represents a BountyMetadata.
+     * @implements IBountyMetadata
+     * @constructor
+     * @param {IBountyMetadata=} [properties] Properties to set
+     */
+    function BountyMetadata(properties) {
+        if (properties)
+            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                if (properties[keys[i]] != null)
+                    this[keys[i]] = properties[keys[i]];
+    }
+
+    /**
+     * BountyMetadata title.
+     * @member {string} title
+     * @memberof BountyMetadata
+     * @instance
+     */
+    BountyMetadata.prototype.title = "";
+
+    /**
+     * BountyMetadata description.
+     * @member {string} description
+     * @memberof BountyMetadata
+     * @instance
+     */
+    BountyMetadata.prototype.description = "";
+
+    /**
+     * BountyMetadata discussionThread.
+     * @member {number} discussionThread
+     * @memberof BountyMetadata
+     * @instance
+     */
+    BountyMetadata.prototype.discussionThread = 0;
+
+    /**
+     * BountyMetadata bannerImageUri.
+     * @member {string} bannerImageUri
+     * @memberof BountyMetadata
+     * @instance
+     */
+    BountyMetadata.prototype.bannerImageUri = "";
+
+    /**
+     * Creates a new BountyMetadata instance using the specified properties.
+     * @function create
+     * @memberof BountyMetadata
+     * @static
+     * @param {IBountyMetadata=} [properties] Properties to set
+     * @returns {BountyMetadata} BountyMetadata instance
+     */
+    BountyMetadata.create = function create(properties) {
+        return new BountyMetadata(properties);
+    };
+
+    /**
+     * Encodes the specified BountyMetadata message. Does not implicitly {@link BountyMetadata.verify|verify} messages.
+     * @function encode
+     * @memberof BountyMetadata
+     * @static
+     * @param {IBountyMetadata} message BountyMetadata message or plain object to encode
+     * @param {$protobuf.Writer} [writer] Writer to encode to
+     * @returns {$protobuf.Writer} Writer
+     */
+    BountyMetadata.encode = function encode(message, writer) {
+        if (!writer)
+            writer = $Writer.create();
+        if (message.title != null && Object.hasOwnProperty.call(message, "title"))
+            writer.uint32(/* id 1, wireType 2 =*/10).string(message.title);
+        if (message.description != null && Object.hasOwnProperty.call(message, "description"))
+            writer.uint32(/* id 2, wireType 2 =*/18).string(message.description);
+        if (message.discussionThread != null && Object.hasOwnProperty.call(message, "discussionThread"))
+            writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.discussionThread);
+        if (message.bannerImageUri != null && Object.hasOwnProperty.call(message, "bannerImageUri"))
+            writer.uint32(/* id 4, wireType 2 =*/34).string(message.bannerImageUri);
+        return writer;
+    };
+
+    /**
+     * Encodes the specified BountyMetadata message, length delimited. Does not implicitly {@link BountyMetadata.verify|verify} messages.
+     * @function encodeDelimited
+     * @memberof BountyMetadata
+     * @static
+     * @param {IBountyMetadata} message BountyMetadata message or plain object to encode
+     * @param {$protobuf.Writer} [writer] Writer to encode to
+     * @returns {$protobuf.Writer} Writer
+     */
+    BountyMetadata.encodeDelimited = function encodeDelimited(message, writer) {
+        return this.encode(message, writer).ldelim();
+    };
+
+    /**
+     * Decodes a BountyMetadata message from the specified reader or buffer.
+     * @function decode
+     * @memberof BountyMetadata
+     * @static
+     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+     * @param {number} [length] Message length if known beforehand
+     * @returns {BountyMetadata} BountyMetadata
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    BountyMetadata.decode = function decode(reader, length) {
+        if (!(reader instanceof $Reader))
+            reader = $Reader.create(reader);
+        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.BountyMetadata();
+        while (reader.pos < end) {
+            var tag = reader.uint32();
+            switch (tag >>> 3) {
+            case 1:
+                message.title = reader.string();
+                break;
+            case 2:
+                message.description = reader.string();
+                break;
+            case 3:
+                message.discussionThread = reader.uint32();
+                break;
+            case 4:
+                message.bannerImageUri = reader.string();
+                break;
+            default:
+                reader.skipType(tag & 7);
+                break;
+            }
+        }
+        return message;
+    };
+
+    /**
+     * Decodes a BountyMetadata message from the specified reader or buffer, length delimited.
+     * @function decodeDelimited
+     * @memberof BountyMetadata
+     * @static
+     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+     * @returns {BountyMetadata} BountyMetadata
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    BountyMetadata.decodeDelimited = function decodeDelimited(reader) {
+        if (!(reader instanceof $Reader))
+            reader = new $Reader(reader);
+        return this.decode(reader, reader.uint32());
+    };
+
+    /**
+     * Verifies a BountyMetadata message.
+     * @function verify
+     * @memberof BountyMetadata
+     * @static
+     * @param {Object.<string,*>} message Plain object to verify
+     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+     */
+    BountyMetadata.verify = function verify(message) {
+        if (typeof message !== "object" || message === null)
+            return "object expected";
+        if (message.title != null && message.hasOwnProperty("title"))
+            if (!$util.isString(message.title))
+                return "title: string expected";
+        if (message.description != null && message.hasOwnProperty("description"))
+            if (!$util.isString(message.description))
+                return "description: string expected";
+        if (message.discussionThread != null && message.hasOwnProperty("discussionThread"))
+            if (!$util.isInteger(message.discussionThread))
+                return "discussionThread: integer expected";
+        if (message.bannerImageUri != null && message.hasOwnProperty("bannerImageUri"))
+            if (!$util.isString(message.bannerImageUri))
+                return "bannerImageUri: string expected";
+        return null;
+    };
+
+    /**
+     * Creates a BountyMetadata message from a plain object. Also converts values to their respective internal types.
+     * @function fromObject
+     * @memberof BountyMetadata
+     * @static
+     * @param {Object.<string,*>} object Plain object
+     * @returns {BountyMetadata} BountyMetadata
+     */
+    BountyMetadata.fromObject = function fromObject(object) {
+        if (object instanceof $root.BountyMetadata)
+            return object;
+        var message = new $root.BountyMetadata();
+        if (object.title != null)
+            message.title = String(object.title);
+        if (object.description != null)
+            message.description = String(object.description);
+        if (object.discussionThread != null)
+            message.discussionThread = object.discussionThread >>> 0;
+        if (object.bannerImageUri != null)
+            message.bannerImageUri = String(object.bannerImageUri);
+        return message;
+    };
+
+    /**
+     * Creates a plain object from a BountyMetadata message. Also converts values to other types if specified.
+     * @function toObject
+     * @memberof BountyMetadata
+     * @static
+     * @param {BountyMetadata} message BountyMetadata
+     * @param {$protobuf.IConversionOptions} [options] Conversion options
+     * @returns {Object.<string,*>} Plain object
+     */
+    BountyMetadata.toObject = function toObject(message, options) {
+        if (!options)
+            options = {};
+        var object = {};
+        if (options.defaults) {
+            object.title = "";
+            object.description = "";
+            object.discussionThread = 0;
+            object.bannerImageUri = "";
+        }
+        if (message.title != null && message.hasOwnProperty("title"))
+            object.title = message.title;
+        if (message.description != null && message.hasOwnProperty("description"))
+            object.description = message.description;
+        if (message.discussionThread != null && message.hasOwnProperty("discussionThread"))
+            object.discussionThread = message.discussionThread;
+        if (message.bannerImageUri != null && message.hasOwnProperty("bannerImageUri"))
+            object.bannerImageUri = message.bannerImageUri;
+        return object;
+    };
+
+    /**
+     * Converts this BountyMetadata to JSON.
+     * @function toJSON
+     * @memberof BountyMetadata
+     * @instance
+     * @returns {Object.<string,*>} JSON object
+     */
+    BountyMetadata.prototype.toJSON = function toJSON() {
+        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+    };
+
+    return BountyMetadata;
+})();
+
+$root.BountyWorkData = (function() {
+
+    /**
+     * Properties of a BountyWorkData.
+     * @exports IBountyWorkData
+     * @interface IBountyWorkData
+     * @property {string|null} [title] BountyWorkData title
+     * @property {string|null} [description] BountyWorkData description
+     */
+
+    /**
+     * Constructs a new BountyWorkData.
+     * @exports BountyWorkData
+     * @classdesc Represents a BountyWorkData.
+     * @implements IBountyWorkData
+     * @constructor
+     * @param {IBountyWorkData=} [properties] Properties to set
+     */
+    function BountyWorkData(properties) {
+        if (properties)
+            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)
+                if (properties[keys[i]] != null)
+                    this[keys[i]] = properties[keys[i]];
+    }
+
+    /**
+     * BountyWorkData title.
+     * @member {string} title
+     * @memberof BountyWorkData
+     * @instance
+     */
+    BountyWorkData.prototype.title = "";
+
+    /**
+     * BountyWorkData description.
+     * @member {string} description
+     * @memberof BountyWorkData
+     * @instance
+     */
+    BountyWorkData.prototype.description = "";
+
+    /**
+     * Creates a new BountyWorkData instance using the specified properties.
+     * @function create
+     * @memberof BountyWorkData
+     * @static
+     * @param {IBountyWorkData=} [properties] Properties to set
+     * @returns {BountyWorkData} BountyWorkData instance
+     */
+    BountyWorkData.create = function create(properties) {
+        return new BountyWorkData(properties);
+    };
+
+    /**
+     * Encodes the specified BountyWorkData message. Does not implicitly {@link BountyWorkData.verify|verify} messages.
+     * @function encode
+     * @memberof BountyWorkData
+     * @static
+     * @param {IBountyWorkData} message BountyWorkData message or plain object to encode
+     * @param {$protobuf.Writer} [writer] Writer to encode to
+     * @returns {$protobuf.Writer} Writer
+     */
+    BountyWorkData.encode = function encode(message, writer) {
+        if (!writer)
+            writer = $Writer.create();
+        if (message.title != null && Object.hasOwnProperty.call(message, "title"))
+            writer.uint32(/* id 1, wireType 2 =*/10).string(message.title);
+        if (message.description != null && Object.hasOwnProperty.call(message, "description"))
+            writer.uint32(/* id 2, wireType 2 =*/18).string(message.description);
+        return writer;
+    };
+
+    /**
+     * Encodes the specified BountyWorkData message, length delimited. Does not implicitly {@link BountyWorkData.verify|verify} messages.
+     * @function encodeDelimited
+     * @memberof BountyWorkData
+     * @static
+     * @param {IBountyWorkData} message BountyWorkData message or plain object to encode
+     * @param {$protobuf.Writer} [writer] Writer to encode to
+     * @returns {$protobuf.Writer} Writer
+     */
+    BountyWorkData.encodeDelimited = function encodeDelimited(message, writer) {
+        return this.encode(message, writer).ldelim();
+    };
+
+    /**
+     * Decodes a BountyWorkData message from the specified reader or buffer.
+     * @function decode
+     * @memberof BountyWorkData
+     * @static
+     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+     * @param {number} [length] Message length if known beforehand
+     * @returns {BountyWorkData} BountyWorkData
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    BountyWorkData.decode = function decode(reader, length) {
+        if (!(reader instanceof $Reader))
+            reader = $Reader.create(reader);
+        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.BountyWorkData();
+        while (reader.pos < end) {
+            var tag = reader.uint32();
+            switch (tag >>> 3) {
+            case 1:
+                message.title = reader.string();
+                break;
+            case 2:
+                message.description = reader.string();
+                break;
+            default:
+                reader.skipType(tag & 7);
+                break;
+            }
+        }
+        return message;
+    };
+
+    /**
+     * Decodes a BountyWorkData message from the specified reader or buffer, length delimited.
+     * @function decodeDelimited
+     * @memberof BountyWorkData
+     * @static
+     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+     * @returns {BountyWorkData} BountyWorkData
+     * @throws {Error} If the payload is not a reader or valid buffer
+     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+     */
+    BountyWorkData.decodeDelimited = function decodeDelimited(reader) {
+        if (!(reader instanceof $Reader))
+            reader = new $Reader(reader);
+        return this.decode(reader, reader.uint32());
+    };
+
+    /**
+     * Verifies a BountyWorkData message.
+     * @function verify
+     * @memberof BountyWorkData
+     * @static
+     * @param {Object.<string,*>} message Plain object to verify
+     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+     */
+    BountyWorkData.verify = function verify(message) {
+        if (typeof message !== "object" || message === null)
+            return "object expected";
+        if (message.title != null && message.hasOwnProperty("title"))
+            if (!$util.isString(message.title))
+                return "title: string expected";
+        if (message.description != null && message.hasOwnProperty("description"))
+            if (!$util.isString(message.description))
+                return "description: string expected";
+        return null;
+    };
+
+    /**
+     * Creates a BountyWorkData message from a plain object. Also converts values to their respective internal types.
+     * @function fromObject
+     * @memberof BountyWorkData
+     * @static
+     * @param {Object.<string,*>} object Plain object
+     * @returns {BountyWorkData} BountyWorkData
+     */
+    BountyWorkData.fromObject = function fromObject(object) {
+        if (object instanceof $root.BountyWorkData)
+            return object;
+        var message = new $root.BountyWorkData();
+        if (object.title != null)
+            message.title = String(object.title);
+        if (object.description != null)
+            message.description = String(object.description);
+        return message;
+    };
+
+    /**
+     * Creates a plain object from a BountyWorkData message. Also converts values to other types if specified.
+     * @function toObject
+     * @memberof BountyWorkData
+     * @static
+     * @param {BountyWorkData} message BountyWorkData
+     * @param {$protobuf.IConversionOptions} [options] Conversion options
+     * @returns {Object.<string,*>} Plain object
+     */
+    BountyWorkData.toObject = function toObject(message, options) {
+        if (!options)
+            options = {};
+        var object = {};
+        if (options.defaults) {
+            object.title = "";
+            object.description = "";
+        }
+        if (message.title != null && message.hasOwnProperty("title"))
+            object.title = message.title;
+        if (message.description != null && message.hasOwnProperty("description"))
+            object.description = message.description;
+        return object;
+    };
+
+    /**
+     * Converts this BountyWorkData to JSON.
+     * @function toJSON
+     * @memberof BountyWorkData
+     * @instance
+     * @returns {Object.<string,*>} JSON object
+     */
+    BountyWorkData.prototype.toJSON = function toJSON() {
+        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+    };
+
+    return BountyWorkData;
+})();
+
 $root.ChannelMetadata = (function() {
 
     /**
@@ -1418,7 +1882,8 @@ $root.MembershipMetadata = (function() {
      * @exports IMembershipMetadata
      * @interface IMembershipMetadata
      * @property {string|null} [name] MembershipMetadata name
-     * @property {number|null} [avatar] MembershipMetadata avatar
+     * @property {number|null} [avatarObject] MembershipMetadata avatarObject
+     * @property {string|null} [avatarUri] MembershipMetadata avatarUri
      * @property {string|null} [about] MembershipMetadata about
      */
 
@@ -1446,12 +1911,20 @@ $root.MembershipMetadata = (function() {
     MembershipMetadata.prototype.name = "";
 
     /**
-     * MembershipMetadata avatar.
-     * @member {number} avatar
+     * MembershipMetadata avatarObject.
+     * @member {number|null|undefined} avatarObject
+     * @memberof MembershipMetadata
+     * @instance
+     */
+    MembershipMetadata.prototype.avatarObject = null;
+
+    /**
+     * MembershipMetadata avatarUri.
+     * @member {string|null|undefined} avatarUri
      * @memberof MembershipMetadata
      * @instance
      */
-    MembershipMetadata.prototype.avatar = 0;
+    MembershipMetadata.prototype.avatarUri = null;
 
     /**
      * MembershipMetadata about.
@@ -1461,6 +1934,20 @@ $root.MembershipMetadata = (function() {
      */
     MembershipMetadata.prototype.about = "";
 
+    // OneOf field names bound to virtual getters and setters
+    var $oneOfFields;
+
+    /**
+     * MembershipMetadata avatar.
+     * @member {"avatarObject"|"avatarUri"|undefined} avatar
+     * @memberof MembershipMetadata
+     * @instance
+     */
+    Object.defineProperty(MembershipMetadata.prototype, "avatar", {
+        get: $util.oneOfGetter($oneOfFields = ["avatarObject", "avatarUri"]),
+        set: $util.oneOfSetter($oneOfFields)
+    });
+
     /**
      * Creates a new MembershipMetadata instance using the specified properties.
      * @function create
@@ -1487,10 +1974,12 @@ $root.MembershipMetadata = (function() {
             writer = $Writer.create();
         if (message.name != null && Object.hasOwnProperty.call(message, "name"))
             writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
-        if (message.avatar != null && Object.hasOwnProperty.call(message, "avatar"))
-            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.avatar);
+        if (message.avatarObject != null && Object.hasOwnProperty.call(message, "avatarObject"))
+            writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.avatarObject);
         if (message.about != null && Object.hasOwnProperty.call(message, "about"))
             writer.uint32(/* id 3, wireType 2 =*/26).string(message.about);
+        if (message.avatarUri != null && Object.hasOwnProperty.call(message, "avatarUri"))
+            writer.uint32(/* id 4, wireType 2 =*/34).string(message.avatarUri);
         return writer;
     };
 
@@ -1529,7 +2018,10 @@ $root.MembershipMetadata = (function() {
                 message.name = reader.string();
                 break;
             case 2:
-                message.avatar = reader.uint32();
+                message.avatarObject = reader.uint32();
+                break;
+            case 4:
+                message.avatarUri = reader.string();
                 break;
             case 3:
                 message.about = reader.string();
@@ -1569,12 +2061,22 @@ $root.MembershipMetadata = (function() {
     MembershipMetadata.verify = function verify(message) {
         if (typeof message !== "object" || message === null)
             return "object expected";
+        var properties = {};
         if (message.name != null && message.hasOwnProperty("name"))
             if (!$util.isString(message.name))
                 return "name: string expected";
-        if (message.avatar != null && message.hasOwnProperty("avatar"))
-            if (!$util.isInteger(message.avatar))
-                return "avatar: integer expected";
+        if (message.avatarObject != null && message.hasOwnProperty("avatarObject")) {
+            properties.avatar = 1;
+            if (!$util.isInteger(message.avatarObject))
+                return "avatarObject: integer expected";
+        }
+        if (message.avatarUri != null && message.hasOwnProperty("avatarUri")) {
+            if (properties.avatar === 1)
+                return "avatar: multiple values";
+            properties.avatar = 1;
+            if (!$util.isString(message.avatarUri))
+                return "avatarUri: string expected";
+        }
         if (message.about != null && message.hasOwnProperty("about"))
             if (!$util.isString(message.about))
                 return "about: string expected";
@@ -1595,8 +2097,10 @@ $root.MembershipMetadata = (function() {
         var message = new $root.MembershipMetadata();
         if (object.name != null)
             message.name = String(object.name);
-        if (object.avatar != null)
-            message.avatar = object.avatar >>> 0;
+        if (object.avatarObject != null)
+            message.avatarObject = object.avatarObject >>> 0;
+        if (object.avatarUri != null)
+            message.avatarUri = String(object.avatarUri);
         if (object.about != null)
             message.about = String(object.about);
         return message;
@@ -1617,15 +2121,22 @@ $root.MembershipMetadata = (function() {
         var object = {};
         if (options.defaults) {
             object.name = "";
-            object.avatar = 0;
             object.about = "";
         }
         if (message.name != null && message.hasOwnProperty("name"))
             object.name = message.name;
-        if (message.avatar != null && message.hasOwnProperty("avatar"))
-            object.avatar = message.avatar;
+        if (message.avatarObject != null && message.hasOwnProperty("avatarObject")) {
+            object.avatarObject = message.avatarObject;
+            if (options.oneofs)
+                object.avatar = "avatarObject";
+        }
         if (message.about != null && message.hasOwnProperty("about"))
             object.about = message.about;
+        if (message.avatarUri != null && message.hasOwnProperty("avatarUri")) {
+            object.avatarUri = message.avatarUri;
+            if (options.oneofs)
+                object.avatar = "avatarUri";
+        }
         return object;
     };
 

+ 13 - 0
metadata-protobuf/proto/Bounty.proto

@@ -0,0 +1,13 @@
+syntax = "proto2";
+
+message BountyMetadata {
+  optional string title = 1; // Bounty title
+  optional string description = 2; // Bounty description
+  optional uint64 discussionThread = 3; // Id of the forum thread used to discuss the bounty
+  optional string banner_image_uri = 4; // Image uri of the bounty's banner
+}
+
+message BountyWorkData {
+  optional string title = 1; // Title of the work
+  optional string description = 2; // Description which contains the work itself as a URL, a BLOB, or just text
+}

+ 4 - 1
metadata-protobuf/proto/Membership.proto

@@ -2,6 +2,9 @@ syntax = "proto2";
 
 message MembershipMetadata {
   optional string name = 1; // Member's real name
-  optional uint32 avatar = 2; // Member's avatar - index into external [assets array](#.Assets)
+  oneof avatar {
+    uint32 avatar_object = 2; // Member's avatar - index into external [assets array](#.Assets)
+    string avatar_uri = 4; // Url to member's avatar
+  }
   optional string about = 3; // Member's md-formatted about text
 }

+ 66 - 31
query-node/mappings/src/council.ts

@@ -1,4 +1,4 @@
-import { EventContext, StoreContext, DatabaseManager } from '@joystream/hydra-common'
+import { EventContext, StoreContext, DatabaseManager, SubstrateEvent } from '@joystream/hydra-common'
 import { CURRENT_NETWORK, deserializeMetadata, genericEventFields } from './common'
 import BN from 'bn.js'
 import { FindConditions, SelectQueryBuilder } from 'typeorm'
@@ -48,6 +48,7 @@ import {
   ElectedCouncil,
   CastVote,
   CandidacyNoteMetadata,
+  CandidacyStatus,
 
   // Misc
   Membership,
@@ -170,7 +171,7 @@ async function getAccountCastVote(
 
   if (!castVote) {
     throw new Error(
-      `No vote cast by the given account in the curent election round. accountId '${account}', cycleId '${electionRound?.cycleId}'`
+      `No vote cast by the given account in the current election round. accountId '${account}', cycleId '${electionRound?.cycleId}'`
     )
   }
 
@@ -221,12 +222,16 @@ async function updateCouncilStage(
 async function startNextElectionRound(
   store: DatabaseManager,
   electedCouncil: ElectedCouncil,
-  blockNumber: number,
+  event: SubstrateEvent,
   electionProblem?: ElectionProblem
 ): Promise<ElectionRound> {
   // finish last election round
   const lastElectionRound = await getCurrentElectionRound(store)
   lastElectionRound.isFinished = true
+  lastElectionRound.endedAtBlock = event.blockNumber
+  lastElectionRound.endedAtTime = new Date(event.blockTimestamp)
+  lastElectionRound.endedAtNetwork = CURRENT_NETWORK
+
   lastElectionRound.nextElectedCouncil = electedCouncil
 
   // save last election
@@ -248,7 +253,7 @@ async function startNextElectionRound(
 
   const stage = new CouncilStageAnnouncing()
   stage.candidatesCount = new BN(0)
-  await updateCouncilStage(store, stage, blockNumber, electionProblem)
+  await updateCouncilStage(store, stage, event.blockNumber, electionProblem)
 
   return electionRound
 }
@@ -257,14 +262,11 @@ async function startNextElectionRound(
   Converts successful council candidate records to council member records.
 */
 async function convertCandidatesToCouncilMembers(
-  store: DatabaseManager,
-  candidates: Candidate[],
+  candidates: Array<Candidate & { memberId: string }>,
   blockNumber: number
 ): Promise<CouncilMember[]> {
-  const councilMembers = await candidates.reduce(async (councilMembersPromise, candidate) => {
-    const councilMembers = await councilMembersPromise
-
-    const member = new Membership({ id: candidate.member.id.toString() })
+  return candidates.map((candidate) => {
+    const member = new Membership({ id: candidate.memberId })
 
     const councilMember = new CouncilMember({
       // id: candidate.id // TODO: are ids needed?
@@ -279,10 +281,27 @@ async function convertCandidatesToCouncilMembers(
       accumulatedReward: new BN(0),
     })
 
-    return [...councilMembers, councilMember]
-  }, Promise.resolve([] as CouncilMember[]))
+    return councilMember
+  })
+}
 
-  return councilMembers
+/**
+  Mark the candidacies as aborted when there is not enough candidates or elected councilor
+ */
+async function abortCandidacies(store: DatabaseManager) {
+  const electionRound = await getCurrentElectionRound(store)
+  const candidates = await store.getMany(Candidate, {
+    where: { electionRoundId: electionRound.id, status: CandidacyStatus.ACTIVE },
+  })
+
+  await Promise.all(
+    candidates.map((candidate) => {
+      if (candidate.status === CandidacyStatus.ACTIVE) {
+        candidate.status = CandidacyStatus.FAILED
+      }
+      return store.save<Candidate>(candidate)
+    })
+  )
 }
 
 /// /////////////// Council events /////////////////////////////////////////////
@@ -306,11 +325,11 @@ export async function council_AnnouncingPeriodStarted({ event, store }: EventCon
 
   // restart elections
   const electedCouncil = await getCurrentElectedCouncil(store)
-  await startNextElectionRound(store, electedCouncil, event.blockNumber)
+  await startNextElectionRound(store, electedCouncil, event)
 }
 
 /*
-  The event is emitted when a candidacy announcment period has ended, but not enough members announced.
+  The event is emitted when a candidacy announcement period has ended, but not enough members announced.
 */
 export async function council_NotEnoughCandidates({ event, store }: EventContext & StoreContext): Promise<void> {
   // common event processing
@@ -323,11 +342,13 @@ export async function council_NotEnoughCandidates({ event, store }: EventContext
 
   await store.save<NotEnoughCandidatesEvent>(notEnoughCandidatesEvent)
 
+  await abortCandidacies(store)
+
   // specific event processing
 
   // restart elections
   const electedCouncil = await getCurrentElectedCouncil(store)
-  await startNextElectionRound(store, electedCouncil, event.blockNumber, ElectionProblem.NOT_ENOUGH_CANDIDATES)
+  await startNextElectionRound(store, electedCouncil, event, ElectionProblem.NOT_ENOUGH_CANDIDATES)
 }
 
 /*
@@ -376,7 +397,7 @@ export async function council_NewCandidate({ event, store }: EventContext & Stor
 
   const electionRound = await getCurrentElectionRound(store)
 
-  // prepare note metadata record (empty until explicitily set via different extrinsic)
+  // prepare note metadata record (empty until explicitly set via different extrinsic)
   const noteMetadata = new CandidacyNoteMetadata({
     bulletPoints: [],
   })
@@ -387,14 +408,13 @@ export async function council_NewCandidate({ event, store }: EventContext & Stor
     stakingAccountId: stakingAccount.toString(),
     rewardAccountId: rewardAccount.toString(),
     member,
-
+    status: CandidacyStatus.ACTIVE,
     electionRound,
     stake: balance,
     stakeLocked: true,
-    candidacyWithdrawn: false,
     votePower: new BN(0),
     noteMetadata,
-    votesRecieved: [],
+    votesReceived: [],
   })
   await store.save<Candidate>(candidate)
 
@@ -422,7 +442,7 @@ export async function council_NewCouncilElected({ event, store }: EventContext &
 
   // specific event processing
 
-  // mark old council as resinged
+  // mark old council as resigned
   const oldElectedCouncil = await getCurrentElectedCouncil(store)
   oldElectedCouncil.isResigned = true
   oldElectedCouncil.endedAtBlock = event.blockNumber
@@ -432,16 +452,29 @@ export async function council_NewCouncilElected({ event, store }: EventContext &
 
   // get election round and its candidates
   const electionRound = await getCurrentElectionRound(store)
+  const candidates = (await store.getMany(Candidate, {
+    where: { electionRoundId: electionRound.id, status: CandidacyStatus.ACTIVE },
+  })) as Array<Candidate & { memberId: string }>
 
-  // TODO: uncomment when following query will be working (after some QN patches make it to Olympia)
-  // const electedCandidates = await store.getMany(Candidate, { where: { electionRoundId: electionRound.id, member: { id_in: electedMemberIds } } })
-  const electedCandidates = (
-    await store.getMany(Candidate, { where: { electionRoundId: electionRound.id }, relations: ['member'] })
-  ).filter((item: Candidate) => electedMemberIds.find((tmpId) => tmpId === item.member.id.toString()))
+  const electedCandidates = candidates.filter((candidate) => electedMemberIds.includes(candidate.memberId))
+
+  // Set elected candidates status
+  electedCandidates.forEach((candidate) => {
+    candidate.status = CandidacyStatus.ELECTED
+  })
+  // Store candidates new statuses
+  await Promise.all(
+    candidates.map((candidate) => {
+      if (candidate.status === CandidacyStatus.ACTIVE) {
+        candidate.status = CandidacyStatus.FAILED
+      }
+      return store.save<Candidate>(candidate)
+    })
+  )
 
   // create new council record
   const electedCouncil = new ElectedCouncil({
-    councilMembers: await convertCandidatesToCouncilMembers(store, electedCandidates, event.blockNumber),
+    councilMembers: await convertCandidatesToCouncilMembers(electedCandidates, event.blockNumber),
     updates: [],
     electedAtBlock: event.blockNumber,
     electedAtTime: new Date(event.blockTimestamp),
@@ -511,11 +544,13 @@ export async function council_NewCouncilNotElected({ event, store }: EventContex
 
   await store.save<NewCouncilNotElectedEvent>(newCouncilNotElectedEvent)
 
+  await abortCandidacies(store)
+
   // specific event processing
 
   // restart elections
   const electedCouncil = await getCurrentElectedCouncil(store)
-  await startNextElectionRound(store, electedCouncil, event.blockNumber, ElectionProblem.NEW_COUNCIL_NOT_ELECTED)
+  await startNextElectionRound(store, electedCouncil, event, ElectionProblem.NEW_COUNCIL_NOT_ELECTED)
 }
 
 /*
@@ -560,7 +595,7 @@ export async function council_CandidacyWithdraw({ event, store }: EventContext &
   // specific event processing
 
   // mark candidacy as withdrawn
-  candidate.candidacyWithdrawn = true
+  candidate.status = CandidacyStatus.WITHDRAWN
   await store.save<Candidate>(candidate)
 }
 
@@ -572,7 +607,7 @@ export async function council_CandidacyNoteSet({ event, store }: EventContext &
 
   const [memberId, note] = new Council.CandidacyNoteSetEvent(event).params
 
-  // load candidate recored
+  // load candidate recorded
   const electionRound = await getCurrentElectionRound(store)
   const candidate = await getCandidate(store, memberId.toString(), electionRound, ['noteMetadata'])
 
@@ -739,7 +774,7 @@ export async function council_CouncilorRewardUpdated({ event, store }: EventCont
 }
 
 /*
-  The event is emitted when funds are transfered from the council budget to an account.
+  The event is emitted when funds are transferred from the council budget to an account.
 */
 export async function council_RequestFunded({ event, store }: EventContext & StoreContext): Promise<void> {
   // common event processing

+ 13 - 4
query-node/mappings/src/membership.ts

@@ -27,6 +27,7 @@ import {
   LeaderInvitationQuotaUpdatedEvent,
   MembershipEntryPaid,
   MembershipEntryInvited,
+  AvatarUri,
 } from 'query-node/dist/model'
 
 async function getMemberById(store: DatabaseManager, id: MemberId): Promise<Membership> {
@@ -69,16 +70,19 @@ async function createNewMemberFromParams(
   params: BuyMembershipParameters | InviteMembershipParameters
 ): Promise<Membership> {
   const { defaultInviteCount } = await getLatestMembershipSystemSnapshot(store)
-  const { root_account: rootAccount, controller_account: controllerAccount, handle, metadata: metatadaBytes } = params
-  const metadata = deserializeMetadata(MembershipMetadata, metatadaBytes)
+  const { root_account: rootAccount, controller_account: controllerAccount, handle, metadata: metadataBytes } = params
+  const metadata = deserializeMetadata(MembershipMetadata, metadataBytes)
   const eventTime = new Date(event.blockTimestamp)
 
+  const avatar = new AvatarUri()
+  avatar.avatarUri = metadata?.avatarUri ?? ''
+
   const metadataEntity = new MemberMetadata({
     createdAt: eventTime,
     updatedAt: eventTime,
     name: metadata?.name || undefined,
     about: metadata?.about || undefined,
-    // TODO: avatar
+    avatar,
   })
 
   const member = new Membership({
@@ -158,7 +162,12 @@ export async function members_MemberProfileUpdated({ store, event }: EventContex
     member.metadata.about = (metadata.about || null) as string | undefined
     member.metadata.updatedAt = eventTime
   }
-  // TODO: avatar
+
+  if (typeof metadata?.avatarUri === 'string') {
+    member.metadata.avatar = new AvatarUri()
+    member.metadata.avatar.avatarUri = metadata.avatarUri
+  }
+
   if (newHandle.isSome) {
     member.handle = bytesToString(newHandle.unwrap())
     member.updatedAt = eventTime

+ 21 - 5
query-node/schemas/council.graphql

@@ -46,6 +46,13 @@ enum ElectionProblem {
   NEW_COUNCIL_NOT_ELECTED
 }
 
+enum CandidacyStatus {
+  ACTIVE
+  WITHDRAWN
+  ELECTED
+  FAILED
+}
+
 type Candidate @entity {
   "Account used for staking currency needed for the candidacy."
   stakingAccountId: String!
@@ -65,8 +72,8 @@ type Candidate @entity {
   "Reflects if the stake is still locked for candidacy or has been already released by the member."
   stakeLocked: Boolean!
 
-  "Reflects if the candidacy was withdrawn before voting started."
-  candidacyWithdrawn: Boolean!
+  "Current candidate status"
+  status: CandidacyStatus!
 
   "Sum of power of all votes received."
   votePower: BigInt!
@@ -80,8 +87,8 @@ type Candidate @entity {
   "The metadata contained in note."
   noteMetadata: CandidacyNoteMetadata!
 
-  "Votes recieved in referendums by this member."
-  votesRecieved: [CastVote!]! @derivedFrom(field: "voteFor")
+  "Votes received in referendums by this member."
+  votesReceived: [CastVote!]! @derivedFrom(field: "voteFor")
 }
 
 type CouncilMember @entity {
@@ -100,7 +107,7 @@ type CouncilMember @entity {
   "Stake used for the council membership."
   stake: BigInt!
 
-  "Block number in which council member recieved the last reward payment."
+  "Block number in which council member received the last reward payment."
   lastPaymentBlock: BigInt!
 
   "Reward amount that should have been paid but couldn't be paid off due to insufficient budget."
@@ -222,6 +229,15 @@ type ElectionRound @entity {
   "Sign if election has already finished."
   isFinished: Boolean!
 
+  "Block number at which the election ended."
+  endedAtBlock: Int
+
+  "Time at which the election ended."
+  endedAtTime: DateTime
+
+  "Network running at the time the election ended."
+  endedAtNetwork: Network
+
   "Vote cast in the election round."
   castVotes: [CastVote!]! @derivedFrom(field: "electionRound")
 

+ 16 - 16
query-node/schemas/forumEvents.graphql

@@ -1,4 +1,4 @@
-type CategoryCreatedEvent @entity {
+type CategoryCreatedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -24,7 +24,7 @@ type CategoryCreatedEvent @entity {
   # The actor is always lead
 }
 
-type CategoryArchivalStatusUpdatedEvent @entity {
+type CategoryArchivalStatusUpdatedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -54,7 +54,7 @@ type CategoryArchivalStatusUpdatedEvent @entity {
   actor: Worker!
 }
 
-type CategoryDeletedEvent @entity {
+type CategoryDeletedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -81,7 +81,7 @@ type CategoryDeletedEvent @entity {
   actor: Worker!
 }
 
-type ThreadCreatedEvent @entity {
+type ThreadCreatedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -113,7 +113,7 @@ type ThreadCreatedEvent @entity {
   # The author is already part of the Thread entity itself and is immutable
 }
 
-type ThreadModeratedEvent @entity {
+type ThreadModeratedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -143,7 +143,7 @@ type ThreadModeratedEvent @entity {
   actor: Worker!
 }
 
-type ThreadMetadataUpdatedEvent @entity {
+type ThreadMetadataUpdatedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -172,7 +172,7 @@ type ThreadMetadataUpdatedEvent @entity {
   # Only author can update the thread title, so no actor information required
 }
 
-type ThreadDeletedEvent @entity {
+type ThreadDeletedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -198,7 +198,7 @@ type ThreadDeletedEvent @entity {
   # Only author can delete the thread, so no actor information required
 }
 
-type ThreadMovedEvent @entity {
+type ThreadMovedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -231,7 +231,7 @@ type ThreadMovedEvent @entity {
   actor: Worker!
 }
 
-type PostAddedEvent @entity {
+type PostAddedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -261,7 +261,7 @@ type PostAddedEvent @entity {
   text: String!
 }
 
-type PostModeratedEvent @entity {
+type PostModeratedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -291,7 +291,7 @@ type PostModeratedEvent @entity {
   actor: Worker!
 }
 
-type PostDeletedEvent @entity {
+type PostDeletedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -321,7 +321,7 @@ type PostDeletedEvent @entity {
   rationale: String!
 }
 
-type PostTextUpdatedEvent @entity {
+type PostTextUpdatedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -365,7 +365,7 @@ type PostReactionResultInvalid @variant {
 
 union PostReactionResult = PostReactionResultCancel | PostReactionResultValid | PostReactionResultInvalid
 
-type PostReactedEvent @entity {
+type PostReactedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -395,7 +395,7 @@ type PostReactedEvent @entity {
   reactingMember: Membership!
 }
 
-type VoteOnPollEvent @entity {
+type VoteOnPollEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -422,7 +422,7 @@ type VoteOnPollEvent @entity {
   votingMember: Membership!
 }
 
-type CategoryStickyThreadUpdateEvent @entity {
+type CategoryStickyThreadUpdateEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"
@@ -452,7 +452,7 @@ type CategoryStickyThreadUpdateEvent @entity {
   actor: Worker!
 }
 
-type CategoryMembershipOfModeratorUpdatedEvent @entity {
+type CategoryMembershipOfModeratorUpdatedEvent implements Event @entity {
   ### GENERIC DATA ###
 
   "(network}-{blockNumber}-{indexInBlock}"

+ 13 - 1
query-node/schemas/membership.graphql

@@ -1,9 +1,21 @@
+type AvatarObject @variant {
+  "The avatar data object"
+  avatarObject: DataObject!
+}
+
+type AvatarUri @variant {
+  "The avatar URL"
+  avatarUri: String!
+}
+
+union Avatar = AvatarObject | AvatarUri
+
 type MemberMetadata @entity {
   "Member's name"
   name: String
 
   "Avatar data object"
-  avatar: DataObject
+  avatar: Avatar
 
   "Short text chosen by member to share information about themselves"
   about: String

+ 1 - 3
runtime-modules/forum/src/benchmarking.rs

@@ -961,7 +961,6 @@ benchmarks! {
         // Ensure new thread created successfully
         let new_thread = Thread {
             category_id,
-            metadata_hash: T::calculate_hash(&metadata),
             author_id: forum_user_id.saturated_into(),
             poll: poll_input.clone().map(<Module<T>>::from_poll_input),
             cleanup_pay_off: T::ThreadDeposit::get(),
@@ -1010,13 +1009,12 @@ benchmarks! {
             caller_id.clone(), forum_user_id.saturated_into(), category_id,
             vec![1u8].repeat(MAX_BYTES as usize), vec![1u8].repeat(MAX_BYTES as usize), None
         );
-        let mut thread = Module::<T>::thread_by_id(category_id, thread_id);
+        let thread = Module::<T>::thread_by_id(category_id, thread_id);
 
         let new_metadata = vec![0u8].repeat(j as usize);
 
     }: _ (RawOrigin::Signed(caller_id), forum_user_id.saturated_into(), category_id, thread_id, new_metadata.clone())
     verify {
-        thread.metadata_hash = T::calculate_hash(&new_metadata);
         assert_eq!(Module::<T>::thread_by_id(category_id, thread_id), thread);
 
         assert_last_event::<T>(

+ 4 - 12
runtime-modules/forum/src/lib.rs

@@ -266,9 +266,6 @@ pub struct Post<ForumUserId, ThreadId, Hash, Balance, BlockNumber> {
 #[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
 #[derive(Encode, Decode, Default, Clone, PartialEq, Debug, Eq)]
 pub struct Thread<ForumUserId, CategoryId, Moment, Hash, Balance> {
-    /// Metadata hash
-    pub metadata_hash: Hash,
-
     /// Category in which this thread lives
     pub category_id: CategoryId,
 
@@ -951,7 +948,6 @@ decl_module! {
             // Build a new thread
             let new_thread = Thread {
                 category_id,
-                metadata_hash: T::calculate_hash(&metadata),
                 author_id: forum_user_id,
                 poll,
                 cleanup_pay_off: T::ThreadDeposit::get(),
@@ -994,14 +990,14 @@ decl_module! {
             Ok(())
         }
 
-        /// Edit thread title
+        /// Edit thread metadata
         ///
         /// <weight>
         ///
         /// ## Weight
         /// `O (W + V)` where:
         /// - `W` is the category depth
-        /// - `V` is the length of the thread title.
+        /// - `V` is the length of the thread metadata.
         /// - DB:
         ///    - O(W)
         /// # </weight>
@@ -1021,16 +1017,12 @@ decl_module! {
 
             let account_id = ensure_signed(origin)?;
 
-            let thread = Self::ensure_can_edit_thread_title(account_id, &category_id, &thread_id, &forum_user_id)?;
+            Self::ensure_can_edit_thread_metadata(account_id, &category_id, &thread_id, &forum_user_id)?;
 
             //
             // == MUTATION SAFE ==
             //
 
-            // Update thread metadata
-            let metadata_hash = T::calculate_hash(&new_metadata);
-            <ThreadById<T>>::mutate(thread.category_id, thread_id, |thread| thread.metadata_hash = metadata_hash);
-
             // Store the event
             Self::deposit_event(
                 RawEvent::ThreadMetadataUpdated(
@@ -1830,7 +1822,7 @@ impl<T: Trait> Module<T> {
         Ok(<ThreadById<T>>::get(category_id, thread_id))
     }
 
-    fn ensure_can_edit_thread_title(
+    fn ensure_can_edit_thread_metadata(
         account_id: T::AccountId,
         category_id: &T::CategoryId,
         thread_id: &T::ThreadId,

+ 4 - 6
runtime-modules/forum/src/mock.rs

@@ -575,8 +575,8 @@ pub fn good_category_description_new() -> Vec<u8> {
     b"This is a great new category description for the forum".to_vec()
 }
 
-/// Get a new good thread title
-pub fn good_thread_title() -> Vec<u8> {
+/// Get a new good thread metadata
+pub fn good_thread_metadata() -> Vec<u8> {
     b"Great new thread".to_vec()
 }
 
@@ -585,6 +585,7 @@ pub fn good_thread_text() -> Vec<u8> {
     b"The first post in this thread".to_vec()
 }
 
+/// Get a new metadata for the good thread
 pub fn good_thread_new_metadata() -> Vec<u8> {
     b"Brand new thread metadata".to_vec()
 }
@@ -728,6 +729,7 @@ pub fn create_thread_mock(
     thread_id
 }
 
+/// Create edit thread metadata mock
 pub fn edit_thread_metadata_mock(
     origin: OriginType,
     forum_user_id: ForumUserId<Runtime>,
@@ -747,10 +749,6 @@ pub fn edit_thread_metadata_mock(
         result
     );
     if result.is_ok() {
-        assert_eq!(
-            TestForumModule::thread_by_id(category_id, thread_id).metadata_hash,
-            Runtime::calculate_hash(new_metadata.as_slice()),
-        );
         assert_eq!(
             System::events().last().unwrap().event,
             TestEvent::forum_mod(RawEvent::ThreadMetadataUpdated(

+ 30 - 30
runtime-modules/forum/src/tests.rs

@@ -343,7 +343,7 @@ fn update_category_archival_status_lock_works() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -374,7 +374,7 @@ fn update_category_archival_status_lock_works() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Err(Error::<Runtime>::AncestorCategoryImmutable.into()),
@@ -738,7 +738,7 @@ fn delete_category_non_empty_threads() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -886,7 +886,7 @@ fn create_thread_origin() {
                 forum_user_ids[index],
                 forum_user_ids[index],
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 None,
                 results[index],
@@ -919,7 +919,7 @@ fn create_thread_balance() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -930,7 +930,7 @@ fn create_thread_balance() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -979,7 +979,7 @@ fn create_thread_poll_timestamp() {
                 forum_lead,
                 forum_lead,
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 Some(poll),
                 results[index],
@@ -1021,7 +1021,7 @@ fn edit_thread_metadata() {
             forum_users[0],
             forum_users[0],
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1086,7 +1086,7 @@ fn delete_thread() {
             NOT_FORUM_LEAD_ORIGIN_ID,
             NOT_FORUM_LEAD_ORIGIN_ID,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             Some(generate_poll_input(10)),
             Ok(()),
@@ -1256,7 +1256,7 @@ fn move_thread_moderator_permissions() {
             forum_lead,
             forum_lead,
             category_id_1,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1375,7 +1375,7 @@ fn move_thread_invalid_move() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1432,7 +1432,7 @@ fn vote_on_poll_origin() {
                 forum_lead,
                 forum_lead,
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 Some(generate_poll_input(expiration_diff)),
                 Ok(()),
@@ -1471,7 +1471,7 @@ fn vote_on_poll_fails_on_double_voting() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             Some(generate_poll_input(expiration_diff)),
             Ok(()),
@@ -1518,7 +1518,7 @@ fn vote_on_poll_exists() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1556,7 +1556,7 @@ fn vote_on_poll_expired() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             Some(generate_poll_input(expiration_diff)),
             Ok(()),
@@ -1606,7 +1606,7 @@ fn moderate_thread_origin_ok() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1658,7 +1658,7 @@ fn add_post_origin() {
                 forum_lead,
                 forum_lead,
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 None,
                 Ok(()),
@@ -1706,7 +1706,7 @@ fn add_post_balance() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1782,7 +1782,7 @@ fn edit_post_text() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1851,7 +1851,7 @@ fn edit_non_editable_post_text() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -1910,7 +1910,7 @@ fn react_post() {
                 forum_lead,
                 forum_lead,
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 None,
                 Ok(()),
@@ -1978,7 +1978,7 @@ fn moderate_post_origin() {
                 forum_lead,
                 forum_lead,
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 None,
                 Ok(()),
@@ -2043,7 +2043,7 @@ fn delete_post_creator() {
             NOT_FORUM_LEAD_ORIGIN_ID,
             NOT_FORUM_LEAD_ORIGIN_ID,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2197,7 +2197,7 @@ fn delete_post_not_creator() {
             NOT_FORUM_LEAD_ORIGIN_ID,
             NOT_FORUM_LEAD_ORIGIN_ID,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2335,7 +2335,7 @@ fn set_stickied_threads_ok() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2353,7 +2353,7 @@ fn set_stickied_threads_ok() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2406,7 +2406,7 @@ fn set_stickied_threads_fails_with_duplicated_ids() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2443,7 +2443,7 @@ fn set_stickied_threads_wrong_moderator() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2486,7 +2486,7 @@ fn set_stickied_threads_thread_not_exists() {
             forum_lead,
             forum_lead,
             category_id,
-            good_thread_title(),
+            good_thread_metadata(),
             good_thread_text(),
             None,
             Ok(()),
@@ -2529,7 +2529,7 @@ fn test_migration_not_done() {
                 mock_origin(origin.clone()),
                 forum_user_id,
                 category_id,
-                good_thread_title(),
+                good_thread_metadata(),
                 good_thread_text(),
                 None,
             ),

+ 1 - 1
tests/integration-tests/src/Api.ts

@@ -536,7 +536,7 @@ export class Api {
   public async untilCouncilStage(
     targetStage: 'Announcing' | 'Voting' | 'Revealing' | 'Idle',
     announcementPeriodNr: number | null = null,
-    blocksReserve = 3,
+    blocksReserve = 4,
     intervalMs = BLOCKTIME
   ): Promise<void> {
     await Utils.until(

File diff suppressed because it is too large
+ 529 - 366
tests/integration-tests/src/graphql/generated/schema.ts


+ 4 - 4
types/augment-codec/augment-api-consts.ts

@@ -41,14 +41,14 @@ declare module '@polkadot/api/types/consts' {
        * Exports const - max work entry number for a closed assurance type contract bounty.
        **/
       closedContractSizeLimit: u32 & AugmentedConst<ApiType>;
-      /**
-       * Exports const - min cherry value limit for a bounty.
-       **/
-      minCherryLimit: BalanceOf & AugmentedConst<ApiType>;
       /**
        * Exports const - min funding amount limit for a bounty.
        **/
       minFundingLimit: BalanceOf & AugmentedConst<ApiType>;
+      /**
+       * Exports const - min cherry value limit for a bounty.
+       **/
+      minCherryLimit: BalanceOf & AugmentedConst<ApiType>;
       /**
        * Exports const - min work entrant stake for a bounty.
        **/

+ 12 - 12
types/augment-codec/augment-api-errors.ts

@@ -122,10 +122,6 @@ declare module '@polkadot/api/types/errors' {
        * assurance' bounty contract.
        **/
       CannotSubmitWorkToClosedContractBounty: AugmentedError<ApiType>;
-      /**
-       * Cherry less then minimum allowed.
-       **/
-      CherryLessThenMinimumAllowed: AugmentedError<ApiType>;
       /**
        * Cannot create a 'closed assurance contract' bounty with empty member list.
        **/
@@ -159,6 +155,10 @@ declare module '@polkadot/api/types/errors' {
        * Funding period is not expired for the bounty.
        **/
       FundingPeriodNotExpired: AugmentedError<ApiType>;
+      /**
+       * Cherry less then minimum allowed.
+       **/
+      CherryLessThenMinimumAllowed: AugmentedError<ApiType>;
       /**
        * Insufficient balance for a bounty cherry.
        **/
@@ -270,10 +270,6 @@ declare module '@polkadot/api/types/errors' {
        * A Channel or Video Category does not exist.
        **/
       CategoryDoesNotExist: AugmentedError<ApiType>;
-      /**
-       * Channel does not exist
-       **/
-      ChannelDoesNotExist: AugmentedError<ApiType>;
       /**
        * Curator authentication failed
        **/
@@ -306,6 +302,10 @@ declare module '@polkadot/api/types/errors' {
        * Feature Not Implemented
        **/
       FeatureNotImplemented: AugmentedError<ApiType>;
+      /**
+       * Channel does not exist
+       **/
+      ChannelDoesNotExist: AugmentedError<ApiType>;
       /**
        * Lead authentication failed
        **/
@@ -968,14 +968,14 @@ declare module '@polkadot/api/types/errors' {
       WorkerStorageValueTooLong: AugmentedError<ApiType>;
     };
     grandpa: {
-      /**
-       * Attempt to signal GRANDPA change with one already pending.
-       **/
-      ChangePending: AugmentedError<ApiType>;
       /**
        * A given equivocation report is valid but already previously reported.
        **/
       DuplicateOffenceReport: AugmentedError<ApiType>;
+      /**
+       * Attempt to signal GRANDPA change with one already pending.
+       **/
+      ChangePending: AugmentedError<ApiType>;
       /**
        * An equivocation proof provided as part of an equivocation report is invalid.
        **/

+ 6 - 6
types/augment-codec/augment-api-events.ts

@@ -202,6 +202,11 @@ declare module '@polkadot/api/types/events' {
       ConstutionAmended: AugmentedEvent<ApiType, [Bytes, Bytes]>;
     };
     content: {
+      CuratorAdded: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
+      CuratorGroupCreated: AugmentedEvent<ApiType, [CuratorGroupId]>;
+      CuratorGroupStatusSet: AugmentedEvent<ApiType, [CuratorGroupId, bool]>;
+      CuratorRemoved: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
+      FeaturedVideosSet: AugmentedEvent<ApiType, [ContentActor, Vec<VideoId>]>;
       ChannelAssetsRemoved: AugmentedEvent<ApiType, [ContentActor, ChannelId, Vec<ContentId>]>;
       ChannelCategoryCreated: AugmentedEvent<ApiType, [ChannelCategoryId, ChannelCategory, ChannelCategoryCreationParameters]>;
       ChannelCategoryDeleted: AugmentedEvent<ApiType, [ContentActor, ChannelCategoryId]>;
@@ -212,11 +217,6 @@ declare module '@polkadot/api/types/events' {
       ChannelOwnershipTransferRequested: AugmentedEvent<ApiType, [ContentActor, ChannelOwnershipTransferRequestId, ChannelOwnershipTransferRequest]>;
       ChannelOwnershipTransferRequestWithdrawn: AugmentedEvent<ApiType, [ContentActor, ChannelOwnershipTransferRequestId]>;
       ChannelUpdated: AugmentedEvent<ApiType, [ContentActor, ChannelId, Channel, ChannelUpdateParameters]>;
-      CuratorAdded: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
-      CuratorGroupCreated: AugmentedEvent<ApiType, [CuratorGroupId]>;
-      CuratorGroupStatusSet: AugmentedEvent<ApiType, [CuratorGroupId, bool]>;
-      CuratorRemoved: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
-      FeaturedVideosSet: AugmentedEvent<ApiType, [ContentActor, Vec<VideoId>]>;
       PersonCreated: AugmentedEvent<ApiType, [ContentActor, PersonId, Vec<NewAsset>, PersonCreationParameters]>;
       PersonDeleted: AugmentedEvent<ApiType, [ContentActor, PersonId]>;
       PersonUpdated: AugmentedEvent<ApiType, [ContentActor, PersonId, Vec<NewAsset>, PersonUpdateParameters]>;
@@ -1434,7 +1434,7 @@ declare module '@polkadot/api/types/events' {
       /**
        * Emits on post creation.
        **/
-      PostCreated: AugmentedEvent<ApiType, [PostId, MemberId, ThreadId, Bytes]>;
+      PostCreated: AugmentedEvent<ApiType, [PostId, MemberId, ThreadId, Bytes, bool]>;
       /**
        * Emits on post deleted
        **/

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

@@ -168,17 +168,17 @@ declare module '@polkadot/api/types/storage' {
       constitution: AugmentedQuery<ApiType, () => Observable<ConstitutionInfo>, []>;
     };
     content: {
-      channelById: AugmentedQuery<ApiType, (arg: ChannelId | AnyNumber | Uint8Array) => Observable<Channel>, [ChannelId]>;
-      channelCategoryById: AugmentedQuery<ApiType, (arg: ChannelCategoryId | AnyNumber | Uint8Array) => Observable<ChannelCategory>, [ChannelCategoryId]>;
-      channelOwnershipTransferRequestById: AugmentedQuery<ApiType, (arg: ChannelOwnershipTransferRequestId | AnyNumber | Uint8Array) => Observable<ChannelOwnershipTransferRequest>, [ChannelOwnershipTransferRequestId]>;
       /**
        * Map, representing  CuratorGroupId -> CuratorGroup relation
        **/
       curatorGroupById: AugmentedQuery<ApiType, (arg: CuratorGroupId | AnyNumber | Uint8Array) => Observable<CuratorGroup>, [CuratorGroupId]>;
+      channelById: AugmentedQuery<ApiType, (arg: ChannelId | AnyNumber | Uint8Array) => Observable<Channel>, [ChannelId]>;
+      channelCategoryById: AugmentedQuery<ApiType, (arg: ChannelCategoryId | AnyNumber | Uint8Array) => Observable<ChannelCategory>, [ChannelCategoryId]>;
+      channelOwnershipTransferRequestById: AugmentedQuery<ApiType, (arg: ChannelOwnershipTransferRequestId | AnyNumber | Uint8Array) => Observable<ChannelOwnershipTransferRequest>, [ChannelOwnershipTransferRequestId]>;
+      nextCuratorGroupId: AugmentedQuery<ApiType, () => Observable<CuratorGroupId>, []>;
       nextChannelCategoryId: AugmentedQuery<ApiType, () => Observable<ChannelCategoryId>, []>;
       nextChannelId: AugmentedQuery<ApiType, () => Observable<ChannelId>, []>;
       nextChannelOwnershipTransferRequestId: AugmentedQuery<ApiType, () => Observable<ChannelOwnershipTransferRequestId>, []>;
-      nextCuratorGroupId: AugmentedQuery<ApiType, () => Observable<CuratorGroupId>, []>;
       nextPersonId: AugmentedQuery<ApiType, () => Observable<PersonId>, []>;
       nextPlaylistId: AugmentedQuery<ApiType, () => Observable<PlaylistId>, []>;
       nextSeriesId: AugmentedQuery<ApiType, () => Observable<SeriesId>, []>;

+ 52 - 52
types/augment-codec/augment-api-rpc.ts

@@ -70,58 +70,6 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
        **/
       subscribeJustifications: AugmentedRpc<() => Observable<BeefySignedCommitment>>;
     };
-    chain: {
-      /**
-       * Get header and body of a relay chain block
-       **/
-      getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<SignedBlock>>;
-      /**
-       * Get the block hash for a specific block
-       **/
-      getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable<BlockHash>>;
-      /**
-       * Get hash of the last finalized block in the canon chain
-       **/
-      getFinalizedHead: AugmentedRpc<() => Observable<BlockHash>>;
-      /**
-       * Retrieves the header for a specific block
-       **/
-      getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<Header>>;
-      /**
-       * Retrieves the newest header via subscription
-       **/
-      subscribeAllHeads: AugmentedRpc<() => Observable<Header>>;
-      /**
-       * Retrieves the best finalized header via subscription
-       **/
-      subscribeFinalizedHeads: AugmentedRpc<() => Observable<Header>>;
-      /**
-       * Retrieves the best header via subscription
-       **/
-      subscribeNewHeads: AugmentedRpc<() => Observable<Header>>;
-    };
-    childstate: {
-      /**
-       * Returns the keys with prefix from a child storage, leave empty to get all the keys
-       **/
-      getKeys: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
-      /**
-       * Returns the keys with prefix from a child storage with pagination support
-       **/
-      getKeysPaged: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
-      /**
-       * Returns a child storage entry at a specific block state
-       **/
-      getStorage: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<StorageData>>>;
-      /**
-       * Returns the hash of a child storage entry at a block state
-       **/
-      getStorageHash: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<Hash>>>;
-      /**
-       * Returns the size of a child storage entry at a block state
-       **/
-      getStorageSize: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<u64>>>;
-    };
     contracts: {
       /**
        * Executes a call to a contract
@@ -330,6 +278,58 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
        **/
       subscribeJustifications: AugmentedRpc<() => Observable<JustificationNotification>>;
     };
+    chain: {
+      /**
+       * Get header and body of a relay chain block
+       **/
+      getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<SignedBlock>>;
+      /**
+       * Get the block hash for a specific block
+       **/
+      getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable<BlockHash>>;
+      /**
+       * Get hash of the last finalized block in the canon chain
+       **/
+      getFinalizedHead: AugmentedRpc<() => Observable<BlockHash>>;
+      /**
+       * Retrieves the header for a specific block
+       **/
+      getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<Header>>;
+      /**
+       * Retrieves the newest header via subscription
+       **/
+      subscribeAllHeads: AugmentedRpc<() => Observable<Header>>;
+      /**
+       * Retrieves the best finalized header via subscription
+       **/
+      subscribeFinalizedHeads: AugmentedRpc<() => Observable<Header>>;
+      /**
+       * Retrieves the best header via subscription
+       **/
+      subscribeNewHeads: AugmentedRpc<() => Observable<Header>>;
+    };
+    childstate: {
+      /**
+       * Returns the keys with prefix from a child storage, leave empty to get all the keys
+       **/
+      getKeys: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+      /**
+       * Returns the keys with prefix from a child storage with pagination support
+       **/
+      getKeysPaged: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+      /**
+       * Returns a child storage entry at a specific block state
+       **/
+      getStorage: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<StorageData>>>;
+      /**
+       * Returns the hash of a child storage entry at a block state
+       **/
+      getStorageHash: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<Hash>>>;
+      /**
+       * Returns the size of a child storage entry at a block state
+       **/
+      getStorageSize: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<u64>>>;
+    };
     mmr: {
       /**
        * Generate MMR proof for given leaf index.

+ 49 - 49
types/augment-codec/augment-api-tx.ts

@@ -353,12 +353,12 @@ declare module '@polkadot/api/types/submittable' {
       addCuratorToGroup: AugmentedSubmittable<(curatorGroupId: CuratorGroupId | AnyNumber | Uint8Array, curatorId: CuratorId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [CuratorGroupId, CuratorId]>;
       addPersonToVideo: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: VideoId | AnyNumber | Uint8Array, person: PersonId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoId, PersonId]>;
       cancelChannelTransferRequest: AugmentedSubmittable<(requestId: ChannelOwnershipTransferRequestId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ChannelOwnershipTransferRequestId]>;
-      createChannel: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCreationParameters | { assets?: any; meta?: any; reward_account?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCreationParameters]>;
-      createChannelCategory: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCategoryCreationParameters | { meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCategoryCreationParameters]>;
       /**
        * Add new curator group to runtime storage
        **/
       createCuratorGroup: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+      createChannel: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCreationParameters | { assets?: any; meta?: any; reward_account?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCreationParameters]>;
+      createChannelCategory: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCategoryCreationParameters | { meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCategoryCreationParameters]>;
       createPerson: AugmentedSubmittable<(actor: PersonActor | { Member: any } | { Curator: any } | string | Uint8Array, params: PersonCreationParameters | { assets?: any; meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [PersonActor, PersonCreationParameters]>;
       createPlaylist: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, params: PlaylistCreationParameters | { meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, PlaylistCreationParameters]>;
       createSeries: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, params: SeriesParameters | { assets?: any; seasons?: any; meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, SeriesParameters]>;
@@ -370,14 +370,14 @@ declare module '@polkadot/api/types/submittable' {
       deleteSeries: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, series: SeriesId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, SeriesId]>;
       deleteVideo: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: VideoId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoId]>;
       deleteVideoCategory: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, categoryId: VideoCategoryId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoCategoryId]>;
-      /**
-       * Remove assets of a channel from storage
-       **/
-      removeChannelAssets: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, assets: Vec<ContentId> | (ContentId | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, Vec<ContentId>]>;
       /**
        * Remove curator from a given curator group
        **/
       removeCuratorFromGroup: AugmentedSubmittable<(curatorGroupId: CuratorGroupId | AnyNumber | Uint8Array, curatorId: CuratorId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [CuratorGroupId, CuratorId]>;
+      /**
+       * Remove assets of a channel from storage
+       **/
+      removeChannelAssets: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, assets: Vec<ContentId> | (ContentId | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, Vec<ContentId>]>;
       removePersonFromVideo: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: VideoId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoId]>;
       requestChannelTransfer: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, request: ChannelOwnershipTransferRequest | { channel_id?: any; new_owner?: any; payment?: any; new_reward_account?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelOwnershipTransferRequest]>;
       /**
@@ -920,14 +920,14 @@ declare module '@polkadot/api/types/submittable' {
        **/
       editPostText: AugmentedSubmittable<(forumUserId: ForumUserId | AnyNumber | Uint8Array, categoryId: CategoryId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, postId: PostId | AnyNumber | Uint8Array, newText: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ForumUserId, CategoryId, ThreadId, PostId, Bytes]>;
       /**
-       * Edit thread title
+       * Edit thread metadata
        * 
        * <weight>
        * 
        * ## Weight
        * `O (W + V)` where:
        * - `W` is the category depth
-       * - `V` is the length of the thread title.
+       * - `V` is the length of the thread metadata.
        * - DB:
        * - O(W)
        * # </weight>
@@ -2242,31 +2242,31 @@ declare module '@polkadot/api/types/submittable' {
        **/
       addPost: AugmentedSubmittable<(postAuthorId: MemberId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, text: Bytes | string | Uint8Array, editable: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, ThreadId, Bytes, bool]>;
       /**
-       * Changes thread permission mode.
+       * Remove post from storage, with the last parameter indicating whether to also hide it
+       * in the UI.
        * 
        * <weight>
        * 
        * ## Weight
-       * `O (W)` if ThreadMode is close or O(1) otherwise where:
-       * - `W` is the number of whitelisted members in `mode`
+       * `O (1)`
        * - DB:
        * - O(1) doesn't depend on the state or parameters
        * # </weight>
        **/
-      changeThreadMode: AugmentedSubmittable<(memberId: MemberId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, mode: ThreadMode | { Open: any } | { Closed: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, ThreadId, ThreadMode]>;
+      deletePost: AugmentedSubmittable<(deleterId: MemberId | AnyNumber | Uint8Array, postId: PostId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, hide: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, PostId, ThreadId, bool]>;
       /**
-       * Remove post from storage, with the last parameter indicating whether to also hide it
-       * in the UI.
+       * Changes thread permission mode.
        * 
        * <weight>
        * 
        * ## Weight
-       * `O (1)`
+       * `O (W)` if ThreadMode is close or O(1) otherwise where:
+       * - `W` is the number of whitelisted members in `mode`
        * - DB:
        * - O(1) doesn't depend on the state or parameters
        * # </weight>
        **/
-      deletePost: AugmentedSubmittable<(deleterId: MemberId | AnyNumber | Uint8Array, postId: PostId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, hide: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, PostId, ThreadId, bool]>;
+      changeThreadMode: AugmentedSubmittable<(memberId: MemberId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, mode: ThreadMode | { Open: any } | { Closed: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, ThreadId, ThreadMode]>;
       /**
        * Updates a post with author origin check. Update attempts number is limited.
        * 
@@ -2460,26 +2460,6 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       cancelDeferredSlash: AugmentedSubmittable<(era: EraIndex | AnyNumber | Uint8Array, slashIndices: Vec<u32> | (u32 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [EraIndex, Vec<u32>]>;
-      /**
-       * Declare no desire to either validate or nominate.
-       * 
-       * Effects will be felt at the beginning of the next era.
-       * 
-       * The dispatch origin for this call must be _Signed_ by the controller, not the stash.
-       * And, it can be only called when [`EraElectionStatus`] is `Closed`.
-       * 
-       * # <weight>
-       * - Independent of the arguments. Insignificant complexity.
-       * - Contains one read.
-       * - Writes are limited to the `origin` account key.
-       * --------
-       * Weight: O(1)
-       * DB Weight:
-       * - Read: EraElectionStatus, Ledger
-       * - Write: Validators, Nominators
-       * # </weight>
-       **/
-      chill: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
       /**
        * Force there to be a new era at the end of the next session. After this, it will be
        * reset to normal (non-forced) behaviour.
@@ -2529,6 +2509,26 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       forceUnstake: AugmentedSubmittable<(stash: AccountId | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId, u32]>;
+      /**
+       * Declare no desire to either validate or nominate.
+       * 
+       * Effects will be felt at the beginning of the next era.
+       * 
+       * The dispatch origin for this call must be _Signed_ by the controller, not the stash.
+       * And, it can be only called when [`EraElectionStatus`] is `Closed`.
+       * 
+       * # <weight>
+       * - Independent of the arguments. Insignificant complexity.
+       * - Contains one read.
+       * - Writes are limited to the `origin` account key.
+       * --------
+       * Weight: O(1)
+       * DB Weight:
+       * - Read: EraElectionStatus, Ledger
+       * - Write: Validators, Nominators
+       * # </weight>
+       **/
+      chill: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
       /**
        * Increments the ideal number of validators.
        * 
@@ -3184,19 +3184,6 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
-      /**
-       * Set the new changes trie configuration.
-       * 
-       * # <weight>
-       * - `O(1)`
-       * - 1 storage write or delete (codec `O(1)`).
-       * - 1 call to `deposit_log`: Uses `append` API, so O(1)
-       * - Base Weight: 7.218 µs
-       * - DB Weight:
-       * - Writes: Changes Trie, System Digest
-       * # </weight>
-       **/
-      setChangesTrieConfig: AugmentedSubmittable<(changesTrieConfig: Option<ChangesTrieConfiguration> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<ChangesTrieConfiguration>]>;
       /**
        * Set the new runtime code.
        * 
@@ -3232,6 +3219,19 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u64]>;
+      /**
+       * Set the new changes trie configuration.
+       * 
+       * # <weight>
+       * - `O(1)`
+       * - 1 storage write or delete (codec `O(1)`).
+       * - 1 call to `deposit_log`: Uses `append` API, so O(1)
+       * - Base Weight: 7.218 µs
+       * - DB Weight:
+       * - Writes: Changes Trie, System Digest
+       * # </weight>
+       **/
+      setChangesTrieConfig: AugmentedSubmittable<(changesTrieConfig: Option<ChangesTrieConfiguration> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<ChangesTrieConfiguration>]>;
       /**
        * Set some items of storage.
        * 

+ 100 - 100
types/augment-codec/augment-types.ts

@@ -84,9 +84,6 @@ declare module '@polkadot/types/types/registry' {
     'Compact<BountyIndex>': Compact<BountyIndex>;
     'Compact<BridgedBlockNumber>': Compact<BridgedBlockNumber>;
     'Compact<CategoryId>': Compact<CategoryId>;
-    'Compact<ChannelCategoryId>': Compact<ChannelCategoryId>;
-    'Compact<ChannelId>': Compact<ChannelId>;
-    'Compact<ChannelOwnershipTransferRequestId>': Compact<ChannelOwnershipTransferRequestId>;
     'Compact<ClassId>': Compact<ClassId>;
     'Compact<ContractDiscriminant>': Compact<ContractDiscriminant>;
     'Compact<CoreIndex>': Compact<CoreIndex>;
@@ -107,6 +104,9 @@ declare module '@polkadot/types/types/registry' {
     'Compact<FundIndex>': Compact<FundIndex>;
     'Compact<Gas>': Compact<Gas>;
     'Compact<GroupIndex>': Compact<GroupIndex>;
+    'Compact<ChannelCategoryId>': Compact<ChannelCategoryId>;
+    'Compact<ChannelId>': Compact<ChannelId>;
+    'Compact<ChannelOwnershipTransferRequestId>': Compact<ChannelOwnershipTransferRequestId>;
     'Compact<Index>': Compact<Index>;
     'Compact<InstanceId>': Compact<InstanceId>;
     'Compact<KeyTypeId>': Compact<KeyTypeId>;
@@ -150,11 +150,11 @@ declare module '@polkadot/types/types/registry' {
     'Compact<RelayChainBlockNumber>': Compact<RelayChainBlockNumber>;
     'Compact<ReplyId>': Compact<ReplyId>;
     'Compact<RewardPoint>': Compact<RewardPoint>;
-    'Compact<SchedulePriority>': Compact<SchedulePriority>;
     'Compact<SeriesId>': Compact<SeriesId>;
     'Compact<SessionIndex>': Compact<SessionIndex>;
     'Compact<SetId>': Compact<SetId>;
     'Compact<SetIndex>': Compact<SetIndex>;
+    'Compact<SchedulePriority>': Compact<SchedulePriority>;
     'Compact<Si0LookupTypeId>': Compact<Si0LookupTypeId>;
     'Compact<Slot>': Compact<Slot>;
     'Compact<SlotNumber>': Compact<SlotNumber>;
@@ -336,27 +336,11 @@ declare module '@polkadot/types/types/registry' {
     'Option<CastVoteOf>': Option<CastVoteOf>;
     'Option<Category>': Option<Category>;
     'Option<CategoryId>': Option<CategoryId>;
-    'Option<ChainId>': Option<ChainId>;
-    'Option<ChainProperties>': Option<ChainProperties>;
-    'Option<ChainType>': Option<ChainType>;
-    'Option<ChangesTrieConfiguration>': Option<ChangesTrieConfiguration>;
-    'Option<ChangesTrieSignal>': Option<ChangesTrieSignal>;
-    'Option<Channel>': Option<Channel>;
-    'Option<ChannelCategory>': Option<ChannelCategory>;
-    'Option<ChannelCategoryCreationParameters>': Option<ChannelCategoryCreationParameters>;
-    'Option<ChannelCategoryId>': Option<ChannelCategoryId>;
-    'Option<ChannelCategoryUpdateParameters>': Option<ChannelCategoryUpdateParameters>;
-    'Option<ChannelCreationParameters>': Option<ChannelCreationParameters>;
-    'Option<ChannelId>': Option<ChannelId>;
-    'Option<ChannelOwner>': Option<ChannelOwner>;
-    'Option<ChannelOwnershipTransferRequest>': Option<ChannelOwnershipTransferRequest>;
-    'Option<ChannelOwnershipTransferRequestId>': Option<ChannelOwnershipTransferRequestId>;
-    'Option<ChannelUpdateParameters>': Option<ChannelUpdateParameters>;
     'Option<ClassDetails>': Option<ClassDetails>;
     'Option<ClassId>': Option<ClassId>;
     'Option<ClassMetadata>': Option<ClassMetadata>;
-    'Option<CodecHash>': Option<CodecHash>;
     'Option<CodeHash>': Option<CodeHash>;
+    'Option<CodecHash>': Option<CodecHash>;
     'Option<CollatorId>': Option<CollatorId>;
     'Option<CollatorSignature>': Option<CollatorSignature>;
     'Option<CollectiveOrigin>': Option<CollectiveOrigin>;
@@ -636,6 +620,22 @@ declare module '@polkadot/types/types/registry' {
     'Option<HrmpChannel>': Option<HrmpChannel>;
     'Option<HrmpChannelId>': Option<HrmpChannelId>;
     'Option<HrmpOpenChannelRequest>': Option<HrmpOpenChannelRequest>;
+    'Option<ChainId>': Option<ChainId>;
+    'Option<ChainProperties>': Option<ChainProperties>;
+    'Option<ChainType>': Option<ChainType>;
+    'Option<ChangesTrieConfiguration>': Option<ChangesTrieConfiguration>;
+    'Option<ChangesTrieSignal>': Option<ChangesTrieSignal>;
+    'Option<Channel>': Option<Channel>;
+    'Option<ChannelCategory>': Option<ChannelCategory>;
+    'Option<ChannelCategoryCreationParameters>': Option<ChannelCategoryCreationParameters>;
+    'Option<ChannelCategoryId>': Option<ChannelCategoryId>;
+    'Option<ChannelCategoryUpdateParameters>': Option<ChannelCategoryUpdateParameters>;
+    'Option<ChannelCreationParameters>': Option<ChannelCreationParameters>;
+    'Option<ChannelId>': Option<ChannelId>;
+    'Option<ChannelOwner>': Option<ChannelOwner>;
+    'Option<ChannelOwnershipTransferRequest>': Option<ChannelOwnershipTransferRequest>;
+    'Option<ChannelOwnershipTransferRequestId>': Option<ChannelOwnershipTransferRequestId>;
+    'Option<ChannelUpdateParameters>': Option<ChannelUpdateParameters>;
     'Option<i128>': Option<i128>;
     'Option<I128>': Option<I128>;
     'Option<i16>': Option<i16>;
@@ -782,10 +782,10 @@ declare module '@polkadot/types/types/registry' {
     'Option<NotConnectedPeer>': Option<NotConnectedPeer>;
     'Option<Null>': Option<Null>;
     'Option<ObjectOwner>': Option<ObjectOwner>;
-    'Option<OffchainAccuracy>': Option<OffchainAccuracy>;
-    'Option<OffchainAccuracyCompact>': Option<OffchainAccuracyCompact>;
     'Option<OffenceDetails>': Option<OffenceDetails>;
     'Option<Offender>': Option<Offender>;
+    'Option<OffchainAccuracy>': Option<OffchainAccuracy>;
+    'Option<OffchainAccuracyCompact>': Option<OffchainAccuracyCompact>;
     'Option<OpaqueCall>': Option<OpaqueCall>;
     'Option<OpaqueMultiaddr>': Option<OpaqueMultiaddr>;
     'Option<OpaqueNetworkState>': Option<OpaqueNetworkState>;
@@ -829,11 +829,11 @@ declare module '@polkadot/types/types/registry' {
     'Option<PalletStorageMetadataLatest>': Option<PalletStorageMetadataLatest>;
     'Option<PalletStorageMetadataV14>': Option<PalletStorageMetadataV14>;
     'Option<PalletVersion>': Option<PalletVersion>;
+    'Option<ParaGenesisArgs>': Option<ParaGenesisArgs>;
     'Option<ParachainDispatchOrigin>': Option<ParachainDispatchOrigin>;
     'Option<ParachainInherentData>': Option<ParachainInherentData>;
     'Option<ParachainProposal>': Option<ParachainProposal>;
     'Option<ParachainsInherentData>': Option<ParachainsInherentData>;
-    'Option<ParaGenesisArgs>': Option<ParaGenesisArgs>;
     'Option<ParaId>': Option<ParaId>;
     'Option<ParaInfo>': Option<ParaInfo>;
     'Option<ParaLifecycle>': Option<ParaLifecycle>;
@@ -955,10 +955,10 @@ declare module '@polkadot/types/types/registry' {
     'Option<Registration>': Option<Registration>;
     'Option<RegistrationJudgement>': Option<RegistrationJudgement>;
     'Option<RelayBlockNumber>': Option<RelayBlockNumber>;
-    'Option<RelayChainBlockNumber>': Option<RelayChainBlockNumber>;
-    'Option<RelayChainHash>': Option<RelayChainHash>;
     'Option<RelayerId>': Option<RelayerId>;
     'Option<RelayHash>': Option<RelayHash>;
+    'Option<RelayChainBlockNumber>': Option<RelayChainBlockNumber>;
+    'Option<RelayChainHash>': Option<RelayChainHash>;
     'Option<Releases>': Option<Releases>;
     'Option<Remark>': Option<Remark>;
     'Option<Renouncing>': Option<Renouncing>;
@@ -984,15 +984,6 @@ declare module '@polkadot/types/types/registry' {
     'Option<RuntimeVersion>': Option<RuntimeVersion>;
     'Option<RuntimeVersionApi>': Option<RuntimeVersionApi>;
     'Option<RuntimeVersionPartial>': Option<RuntimeVersionPartial>;
-    'Option<Schedule>': Option<Schedule>;
-    'Option<Scheduled>': Option<Scheduled>;
-    'Option<ScheduledTo254>': Option<ScheduledTo254>;
-    'Option<SchedulePeriod>': Option<SchedulePeriod>;
-    'Option<SchedulePriority>': Option<SchedulePriority>;
-    'Option<ScheduleTo212>': Option<ScheduleTo212>;
-    'Option<ScheduleTo258>': Option<ScheduleTo258>;
-    'Option<ScheduleTo264>': Option<ScheduleTo264>;
-    'Option<Scheduling>': Option<Scheduling>;
     'Option<Seal>': Option<Seal>;
     'Option<SealV0>': Option<SealV0>;
     'Option<Season>': Option<Season>;
@@ -1024,6 +1015,15 @@ declare module '@polkadot/types/types/registry' {
     'Option<SetId>': Option<SetId>;
     'Option<SetIndex>': Option<SetIndex>;
     'Option<SetLeadParams>': Option<SetLeadParams>;
+    'Option<Schedule>': Option<Schedule>;
+    'Option<Scheduled>': Option<Scheduled>;
+    'Option<ScheduledTo254>': Option<ScheduledTo254>;
+    'Option<SchedulePeriod>': Option<SchedulePeriod>;
+    'Option<SchedulePriority>': Option<SchedulePriority>;
+    'Option<ScheduleTo212>': Option<ScheduleTo212>;
+    'Option<ScheduleTo258>': Option<ScheduleTo258>;
+    'Option<ScheduleTo264>': Option<ScheduleTo264>;
+    'Option<Scheduling>': Option<Scheduling>;
     'Option<Si0Field>': Option<Si0Field>;
     'Option<Si0LookupTypeId>': Option<Si0LookupTypeId>;
     'Option<Si0Path>': Option<Si0Path>;
@@ -1090,7 +1090,6 @@ declare module '@polkadot/types/types/registry' {
     'Option<StakingLedgerTo240>': Option<StakingLedgerTo240>;
     'Option<Statement>': Option<Statement>;
     'Option<StatementKind>': Option<StatementKind>;
-    'Option<StorageChangeSet>': Option<StorageChangeSet>;
     'Option<StorageData>': Option<StorageData>;
     'Option<StorageEntryMetadataLatest>': Option<StorageEntryMetadataLatest>;
     'Option<StorageEntryMetadataV10>': Option<StorageEntryMetadataV10>;
@@ -1120,6 +1119,7 @@ declare module '@polkadot/types/types/registry' {
     'Option<StorageHasherV13>': Option<StorageHasherV13>;
     'Option<StorageHasherV14>': Option<StorageHasherV14>;
     'Option<StorageHasherV9>': Option<StorageHasherV9>;
+    'Option<StorageChangeSet>': Option<StorageChangeSet>;
     'Option<StorageKey>': Option<StorageKey>;
     'Option<StorageKind>': Option<StorageKind>;
     'Option<StorageMetadataLatest>': Option<StorageMetadataLatest>;
@@ -1428,27 +1428,11 @@ declare module '@polkadot/types/types/registry' {
     'Vec<CastVoteOf>': Vec<CastVoteOf>;
     'Vec<Category>': Vec<Category>;
     'Vec<CategoryId>': Vec<CategoryId>;
-    'Vec<ChainId>': Vec<ChainId>;
-    'Vec<ChainProperties>': Vec<ChainProperties>;
-    'Vec<ChainType>': Vec<ChainType>;
-    'Vec<ChangesTrieConfiguration>': Vec<ChangesTrieConfiguration>;
-    'Vec<ChangesTrieSignal>': Vec<ChangesTrieSignal>;
-    'Vec<Channel>': Vec<Channel>;
-    'Vec<ChannelCategory>': Vec<ChannelCategory>;
-    'Vec<ChannelCategoryCreationParameters>': Vec<ChannelCategoryCreationParameters>;
-    'Vec<ChannelCategoryId>': Vec<ChannelCategoryId>;
-    'Vec<ChannelCategoryUpdateParameters>': Vec<ChannelCategoryUpdateParameters>;
-    'Vec<ChannelCreationParameters>': Vec<ChannelCreationParameters>;
-    'Vec<ChannelId>': Vec<ChannelId>;
-    'Vec<ChannelOwner>': Vec<ChannelOwner>;
-    'Vec<ChannelOwnershipTransferRequest>': Vec<ChannelOwnershipTransferRequest>;
-    'Vec<ChannelOwnershipTransferRequestId>': Vec<ChannelOwnershipTransferRequestId>;
-    'Vec<ChannelUpdateParameters>': Vec<ChannelUpdateParameters>;
     'Vec<ClassDetails>': Vec<ClassDetails>;
     'Vec<ClassId>': Vec<ClassId>;
     'Vec<ClassMetadata>': Vec<ClassMetadata>;
-    'Vec<CodecHash>': Vec<CodecHash>;
     'Vec<CodeHash>': Vec<CodeHash>;
+    'Vec<CodecHash>': Vec<CodecHash>;
     'Vec<CollatorId>': Vec<CollatorId>;
     'Vec<CollatorSignature>': Vec<CollatorSignature>;
     'Vec<CollectiveOrigin>': Vec<CollectiveOrigin>;
@@ -1728,6 +1712,22 @@ declare module '@polkadot/types/types/registry' {
     'Vec<HrmpChannel>': Vec<HrmpChannel>;
     'Vec<HrmpChannelId>': Vec<HrmpChannelId>;
     'Vec<HrmpOpenChannelRequest>': Vec<HrmpOpenChannelRequest>;
+    'Vec<ChainId>': Vec<ChainId>;
+    'Vec<ChainProperties>': Vec<ChainProperties>;
+    'Vec<ChainType>': Vec<ChainType>;
+    'Vec<ChangesTrieConfiguration>': Vec<ChangesTrieConfiguration>;
+    'Vec<ChangesTrieSignal>': Vec<ChangesTrieSignal>;
+    'Vec<Channel>': Vec<Channel>;
+    'Vec<ChannelCategory>': Vec<ChannelCategory>;
+    'Vec<ChannelCategoryCreationParameters>': Vec<ChannelCategoryCreationParameters>;
+    'Vec<ChannelCategoryId>': Vec<ChannelCategoryId>;
+    'Vec<ChannelCategoryUpdateParameters>': Vec<ChannelCategoryUpdateParameters>;
+    'Vec<ChannelCreationParameters>': Vec<ChannelCreationParameters>;
+    'Vec<ChannelId>': Vec<ChannelId>;
+    'Vec<ChannelOwner>': Vec<ChannelOwner>;
+    'Vec<ChannelOwnershipTransferRequest>': Vec<ChannelOwnershipTransferRequest>;
+    'Vec<ChannelOwnershipTransferRequestId>': Vec<ChannelOwnershipTransferRequestId>;
+    'Vec<ChannelUpdateParameters>': Vec<ChannelUpdateParameters>;
     'Vec<i128>': Vec<i128>;
     'Vec<I128>': Vec<I128>;
     'Vec<i16>': Vec<i16>;
@@ -1874,10 +1874,10 @@ declare module '@polkadot/types/types/registry' {
     'Vec<NotConnectedPeer>': Vec<NotConnectedPeer>;
     'Vec<Null>': Vec<Null>;
     'Vec<ObjectOwner>': Vec<ObjectOwner>;
-    'Vec<OffchainAccuracy>': Vec<OffchainAccuracy>;
-    'Vec<OffchainAccuracyCompact>': Vec<OffchainAccuracyCompact>;
     'Vec<OffenceDetails>': Vec<OffenceDetails>;
     'Vec<Offender>': Vec<Offender>;
+    'Vec<OffchainAccuracy>': Vec<OffchainAccuracy>;
+    'Vec<OffchainAccuracyCompact>': Vec<OffchainAccuracyCompact>;
     'Vec<OpaqueCall>': Vec<OpaqueCall>;
     'Vec<OpaqueMultiaddr>': Vec<OpaqueMultiaddr>;
     'Vec<OpaqueNetworkState>': Vec<OpaqueNetworkState>;
@@ -1921,11 +1921,11 @@ declare module '@polkadot/types/types/registry' {
     'Vec<PalletStorageMetadataLatest>': Vec<PalletStorageMetadataLatest>;
     'Vec<PalletStorageMetadataV14>': Vec<PalletStorageMetadataV14>;
     'Vec<PalletVersion>': Vec<PalletVersion>;
+    'Vec<ParaGenesisArgs>': Vec<ParaGenesisArgs>;
     'Vec<ParachainDispatchOrigin>': Vec<ParachainDispatchOrigin>;
     'Vec<ParachainInherentData>': Vec<ParachainInherentData>;
     'Vec<ParachainProposal>': Vec<ParachainProposal>;
     'Vec<ParachainsInherentData>': Vec<ParachainsInherentData>;
-    'Vec<ParaGenesisArgs>': Vec<ParaGenesisArgs>;
     'Vec<ParaId>': Vec<ParaId>;
     'Vec<ParaInfo>': Vec<ParaInfo>;
     'Vec<ParaLifecycle>': Vec<ParaLifecycle>;
@@ -2047,10 +2047,10 @@ declare module '@polkadot/types/types/registry' {
     'Vec<Registration>': Vec<Registration>;
     'Vec<RegistrationJudgement>': Vec<RegistrationJudgement>;
     'Vec<RelayBlockNumber>': Vec<RelayBlockNumber>;
-    'Vec<RelayChainBlockNumber>': Vec<RelayChainBlockNumber>;
-    'Vec<RelayChainHash>': Vec<RelayChainHash>;
     'Vec<RelayerId>': Vec<RelayerId>;
     'Vec<RelayHash>': Vec<RelayHash>;
+    'Vec<RelayChainBlockNumber>': Vec<RelayChainBlockNumber>;
+    'Vec<RelayChainHash>': Vec<RelayChainHash>;
     'Vec<Releases>': Vec<Releases>;
     'Vec<Remark>': Vec<Remark>;
     'Vec<Renouncing>': Vec<Renouncing>;
@@ -2076,15 +2076,6 @@ declare module '@polkadot/types/types/registry' {
     'Vec<RuntimeVersion>': Vec<RuntimeVersion>;
     'Vec<RuntimeVersionApi>': Vec<RuntimeVersionApi>;
     'Vec<RuntimeVersionPartial>': Vec<RuntimeVersionPartial>;
-    'Vec<Schedule>': Vec<Schedule>;
-    'Vec<Scheduled>': Vec<Scheduled>;
-    'Vec<ScheduledTo254>': Vec<ScheduledTo254>;
-    'Vec<SchedulePeriod>': Vec<SchedulePeriod>;
-    'Vec<SchedulePriority>': Vec<SchedulePriority>;
-    'Vec<ScheduleTo212>': Vec<ScheduleTo212>;
-    'Vec<ScheduleTo258>': Vec<ScheduleTo258>;
-    'Vec<ScheduleTo264>': Vec<ScheduleTo264>;
-    'Vec<Scheduling>': Vec<Scheduling>;
     'Vec<Seal>': Vec<Seal>;
     'Vec<SealV0>': Vec<SealV0>;
     'Vec<Season>': Vec<Season>;
@@ -2116,6 +2107,15 @@ declare module '@polkadot/types/types/registry' {
     'Vec<SetId>': Vec<SetId>;
     'Vec<SetIndex>': Vec<SetIndex>;
     'Vec<SetLeadParams>': Vec<SetLeadParams>;
+    'Vec<Schedule>': Vec<Schedule>;
+    'Vec<Scheduled>': Vec<Scheduled>;
+    'Vec<ScheduledTo254>': Vec<ScheduledTo254>;
+    'Vec<SchedulePeriod>': Vec<SchedulePeriod>;
+    'Vec<SchedulePriority>': Vec<SchedulePriority>;
+    'Vec<ScheduleTo212>': Vec<ScheduleTo212>;
+    'Vec<ScheduleTo258>': Vec<ScheduleTo258>;
+    'Vec<ScheduleTo264>': Vec<ScheduleTo264>;
+    'Vec<Scheduling>': Vec<Scheduling>;
     'Vec<Si0Field>': Vec<Si0Field>;
     'Vec<Si0LookupTypeId>': Vec<Si0LookupTypeId>;
     'Vec<Si0Path>': Vec<Si0Path>;
@@ -2182,7 +2182,6 @@ declare module '@polkadot/types/types/registry' {
     'Vec<StakingLedgerTo240>': Vec<StakingLedgerTo240>;
     'Vec<Statement>': Vec<Statement>;
     'Vec<StatementKind>': Vec<StatementKind>;
-    'Vec<StorageChangeSet>': Vec<StorageChangeSet>;
     'Vec<StorageData>': Vec<StorageData>;
     'Vec<StorageEntryMetadataLatest>': Vec<StorageEntryMetadataLatest>;
     'Vec<StorageEntryMetadataV10>': Vec<StorageEntryMetadataV10>;
@@ -2212,6 +2211,7 @@ declare module '@polkadot/types/types/registry' {
     'Vec<StorageHasherV13>': Vec<StorageHasherV13>;
     'Vec<StorageHasherV14>': Vec<StorageHasherV14>;
     'Vec<StorageHasherV9>': Vec<StorageHasherV9>;
+    'Vec<StorageChangeSet>': Vec<StorageChangeSet>;
     'Vec<StorageKey>': Vec<StorageKey>;
     'Vec<StorageKind>': Vec<StorageKind>;
     'Vec<StorageMetadataLatest>': Vec<StorageMetadataLatest>;
@@ -2520,27 +2520,11 @@ declare module '@polkadot/types/types/registry' {
     CastVoteOf: CastVoteOf;
     Category: Category;
     CategoryId: CategoryId;
-    ChainId: ChainId;
-    ChainProperties: ChainProperties;
-    ChainType: ChainType;
-    ChangesTrieConfiguration: ChangesTrieConfiguration;
-    ChangesTrieSignal: ChangesTrieSignal;
-    Channel: Channel;
-    ChannelCategory: ChannelCategory;
-    ChannelCategoryCreationParameters: ChannelCategoryCreationParameters;
-    ChannelCategoryId: ChannelCategoryId;
-    ChannelCategoryUpdateParameters: ChannelCategoryUpdateParameters;
-    ChannelCreationParameters: ChannelCreationParameters;
-    ChannelId: ChannelId;
-    ChannelOwner: ChannelOwner;
-    ChannelOwnershipTransferRequest: ChannelOwnershipTransferRequest;
-    ChannelOwnershipTransferRequestId: ChannelOwnershipTransferRequestId;
-    ChannelUpdateParameters: ChannelUpdateParameters;
     ClassDetails: ClassDetails;
     ClassId: ClassId;
     ClassMetadata: ClassMetadata;
-    CodecHash: CodecHash;
     CodeHash: CodeHash;
+    CodecHash: CodecHash;
     CollatorId: CollatorId;
     CollatorSignature: CollatorSignature;
     CollectiveOrigin: CollectiveOrigin;
@@ -2820,6 +2804,22 @@ declare module '@polkadot/types/types/registry' {
     HrmpChannel: HrmpChannel;
     HrmpChannelId: HrmpChannelId;
     HrmpOpenChannelRequest: HrmpOpenChannelRequest;
+    ChainId: ChainId;
+    ChainProperties: ChainProperties;
+    ChainType: ChainType;
+    ChangesTrieConfiguration: ChangesTrieConfiguration;
+    ChangesTrieSignal: ChangesTrieSignal;
+    Channel: Channel;
+    ChannelCategory: ChannelCategory;
+    ChannelCategoryCreationParameters: ChannelCategoryCreationParameters;
+    ChannelCategoryId: ChannelCategoryId;
+    ChannelCategoryUpdateParameters: ChannelCategoryUpdateParameters;
+    ChannelCreationParameters: ChannelCreationParameters;
+    ChannelId: ChannelId;
+    ChannelOwner: ChannelOwner;
+    ChannelOwnershipTransferRequest: ChannelOwnershipTransferRequest;
+    ChannelOwnershipTransferRequestId: ChannelOwnershipTransferRequestId;
+    ChannelUpdateParameters: ChannelUpdateParameters;
     i128: i128;
     I128: I128;
     i16: i16;
@@ -2966,10 +2966,10 @@ declare module '@polkadot/types/types/registry' {
     NotConnectedPeer: NotConnectedPeer;
     Null: Null;
     ObjectOwner: ObjectOwner;
-    OffchainAccuracy: OffchainAccuracy;
-    OffchainAccuracyCompact: OffchainAccuracyCompact;
     OffenceDetails: OffenceDetails;
     Offender: Offender;
+    OffchainAccuracy: OffchainAccuracy;
+    OffchainAccuracyCompact: OffchainAccuracyCompact;
     OpaqueCall: OpaqueCall;
     OpaqueMultiaddr: OpaqueMultiaddr;
     OpaqueNetworkState: OpaqueNetworkState;
@@ -3013,11 +3013,11 @@ declare module '@polkadot/types/types/registry' {
     PalletStorageMetadataLatest: PalletStorageMetadataLatest;
     PalletStorageMetadataV14: PalletStorageMetadataV14;
     PalletVersion: PalletVersion;
+    ParaGenesisArgs: ParaGenesisArgs;
     ParachainDispatchOrigin: ParachainDispatchOrigin;
     ParachainInherentData: ParachainInherentData;
     ParachainProposal: ParachainProposal;
     ParachainsInherentData: ParachainsInherentData;
-    ParaGenesisArgs: ParaGenesisArgs;
     ParaId: ParaId;
     ParaInfo: ParaInfo;
     ParaLifecycle: ParaLifecycle;
@@ -3139,10 +3139,10 @@ declare module '@polkadot/types/types/registry' {
     Registration: Registration;
     RegistrationJudgement: RegistrationJudgement;
     RelayBlockNumber: RelayBlockNumber;
-    RelayChainBlockNumber: RelayChainBlockNumber;
-    RelayChainHash: RelayChainHash;
     RelayerId: RelayerId;
     RelayHash: RelayHash;
+    RelayChainBlockNumber: RelayChainBlockNumber;
+    RelayChainHash: RelayChainHash;
     Releases: Releases;
     Remark: Remark;
     Renouncing: Renouncing;
@@ -3168,15 +3168,6 @@ declare module '@polkadot/types/types/registry' {
     RuntimeVersion: RuntimeVersion;
     RuntimeVersionApi: RuntimeVersionApi;
     RuntimeVersionPartial: RuntimeVersionPartial;
-    Schedule: Schedule;
-    Scheduled: Scheduled;
-    ScheduledTo254: ScheduledTo254;
-    SchedulePeriod: SchedulePeriod;
-    SchedulePriority: SchedulePriority;
-    ScheduleTo212: ScheduleTo212;
-    ScheduleTo258: ScheduleTo258;
-    ScheduleTo264: ScheduleTo264;
-    Scheduling: Scheduling;
     Seal: Seal;
     SealV0: SealV0;
     Season: Season;
@@ -3208,6 +3199,15 @@ declare module '@polkadot/types/types/registry' {
     SetId: SetId;
     SetIndex: SetIndex;
     SetLeadParams: SetLeadParams;
+    Schedule: Schedule;
+    Scheduled: Scheduled;
+    ScheduledTo254: ScheduledTo254;
+    SchedulePeriod: SchedulePeriod;
+    SchedulePriority: SchedulePriority;
+    ScheduleTo212: ScheduleTo212;
+    ScheduleTo258: ScheduleTo258;
+    ScheduleTo264: ScheduleTo264;
+    Scheduling: Scheduling;
     Si0Field: Si0Field;
     Si0LookupTypeId: Si0LookupTypeId;
     Si0Path: Si0Path;
@@ -3274,7 +3274,6 @@ declare module '@polkadot/types/types/registry' {
     StakingLedgerTo240: StakingLedgerTo240;
     Statement: Statement;
     StatementKind: StatementKind;
-    StorageChangeSet: StorageChangeSet;
     StorageData: StorageData;
     StorageEntryMetadataLatest: StorageEntryMetadataLatest;
     StorageEntryMetadataV10: StorageEntryMetadataV10;
@@ -3304,6 +3303,7 @@ declare module '@polkadot/types/types/registry' {
     StorageHasherV13: StorageHasherV13;
     StorageHasherV14: StorageHasherV14;
     StorageHasherV9: StorageHasherV9;
+    StorageChangeSet: StorageChangeSet;
     StorageKey: StorageKey;
     StorageKind: StorageKind;
     StorageMetadataLatest: StorageMetadataLatest;

+ 0 - 2
types/augment/all/defs.json

@@ -112,7 +112,6 @@
         "sticky_thread_ids": "Vec<ThreadId>"
     },
     "Thread": {
-        "metadata_hash": "Hash",
         "category_id": "CategoryId",
         "author_id": "ForumUserId",
         "poll": "Option<Poll>",
@@ -147,7 +146,6 @@
         "poll_alternatives": "Vec<Bytes>"
     },
     "ThreadOf": {
-        "metadata_hash": "Hash",
         "category_id": "CategoryId",
         "author_id": "ForumUserId",
         "poll": "Option<Poll>",

+ 64 - 66
types/augment/all/types.ts

@@ -139,70 +139,6 @@ export interface Category extends Struct {
 /** @name CategoryId */
 export interface CategoryId extends u64 {}
 
-/** @name Channel */
-export interface Channel extends Struct {
-  readonly owner: ChannelOwner;
-  readonly videos: Vec<VideoId>;
-  readonly playlists: Vec<PlaylistId>;
-  readonly series: Vec<SeriesId>;
-  readonly is_censored: bool;
-  readonly reward_account: Option<AccountId>;
-}
-
-/** @name ChannelCategory */
-export interface ChannelCategory extends Struct {}
-
-/** @name ChannelCategoryCreationParameters */
-export interface ChannelCategoryCreationParameters extends Struct {
-  readonly meta: Bytes;
-}
-
-/** @name ChannelCategoryId */
-export interface ChannelCategoryId extends u64 {}
-
-/** @name ChannelCategoryUpdateParameters */
-export interface ChannelCategoryUpdateParameters extends Struct {
-  readonly new_meta: Bytes;
-}
-
-/** @name ChannelCreationParameters */
-export interface ChannelCreationParameters extends Struct {
-  readonly assets: Vec<NewAsset>;
-  readonly meta: Bytes;
-  readonly reward_account: Option<AccountId>;
-}
-
-/** @name ChannelId */
-export interface ChannelId extends u64 {}
-
-/** @name ChannelOwner */
-export interface ChannelOwner extends Enum {
-  readonly isMember: boolean;
-  readonly asMember: MemberId;
-  readonly isCurators: boolean;
-  readonly asCurators: CuratorGroupId;
-  readonly isDao: boolean;
-  readonly asDao: DAOId;
-}
-
-/** @name ChannelOwnershipTransferRequest */
-export interface ChannelOwnershipTransferRequest extends Struct {
-  readonly channel_id: ChannelId;
-  readonly new_owner: ChannelOwner;
-  readonly payment: u128;
-  readonly new_reward_account: Option<AccountId>;
-}
-
-/** @name ChannelOwnershipTransferRequestId */
-export interface ChannelOwnershipTransferRequestId extends u64 {}
-
-/** @name ChannelUpdateParameters */
-export interface ChannelUpdateParameters extends Struct {
-  readonly assets: Option<Vec<NewAsset>>;
-  readonly new_meta: Option<Bytes>;
-  readonly reward_account: Option<Option<AccountId>>;
-}
-
 /** @name ConstitutionInfo */
 export interface ConstitutionInfo extends Struct {
   readonly text_hash: Hash;
@@ -413,6 +349,70 @@ export interface GeneralProposalParameters extends Struct {
   readonly exact_execution_block: Option<u32>;
 }
 
+/** @name Channel */
+export interface Channel extends Struct {
+  readonly owner: ChannelOwner;
+  readonly videos: Vec<VideoId>;
+  readonly playlists: Vec<PlaylistId>;
+  readonly series: Vec<SeriesId>;
+  readonly is_censored: bool;
+  readonly reward_account: Option<AccountId>;
+}
+
+/** @name ChannelCategory */
+export interface ChannelCategory extends Struct {}
+
+/** @name ChannelCategoryCreationParameters */
+export interface ChannelCategoryCreationParameters extends Struct {
+  readonly meta: Bytes;
+}
+
+/** @name ChannelCategoryId */
+export interface ChannelCategoryId extends u64 {}
+
+/** @name ChannelCategoryUpdateParameters */
+export interface ChannelCategoryUpdateParameters extends Struct {
+  readonly new_meta: Bytes;
+}
+
+/** @name ChannelCreationParameters */
+export interface ChannelCreationParameters extends Struct {
+  readonly assets: Vec<NewAsset>;
+  readonly meta: Bytes;
+  readonly reward_account: Option<AccountId>;
+}
+
+/** @name ChannelId */
+export interface ChannelId extends u64 {}
+
+/** @name ChannelOwner */
+export interface ChannelOwner extends Enum {
+  readonly isMember: boolean;
+  readonly asMember: MemberId;
+  readonly isCurators: boolean;
+  readonly asCurators: CuratorGroupId;
+  readonly isDao: boolean;
+  readonly asDao: DAOId;
+}
+
+/** @name ChannelOwnershipTransferRequest */
+export interface ChannelOwnershipTransferRequest extends Struct {
+  readonly channel_id: ChannelId;
+  readonly new_owner: ChannelOwner;
+  readonly payment: u128;
+  readonly new_reward_account: Option<AccountId>;
+}
+
+/** @name ChannelOwnershipTransferRequestId */
+export interface ChannelOwnershipTransferRequestId extends u64 {}
+
+/** @name ChannelUpdateParameters */
+export interface ChannelUpdateParameters extends Struct {
+  readonly assets: Option<Vec<NewAsset>>;
+  readonly new_meta: Option<Bytes>;
+  readonly reward_account: Option<Option<AccountId>>;
+}
+
 /** @name InputValidationLengthConstraint */
 export interface InputValidationLengthConstraint extends Struct {
   readonly min: u16;
@@ -899,7 +899,6 @@ export interface TerminateRoleParameters extends Struct {
 
 /** @name Thread */
 export interface Thread extends Struct {
-  readonly metadata_hash: Hash;
   readonly category_id: CategoryId;
   readonly author_id: ForumUserId;
   readonly poll: Option<Poll>;
@@ -919,7 +918,6 @@ export interface ThreadMode extends Enum {
 
 /** @name ThreadOf */
 export interface ThreadOf extends Struct {
-  readonly metadata_hash: Hash;
   readonly category_id: CategoryId;
   readonly author_id: ForumUserId;
   readonly poll: Option<Poll>;

+ 4 - 4
types/augment/augment-api-consts.ts

@@ -41,14 +41,14 @@ declare module '@polkadot/api/types/consts' {
        * Exports const - max work entry number for a closed assurance type contract bounty.
        **/
       closedContractSizeLimit: u32 & AugmentedConst<ApiType>;
-      /**
-       * Exports const - min cherry value limit for a bounty.
-       **/
-      minCherryLimit: BalanceOf & AugmentedConst<ApiType>;
       /**
        * Exports const - min funding amount limit for a bounty.
        **/
       minFundingLimit: BalanceOf & AugmentedConst<ApiType>;
+      /**
+       * Exports const - min cherry value limit for a bounty.
+       **/
+      minCherryLimit: BalanceOf & AugmentedConst<ApiType>;
       /**
        * Exports const - min work entrant stake for a bounty.
        **/

+ 12 - 12
types/augment/augment-api-errors.ts

@@ -122,10 +122,6 @@ declare module '@polkadot/api/types/errors' {
        * assurance' bounty contract.
        **/
       CannotSubmitWorkToClosedContractBounty: AugmentedError<ApiType>;
-      /**
-       * Cherry less then minimum allowed.
-       **/
-      CherryLessThenMinimumAllowed: AugmentedError<ApiType>;
       /**
        * Cannot create a 'closed assurance contract' bounty with empty member list.
        **/
@@ -159,6 +155,10 @@ declare module '@polkadot/api/types/errors' {
        * Funding period is not expired for the bounty.
        **/
       FundingPeriodNotExpired: AugmentedError<ApiType>;
+      /**
+       * Cherry less then minimum allowed.
+       **/
+      CherryLessThenMinimumAllowed: AugmentedError<ApiType>;
       /**
        * Insufficient balance for a bounty cherry.
        **/
@@ -270,10 +270,6 @@ declare module '@polkadot/api/types/errors' {
        * A Channel or Video Category does not exist.
        **/
       CategoryDoesNotExist: AugmentedError<ApiType>;
-      /**
-       * Channel does not exist
-       **/
-      ChannelDoesNotExist: AugmentedError<ApiType>;
       /**
        * Curator authentication failed
        **/
@@ -306,6 +302,10 @@ declare module '@polkadot/api/types/errors' {
        * Feature Not Implemented
        **/
       FeatureNotImplemented: AugmentedError<ApiType>;
+      /**
+       * Channel does not exist
+       **/
+      ChannelDoesNotExist: AugmentedError<ApiType>;
       /**
        * Lead authentication failed
        **/
@@ -968,14 +968,14 @@ declare module '@polkadot/api/types/errors' {
       WorkerStorageValueTooLong: AugmentedError<ApiType>;
     };
     grandpa: {
-      /**
-       * Attempt to signal GRANDPA change with one already pending.
-       **/
-      ChangePending: AugmentedError<ApiType>;
       /**
        * A given equivocation report is valid but already previously reported.
        **/
       DuplicateOffenceReport: AugmentedError<ApiType>;
+      /**
+       * Attempt to signal GRANDPA change with one already pending.
+       **/
+      ChangePending: AugmentedError<ApiType>;
       /**
        * An equivocation proof provided as part of an equivocation report is invalid.
        **/

+ 6 - 6
types/augment/augment-api-events.ts

@@ -202,6 +202,11 @@ declare module '@polkadot/api/types/events' {
       ConstutionAmended: AugmentedEvent<ApiType, [Bytes, Bytes]>;
     };
     content: {
+      CuratorAdded: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
+      CuratorGroupCreated: AugmentedEvent<ApiType, [CuratorGroupId]>;
+      CuratorGroupStatusSet: AugmentedEvent<ApiType, [CuratorGroupId, bool]>;
+      CuratorRemoved: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
+      FeaturedVideosSet: AugmentedEvent<ApiType, [ContentActor, Vec<VideoId>]>;
       ChannelAssetsRemoved: AugmentedEvent<ApiType, [ContentActor, ChannelId, Vec<ContentId>]>;
       ChannelCategoryCreated: AugmentedEvent<ApiType, [ChannelCategoryId, ChannelCategory, ChannelCategoryCreationParameters]>;
       ChannelCategoryDeleted: AugmentedEvent<ApiType, [ContentActor, ChannelCategoryId]>;
@@ -212,11 +217,6 @@ declare module '@polkadot/api/types/events' {
       ChannelOwnershipTransferRequested: AugmentedEvent<ApiType, [ContentActor, ChannelOwnershipTransferRequestId, ChannelOwnershipTransferRequest]>;
       ChannelOwnershipTransferRequestWithdrawn: AugmentedEvent<ApiType, [ContentActor, ChannelOwnershipTransferRequestId]>;
       ChannelUpdated: AugmentedEvent<ApiType, [ContentActor, ChannelId, Channel, ChannelUpdateParameters]>;
-      CuratorAdded: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
-      CuratorGroupCreated: AugmentedEvent<ApiType, [CuratorGroupId]>;
-      CuratorGroupStatusSet: AugmentedEvent<ApiType, [CuratorGroupId, bool]>;
-      CuratorRemoved: AugmentedEvent<ApiType, [CuratorGroupId, CuratorId]>;
-      FeaturedVideosSet: AugmentedEvent<ApiType, [ContentActor, Vec<VideoId>]>;
       PersonCreated: AugmentedEvent<ApiType, [ContentActor, PersonId, Vec<NewAsset>, PersonCreationParameters]>;
       PersonDeleted: AugmentedEvent<ApiType, [ContentActor, PersonId]>;
       PersonUpdated: AugmentedEvent<ApiType, [ContentActor, PersonId, Vec<NewAsset>, PersonUpdateParameters]>;
@@ -1434,7 +1434,7 @@ declare module '@polkadot/api/types/events' {
       /**
        * Emits on post creation.
        **/
-      PostCreated: AugmentedEvent<ApiType, [PostId, MemberId, ThreadId, Bytes]>;
+      PostCreated: AugmentedEvent<ApiType, [PostId, MemberId, ThreadId, Bytes, bool]>;
       /**
        * Emits on post deleted
        **/

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

@@ -168,17 +168,17 @@ declare module '@polkadot/api/types/storage' {
       constitution: AugmentedQuery<ApiType, () => Observable<ConstitutionInfo>, []>;
     };
     content: {
-      channelById: AugmentedQuery<ApiType, (arg: ChannelId | AnyNumber | Uint8Array) => Observable<Channel>, [ChannelId]>;
-      channelCategoryById: AugmentedQuery<ApiType, (arg: ChannelCategoryId | AnyNumber | Uint8Array) => Observable<ChannelCategory>, [ChannelCategoryId]>;
-      channelOwnershipTransferRequestById: AugmentedQuery<ApiType, (arg: ChannelOwnershipTransferRequestId | AnyNumber | Uint8Array) => Observable<ChannelOwnershipTransferRequest>, [ChannelOwnershipTransferRequestId]>;
       /**
        * Map, representing  CuratorGroupId -> CuratorGroup relation
        **/
       curatorGroupById: AugmentedQuery<ApiType, (arg: CuratorGroupId | AnyNumber | Uint8Array) => Observable<CuratorGroup>, [CuratorGroupId]>;
+      channelById: AugmentedQuery<ApiType, (arg: ChannelId | AnyNumber | Uint8Array) => Observable<Channel>, [ChannelId]>;
+      channelCategoryById: AugmentedQuery<ApiType, (arg: ChannelCategoryId | AnyNumber | Uint8Array) => Observable<ChannelCategory>, [ChannelCategoryId]>;
+      channelOwnershipTransferRequestById: AugmentedQuery<ApiType, (arg: ChannelOwnershipTransferRequestId | AnyNumber | Uint8Array) => Observable<ChannelOwnershipTransferRequest>, [ChannelOwnershipTransferRequestId]>;
+      nextCuratorGroupId: AugmentedQuery<ApiType, () => Observable<CuratorGroupId>, []>;
       nextChannelCategoryId: AugmentedQuery<ApiType, () => Observable<ChannelCategoryId>, []>;
       nextChannelId: AugmentedQuery<ApiType, () => Observable<ChannelId>, []>;
       nextChannelOwnershipTransferRequestId: AugmentedQuery<ApiType, () => Observable<ChannelOwnershipTransferRequestId>, []>;
-      nextCuratorGroupId: AugmentedQuery<ApiType, () => Observable<CuratorGroupId>, []>;
       nextPersonId: AugmentedQuery<ApiType, () => Observable<PersonId>, []>;
       nextPlaylistId: AugmentedQuery<ApiType, () => Observable<PlaylistId>, []>;
       nextSeriesId: AugmentedQuery<ApiType, () => Observable<SeriesId>, []>;

+ 52 - 52
types/augment/augment-api-rpc.ts

@@ -70,58 +70,6 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
        **/
       subscribeJustifications: AugmentedRpc<() => Observable<BeefySignedCommitment>>;
     };
-    chain: {
-      /**
-       * Get header and body of a relay chain block
-       **/
-      getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<SignedBlock>>;
-      /**
-       * Get the block hash for a specific block
-       **/
-      getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable<BlockHash>>;
-      /**
-       * Get hash of the last finalized block in the canon chain
-       **/
-      getFinalizedHead: AugmentedRpc<() => Observable<BlockHash>>;
-      /**
-       * Retrieves the header for a specific block
-       **/
-      getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<Header>>;
-      /**
-       * Retrieves the newest header via subscription
-       **/
-      subscribeAllHeads: AugmentedRpc<() => Observable<Header>>;
-      /**
-       * Retrieves the best finalized header via subscription
-       **/
-      subscribeFinalizedHeads: AugmentedRpc<() => Observable<Header>>;
-      /**
-       * Retrieves the best header via subscription
-       **/
-      subscribeNewHeads: AugmentedRpc<() => Observable<Header>>;
-    };
-    childstate: {
-      /**
-       * Returns the keys with prefix from a child storage, leave empty to get all the keys
-       **/
-      getKeys: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
-      /**
-       * Returns the keys with prefix from a child storage with pagination support
-       **/
-      getKeysPaged: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
-      /**
-       * Returns a child storage entry at a specific block state
-       **/
-      getStorage: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<StorageData>>>;
-      /**
-       * Returns the hash of a child storage entry at a block state
-       **/
-      getStorageHash: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<Hash>>>;
-      /**
-       * Returns the size of a child storage entry at a block state
-       **/
-      getStorageSize: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<u64>>>;
-    };
     contracts: {
       /**
        * Executes a call to a contract
@@ -330,6 +278,58 @@ declare module '@polkadot/rpc-core/types.jsonrpc' {
        **/
       subscribeJustifications: AugmentedRpc<() => Observable<JustificationNotification>>;
     };
+    chain: {
+      /**
+       * Get header and body of a relay chain block
+       **/
+      getBlock: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<SignedBlock>>;
+      /**
+       * Get the block hash for a specific block
+       **/
+      getBlockHash: AugmentedRpc<(blockNumber?: BlockNumber | AnyNumber | Uint8Array) => Observable<BlockHash>>;
+      /**
+       * Get hash of the last finalized block in the canon chain
+       **/
+      getFinalizedHead: AugmentedRpc<() => Observable<BlockHash>>;
+      /**
+       * Retrieves the header for a specific block
+       **/
+      getHeader: AugmentedRpc<(hash?: BlockHash | string | Uint8Array) => Observable<Header>>;
+      /**
+       * Retrieves the newest header via subscription
+       **/
+      subscribeAllHeads: AugmentedRpc<() => Observable<Header>>;
+      /**
+       * Retrieves the best finalized header via subscription
+       **/
+      subscribeFinalizedHeads: AugmentedRpc<() => Observable<Header>>;
+      /**
+       * Retrieves the best header via subscription
+       **/
+      subscribeNewHeads: AugmentedRpc<() => Observable<Header>>;
+    };
+    childstate: {
+      /**
+       * Returns the keys with prefix from a child storage, leave empty to get all the keys
+       **/
+      getKeys: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+      /**
+       * Returns the keys with prefix from a child storage with pagination support
+       **/
+      getKeysPaged: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, prefix: StorageKey | string | Uint8Array | any, count: u32 | AnyNumber | Uint8Array, startKey?: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Vec<StorageKey>>>;
+      /**
+       * Returns a child storage entry at a specific block state
+       **/
+      getStorage: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<StorageData>>>;
+      /**
+       * Returns the hash of a child storage entry at a block state
+       **/
+      getStorageHash: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<Hash>>>;
+      /**
+       * Returns the size of a child storage entry at a block state
+       **/
+      getStorageSize: AugmentedRpc<(childKey: PrefixedStorageKey | string | Uint8Array, key: StorageKey | string | Uint8Array | any, at?: Hash | string | Uint8Array) => Observable<Option<u64>>>;
+    };
     mmr: {
       /**
        * Generate MMR proof for given leaf index.

+ 49 - 49
types/augment/augment-api-tx.ts

@@ -353,12 +353,12 @@ declare module '@polkadot/api/types/submittable' {
       addCuratorToGroup: AugmentedSubmittable<(curatorGroupId: CuratorGroupId | AnyNumber | Uint8Array, curatorId: CuratorId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [CuratorGroupId, CuratorId]>;
       addPersonToVideo: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: VideoId | AnyNumber | Uint8Array, person: PersonId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoId, PersonId]>;
       cancelChannelTransferRequest: AugmentedSubmittable<(requestId: ChannelOwnershipTransferRequestId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ChannelOwnershipTransferRequestId]>;
-      createChannel: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCreationParameters | { assets?: any; meta?: any; reward_account?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCreationParameters]>;
-      createChannelCategory: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCategoryCreationParameters | { meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCategoryCreationParameters]>;
       /**
        * Add new curator group to runtime storage
        **/
       createCuratorGroup: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
+      createChannel: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCreationParameters | { assets?: any; meta?: any; reward_account?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCreationParameters]>;
+      createChannelCategory: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, params: ChannelCategoryCreationParameters | { meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelCategoryCreationParameters]>;
       createPerson: AugmentedSubmittable<(actor: PersonActor | { Member: any } | { Curator: any } | string | Uint8Array, params: PersonCreationParameters | { assets?: any; meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [PersonActor, PersonCreationParameters]>;
       createPlaylist: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, params: PlaylistCreationParameters | { meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, PlaylistCreationParameters]>;
       createSeries: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, params: SeriesParameters | { assets?: any; seasons?: any; meta?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, SeriesParameters]>;
@@ -370,14 +370,14 @@ declare module '@polkadot/api/types/submittable' {
       deleteSeries: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, series: SeriesId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, SeriesId]>;
       deleteVideo: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: VideoId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoId]>;
       deleteVideoCategory: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, categoryId: VideoCategoryId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoCategoryId]>;
-      /**
-       * Remove assets of a channel from storage
-       **/
-      removeChannelAssets: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, assets: Vec<ContentId> | (ContentId | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, Vec<ContentId>]>;
       /**
        * Remove curator from a given curator group
        **/
       removeCuratorFromGroup: AugmentedSubmittable<(curatorGroupId: CuratorGroupId | AnyNumber | Uint8Array, curatorId: CuratorId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [CuratorGroupId, CuratorId]>;
+      /**
+       * Remove assets of a channel from storage
+       **/
+      removeChannelAssets: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, channelId: ChannelId | AnyNumber | Uint8Array, assets: Vec<ContentId> | (ContentId | string | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelId, Vec<ContentId>]>;
       removePersonFromVideo: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, videoId: VideoId | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, VideoId]>;
       requestChannelTransfer: AugmentedSubmittable<(actor: ContentActor | { Curator: any } | { Member: any } | { Lead: any } | string | Uint8Array, request: ChannelOwnershipTransferRequest | { channel_id?: any; new_owner?: any; payment?: any; new_reward_account?: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ContentActor, ChannelOwnershipTransferRequest]>;
       /**
@@ -920,14 +920,14 @@ declare module '@polkadot/api/types/submittable' {
        **/
       editPostText: AugmentedSubmittable<(forumUserId: ForumUserId | AnyNumber | Uint8Array, categoryId: CategoryId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, postId: PostId | AnyNumber | Uint8Array, newText: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [ForumUserId, CategoryId, ThreadId, PostId, Bytes]>;
       /**
-       * Edit thread title
+       * Edit thread metadata
        * 
        * <weight>
        * 
        * ## Weight
        * `O (W + V)` where:
        * - `W` is the category depth
-       * - `V` is the length of the thread title.
+       * - `V` is the length of the thread metadata.
        * - DB:
        * - O(W)
        * # </weight>
@@ -2242,31 +2242,31 @@ declare module '@polkadot/api/types/submittable' {
        **/
       addPost: AugmentedSubmittable<(postAuthorId: MemberId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, text: Bytes | string | Uint8Array, editable: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, ThreadId, Bytes, bool]>;
       /**
-       * Changes thread permission mode.
+       * Remove post from storage, with the last parameter indicating whether to also hide it
+       * in the UI.
        * 
        * <weight>
        * 
        * ## Weight
-       * `O (W)` if ThreadMode is close or O(1) otherwise where:
-       * - `W` is the number of whitelisted members in `mode`
+       * `O (1)`
        * - DB:
        * - O(1) doesn't depend on the state or parameters
        * # </weight>
        **/
-      changeThreadMode: AugmentedSubmittable<(memberId: MemberId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, mode: ThreadMode | { Open: any } | { Closed: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, ThreadId, ThreadMode]>;
+      deletePost: AugmentedSubmittable<(deleterId: MemberId | AnyNumber | Uint8Array, postId: PostId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, hide: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, PostId, ThreadId, bool]>;
       /**
-       * Remove post from storage, with the last parameter indicating whether to also hide it
-       * in the UI.
+       * Changes thread permission mode.
        * 
        * <weight>
        * 
        * ## Weight
-       * `O (1)`
+       * `O (W)` if ThreadMode is close or O(1) otherwise where:
+       * - `W` is the number of whitelisted members in `mode`
        * - DB:
        * - O(1) doesn't depend on the state or parameters
        * # </weight>
        **/
-      deletePost: AugmentedSubmittable<(deleterId: MemberId | AnyNumber | Uint8Array, postId: PostId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, hide: bool | boolean | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, PostId, ThreadId, bool]>;
+      changeThreadMode: AugmentedSubmittable<(memberId: MemberId | AnyNumber | Uint8Array, threadId: ThreadId | AnyNumber | Uint8Array, mode: ThreadMode | { Open: any } | { Closed: any } | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [MemberId, ThreadId, ThreadMode]>;
       /**
        * Updates a post with author origin check. Update attempts number is limited.
        * 
@@ -2460,26 +2460,6 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       cancelDeferredSlash: AugmentedSubmittable<(era: EraIndex | AnyNumber | Uint8Array, slashIndices: Vec<u32> | (u32 | AnyNumber | Uint8Array)[]) => SubmittableExtrinsic<ApiType>, [EraIndex, Vec<u32>]>;
-      /**
-       * Declare no desire to either validate or nominate.
-       * 
-       * Effects will be felt at the beginning of the next era.
-       * 
-       * The dispatch origin for this call must be _Signed_ by the controller, not the stash.
-       * And, it can be only called when [`EraElectionStatus`] is `Closed`.
-       * 
-       * # <weight>
-       * - Independent of the arguments. Insignificant complexity.
-       * - Contains one read.
-       * - Writes are limited to the `origin` account key.
-       * --------
-       * Weight: O(1)
-       * DB Weight:
-       * - Read: EraElectionStatus, Ledger
-       * - Write: Validators, Nominators
-       * # </weight>
-       **/
-      chill: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
       /**
        * Force there to be a new era at the end of the next session. After this, it will be
        * reset to normal (non-forced) behaviour.
@@ -2529,6 +2509,26 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       forceUnstake: AugmentedSubmittable<(stash: AccountId | string | Uint8Array, numSlashingSpans: u32 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [AccountId, u32]>;
+      /**
+       * Declare no desire to either validate or nominate.
+       * 
+       * Effects will be felt at the beginning of the next era.
+       * 
+       * The dispatch origin for this call must be _Signed_ by the controller, not the stash.
+       * And, it can be only called when [`EraElectionStatus`] is `Closed`.
+       * 
+       * # <weight>
+       * - Independent of the arguments. Insignificant complexity.
+       * - Contains one read.
+       * - Writes are limited to the `origin` account key.
+       * --------
+       * Weight: O(1)
+       * DB Weight:
+       * - Read: EraElectionStatus, Ledger
+       * - Write: Validators, Nominators
+       * # </weight>
+       **/
+      chill: AugmentedSubmittable<() => SubmittableExtrinsic<ApiType>, []>;
       /**
        * Increments the ideal number of validators.
        * 
@@ -3184,19 +3184,6 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       remark: AugmentedSubmittable<(remark: Bytes | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Bytes]>;
-      /**
-       * Set the new changes trie configuration.
-       * 
-       * # <weight>
-       * - `O(1)`
-       * - 1 storage write or delete (codec `O(1)`).
-       * - 1 call to `deposit_log`: Uses `append` API, so O(1)
-       * - Base Weight: 7.218 µs
-       * - DB Weight:
-       * - Writes: Changes Trie, System Digest
-       * # </weight>
-       **/
-      setChangesTrieConfig: AugmentedSubmittable<(changesTrieConfig: Option<ChangesTrieConfiguration> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<ChangesTrieConfiguration>]>;
       /**
        * Set the new runtime code.
        * 
@@ -3232,6 +3219,19 @@ declare module '@polkadot/api/types/submittable' {
        * # </weight>
        **/
       setHeapPages: AugmentedSubmittable<(pages: u64 | AnyNumber | Uint8Array) => SubmittableExtrinsic<ApiType>, [u64]>;
+      /**
+       * Set the new changes trie configuration.
+       * 
+       * # <weight>
+       * - `O(1)`
+       * - 1 storage write or delete (codec `O(1)`).
+       * - 1 call to `deposit_log`: Uses `append` API, so O(1)
+       * - Base Weight: 7.218 µs
+       * - DB Weight:
+       * - Writes: Changes Trie, System Digest
+       * # </weight>
+       **/
+      setChangesTrieConfig: AugmentedSubmittable<(changesTrieConfig: Option<ChangesTrieConfiguration> | null | object | string | Uint8Array) => SubmittableExtrinsic<ApiType>, [Option<ChangesTrieConfiguration>]>;
       /**
        * Set some items of storage.
        * 

+ 100 - 100
types/augment/augment-types.ts

@@ -84,9 +84,6 @@ declare module '@polkadot/types/types/registry' {
     'Compact<BountyIndex>': Compact<BountyIndex>;
     'Compact<BridgedBlockNumber>': Compact<BridgedBlockNumber>;
     'Compact<CategoryId>': Compact<CategoryId>;
-    'Compact<ChannelCategoryId>': Compact<ChannelCategoryId>;
-    'Compact<ChannelId>': Compact<ChannelId>;
-    'Compact<ChannelOwnershipTransferRequestId>': Compact<ChannelOwnershipTransferRequestId>;
     'Compact<ClassId>': Compact<ClassId>;
     'Compact<ContractDiscriminant>': Compact<ContractDiscriminant>;
     'Compact<CoreIndex>': Compact<CoreIndex>;
@@ -107,6 +104,9 @@ declare module '@polkadot/types/types/registry' {
     'Compact<FundIndex>': Compact<FundIndex>;
     'Compact<Gas>': Compact<Gas>;
     'Compact<GroupIndex>': Compact<GroupIndex>;
+    'Compact<ChannelCategoryId>': Compact<ChannelCategoryId>;
+    'Compact<ChannelId>': Compact<ChannelId>;
+    'Compact<ChannelOwnershipTransferRequestId>': Compact<ChannelOwnershipTransferRequestId>;
     'Compact<Index>': Compact<Index>;
     'Compact<InstanceId>': Compact<InstanceId>;
     'Compact<KeyTypeId>': Compact<KeyTypeId>;
@@ -150,11 +150,11 @@ declare module '@polkadot/types/types/registry' {
     'Compact<RelayChainBlockNumber>': Compact<RelayChainBlockNumber>;
     'Compact<ReplyId>': Compact<ReplyId>;
     'Compact<RewardPoint>': Compact<RewardPoint>;
-    'Compact<SchedulePriority>': Compact<SchedulePriority>;
     'Compact<SeriesId>': Compact<SeriesId>;
     'Compact<SessionIndex>': Compact<SessionIndex>;
     'Compact<SetId>': Compact<SetId>;
     'Compact<SetIndex>': Compact<SetIndex>;
+    'Compact<SchedulePriority>': Compact<SchedulePriority>;
     'Compact<Si0LookupTypeId>': Compact<Si0LookupTypeId>;
     'Compact<Slot>': Compact<Slot>;
     'Compact<SlotNumber>': Compact<SlotNumber>;
@@ -336,27 +336,11 @@ declare module '@polkadot/types/types/registry' {
     'Option<CastVoteOf>': Option<CastVoteOf>;
     'Option<Category>': Option<Category>;
     'Option<CategoryId>': Option<CategoryId>;
-    'Option<ChainId>': Option<ChainId>;
-    'Option<ChainProperties>': Option<ChainProperties>;
-    'Option<ChainType>': Option<ChainType>;
-    'Option<ChangesTrieConfiguration>': Option<ChangesTrieConfiguration>;
-    'Option<ChangesTrieSignal>': Option<ChangesTrieSignal>;
-    'Option<Channel>': Option<Channel>;
-    'Option<ChannelCategory>': Option<ChannelCategory>;
-    'Option<ChannelCategoryCreationParameters>': Option<ChannelCategoryCreationParameters>;
-    'Option<ChannelCategoryId>': Option<ChannelCategoryId>;
-    'Option<ChannelCategoryUpdateParameters>': Option<ChannelCategoryUpdateParameters>;
-    'Option<ChannelCreationParameters>': Option<ChannelCreationParameters>;
-    'Option<ChannelId>': Option<ChannelId>;
-    'Option<ChannelOwner>': Option<ChannelOwner>;
-    'Option<ChannelOwnershipTransferRequest>': Option<ChannelOwnershipTransferRequest>;
-    'Option<ChannelOwnershipTransferRequestId>': Option<ChannelOwnershipTransferRequestId>;
-    'Option<ChannelUpdateParameters>': Option<ChannelUpdateParameters>;
     'Option<ClassDetails>': Option<ClassDetails>;
     'Option<ClassId>': Option<ClassId>;
     'Option<ClassMetadata>': Option<ClassMetadata>;
-    'Option<CodecHash>': Option<CodecHash>;
     'Option<CodeHash>': Option<CodeHash>;
+    'Option<CodecHash>': Option<CodecHash>;
     'Option<CollatorId>': Option<CollatorId>;
     'Option<CollatorSignature>': Option<CollatorSignature>;
     'Option<CollectiveOrigin>': Option<CollectiveOrigin>;
@@ -636,6 +620,22 @@ declare module '@polkadot/types/types/registry' {
     'Option<HrmpChannel>': Option<HrmpChannel>;
     'Option<HrmpChannelId>': Option<HrmpChannelId>;
     'Option<HrmpOpenChannelRequest>': Option<HrmpOpenChannelRequest>;
+    'Option<ChainId>': Option<ChainId>;
+    'Option<ChainProperties>': Option<ChainProperties>;
+    'Option<ChainType>': Option<ChainType>;
+    'Option<ChangesTrieConfiguration>': Option<ChangesTrieConfiguration>;
+    'Option<ChangesTrieSignal>': Option<ChangesTrieSignal>;
+    'Option<Channel>': Option<Channel>;
+    'Option<ChannelCategory>': Option<ChannelCategory>;
+    'Option<ChannelCategoryCreationParameters>': Option<ChannelCategoryCreationParameters>;
+    'Option<ChannelCategoryId>': Option<ChannelCategoryId>;
+    'Option<ChannelCategoryUpdateParameters>': Option<ChannelCategoryUpdateParameters>;
+    'Option<ChannelCreationParameters>': Option<ChannelCreationParameters>;
+    'Option<ChannelId>': Option<ChannelId>;
+    'Option<ChannelOwner>': Option<ChannelOwner>;
+    'Option<ChannelOwnershipTransferRequest>': Option<ChannelOwnershipTransferRequest>;
+    'Option<ChannelOwnershipTransferRequestId>': Option<ChannelOwnershipTransferRequestId>;
+    'Option<ChannelUpdateParameters>': Option<ChannelUpdateParameters>;
     'Option<i128>': Option<i128>;
     'Option<I128>': Option<I128>;
     'Option<i16>': Option<i16>;
@@ -782,10 +782,10 @@ declare module '@polkadot/types/types/registry' {
     'Option<NotConnectedPeer>': Option<NotConnectedPeer>;
     'Option<Null>': Option<Null>;
     'Option<ObjectOwner>': Option<ObjectOwner>;
-    'Option<OffchainAccuracy>': Option<OffchainAccuracy>;
-    'Option<OffchainAccuracyCompact>': Option<OffchainAccuracyCompact>;
     'Option<OffenceDetails>': Option<OffenceDetails>;
     'Option<Offender>': Option<Offender>;
+    'Option<OffchainAccuracy>': Option<OffchainAccuracy>;
+    'Option<OffchainAccuracyCompact>': Option<OffchainAccuracyCompact>;
     'Option<OpaqueCall>': Option<OpaqueCall>;
     'Option<OpaqueMultiaddr>': Option<OpaqueMultiaddr>;
     'Option<OpaqueNetworkState>': Option<OpaqueNetworkState>;
@@ -829,11 +829,11 @@ declare module '@polkadot/types/types/registry' {
     'Option<PalletStorageMetadataLatest>': Option<PalletStorageMetadataLatest>;
     'Option<PalletStorageMetadataV14>': Option<PalletStorageMetadataV14>;
     'Option<PalletVersion>': Option<PalletVersion>;
+    'Option<ParaGenesisArgs>': Option<ParaGenesisArgs>;
     'Option<ParachainDispatchOrigin>': Option<ParachainDispatchOrigin>;
     'Option<ParachainInherentData>': Option<ParachainInherentData>;
     'Option<ParachainProposal>': Option<ParachainProposal>;
     'Option<ParachainsInherentData>': Option<ParachainsInherentData>;
-    'Option<ParaGenesisArgs>': Option<ParaGenesisArgs>;
     'Option<ParaId>': Option<ParaId>;
     'Option<ParaInfo>': Option<ParaInfo>;
     'Option<ParaLifecycle>': Option<ParaLifecycle>;
@@ -955,10 +955,10 @@ declare module '@polkadot/types/types/registry' {
     'Option<Registration>': Option<Registration>;
     'Option<RegistrationJudgement>': Option<RegistrationJudgement>;
     'Option<RelayBlockNumber>': Option<RelayBlockNumber>;
-    'Option<RelayChainBlockNumber>': Option<RelayChainBlockNumber>;
-    'Option<RelayChainHash>': Option<RelayChainHash>;
     'Option<RelayerId>': Option<RelayerId>;
     'Option<RelayHash>': Option<RelayHash>;
+    'Option<RelayChainBlockNumber>': Option<RelayChainBlockNumber>;
+    'Option<RelayChainHash>': Option<RelayChainHash>;
     'Option<Releases>': Option<Releases>;
     'Option<Remark>': Option<Remark>;
     'Option<Renouncing>': Option<Renouncing>;
@@ -984,15 +984,6 @@ declare module '@polkadot/types/types/registry' {
     'Option<RuntimeVersion>': Option<RuntimeVersion>;
     'Option<RuntimeVersionApi>': Option<RuntimeVersionApi>;
     'Option<RuntimeVersionPartial>': Option<RuntimeVersionPartial>;
-    'Option<Schedule>': Option<Schedule>;
-    'Option<Scheduled>': Option<Scheduled>;
-    'Option<ScheduledTo254>': Option<ScheduledTo254>;
-    'Option<SchedulePeriod>': Option<SchedulePeriod>;
-    'Option<SchedulePriority>': Option<SchedulePriority>;
-    'Option<ScheduleTo212>': Option<ScheduleTo212>;
-    'Option<ScheduleTo258>': Option<ScheduleTo258>;
-    'Option<ScheduleTo264>': Option<ScheduleTo264>;
-    'Option<Scheduling>': Option<Scheduling>;
     'Option<Seal>': Option<Seal>;
     'Option<SealV0>': Option<SealV0>;
     'Option<Season>': Option<Season>;
@@ -1024,6 +1015,15 @@ declare module '@polkadot/types/types/registry' {
     'Option<SetId>': Option<SetId>;
     'Option<SetIndex>': Option<SetIndex>;
     'Option<SetLeadParams>': Option<SetLeadParams>;
+    'Option<Schedule>': Option<Schedule>;
+    'Option<Scheduled>': Option<Scheduled>;
+    'Option<ScheduledTo254>': Option<ScheduledTo254>;
+    'Option<SchedulePeriod>': Option<SchedulePeriod>;
+    'Option<SchedulePriority>': Option<SchedulePriority>;
+    'Option<ScheduleTo212>': Option<ScheduleTo212>;
+    'Option<ScheduleTo258>': Option<ScheduleTo258>;
+    'Option<ScheduleTo264>': Option<ScheduleTo264>;
+    'Option<Scheduling>': Option<Scheduling>;
     'Option<Si0Field>': Option<Si0Field>;
     'Option<Si0LookupTypeId>': Option<Si0LookupTypeId>;
     'Option<Si0Path>': Option<Si0Path>;
@@ -1090,7 +1090,6 @@ declare module '@polkadot/types/types/registry' {
     'Option<StakingLedgerTo240>': Option<StakingLedgerTo240>;
     'Option<Statement>': Option<Statement>;
     'Option<StatementKind>': Option<StatementKind>;
-    'Option<StorageChangeSet>': Option<StorageChangeSet>;
     'Option<StorageData>': Option<StorageData>;
     'Option<StorageEntryMetadataLatest>': Option<StorageEntryMetadataLatest>;
     'Option<StorageEntryMetadataV10>': Option<StorageEntryMetadataV10>;
@@ -1120,6 +1119,7 @@ declare module '@polkadot/types/types/registry' {
     'Option<StorageHasherV13>': Option<StorageHasherV13>;
     'Option<StorageHasherV14>': Option<StorageHasherV14>;
     'Option<StorageHasherV9>': Option<StorageHasherV9>;
+    'Option<StorageChangeSet>': Option<StorageChangeSet>;
     'Option<StorageKey>': Option<StorageKey>;
     'Option<StorageKind>': Option<StorageKind>;
     'Option<StorageMetadataLatest>': Option<StorageMetadataLatest>;
@@ -1428,27 +1428,11 @@ declare module '@polkadot/types/types/registry' {
     'Vec<CastVoteOf>': Vec<CastVoteOf>;
     'Vec<Category>': Vec<Category>;
     'Vec<CategoryId>': Vec<CategoryId>;
-    'Vec<ChainId>': Vec<ChainId>;
-    'Vec<ChainProperties>': Vec<ChainProperties>;
-    'Vec<ChainType>': Vec<ChainType>;
-    'Vec<ChangesTrieConfiguration>': Vec<ChangesTrieConfiguration>;
-    'Vec<ChangesTrieSignal>': Vec<ChangesTrieSignal>;
-    'Vec<Channel>': Vec<Channel>;
-    'Vec<ChannelCategory>': Vec<ChannelCategory>;
-    'Vec<ChannelCategoryCreationParameters>': Vec<ChannelCategoryCreationParameters>;
-    'Vec<ChannelCategoryId>': Vec<ChannelCategoryId>;
-    'Vec<ChannelCategoryUpdateParameters>': Vec<ChannelCategoryUpdateParameters>;
-    'Vec<ChannelCreationParameters>': Vec<ChannelCreationParameters>;
-    'Vec<ChannelId>': Vec<ChannelId>;
-    'Vec<ChannelOwner>': Vec<ChannelOwner>;
-    'Vec<ChannelOwnershipTransferRequest>': Vec<ChannelOwnershipTransferRequest>;
-    'Vec<ChannelOwnershipTransferRequestId>': Vec<ChannelOwnershipTransferRequestId>;
-    'Vec<ChannelUpdateParameters>': Vec<ChannelUpdateParameters>;
     'Vec<ClassDetails>': Vec<ClassDetails>;
     'Vec<ClassId>': Vec<ClassId>;
     'Vec<ClassMetadata>': Vec<ClassMetadata>;
-    'Vec<CodecHash>': Vec<CodecHash>;
     'Vec<CodeHash>': Vec<CodeHash>;
+    'Vec<CodecHash>': Vec<CodecHash>;
     'Vec<CollatorId>': Vec<CollatorId>;
     'Vec<CollatorSignature>': Vec<CollatorSignature>;
     'Vec<CollectiveOrigin>': Vec<CollectiveOrigin>;
@@ -1728,6 +1712,22 @@ declare module '@polkadot/types/types/registry' {
     'Vec<HrmpChannel>': Vec<HrmpChannel>;
     'Vec<HrmpChannelId>': Vec<HrmpChannelId>;
     'Vec<HrmpOpenChannelRequest>': Vec<HrmpOpenChannelRequest>;
+    'Vec<ChainId>': Vec<ChainId>;
+    'Vec<ChainProperties>': Vec<ChainProperties>;
+    'Vec<ChainType>': Vec<ChainType>;
+    'Vec<ChangesTrieConfiguration>': Vec<ChangesTrieConfiguration>;
+    'Vec<ChangesTrieSignal>': Vec<ChangesTrieSignal>;
+    'Vec<Channel>': Vec<Channel>;
+    'Vec<ChannelCategory>': Vec<ChannelCategory>;
+    'Vec<ChannelCategoryCreationParameters>': Vec<ChannelCategoryCreationParameters>;
+    'Vec<ChannelCategoryId>': Vec<ChannelCategoryId>;
+    'Vec<ChannelCategoryUpdateParameters>': Vec<ChannelCategoryUpdateParameters>;
+    'Vec<ChannelCreationParameters>': Vec<ChannelCreationParameters>;
+    'Vec<ChannelId>': Vec<ChannelId>;
+    'Vec<ChannelOwner>': Vec<ChannelOwner>;
+    'Vec<ChannelOwnershipTransferRequest>': Vec<ChannelOwnershipTransferRequest>;
+    'Vec<ChannelOwnershipTransferRequestId>': Vec<ChannelOwnershipTransferRequestId>;
+    'Vec<ChannelUpdateParameters>': Vec<ChannelUpdateParameters>;
     'Vec<i128>': Vec<i128>;
     'Vec<I128>': Vec<I128>;
     'Vec<i16>': Vec<i16>;
@@ -1874,10 +1874,10 @@ declare module '@polkadot/types/types/registry' {
     'Vec<NotConnectedPeer>': Vec<NotConnectedPeer>;
     'Vec<Null>': Vec<Null>;
     'Vec<ObjectOwner>': Vec<ObjectOwner>;
-    'Vec<OffchainAccuracy>': Vec<OffchainAccuracy>;
-    'Vec<OffchainAccuracyCompact>': Vec<OffchainAccuracyCompact>;
     'Vec<OffenceDetails>': Vec<OffenceDetails>;
     'Vec<Offender>': Vec<Offender>;
+    'Vec<OffchainAccuracy>': Vec<OffchainAccuracy>;
+    'Vec<OffchainAccuracyCompact>': Vec<OffchainAccuracyCompact>;
     'Vec<OpaqueCall>': Vec<OpaqueCall>;
     'Vec<OpaqueMultiaddr>': Vec<OpaqueMultiaddr>;
     'Vec<OpaqueNetworkState>': Vec<OpaqueNetworkState>;
@@ -1921,11 +1921,11 @@ declare module '@polkadot/types/types/registry' {
     'Vec<PalletStorageMetadataLatest>': Vec<PalletStorageMetadataLatest>;
     'Vec<PalletStorageMetadataV14>': Vec<PalletStorageMetadataV14>;
     'Vec<PalletVersion>': Vec<PalletVersion>;
+    'Vec<ParaGenesisArgs>': Vec<ParaGenesisArgs>;
     'Vec<ParachainDispatchOrigin>': Vec<ParachainDispatchOrigin>;
     'Vec<ParachainInherentData>': Vec<ParachainInherentData>;
     'Vec<ParachainProposal>': Vec<ParachainProposal>;
     'Vec<ParachainsInherentData>': Vec<ParachainsInherentData>;
-    'Vec<ParaGenesisArgs>': Vec<ParaGenesisArgs>;
     'Vec<ParaId>': Vec<ParaId>;
     'Vec<ParaInfo>': Vec<ParaInfo>;
     'Vec<ParaLifecycle>': Vec<ParaLifecycle>;
@@ -2047,10 +2047,10 @@ declare module '@polkadot/types/types/registry' {
     'Vec<Registration>': Vec<Registration>;
     'Vec<RegistrationJudgement>': Vec<RegistrationJudgement>;
     'Vec<RelayBlockNumber>': Vec<RelayBlockNumber>;
-    'Vec<RelayChainBlockNumber>': Vec<RelayChainBlockNumber>;
-    'Vec<RelayChainHash>': Vec<RelayChainHash>;
     'Vec<RelayerId>': Vec<RelayerId>;
     'Vec<RelayHash>': Vec<RelayHash>;
+    'Vec<RelayChainBlockNumber>': Vec<RelayChainBlockNumber>;
+    'Vec<RelayChainHash>': Vec<RelayChainHash>;
     'Vec<Releases>': Vec<Releases>;
     'Vec<Remark>': Vec<Remark>;
     'Vec<Renouncing>': Vec<Renouncing>;
@@ -2076,15 +2076,6 @@ declare module '@polkadot/types/types/registry' {
     'Vec<RuntimeVersion>': Vec<RuntimeVersion>;
     'Vec<RuntimeVersionApi>': Vec<RuntimeVersionApi>;
     'Vec<RuntimeVersionPartial>': Vec<RuntimeVersionPartial>;
-    'Vec<Schedule>': Vec<Schedule>;
-    'Vec<Scheduled>': Vec<Scheduled>;
-    'Vec<ScheduledTo254>': Vec<ScheduledTo254>;
-    'Vec<SchedulePeriod>': Vec<SchedulePeriod>;
-    'Vec<SchedulePriority>': Vec<SchedulePriority>;
-    'Vec<ScheduleTo212>': Vec<ScheduleTo212>;
-    'Vec<ScheduleTo258>': Vec<ScheduleTo258>;
-    'Vec<ScheduleTo264>': Vec<ScheduleTo264>;
-    'Vec<Scheduling>': Vec<Scheduling>;
     'Vec<Seal>': Vec<Seal>;
     'Vec<SealV0>': Vec<SealV0>;
     'Vec<Season>': Vec<Season>;
@@ -2116,6 +2107,15 @@ declare module '@polkadot/types/types/registry' {
     'Vec<SetId>': Vec<SetId>;
     'Vec<SetIndex>': Vec<SetIndex>;
     'Vec<SetLeadParams>': Vec<SetLeadParams>;
+    'Vec<Schedule>': Vec<Schedule>;
+    'Vec<Scheduled>': Vec<Scheduled>;
+    'Vec<ScheduledTo254>': Vec<ScheduledTo254>;
+    'Vec<SchedulePeriod>': Vec<SchedulePeriod>;
+    'Vec<SchedulePriority>': Vec<SchedulePriority>;
+    'Vec<ScheduleTo212>': Vec<ScheduleTo212>;
+    'Vec<ScheduleTo258>': Vec<ScheduleTo258>;
+    'Vec<ScheduleTo264>': Vec<ScheduleTo264>;
+    'Vec<Scheduling>': Vec<Scheduling>;
     'Vec<Si0Field>': Vec<Si0Field>;
     'Vec<Si0LookupTypeId>': Vec<Si0LookupTypeId>;
     'Vec<Si0Path>': Vec<Si0Path>;
@@ -2182,7 +2182,6 @@ declare module '@polkadot/types/types/registry' {
     'Vec<StakingLedgerTo240>': Vec<StakingLedgerTo240>;
     'Vec<Statement>': Vec<Statement>;
     'Vec<StatementKind>': Vec<StatementKind>;
-    'Vec<StorageChangeSet>': Vec<StorageChangeSet>;
     'Vec<StorageData>': Vec<StorageData>;
     'Vec<StorageEntryMetadataLatest>': Vec<StorageEntryMetadataLatest>;
     'Vec<StorageEntryMetadataV10>': Vec<StorageEntryMetadataV10>;
@@ -2212,6 +2211,7 @@ declare module '@polkadot/types/types/registry' {
     'Vec<StorageHasherV13>': Vec<StorageHasherV13>;
     'Vec<StorageHasherV14>': Vec<StorageHasherV14>;
     'Vec<StorageHasherV9>': Vec<StorageHasherV9>;
+    'Vec<StorageChangeSet>': Vec<StorageChangeSet>;
     'Vec<StorageKey>': Vec<StorageKey>;
     'Vec<StorageKind>': Vec<StorageKind>;
     'Vec<StorageMetadataLatest>': Vec<StorageMetadataLatest>;
@@ -2520,27 +2520,11 @@ declare module '@polkadot/types/types/registry' {
     CastVoteOf: CastVoteOf;
     Category: Category;
     CategoryId: CategoryId;
-    ChainId: ChainId;
-    ChainProperties: ChainProperties;
-    ChainType: ChainType;
-    ChangesTrieConfiguration: ChangesTrieConfiguration;
-    ChangesTrieSignal: ChangesTrieSignal;
-    Channel: Channel;
-    ChannelCategory: ChannelCategory;
-    ChannelCategoryCreationParameters: ChannelCategoryCreationParameters;
-    ChannelCategoryId: ChannelCategoryId;
-    ChannelCategoryUpdateParameters: ChannelCategoryUpdateParameters;
-    ChannelCreationParameters: ChannelCreationParameters;
-    ChannelId: ChannelId;
-    ChannelOwner: ChannelOwner;
-    ChannelOwnershipTransferRequest: ChannelOwnershipTransferRequest;
-    ChannelOwnershipTransferRequestId: ChannelOwnershipTransferRequestId;
-    ChannelUpdateParameters: ChannelUpdateParameters;
     ClassDetails: ClassDetails;
     ClassId: ClassId;
     ClassMetadata: ClassMetadata;
-    CodecHash: CodecHash;
     CodeHash: CodeHash;
+    CodecHash: CodecHash;
     CollatorId: CollatorId;
     CollatorSignature: CollatorSignature;
     CollectiveOrigin: CollectiveOrigin;
@@ -2820,6 +2804,22 @@ declare module '@polkadot/types/types/registry' {
     HrmpChannel: HrmpChannel;
     HrmpChannelId: HrmpChannelId;
     HrmpOpenChannelRequest: HrmpOpenChannelRequest;
+    ChainId: ChainId;
+    ChainProperties: ChainProperties;
+    ChainType: ChainType;
+    ChangesTrieConfiguration: ChangesTrieConfiguration;
+    ChangesTrieSignal: ChangesTrieSignal;
+    Channel: Channel;
+    ChannelCategory: ChannelCategory;
+    ChannelCategoryCreationParameters: ChannelCategoryCreationParameters;
+    ChannelCategoryId: ChannelCategoryId;
+    ChannelCategoryUpdateParameters: ChannelCategoryUpdateParameters;
+    ChannelCreationParameters: ChannelCreationParameters;
+    ChannelId: ChannelId;
+    ChannelOwner: ChannelOwner;
+    ChannelOwnershipTransferRequest: ChannelOwnershipTransferRequest;
+    ChannelOwnershipTransferRequestId: ChannelOwnershipTransferRequestId;
+    ChannelUpdateParameters: ChannelUpdateParameters;
     i128: i128;
     I128: I128;
     i16: i16;
@@ -2966,10 +2966,10 @@ declare module '@polkadot/types/types/registry' {
     NotConnectedPeer: NotConnectedPeer;
     Null: Null;
     ObjectOwner: ObjectOwner;
-    OffchainAccuracy: OffchainAccuracy;
-    OffchainAccuracyCompact: OffchainAccuracyCompact;
     OffenceDetails: OffenceDetails;
     Offender: Offender;
+    OffchainAccuracy: OffchainAccuracy;
+    OffchainAccuracyCompact: OffchainAccuracyCompact;
     OpaqueCall: OpaqueCall;
     OpaqueMultiaddr: OpaqueMultiaddr;
     OpaqueNetworkState: OpaqueNetworkState;
@@ -3013,11 +3013,11 @@ declare module '@polkadot/types/types/registry' {
     PalletStorageMetadataLatest: PalletStorageMetadataLatest;
     PalletStorageMetadataV14: PalletStorageMetadataV14;
     PalletVersion: PalletVersion;
+    ParaGenesisArgs: ParaGenesisArgs;
     ParachainDispatchOrigin: ParachainDispatchOrigin;
     ParachainInherentData: ParachainInherentData;
     ParachainProposal: ParachainProposal;
     ParachainsInherentData: ParachainsInherentData;
-    ParaGenesisArgs: ParaGenesisArgs;
     ParaId: ParaId;
     ParaInfo: ParaInfo;
     ParaLifecycle: ParaLifecycle;
@@ -3139,10 +3139,10 @@ declare module '@polkadot/types/types/registry' {
     Registration: Registration;
     RegistrationJudgement: RegistrationJudgement;
     RelayBlockNumber: RelayBlockNumber;
-    RelayChainBlockNumber: RelayChainBlockNumber;
-    RelayChainHash: RelayChainHash;
     RelayerId: RelayerId;
     RelayHash: RelayHash;
+    RelayChainBlockNumber: RelayChainBlockNumber;
+    RelayChainHash: RelayChainHash;
     Releases: Releases;
     Remark: Remark;
     Renouncing: Renouncing;
@@ -3168,15 +3168,6 @@ declare module '@polkadot/types/types/registry' {
     RuntimeVersion: RuntimeVersion;
     RuntimeVersionApi: RuntimeVersionApi;
     RuntimeVersionPartial: RuntimeVersionPartial;
-    Schedule: Schedule;
-    Scheduled: Scheduled;
-    ScheduledTo254: ScheduledTo254;
-    SchedulePeriod: SchedulePeriod;
-    SchedulePriority: SchedulePriority;
-    ScheduleTo212: ScheduleTo212;
-    ScheduleTo258: ScheduleTo258;
-    ScheduleTo264: ScheduleTo264;
-    Scheduling: Scheduling;
     Seal: Seal;
     SealV0: SealV0;
     Season: Season;
@@ -3208,6 +3199,15 @@ declare module '@polkadot/types/types/registry' {
     SetId: SetId;
     SetIndex: SetIndex;
     SetLeadParams: SetLeadParams;
+    Schedule: Schedule;
+    Scheduled: Scheduled;
+    ScheduledTo254: ScheduledTo254;
+    SchedulePeriod: SchedulePeriod;
+    SchedulePriority: SchedulePriority;
+    ScheduleTo212: ScheduleTo212;
+    ScheduleTo258: ScheduleTo258;
+    ScheduleTo264: ScheduleTo264;
+    Scheduling: Scheduling;
     Si0Field: Si0Field;
     Si0LookupTypeId: Si0LookupTypeId;
     Si0Path: Si0Path;
@@ -3274,7 +3274,6 @@ declare module '@polkadot/types/types/registry' {
     StakingLedgerTo240: StakingLedgerTo240;
     Statement: Statement;
     StatementKind: StatementKind;
-    StorageChangeSet: StorageChangeSet;
     StorageData: StorageData;
     StorageEntryMetadataLatest: StorageEntryMetadataLatest;
     StorageEntryMetadataV10: StorageEntryMetadataV10;
@@ -3304,6 +3303,7 @@ declare module '@polkadot/types/types/registry' {
     StorageHasherV13: StorageHasherV13;
     StorageHasherV14: StorageHasherV14;
     StorageHasherV9: StorageHasherV9;
+    StorageChangeSet: StorageChangeSet;
     StorageKey: StorageKey;
     StorageKind: StorageKind;
     StorageMetadataLatest: StorageMetadataLatest;

+ 0 - 1
types/src/forum.ts

@@ -40,7 +40,6 @@ export class Post extends JoyStructDecorated({
 }) {}
 
 export class Thread extends JoyStructDecorated({
-  metadata_hash: Hash,
   category_id: CategoryId,
   author_id: ForumUserId,
   poll: Option.with(Poll),

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