xiao.qiang 11 сар өмнө
parent
commit
15167c4165

+ 8 - 3
client/hotcoin.test.js

@@ -86,9 +86,14 @@ describe('hotcoin站点测试', () => {
         }
 
         if (localStorage) {
+            let storage = {}
+            try {
+                storage = JSON.parse(`${localStorage}`) ||{}
+            } catch (e) {
+                console.error(e)
+            }
 
             // let script = `
-            let storage = JSON.parse(`${localStorage}`) || {}
             //     for (const k in storage) {
             //         localStorage.setItem(k,storage[k]);
             //     }
@@ -202,7 +207,7 @@ describe('hotcoin站点测试', () => {
             let res = inflate(data/* , { to: 'string' } */)
 
             //字符串中有2个隐藏字符 DCC EM
-            let regex = new RegExp('(\\n|' + String.fromCharCode(18) + '|' + String.fromCharCode(31) + ')', 'g')
+            let regex = new RegExp('(\\n|' + String.fromCharCode(18) + '|' + String.fromCharCode(30)+ '|' + String.fromCharCode(31) + ')', 'g')
 
             let keys = inflate(data, { to: 'string' }).split(regex).filter(s => (s || '').includes('type.googleapis.com')).flatMap(s => (s || '').split('/'))
             // CommonPbMsg
@@ -214,7 +219,7 @@ describe('hotcoin站点测试', () => {
                 default: {
                     let root = require('./hotconi/proto/' + (keys.join('.') || '').replaceAll('"', ''))
 
-                    let response = root.type.googleapis.com.Response.decode(res)
+                    let response = root.type.googleapis.com[keys[1]].Response.decode(res)
 
                     let object = response.toJSON()
 

+ 960 - 932
client/hotconi/proto/type.googleapis.com.CandlesPbMsg.js

@@ -36,962 +36,990 @@ $root.type = (function() {
              */
             var com = {};
 
-            com.Response = (function() {
+            com.CandlesPbMsg = (function() {
 
                 /**
-                 * Properties of a Response.
+                 * Namespace CandlesPbMsg.
                  * @memberof type.googleapis.com
-                 * @interface IResponse
-                 * @property {string|null} [biz] Response biz
-                 * @property {string|null} [type] Response type
-                 * @property {string|null} [base] Response base
-                 * @property {string|null} [quote] Response quote
-                 * @property {string|null} [contractcode] Response contractcode
-                 * @property {string|null} [granularity] Response granularity
-                 * @property {type.googleapis.com.IData|null} [data] Response data
-                 * @property {number|null} [env] Response env
+                 * @namespace
                  */
+                var CandlesPbMsg = {};
+
+                CandlesPbMsg.Response = (function() {
+
+                    /**
+                     * Properties of a Response.
+                     * @memberof type.googleapis.com.CandlesPbMsg
+                     * @interface IResponse
+                     * @property {string|null} [biz] Response biz
+                     * @property {string|null} [type] Response type
+                     * @property {string|null} [base] Response base
+                     * @property {string|null} [quote] Response quote
+                     * @property {string|null} [contractcode] Response contractcode
+                     * @property {string|null} [granularity] Response granularity
+                     * @property {type.googleapis.com.CandlesPbMsg.IData|null} [data] Response data
+                     * @property {number|null} [env] Response env
+                     */
+
+                    /**
+                     * Constructs a new Response.
+                     * @memberof type.googleapis.com.CandlesPbMsg
+                     * @classdesc Represents a Response.
+                     * @implements IResponse
+                     * @constructor
+                     * @param {type.googleapis.com.CandlesPbMsg.IResponse=} [properties] Properties to set
+                     */
+                    function Response(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]];
+                    }
 
-                /**
-                 * Constructs a new Response.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Response.
-                 * @implements IResponse
-                 * @constructor
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 */
-                function Response(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]];
-                }
-
-                /**
-                 * Response biz.
-                 * @member {string} biz
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.biz = "";
-
-                /**
-                 * Response type.
-                 * @member {string} type
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.type = "";
-
-                /**
-                 * Response base.
-                 * @member {string} base
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.base = "";
-
-                /**
-                 * Response quote.
-                 * @member {string} quote
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.quote = "";
-
-                /**
-                 * Response contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.contractcode = "";
-
-                /**
-                 * Response granularity.
-                 * @member {string} granularity
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.granularity = "";
-
-                /**
-                 * Response data.
-                 * @member {type.googleapis.com.IData|null|undefined} data
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.data = null;
-
-                /**
-                 * Response env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.env = 0;
-
-                /**
-                 * Creates a new Response instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Response} Response instance
-                 */
-                Response.create = function create(properties) {
-                    return new Response(properties);
-                };
-
-                /**
-                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
-                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
-                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
-                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
-                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
-                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
-                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.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.type.googleapis.com.Response();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.biz = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.type = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.base = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.quote = reader.string();
-                                break;
-                            }
-                        case 5: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.granularity = reader.string();
-                                break;
-                            }
-                        case 7: {
-                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
-                                break;
-                            }
-                        case 8: {
-                                message.env = reader.int32();
+                    /**
+                     * Response biz.
+                     * @member {string} biz
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.biz = "";
+
+                    /**
+                     * Response type.
+                     * @member {string} type
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.type = "";
+
+                    /**
+                     * Response base.
+                     * @member {string} base
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.base = "";
+
+                    /**
+                     * Response quote.
+                     * @member {string} quote
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.quote = "";
+
+                    /**
+                     * Response contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.contractcode = "";
+
+                    /**
+                     * Response granularity.
+                     * @member {string} granularity
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.granularity = "";
+
+                    /**
+                     * Response data.
+                     * @member {type.googleapis.com.CandlesPbMsg.IData|null|undefined} data
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.data = null;
+
+                    /**
+                     * Response env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.env = 0;
+
+                    /**
+                     * Creates a new Response instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IResponse=} [properties] Properties to set
+                     * @returns {type.googleapis.com.CandlesPbMsg.Response} Response instance
+                     */
+                    Response.create = function create(properties) {
+                        return new Response(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.CandlesPbMsg.Response.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                        if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                        if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                        if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                        if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                        if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                            $root.type.googleapis.com.CandlesPbMsg.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.CandlesPbMsg.Response.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.CandlesPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.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.type.googleapis.com.CandlesPbMsg.Response();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.biz = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.type = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.base = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.quote = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.granularity = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.data = $root.type.googleapis.com.CandlesPbMsg.Data.decode(reader, reader.uint32());
+                                    break;
+                                }
+                            case 8: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Response message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Response.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        if (!$util.isString(message.biz))
-                            return "biz: string expected";
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        if (!$util.isString(message.type))
-                            return "type: string expected";
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        if (!$util.isString(message.base))
-                            return "base: string expected";
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        if (!$util.isString(message.quote))
-                            return "quote: string expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        if (!$util.isString(message.granularity))
-                            return "granularity: string expected";
-                    if (message.data != null && message.hasOwnProperty("data")) {
-                        var error = $root.type.googleapis.com.Data.verify(message.data);
-                        if (error)
-                            return "data." + error;
-                    }
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Response} Response
-                 */
-                Response.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Response)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.CandlesPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Response message.
+                     * @function verify
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Response.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            if (!$util.isString(message.biz))
+                                return "biz: string expected";
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            if (!$util.isString(message.type))
+                                return "type: string expected";
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            if (!$util.isString(message.base))
+                                return "base: string expected";
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            if (!$util.isString(message.quote))
+                                return "quote: string expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            if (!$util.isString(message.granularity))
+                                return "granularity: string expected";
+                        if (message.data != null && message.hasOwnProperty("data")) {
+                            var error = $root.type.googleapis.com.CandlesPbMsg.Data.verify(message.data);
+                            if (error)
+                                return "data." + error;
+                        }
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.CandlesPbMsg.Response} Response
+                     */
+                    Response.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.CandlesPbMsg.Response)
+                            return object;
+                        var message = new $root.type.googleapis.com.CandlesPbMsg.Response();
+                        if (object.biz != null)
+                            message.biz = String(object.biz);
+                        if (object.type != null)
+                            message.type = String(object.type);
+                        if (object.base != null)
+                            message.base = String(object.base);
+                        if (object.quote != null)
+                            message.quote = String(object.quote);
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.granularity != null)
+                            message.granularity = String(object.granularity);
+                        if (object.data != null) {
+                            if (typeof object.data !== "object")
+                                throw TypeError(".type.googleapis.com.CandlesPbMsg.Response.data: object expected");
+                            message.data = $root.type.googleapis.com.CandlesPbMsg.Data.fromObject(object.data);
+                        }
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Response message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.Response} message Response
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Response.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.biz = "";
+                            object.type = "";
+                            object.base = "";
+                            object.quote = "";
+                            object.contractcode = "";
+                            object.granularity = "";
+                            object.data = null;
+                            object.env = 0;
+                        }
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            object.biz = message.biz;
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            object.type = message.type;
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            object.base = message.base;
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            object.quote = message.quote;
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            object.granularity = message.granularity;
+                        if (message.data != null && message.hasOwnProperty("data"))
+                            object.data = $root.type.googleapis.com.CandlesPbMsg.Data.toObject(message.data, options);
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
                         return object;
-                    var message = new $root.type.googleapis.com.Response();
-                    if (object.biz != null)
-                        message.biz = String(object.biz);
-                    if (object.type != null)
-                        message.type = String(object.type);
-                    if (object.base != null)
-                        message.base = String(object.base);
-                    if (object.quote != null)
-                        message.quote = String(object.quote);
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.granularity != null)
-                        message.granularity = String(object.granularity);
-                    if (object.data != null) {
-                        if (typeof object.data !== "object")
-                            throw TypeError(".type.googleapis.com.Response.data: object expected");
-                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
-                    }
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Response message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.Response} message Response
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Response.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.biz = "";
-                        object.type = "";
-                        object.base = "";
-                        object.quote = "";
-                        object.contractcode = "";
-                        object.granularity = "";
-                        object.data = null;
-                        object.env = 0;
-                    }
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        object.biz = message.biz;
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        object.type = message.type;
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        object.base = message.base;
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        object.quote = message.quote;
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        object.granularity = message.granularity;
-                    if (message.data != null && message.hasOwnProperty("data"))
-                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    return object;
-                };
-
-                /**
-                 * Converts this Response to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Response.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Response
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Response to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Response.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Response
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.CandlesPbMsg.Response
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.CandlesPbMsg.Response";
+                    };
+
+                    return Response;
+                })();
+
+                CandlesPbMsg.Data = (function() {
+
+                    /**
+                     * Properties of a Data.
+                     * @memberof type.googleapis.com.CandlesPbMsg
+                     * @interface IData
+                     * @property {string|null} [typeUrl] Data typeUrl
+                     * @property {Array.<type.googleapis.com.CandlesPbMsg.IBody>|null} [value] Data value
+                     */
+
+                    /**
+                     * Constructs a new Data.
+                     * @memberof type.googleapis.com.CandlesPbMsg
+                     * @classdesc Represents a Data.
+                     * @implements IData
+                     * @constructor
+                     * @param {type.googleapis.com.CandlesPbMsg.IData=} [properties] Properties to set
+                     */
+                    function Data(properties) {
+                        this.value = [];
+                        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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Response";
-                };
 
-                return Response;
-            })();
-
-            com.Data = (function() {
-
-                /**
-                 * Properties of a Data.
-                 * @memberof type.googleapis.com
-                 * @interface IData
-                 * @property {string|null} [typeUrl] Data typeUrl
-                 * @property {type.googleapis.com.IKlineData|null} [value] Data value
-                 */
-
-                /**
-                 * Constructs a new Data.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Data.
-                 * @implements IData
-                 * @constructor
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 */
-                function Data(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]];
-                }
-
-                /**
-                 * Data typeUrl.
-                 * @member {string} typeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.typeUrl = "";
-
-                /**
-                 * Data value.
-                 * @member {type.googleapis.com.IKlineData|null|undefined} value
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.value = null;
-
-                /**
-                 * Creates a new Data instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Data} Data instance
-                 */
-                Data.create = function create(properties) {
-                    return new Data(properties);
-                };
-
-                /**
-                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
-                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
-                        $root.type.googleapis.com.KlineData.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.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.type.googleapis.com.Data();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.typeUrl = reader.string();
+                    /**
+                     * Data typeUrl.
+                     * @member {string} typeUrl
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.typeUrl = "";
+
+                    /**
+                     * Data value.
+                     * @member {Array.<type.googleapis.com.CandlesPbMsg.IBody>} value
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.value = $util.emptyArray;
+
+                    /**
+                     * Creates a new Data instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IData=} [properties] Properties to set
+                     * @returns {type.googleapis.com.CandlesPbMsg.Data} Data instance
+                     */
+                    Data.create = function create(properties) {
+                        return new Data(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.CandlesPbMsg.Data.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                        if (message.value != null && message.value.length)
+                            for (var i = 0; i < message.value.length; ++i)
+                                $root.type.googleapis.com.CandlesPbMsg.Body.encode(message.value[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.CandlesPbMsg.Data.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.CandlesPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.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.type.googleapis.com.CandlesPbMsg.Data();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.typeUrl = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    if (!(message.value && message.value.length))
+                                        message.value = [];
+                                    message.value.push($root.type.googleapis.com.CandlesPbMsg.Body.decode(reader, reader.uint32()));
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 2: {
-                                message.value = $root.type.googleapis.com.KlineData.decode(reader, reader.uint32());
-                                break;
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.CandlesPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Data message.
+                     * @function verify
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Data.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            if (!$util.isString(message.typeUrl))
+                                return "typeUrl: string expected";
+                        if (message.value != null && message.hasOwnProperty("value")) {
+                            if (!Array.isArray(message.value))
+                                return "value: array expected";
+                            for (var i = 0; i < message.value.length; ++i) {
+                                var error = $root.type.googleapis.com.CandlesPbMsg.Body.verify(message.value[i]);
+                                if (error)
+                                    return "value." + error;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Data message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Data.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        if (!$util.isString(message.typeUrl))
-                            return "typeUrl: string expected";
-                    if (message.value != null && message.hasOwnProperty("value")) {
-                        var error = $root.type.googleapis.com.KlineData.verify(message.value);
-                        if (error)
-                            return "value." + error;
-                    }
-                    return null;
-                };
-
-                /**
-                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Data} Data
-                 */
-                Data.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Data)
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.CandlesPbMsg.Data} Data
+                     */
+                    Data.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.CandlesPbMsg.Data)
+                            return object;
+                        var message = new $root.type.googleapis.com.CandlesPbMsg.Data();
+                        if (object.typeUrl != null)
+                            message.typeUrl = String(object.typeUrl);
+                        if (object.value) {
+                            if (!Array.isArray(object.value))
+                                throw TypeError(".type.googleapis.com.CandlesPbMsg.Data.value: array expected");
+                            message.value = [];
+                            for (var i = 0; i < object.value.length; ++i) {
+                                if (typeof object.value[i] !== "object")
+                                    throw TypeError(".type.googleapis.com.CandlesPbMsg.Data.value: object expected");
+                                message.value[i] = $root.type.googleapis.com.CandlesPbMsg.Body.fromObject(object.value[i]);
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Data message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.Data} message Data
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Data.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.arrays || options.defaults)
+                            object.value = [];
+                        if (options.defaults)
+                            object.typeUrl = "";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            object.typeUrl = message.typeUrl;
+                        if (message.value && message.value.length) {
+                            object.value = [];
+                            for (var j = 0; j < message.value.length; ++j)
+                                object.value[j] = $root.type.googleapis.com.CandlesPbMsg.Body.toObject(message.value[j], options);
+                        }
                         return object;
-                    var message = new $root.type.googleapis.com.Data();
-                    if (object.typeUrl != null)
-                        message.typeUrl = String(object.typeUrl);
-                    if (object.value != null) {
-                        if (typeof object.value !== "object")
-                            throw TypeError(".type.googleapis.com.Data.value: object expected");
-                        message.value = $root.type.googleapis.com.KlineData.fromObject(object.value);
-                    }
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Data message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.Data} message Data
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Data.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.typeUrl = "";
-                        object.value = null;
-                    }
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        object.typeUrl = message.typeUrl;
-                    if (message.value != null && message.hasOwnProperty("value"))
-                        object.value = $root.type.googleapis.com.KlineData.toObject(message.value, options);
-                    return object;
-                };
-
-                /**
-                 * Converts this Data to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Data.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Data
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Data to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Data.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Data
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.CandlesPbMsg.Data
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.CandlesPbMsg.Data";
+                    };
+
+                    return Data;
+                })();
+
+                CandlesPbMsg.Body = (function() {
+
+                    /**
+                     * Properties of a Body.
+                     * @memberof type.googleapis.com.CandlesPbMsg
+                     * @interface IBody
+                     * @property {number|Long|null} [createate] Body createate
+                     * @property {string|null} [low] Body low
+                     * @property {string|null} [high] Body high
+                     * @property {string|null} [open] Body open
+                     * @property {string|null} [close] Body close
+                     * @property {string|null} [amount] Body amount
+                     * @property {string|null} [size] Body size
+                     */
+
+                    /**
+                     * Constructs a new Body.
+                     * @memberof type.googleapis.com.CandlesPbMsg
+                     * @classdesc Represents a Body.
+                     * @implements IBody
+                     * @constructor
+                     * @param {type.googleapis.com.CandlesPbMsg.IBody=} [properties] Properties to set
+                     */
+                    function Body(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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Data";
-                };
-
-                return Data;
-            })();
-
-            com.KlineData = (function() {
-
-                /**
-                 * Properties of a KlineData.
-                 * @memberof type.googleapis.com
-                 * @interface IKlineData
-                 * @property {number|Long|null} [createate] KlineData createate
-                 * @property {string|null} [low] KlineData low
-                 * @property {string|null} [high] KlineData high
-                 * @property {string|null} [open] KlineData open
-                 * @property {string|null} [close] KlineData close
-                 * @property {string|null} [amount] KlineData amount
-                 * @property {string|null} [size] KlineData size
-                 */
-
-                /**
-                 * Constructs a new KlineData.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a KlineData.
-                 * @implements IKlineData
-                 * @constructor
-                 * @param {type.googleapis.com.IKlineData=} [properties] Properties to set
-                 */
-                function KlineData(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]];
-                }
-
-                /**
-                 * KlineData createate.
-                 * @member {number|Long} createate
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.createate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
-
-                /**
-                 * KlineData low.
-                 * @member {string} low
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.low = "";
-
-                /**
-                 * KlineData high.
-                 * @member {string} high
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.high = "";
-
-                /**
-                 * KlineData open.
-                 * @member {string} open
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.open = "";
-
-                /**
-                 * KlineData close.
-                 * @member {string} close
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.close = "";
-
-                /**
-                 * KlineData amount.
-                 * @member {string} amount
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.amount = "";
-
-                /**
-                 * KlineData size.
-                 * @member {string} size
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 */
-                KlineData.prototype.size = "";
-
-                /**
-                 * Creates a new KlineData instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {type.googleapis.com.IKlineData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.KlineData} KlineData instance
-                 */
-                KlineData.create = function create(properties) {
-                    return new KlineData(properties);
-                };
-
-                /**
-                 * Encodes the specified KlineData message. Does not implicitly {@link type.googleapis.com.KlineData.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {type.googleapis.com.IKlineData} message KlineData message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                KlineData.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.createate != null && Object.hasOwnProperty.call(message, "createate"))
-                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.createate);
-                    if (message.low != null && Object.hasOwnProperty.call(message, "low"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.low);
-                    if (message.high != null && Object.hasOwnProperty.call(message, "high"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.high);
-                    if (message.open != null && Object.hasOwnProperty.call(message, "open"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.open);
-                    if (message.close != null && Object.hasOwnProperty.call(message, "close"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.close);
-                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.amount);
-                    if (message.size != null && Object.hasOwnProperty.call(message, "size"))
-                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.size);
-                    return writer;
-                };
 
-                /**
-                 * Encodes the specified KlineData message, length delimited. Does not implicitly {@link type.googleapis.com.KlineData.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {type.googleapis.com.IKlineData} message KlineData message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                KlineData.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a KlineData message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.KlineData} KlineData
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                KlineData.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.type.googleapis.com.KlineData();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.createate = reader.int64();
-                                break;
-                            }
-                        case 2: {
-                                message.low = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.high = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.open = reader.string();
-                                break;
-                            }
-                        case 5: {
-                                message.close = reader.string();
+                    /**
+                     * Body createate.
+                     * @member {number|Long} createate
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.createate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                    /**
+                     * Body low.
+                     * @member {string} low
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.low = "";
+
+                    /**
+                     * Body high.
+                     * @member {string} high
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.high = "";
+
+                    /**
+                     * Body open.
+                     * @member {string} open
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.open = "";
+
+                    /**
+                     * Body close.
+                     * @member {string} close
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.close = "";
+
+                    /**
+                     * Body amount.
+                     * @member {string} amount
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.amount = "";
+
+                    /**
+                     * Body size.
+                     * @member {string} size
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.size = "";
+
+                    /**
+                     * Creates a new Body instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IBody=} [properties] Properties to set
+                     * @returns {type.googleapis.com.CandlesPbMsg.Body} Body instance
+                     */
+                    Body.create = function create(properties) {
+                        return new Body(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Body message. Does not implicitly {@link type.googleapis.com.CandlesPbMsg.Body.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.createate != null && Object.hasOwnProperty.call(message, "createate"))
+                            writer.uint32(/* id 1, wireType 0 =*/8).int64(message.createate);
+                        if (message.low != null && Object.hasOwnProperty.call(message, "low"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.low);
+                        if (message.high != null && Object.hasOwnProperty.call(message, "high"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.high);
+                        if (message.open != null && Object.hasOwnProperty.call(message, "open"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.open);
+                        if (message.close != null && Object.hasOwnProperty.call(message, "close"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.close);
+                        if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.amount);
+                        if (message.size != null && Object.hasOwnProperty.call(message, "size"))
+                            writer.uint32(/* id 7, wireType 2 =*/58).string(message.size);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Body message, length delimited. Does not implicitly {@link type.googleapis.com.CandlesPbMsg.Body.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.CandlesPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.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.type.googleapis.com.CandlesPbMsg.Body();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.createate = reader.int64();
+                                    break;
+                                }
+                            case 2: {
+                                    message.low = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.high = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.open = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.close = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.amount = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.size = reader.string();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 6: {
-                                message.amount = reader.string();
-                                break;
-                            }
-                        case 7: {
-                                message.size = reader.string();
-                                break;
-                            }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a KlineData message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.KlineData} KlineData
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                KlineData.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a KlineData message.
-                 * @function verify
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                KlineData.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.createate != null && message.hasOwnProperty("createate"))
-                        if (!$util.isInteger(message.createate) && !(message.createate && $util.isInteger(message.createate.low) && $util.isInteger(message.createate.high)))
-                            return "createate: integer|Long expected";
-                    if (message.low != null && message.hasOwnProperty("low"))
-                        if (!$util.isString(message.low))
-                            return "low: string expected";
-                    if (message.high != null && message.hasOwnProperty("high"))
-                        if (!$util.isString(message.high))
-                            return "high: string expected";
-                    if (message.open != null && message.hasOwnProperty("open"))
-                        if (!$util.isString(message.open))
-                            return "open: string expected";
-                    if (message.close != null && message.hasOwnProperty("close"))
-                        if (!$util.isString(message.close))
-                            return "close: string expected";
-                    if (message.amount != null && message.hasOwnProperty("amount"))
-                        if (!$util.isString(message.amount))
-                            return "amount: string expected";
-                    if (message.size != null && message.hasOwnProperty("size"))
-                        if (!$util.isString(message.size))
-                            return "size: string expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a KlineData message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.KlineData} KlineData
-                 */
-                KlineData.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.KlineData)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.CandlesPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Body message.
+                     * @function verify
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Body.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.createate != null && message.hasOwnProperty("createate"))
+                            if (!$util.isInteger(message.createate) && !(message.createate && $util.isInteger(message.createate.low) && $util.isInteger(message.createate.high)))
+                                return "createate: integer|Long expected";
+                        if (message.low != null && message.hasOwnProperty("low"))
+                            if (!$util.isString(message.low))
+                                return "low: string expected";
+                        if (message.high != null && message.hasOwnProperty("high"))
+                            if (!$util.isString(message.high))
+                                return "high: string expected";
+                        if (message.open != null && message.hasOwnProperty("open"))
+                            if (!$util.isString(message.open))
+                                return "open: string expected";
+                        if (message.close != null && message.hasOwnProperty("close"))
+                            if (!$util.isString(message.close))
+                                return "close: string expected";
+                        if (message.amount != null && message.hasOwnProperty("amount"))
+                            if (!$util.isString(message.amount))
+                                return "amount: string expected";
+                        if (message.size != null && message.hasOwnProperty("size"))
+                            if (!$util.isString(message.size))
+                                return "size: string expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Body message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.CandlesPbMsg.Body} Body
+                     */
+                    Body.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.CandlesPbMsg.Body)
+                            return object;
+                        var message = new $root.type.googleapis.com.CandlesPbMsg.Body();
+                        if (object.createate != null)
+                            if ($util.Long)
+                                (message.createate = $util.Long.fromValue(object.createate)).unsigned = false;
+                            else if (typeof object.createate === "string")
+                                message.createate = parseInt(object.createate, 10);
+                            else if (typeof object.createate === "number")
+                                message.createate = object.createate;
+                            else if (typeof object.createate === "object")
+                                message.createate = new $util.LongBits(object.createate.low >>> 0, object.createate.high >>> 0).toNumber();
+                        if (object.low != null)
+                            message.low = String(object.low);
+                        if (object.high != null)
+                            message.high = String(object.high);
+                        if (object.open != null)
+                            message.open = String(object.open);
+                        if (object.close != null)
+                            message.close = String(object.close);
+                        if (object.amount != null)
+                            message.amount = String(object.amount);
+                        if (object.size != null)
+                            message.size = String(object.size);
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Body message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CandlesPbMsg.Body} message Body
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Body.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            if ($util.Long) {
+                                var long = new $util.Long(0, 0, false);
+                                object.createate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                            } else
+                                object.createate = options.longs === String ? "0" : 0;
+                            object.low = "";
+                            object.high = "";
+                            object.open = "";
+                            object.close = "";
+                            object.amount = "";
+                            object.size = "";
+                        }
+                        if (message.createate != null && message.hasOwnProperty("createate"))
+                            if (typeof message.createate === "number")
+                                object.createate = options.longs === String ? String(message.createate) : message.createate;
+                            else
+                                object.createate = options.longs === String ? $util.Long.prototype.toString.call(message.createate) : options.longs === Number ? new $util.LongBits(message.createate.low >>> 0, message.createate.high >>> 0).toNumber() : message.createate;
+                        if (message.low != null && message.hasOwnProperty("low"))
+                            object.low = message.low;
+                        if (message.high != null && message.hasOwnProperty("high"))
+                            object.high = message.high;
+                        if (message.open != null && message.hasOwnProperty("open"))
+                            object.open = message.open;
+                        if (message.close != null && message.hasOwnProperty("close"))
+                            object.close = message.close;
+                        if (message.amount != null && message.hasOwnProperty("amount"))
+                            object.amount = message.amount;
+                        if (message.size != null && message.hasOwnProperty("size"))
+                            object.size = message.size;
                         return object;
-                    var message = new $root.type.googleapis.com.KlineData();
-                    if (object.createate != null)
-                        if ($util.Long)
-                            (message.createate = $util.Long.fromValue(object.createate)).unsigned = false;
-                        else if (typeof object.createate === "string")
-                            message.createate = parseInt(object.createate, 10);
-                        else if (typeof object.createate === "number")
-                            message.createate = object.createate;
-                        else if (typeof object.createate === "object")
-                            message.createate = new $util.LongBits(object.createate.low >>> 0, object.createate.high >>> 0).toNumber();
-                    if (object.low != null)
-                        message.low = String(object.low);
-                    if (object.high != null)
-                        message.high = String(object.high);
-                    if (object.open != null)
-                        message.open = String(object.open);
-                    if (object.close != null)
-                        message.close = String(object.close);
-                    if (object.amount != null)
-                        message.amount = String(object.amount);
-                    if (object.size != null)
-                        message.size = String(object.size);
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a KlineData message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {type.googleapis.com.KlineData} message KlineData
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                KlineData.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        if ($util.Long) {
-                            var long = new $util.Long(0, 0, false);
-                            object.createate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
-                        } else
-                            object.createate = options.longs === String ? "0" : 0;
-                        object.low = "";
-                        object.high = "";
-                        object.open = "";
-                        object.close = "";
-                        object.amount = "";
-                        object.size = "";
-                    }
-                    if (message.createate != null && message.hasOwnProperty("createate"))
-                        if (typeof message.createate === "number")
-                            object.createate = options.longs === String ? String(message.createate) : message.createate;
-                        else
-                            object.createate = options.longs === String ? $util.Long.prototype.toString.call(message.createate) : options.longs === Number ? new $util.LongBits(message.createate.low >>> 0, message.createate.high >>> 0).toNumber() : message.createate;
-                    if (message.low != null && message.hasOwnProperty("low"))
-                        object.low = message.low;
-                    if (message.high != null && message.hasOwnProperty("high"))
-                        object.high = message.high;
-                    if (message.open != null && message.hasOwnProperty("open"))
-                        object.open = message.open;
-                    if (message.close != null && message.hasOwnProperty("close"))
-                        object.close = message.close;
-                    if (message.amount != null && message.hasOwnProperty("amount"))
-                        object.amount = message.amount;
-                    if (message.size != null && message.hasOwnProperty("size"))
-                        object.size = message.size;
-                    return object;
-                };
-
-                /**
-                 * Converts this KlineData to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.KlineData
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                KlineData.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
+                    };
+
+                    /**
+                     * Converts this Body to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Body.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Body
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.CandlesPbMsg.Body
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.CandlesPbMsg.Body";
+                    };
 
-                /**
-                 * Gets the default type url for KlineData
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.KlineData
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                KlineData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
-                    }
-                    return typeUrlPrefix + "/type.googleapis.com.KlineData";
-                };
+                    return Body;
+                })();
 
-                return KlineData;
+                return CandlesPbMsg;
             })();
 
             return com;

+ 80 - 75
client/hotconi/proto/type.googleapis.com.CandlesPbMsg.json

@@ -9,83 +9,88 @@
           "nested": {
             "com": {
               "nested": {
-                "Response": {
-                  "fields": {
-                    "biz": {
-                      "type": "string",
-                      "id": 1
+                "CandlesPbMsg": {
+                  "nested": {
+                    "Response": {
+                      "fields": {
+                        "biz": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "type": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "granularity": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "data": {
+                          "type": "Data",
+                          "id": 7
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 8
+                        }
+                      }
                     },
-                    "type": {
-                      "type": "string",
-                      "id": 2
+                    "Data": {
+                      "fields": {
+                        "typeUrl": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "value": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 2
+                        }
+                      }
                     },
-                    "base": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "granularity": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "data": {
-                      "type": "Data",
-                      "id": 7
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 8
-                    }
-                  }
-                },
-                "Data": {
-                  "fields": {
-                    "typeUrl": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "value": {
-                      "type": "KlineData",
-                      "id": 2
-                    }
-                  }
-                },
-                "KlineData": {
-                  "fields": {
-                    "createate": {
-                      "type": "int64",
-                      "id": 1
-                    },
-                    "low": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "high": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "open": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "close": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "amount": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "size": {
-                      "type": "string",
-                      "id": 7
+                    "Body": {
+                      "fields": {
+                        "createate": {
+                          "type": "int64",
+                          "id": 1
+                        },
+                        "low": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "high": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "open": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "close": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "amount": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "size": {
+                          "type": "string",
+                          "id": 7
+                        }
+                      }
                     }
                   }
                 }

+ 3 - 3
client/hotconi/proto/type.googleapis.com.CandlesPbMsg.proto

@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-package type.googleapis.com; // 替换为你的包名
+package type.googleapis.com.CandlesPbMsg; // 替换为你的包名
 
 // 响应消息
 message Response {
@@ -17,11 +17,11 @@ message Response {
 // 数据消息
 message Data {
   string typeUrl = 1; // 数据类型URL
-  KlineData value = 2; // 数据值
+  repeated Body value = 2; // 数据值
 }
 
 
-message KlineData {
+message Body {
   int64 createate = 1;  // 创建日期
   string low = 2;       // 最低价
   string high = 3;      // 最高价

+ 811 - 575
client/hotconi/proto/type.googleapis.com.CommonPbMsg.js

@@ -36,601 +36,837 @@ $root.type = (function() {
              */
             var com = {};
 
-            com.Response = (function() {
+            com.CommonPbMsg = (function() {
 
                 /**
-                 * Properties of a Response.
+                 * Namespace CommonPbMsg.
                  * @memberof type.googleapis.com
-                 * @interface IResponse
-                 * @property {string|null} [biz] Response biz
-                 * @property {string|null} [type] Response type
-                 * @property {string|null} [base] Response base
-                 * @property {string|null} [quote] Response quote
-                 * @property {string|null} [contractcode] Response contractcode
-                 * @property {string|null} [granularity] Response granularity
-                 * @property {type.googleapis.com.IData|null} [data] Response data
-                 * @property {number|null} [env] Response env
-                 */
-
-                /**
-                 * Constructs a new Response.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Response.
-                 * @implements IResponse
-                 * @constructor
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 */
-                function Response(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]];
-                }
-
-                /**
-                 * Response biz.
-                 * @member {string} biz
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.biz = "";
-
-                /**
-                 * Response type.
-                 * @member {string} type
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.type = "";
-
-                /**
-                 * Response base.
-                 * @member {string} base
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.base = "";
-
-                /**
-                 * Response quote.
-                 * @member {string} quote
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.quote = "";
-
-                /**
-                 * Response contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.contractcode = "";
-
-                /**
-                 * Response granularity.
-                 * @member {string} granularity
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.granularity = "";
-
-                /**
-                 * Response data.
-                 * @member {type.googleapis.com.IData|null|undefined} data
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.data = null;
-
-                /**
-                 * Response env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.env = 0;
-
-                /**
-                 * Creates a new Response instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Response} Response instance
-                 */
-                Response.create = function create(properties) {
-                    return new Response(properties);
-                };
-
-                /**
-                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
-                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
-                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
-                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
-                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
-                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
-                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
+                 * @namespace
+                 */
+                var CommonPbMsg = {};
+
+                CommonPbMsg.Response = (function() {
+
+                    /**
+                     * Properties of a Response.
+                     * @memberof type.googleapis.com.CommonPbMsg
+                     * @interface IResponse
+                     * @property {string|null} [biz] Response biz
+                     * @property {string|null} [type] Response type
+                     * @property {string|null} [base] Response base
+                     * @property {string|null} [quote] Response quote
+                     * @property {string|null} [contractcode] Response contractcode
+                     * @property {string|null} [granularity] Response granularity
+                     * @property {type.googleapis.com.CommonPbMsg.IData|null} [data] Response data
+                     * @property {number|null} [env] Response env
+                     */
+
+                    /**
+                     * Constructs a new Response.
+                     * @memberof type.googleapis.com.CommonPbMsg
+                     * @classdesc Represents a Response.
+                     * @implements IResponse
+                     * @constructor
+                     * @param {type.googleapis.com.CommonPbMsg.IResponse=} [properties] Properties to set
+                     */
+                    function Response(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]];
+                    }
 
-                /**
-                 * Decodes a Response message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.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.type.googleapis.com.Response();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.biz = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.type = reader.string();
+                    /**
+                     * Response biz.
+                     * @member {string} biz
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.biz = "";
+
+                    /**
+                     * Response type.
+                     * @member {string} type
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.type = "";
+
+                    /**
+                     * Response base.
+                     * @member {string} base
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.base = "";
+
+                    /**
+                     * Response quote.
+                     * @member {string} quote
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.quote = "";
+
+                    /**
+                     * Response contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.contractcode = "";
+
+                    /**
+                     * Response granularity.
+                     * @member {string} granularity
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.granularity = "";
+
+                    /**
+                     * Response data.
+                     * @member {type.googleapis.com.CommonPbMsg.IData|null|undefined} data
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.data = null;
+
+                    /**
+                     * Response env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.env = 0;
+
+                    /**
+                     * Creates a new Response instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IResponse=} [properties] Properties to set
+                     * @returns {type.googleapis.com.CommonPbMsg.Response} Response instance
+                     */
+                    Response.create = function create(properties) {
+                        return new Response(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.CommonPbMsg.Response.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                        if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                        if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                        if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                        if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                        if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                            $root.type.googleapis.com.CommonPbMsg.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.CommonPbMsg.Response.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.CommonPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.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.type.googleapis.com.CommonPbMsg.Response();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.biz = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.type = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.base = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.quote = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.granularity = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.data = $root.type.googleapis.com.CommonPbMsg.Data.decode(reader, reader.uint32());
+                                    break;
+                                }
+                            case 8: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 3: {
-                                message.base = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.quote = reader.string();
-                                break;
-                            }
-                        case 5: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.granularity = reader.string();
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.CommonPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Response message.
+                     * @function verify
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Response.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            if (!$util.isString(message.biz))
+                                return "biz: string expected";
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            if (!$util.isString(message.type))
+                                return "type: string expected";
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            if (!$util.isString(message.base))
+                                return "base: string expected";
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            if (!$util.isString(message.quote))
+                                return "quote: string expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            if (!$util.isString(message.granularity))
+                                return "granularity: string expected";
+                        if (message.data != null && message.hasOwnProperty("data")) {
+                            var error = $root.type.googleapis.com.CommonPbMsg.Data.verify(message.data);
+                            if (error)
+                                return "data." + error;
+                        }
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.CommonPbMsg.Response} Response
+                     */
+                    Response.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.CommonPbMsg.Response)
+                            return object;
+                        var message = new $root.type.googleapis.com.CommonPbMsg.Response();
+                        if (object.biz != null)
+                            message.biz = String(object.biz);
+                        if (object.type != null)
+                            message.type = String(object.type);
+                        if (object.base != null)
+                            message.base = String(object.base);
+                        if (object.quote != null)
+                            message.quote = String(object.quote);
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.granularity != null)
+                            message.granularity = String(object.granularity);
+                        if (object.data != null) {
+                            if (typeof object.data !== "object")
+                                throw TypeError(".type.googleapis.com.CommonPbMsg.Response.data: object expected");
+                            message.data = $root.type.googleapis.com.CommonPbMsg.Data.fromObject(object.data);
+                        }
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Response message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.Response} message Response
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Response.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.biz = "";
+                            object.type = "";
+                            object.base = "";
+                            object.quote = "";
+                            object.contractcode = "";
+                            object.granularity = "";
+                            object.data = null;
+                            object.env = 0;
+                        }
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            object.biz = message.biz;
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            object.type = message.type;
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            object.base = message.base;
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            object.quote = message.quote;
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            object.granularity = message.granularity;
+                        if (message.data != null && message.hasOwnProperty("data"))
+                            object.data = $root.type.googleapis.com.CommonPbMsg.Data.toObject(message.data, options);
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
+                        return object;
+                    };
+
+                    /**
+                     * Converts this Response to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Response.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Response
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.CommonPbMsg.Response
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.CommonPbMsg.Response";
+                    };
+
+                    return Response;
+                })();
+
+                CommonPbMsg.Data = (function() {
+
+                    /**
+                     * Properties of a Data.
+                     * @memberof type.googleapis.com.CommonPbMsg
+                     * @interface IData
+                     * @property {string|null} [typeUrl] Data typeUrl
+                     * @property {Array.<type.googleapis.com.CommonPbMsg.IBody>|null} [body] Data body
+                     */
+
+                    /**
+                     * Constructs a new Data.
+                     * @memberof type.googleapis.com.CommonPbMsg
+                     * @classdesc Represents a Data.
+                     * @implements IData
+                     * @constructor
+                     * @param {type.googleapis.com.CommonPbMsg.IData=} [properties] Properties to set
+                     */
+                    function Data(properties) {
+                        this.body = [];
+                        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]];
+                    }
+
+                    /**
+                     * Data typeUrl.
+                     * @member {string} typeUrl
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.typeUrl = "";
+
+                    /**
+                     * Data body.
+                     * @member {Array.<type.googleapis.com.CommonPbMsg.IBody>} body
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.body = $util.emptyArray;
+
+                    /**
+                     * Creates a new Data instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IData=} [properties] Properties to set
+                     * @returns {type.googleapis.com.CommonPbMsg.Data} Data instance
+                     */
+                    Data.create = function create(properties) {
+                        return new Data(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.CommonPbMsg.Data.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                        if (message.body != null && message.body.length)
+                            for (var i = 0; i < message.body.length; ++i)
+                                $root.type.googleapis.com.CommonPbMsg.Body.encode(message.body[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.CommonPbMsg.Data.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.CommonPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.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.type.googleapis.com.CommonPbMsg.Data();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.typeUrl = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    if (!(message.body && message.body.length))
+                                        message.body = [];
+                                    message.body.push($root.type.googleapis.com.CommonPbMsg.Body.decode(reader, reader.uint32()));
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 7: {
-                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
-                                break;
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.CommonPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Data message.
+                     * @function verify
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Data.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            if (!$util.isString(message.typeUrl))
+                                return "typeUrl: string expected";
+                        if (message.body != null && message.hasOwnProperty("body")) {
+                            if (!Array.isArray(message.body))
+                                return "body: array expected";
+                            for (var i = 0; i < message.body.length; ++i) {
+                                var error = $root.type.googleapis.com.CommonPbMsg.Body.verify(message.body[i]);
+                                if (error)
+                                    return "body." + error;
                             }
-                        case 8: {
-                                message.env = reader.int32();
-                                break;
+                        }
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.CommonPbMsg.Data} Data
+                     */
+                    Data.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.CommonPbMsg.Data)
+                            return object;
+                        var message = new $root.type.googleapis.com.CommonPbMsg.Data();
+                        if (object.typeUrl != null)
+                            message.typeUrl = String(object.typeUrl);
+                        if (object.body) {
+                            if (!Array.isArray(object.body))
+                                throw TypeError(".type.googleapis.com.CommonPbMsg.Data.body: array expected");
+                            message.body = [];
+                            for (var i = 0; i < object.body.length; ++i) {
+                                if (typeof object.body[i] !== "object")
+                                    throw TypeError(".type.googleapis.com.CommonPbMsg.Data.body: object expected");
+                                message.body[i] = $root.type.googleapis.com.CommonPbMsg.Body.fromObject(object.body[i]);
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Response message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Response.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        if (!$util.isString(message.biz))
-                            return "biz: string expected";
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        if (!$util.isString(message.type))
-                            return "type: string expected";
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        if (!$util.isString(message.base))
-                            return "base: string expected";
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        if (!$util.isString(message.quote))
-                            return "quote: string expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        if (!$util.isString(message.granularity))
-                            return "granularity: string expected";
-                    if (message.data != null && message.hasOwnProperty("data")) {
-                        var error = $root.type.googleapis.com.Data.verify(message.data);
-                        if (error)
-                            return "data." + error;
-                    }
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Response} Response
-                 */
-                Response.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Response)
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Data message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.Data} message Data
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Data.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.arrays || options.defaults)
+                            object.body = [];
+                        if (options.defaults)
+                            object.typeUrl = "";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            object.typeUrl = message.typeUrl;
+                        if (message.body && message.body.length) {
+                            object.body = [];
+                            for (var j = 0; j < message.body.length; ++j)
+                                object.body[j] = $root.type.googleapis.com.CommonPbMsg.Body.toObject(message.body[j], options);
+                        }
                         return object;
-                    var message = new $root.type.googleapis.com.Response();
-                    if (object.biz != null)
-                        message.biz = String(object.biz);
-                    if (object.type != null)
-                        message.type = String(object.type);
-                    if (object.base != null)
-                        message.base = String(object.base);
-                    if (object.quote != null)
-                        message.quote = String(object.quote);
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.granularity != null)
-                        message.granularity = String(object.granularity);
-                    if (object.data != null) {
-                        if (typeof object.data !== "object")
-                            throw TypeError(".type.googleapis.com.Response.data: object expected");
-                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
-                    }
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Response message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.Response} message Response
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Response.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.biz = "";
-                        object.type = "";
-                        object.base = "";
-                        object.quote = "";
-                        object.contractcode = "";
-                        object.granularity = "";
-                        object.data = null;
-                        object.env = 0;
-                    }
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        object.biz = message.biz;
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        object.type = message.type;
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        object.base = message.base;
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        object.quote = message.quote;
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        object.granularity = message.granularity;
-                    if (message.data != null && message.hasOwnProperty("data"))
-                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    return object;
-                };
-
-                /**
-                 * Converts this Response to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Response.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Response
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Data to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Data.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Data
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.CommonPbMsg.Data
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.CommonPbMsg.Data";
+                    };
+
+                    return Data;
+                })();
+
+                CommonPbMsg.Body = (function() {
+
+                    /**
+                     * Properties of a Body.
+                     * @memberof type.googleapis.com.CommonPbMsg
+                     * @interface IBody
+                     * @property {string|null} [value] Body value
+                     */
+
+                    /**
+                     * Constructs a new Body.
+                     * @memberof type.googleapis.com.CommonPbMsg
+                     * @classdesc Represents a Body.
+                     * @implements IBody
+                     * @constructor
+                     * @param {type.googleapis.com.CommonPbMsg.IBody=} [properties] Properties to set
+                     */
+                    function Body(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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Response";
-                };
-
-                return Response;
-            })();
-
-            com.Data = (function() {
-
-                /**
-                 * Properties of a Data.
-                 * @memberof type.googleapis.com
-                 * @interface IData
-                 * @property {string|null} [typeUrl] Data typeUrl
-                 * @property {string|null} [value] Data value
-                 */
-
-                /**
-                 * Constructs a new Data.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Data.
-                 * @implements IData
-                 * @constructor
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 */
-                function Data(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]];
-                }
-
-                /**
-                 * Data typeUrl.
-                 * @member {string} typeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.typeUrl = "";
-
-                /**
-                 * Data value.
-                 * @member {string} value
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.value = "";
 
-                /**
-                 * Creates a new Data instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Data} Data instance
-                 */
-                Data.create = function create(properties) {
-                    return new Data(properties);
-                };
-
-                /**
-                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
-                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.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.type.googleapis.com.Data();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.typeUrl = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.value = reader.string();
+                    /**
+                     * Body value.
+                     * @member {string} value
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.value = "";
+
+                    /**
+                     * Creates a new Body instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IBody=} [properties] Properties to set
+                     * @returns {type.googleapis.com.CommonPbMsg.Body} Body instance
+                     */
+                    Body.create = function create(properties) {
+                        return new Body(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Body message. Does not implicitly {@link type.googleapis.com.CommonPbMsg.Body.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.value != null && Object.hasOwnProperty.call(message, "value"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.value);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Body message, length delimited. Does not implicitly {@link type.googleapis.com.CommonPbMsg.Body.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.CommonPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.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.type.googleapis.com.CommonPbMsg.Body();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.value = reader.string();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Data message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Data.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        if (!$util.isString(message.typeUrl))
-                            return "typeUrl: string expected";
-                    if (message.value != null && message.hasOwnProperty("value"))
-                        if (!$util.isString(message.value))
-                            return "value: string expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Data} Data
-                 */
-                Data.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Data)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.CommonPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Body message.
+                     * @function verify
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Body.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.value != null && message.hasOwnProperty("value"))
+                            if (!$util.isString(message.value))
+                                return "value: string expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Body message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.CommonPbMsg.Body} Body
+                     */
+                    Body.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.CommonPbMsg.Body)
+                            return object;
+                        var message = new $root.type.googleapis.com.CommonPbMsg.Body();
+                        if (object.value != null)
+                            message.value = String(object.value);
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Body message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.CommonPbMsg.Body} message Body
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Body.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults)
+                            object.value = "";
+                        if (message.value != null && message.hasOwnProperty("value"))
+                            object.value = message.value;
                         return object;
-                    var message = new $root.type.googleapis.com.Data();
-                    if (object.typeUrl != null)
-                        message.typeUrl = String(object.typeUrl);
-                    if (object.value != null)
-                        message.value = String(object.value);
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Data message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.Data} message Data
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Data.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.typeUrl = "";
-                        object.value = "";
-                    }
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        object.typeUrl = message.typeUrl;
-                    if (message.value != null && message.hasOwnProperty("value"))
-                        object.value = message.value;
-                    return object;
-                };
-
-                /**
-                 * Converts this Data to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Data.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
+                    };
+
+                    /**
+                     * Converts this Body to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Body.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Body
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.CommonPbMsg.Body
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.CommonPbMsg.Body";
+                    };
 
-                /**
-                 * Gets the default type url for Data
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
-                    }
-                    return typeUrlPrefix + "/type.googleapis.com.Data";
-                };
+                    return Body;
+                })();
 
-                return Data;
+                return CommonPbMsg;
             })();
 
             return com;

+ 56 - 43
client/hotconi/proto/type.googleapis.com.CommonPbMsg.json

@@ -9,51 +9,64 @@
           "nested": {
             "com": {
               "nested": {
-                "Response": {
-                  "fields": {
-                    "biz": {
-                      "type": "string",
-                      "id": 1
+                "CommonPbMsg": {
+                  "nested": {
+                    "Response": {
+                      "fields": {
+                        "biz": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "type": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "granularity": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "data": {
+                          "type": "Data",
+                          "id": 7
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 8
+                        }
+                      }
                     },
-                    "type": {
-                      "type": "string",
-                      "id": 2
+                    "Data": {
+                      "fields": {
+                        "typeUrl": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "body": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 2
+                        }
+                      }
                     },
-                    "base": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "granularity": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "data": {
-                      "type": "Data",
-                      "id": 7
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 8
-                    }
-                  }
-                },
-                "Data": {
-                  "fields": {
-                    "typeUrl": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "value": {
-                      "type": "string",
-                      "id": 2
+                    "Body": {
+                      "fields": {
+                        "value": {
+                          "type": "string",
+                          "id": 1
+                        }
+                      }
                     }
                   }
                 }

+ 5 - 3
client/hotconi/proto/type.googleapis.com.CommonPbMsg.proto

@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-package type.googleapis.com; // 替换为你的包名
+package type.googleapis.com.CommonPbMsg; // 替换为你的包名
 
 // 响应消息
 message Response {
@@ -17,7 +17,9 @@ message Response {
 // 数据消息
 message Data {
   string typeUrl = 1; // 数据类型URL
-  string value = 2; // 数据值
+  repeated Body body = 2; // 数据值
 }
 
-
+message Body {
+  string value = 1; // 数据类型URL
+}

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 570 - 823
client/hotconi/proto/type.googleapis.com.DepthPbMsg.js


+ 66 - 62
client/hotconi/proto/type.googleapis.com.DepthPbMsg.json

@@ -9,70 +9,74 @@
           "nested": {
             "com": {
               "nested": {
-                "Response": {
-                  "fields": {
-                    "biz": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "type": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "base": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "granularity": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "data": {
-                      "type": "Data",
-                      "id": 7
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 8
-                    }
-                  }
-                },
-                "Data": {
-                  "fields": {
-                    "typeUrl": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "value": {
-                      "type": "DepthPbMsg",
-                      "id": 2
-                    }
-                  }
-                },
                 "DepthPbMsg": {
-                  "fields": {
-                    "asksList": {
-                      "rule": "repeated",
-                      "type": "Body",
-                      "id": 1
-                    },
-                    "bidsList": {
-                      "rule": "repeated",
-                      "type": "Body",
-                      "id": 2
-                    }
-                  },
                   "nested": {
-                    "Body": {
-                      "fields": {}
+                    "Response": {
+                      "fields": {
+                        "biz": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "type": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "granularity": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "data": {
+                          "type": "Data",
+                          "id": 7
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 8
+                        }
+                      }
+                    },
+                    "Data": {
+                      "fields": {
+                        "typeUrl": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "value": {
+                          "type": "DepthPbMsg",
+                          "id": 2
+                        }
+                      }
+                    },
+                    "DepthPbMsg": {
+                      "fields": {
+                        "asksList": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 1
+                        },
+                        "bidsList": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 2
+                        }
+                      },
+                      "nested": {
+                        "Body": {
+                          "fields": {}
+                        }
+                      }
                     }
                   }
                 }

+ 1 - 1
client/hotconi/proto/type.googleapis.com.DepthPbMsg.proto

@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-package type.googleapis.com; // 替换为你的包名
+package type.googleapis.com.DepthPbMsg; // 替换为你的包名
 
 // 响应消息
 message Response {

+ 905 - 901
client/hotconi/proto/type.googleapis.com.FillsPbMsg.js

@@ -36,930 +36,934 @@ $root.type = (function() {
              */
             var com = {};
 
-            com.Response = (function() {
+            com.FillsPbMsg = (function() {
 
                 /**
-                 * Properties of a Response.
+                 * Namespace FillsPbMsg.
                  * @memberof type.googleapis.com
-                 * @interface IResponse
-                 * @property {string|null} [biz] Response biz
-                 * @property {string|null} [type] Response type
-                 * @property {string|null} [base] Response base
-                 * @property {string|null} [quote] Response quote
-                 * @property {string|null} [contractcode] Response contractcode
-                 * @property {string|null} [granularity] Response granularity
-                 * @property {type.googleapis.com.IData|null} [data] Response data
-                 * @property {number|null} [env] Response env
-                 */
-
-                /**
-                 * Constructs a new Response.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Response.
-                 * @implements IResponse
-                 * @constructor
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 */
-                function Response(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]];
-                }
-
-                /**
-                 * Response biz.
-                 * @member {string} biz
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.biz = "";
-
-                /**
-                 * Response type.
-                 * @member {string} type
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.type = "";
-
-                /**
-                 * Response base.
-                 * @member {string} base
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.base = "";
-
-                /**
-                 * Response quote.
-                 * @member {string} quote
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.quote = "";
-
-                /**
-                 * Response contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.contractcode = "";
-
-                /**
-                 * Response granularity.
-                 * @member {string} granularity
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.granularity = "";
-
-                /**
-                 * Response data.
-                 * @member {type.googleapis.com.IData|null|undefined} data
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.data = null;
-
-                /**
-                 * Response env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.env = 0;
-
-                /**
-                 * Creates a new Response instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Response} Response instance
-                 */
-                Response.create = function create(properties) {
-                    return new Response(properties);
-                };
-
-                /**
-                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
-                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
-                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
-                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
-                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
-                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
-                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
+                 * @namespace
+                 */
+                var FillsPbMsg = {};
+
+                FillsPbMsg.Response = (function() {
+
+                    /**
+                     * Properties of a Response.
+                     * @memberof type.googleapis.com.FillsPbMsg
+                     * @interface IResponse
+                     * @property {string|null} [biz] Response biz
+                     * @property {string|null} [type] Response type
+                     * @property {string|null} [base] Response base
+                     * @property {string|null} [quote] Response quote
+                     * @property {string|null} [contractcode] Response contractcode
+                     * @property {string|null} [granularity] Response granularity
+                     * @property {type.googleapis.com.FillsPbMsg.IData|null} [data] Response data
+                     * @property {number|null} [env] Response env
+                     */
+
+                    /**
+                     * Constructs a new Response.
+                     * @memberof type.googleapis.com.FillsPbMsg
+                     * @classdesc Represents a Response.
+                     * @implements IResponse
+                     * @constructor
+                     * @param {type.googleapis.com.FillsPbMsg.IResponse=} [properties] Properties to set
+                     */
+                    function Response(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]];
+                    }
 
-                /**
-                 * Decodes a Response message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.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.type.googleapis.com.Response();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.biz = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.type = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.base = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.quote = reader.string();
-                                break;
-                            }
-                        case 5: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.granularity = reader.string();
+                    /**
+                     * Response biz.
+                     * @member {string} biz
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.biz = "";
+
+                    /**
+                     * Response type.
+                     * @member {string} type
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.type = "";
+
+                    /**
+                     * Response base.
+                     * @member {string} base
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.base = "";
+
+                    /**
+                     * Response quote.
+                     * @member {string} quote
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.quote = "";
+
+                    /**
+                     * Response contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.contractcode = "";
+
+                    /**
+                     * Response granularity.
+                     * @member {string} granularity
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.granularity = "";
+
+                    /**
+                     * Response data.
+                     * @member {type.googleapis.com.FillsPbMsg.IData|null|undefined} data
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.data = null;
+
+                    /**
+                     * Response env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.env = 0;
+
+                    /**
+                     * Creates a new Response instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IResponse=} [properties] Properties to set
+                     * @returns {type.googleapis.com.FillsPbMsg.Response} Response instance
+                     */
+                    Response.create = function create(properties) {
+                        return new Response(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.FillsPbMsg.Response.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                        if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                        if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                        if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                        if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                        if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                            $root.type.googleapis.com.FillsPbMsg.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.FillsPbMsg.Response.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.FillsPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.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.type.googleapis.com.FillsPbMsg.Response();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.biz = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.type = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.base = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.quote = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.granularity = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.data = $root.type.googleapis.com.FillsPbMsg.Data.decode(reader, reader.uint32());
+                                    break;
+                                }
+                            case 8: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 7: {
-                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
-                                break;
-                            }
-                        case 8: {
-                                message.env = reader.int32();
-                                break;
-                            }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Response message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Response.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        if (!$util.isString(message.biz))
-                            return "biz: string expected";
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        if (!$util.isString(message.type))
-                            return "type: string expected";
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        if (!$util.isString(message.base))
-                            return "base: string expected";
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        if (!$util.isString(message.quote))
-                            return "quote: string expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        if (!$util.isString(message.granularity))
-                            return "granularity: string expected";
-                    if (message.data != null && message.hasOwnProperty("data")) {
-                        var error = $root.type.googleapis.com.Data.verify(message.data);
-                        if (error)
-                            return "data." + error;
-                    }
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Response} Response
-                 */
-                Response.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Response)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.FillsPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Response message.
+                     * @function verify
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Response.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            if (!$util.isString(message.biz))
+                                return "biz: string expected";
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            if (!$util.isString(message.type))
+                                return "type: string expected";
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            if (!$util.isString(message.base))
+                                return "base: string expected";
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            if (!$util.isString(message.quote))
+                                return "quote: string expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            if (!$util.isString(message.granularity))
+                                return "granularity: string expected";
+                        if (message.data != null && message.hasOwnProperty("data")) {
+                            var error = $root.type.googleapis.com.FillsPbMsg.Data.verify(message.data);
+                            if (error)
+                                return "data." + error;
+                        }
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.FillsPbMsg.Response} Response
+                     */
+                    Response.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.FillsPbMsg.Response)
+                            return object;
+                        var message = new $root.type.googleapis.com.FillsPbMsg.Response();
+                        if (object.biz != null)
+                            message.biz = String(object.biz);
+                        if (object.type != null)
+                            message.type = String(object.type);
+                        if (object.base != null)
+                            message.base = String(object.base);
+                        if (object.quote != null)
+                            message.quote = String(object.quote);
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.granularity != null)
+                            message.granularity = String(object.granularity);
+                        if (object.data != null) {
+                            if (typeof object.data !== "object")
+                                throw TypeError(".type.googleapis.com.FillsPbMsg.Response.data: object expected");
+                            message.data = $root.type.googleapis.com.FillsPbMsg.Data.fromObject(object.data);
+                        }
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Response message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.Response} message Response
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Response.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.biz = "";
+                            object.type = "";
+                            object.base = "";
+                            object.quote = "";
+                            object.contractcode = "";
+                            object.granularity = "";
+                            object.data = null;
+                            object.env = 0;
+                        }
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            object.biz = message.biz;
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            object.type = message.type;
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            object.base = message.base;
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            object.quote = message.quote;
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            object.granularity = message.granularity;
+                        if (message.data != null && message.hasOwnProperty("data"))
+                            object.data = $root.type.googleapis.com.FillsPbMsg.Data.toObject(message.data, options);
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
                         return object;
-                    var message = new $root.type.googleapis.com.Response();
-                    if (object.biz != null)
-                        message.biz = String(object.biz);
-                    if (object.type != null)
-                        message.type = String(object.type);
-                    if (object.base != null)
-                        message.base = String(object.base);
-                    if (object.quote != null)
-                        message.quote = String(object.quote);
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.granularity != null)
-                        message.granularity = String(object.granularity);
-                    if (object.data != null) {
-                        if (typeof object.data !== "object")
-                            throw TypeError(".type.googleapis.com.Response.data: object expected");
-                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
-                    }
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Response message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.Response} message Response
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Response.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.biz = "";
-                        object.type = "";
-                        object.base = "";
-                        object.quote = "";
-                        object.contractcode = "";
-                        object.granularity = "";
-                        object.data = null;
-                        object.env = 0;
-                    }
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        object.biz = message.biz;
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        object.type = message.type;
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        object.base = message.base;
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        object.quote = message.quote;
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        object.granularity = message.granularity;
-                    if (message.data != null && message.hasOwnProperty("data"))
-                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    return object;
-                };
-
-                /**
-                 * Converts this Response to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Response.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Response
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Response to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Response.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Response
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.FillsPbMsg.Response
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.FillsPbMsg.Response";
+                    };
+
+                    return Response;
+                })();
+
+                FillsPbMsg.Data = (function() {
+
+                    /**
+                     * Properties of a Data.
+                     * @memberof type.googleapis.com.FillsPbMsg
+                     * @interface IData
+                     * @property {Array.<type.googleapis.com.FillsPbMsg.IBody>|null} [fills] Data fills
+                     */
+
+                    /**
+                     * Constructs a new Data.
+                     * @memberof type.googleapis.com.FillsPbMsg
+                     * @classdesc Represents a Data.
+                     * @implements IData
+                     * @constructor
+                     * @param {type.googleapis.com.FillsPbMsg.IData=} [properties] Properties to set
+                     */
+                    function Data(properties) {
+                        this.fills = [];
+                        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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Response";
-                };
-
-                return Response;
-            })();
-
-            com.Data = (function() {
-
-                /**
-                 * Properties of a Data.
-                 * @memberof type.googleapis.com
-                 * @interface IData
-                 * @property {string|null} [typeUrl] Data typeUrl
-                 * @property {type.googleapis.com.IOrderVoPb|null} [value] Data value
-                 */
-
-                /**
-                 * Constructs a new Data.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Data.
-                 * @implements IData
-                 * @constructor
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 */
-                function Data(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]];
-                }
-
-                /**
-                 * Data typeUrl.
-                 * @member {string} typeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.typeUrl = "";
-
-                /**
-                 * Data value.
-                 * @member {type.googleapis.com.IOrderVoPb|null|undefined} value
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.value = null;
-
-                /**
-                 * Creates a new Data instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Data} Data instance
-                 */
-                Data.create = function create(properties) {
-                    return new Data(properties);
-                };
-
-                /**
-                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
-                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
-                        $root.type.googleapis.com.OrderVoPb.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
-                    return writer;
-                };
 
-                /**
-                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.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.type.googleapis.com.Data();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.typeUrl = reader.string();
+                    /**
+                     * Data fills.
+                     * @member {Array.<type.googleapis.com.FillsPbMsg.IBody>} fills
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.fills = $util.emptyArray;
+
+                    /**
+                     * Creates a new Data instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IData=} [properties] Properties to set
+                     * @returns {type.googleapis.com.FillsPbMsg.Data} Data instance
+                     */
+                    Data.create = function create(properties) {
+                        return new Data(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.FillsPbMsg.Data.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.fills != null && message.fills.length)
+                            for (var i = 0; i < message.fills.length; ++i)
+                                $root.type.googleapis.com.FillsPbMsg.Body.encode(message.fills[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.FillsPbMsg.Data.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.FillsPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.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.type.googleapis.com.FillsPbMsg.Data();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    if (!(message.fills && message.fills.length))
+                                        message.fills = [];
+                                    message.fills.push($root.type.googleapis.com.FillsPbMsg.Body.decode(reader, reader.uint32()));
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 2: {
-                                message.value = $root.type.googleapis.com.OrderVoPb.decode(reader, reader.uint32());
-                                break;
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.FillsPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Data message.
+                     * @function verify
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Data.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.fills != null && message.hasOwnProperty("fills")) {
+                            if (!Array.isArray(message.fills))
+                                return "fills: array expected";
+                            for (var i = 0; i < message.fills.length; ++i) {
+                                var error = $root.type.googleapis.com.FillsPbMsg.Body.verify(message.fills[i]);
+                                if (error)
+                                    return "fills." + error;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Data message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Data.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        if (!$util.isString(message.typeUrl))
-                            return "typeUrl: string expected";
-                    if (message.value != null && message.hasOwnProperty("value")) {
-                        var error = $root.type.googleapis.com.OrderVoPb.verify(message.value);
-                        if (error)
-                            return "value." + error;
-                    }
-                    return null;
-                };
-
-                /**
-                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Data} Data
-                 */
-                Data.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Data)
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.FillsPbMsg.Data} Data
+                     */
+                    Data.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.FillsPbMsg.Data)
+                            return object;
+                        var message = new $root.type.googleapis.com.FillsPbMsg.Data();
+                        if (object.fills) {
+                            if (!Array.isArray(object.fills))
+                                throw TypeError(".type.googleapis.com.FillsPbMsg.Data.fills: array expected");
+                            message.fills = [];
+                            for (var i = 0; i < object.fills.length; ++i) {
+                                if (typeof object.fills[i] !== "object")
+                                    throw TypeError(".type.googleapis.com.FillsPbMsg.Data.fills: object expected");
+                                message.fills[i] = $root.type.googleapis.com.FillsPbMsg.Body.fromObject(object.fills[i]);
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Data message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.Data} message Data
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Data.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.arrays || options.defaults)
+                            object.fills = [];
+                        if (message.fills && message.fills.length) {
+                            object.fills = [];
+                            for (var j = 0; j < message.fills.length; ++j)
+                                object.fills[j] = $root.type.googleapis.com.FillsPbMsg.Body.toObject(message.fills[j], options);
+                        }
                         return object;
-                    var message = new $root.type.googleapis.com.Data();
-                    if (object.typeUrl != null)
-                        message.typeUrl = String(object.typeUrl);
-                    if (object.value != null) {
-                        if (typeof object.value !== "object")
-                            throw TypeError(".type.googleapis.com.Data.value: object expected");
-                        message.value = $root.type.googleapis.com.OrderVoPb.fromObject(object.value);
-                    }
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Data message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.Data} message Data
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Data.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.typeUrl = "";
-                        object.value = null;
-                    }
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        object.typeUrl = message.typeUrl;
-                    if (message.value != null && message.hasOwnProperty("value"))
-                        object.value = $root.type.googleapis.com.OrderVoPb.toObject(message.value, options);
-                    return object;
-                };
-
-                /**
-                 * Converts this Data to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Data.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Data
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Data to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Data.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Data
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.FillsPbMsg.Data
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.FillsPbMsg.Data";
+                    };
+
+                    return Data;
+                })();
+
+                FillsPbMsg.Body = (function() {
+
+                    /**
+                     * Properties of a Body.
+                     * @memberof type.googleapis.com.FillsPbMsg
+                     * @interface IBody
+                     * @property {string|null} [price] Body price
+                     * @property {string|null} [amount] Body amount
+                     * @property {string|null} [side] Body side
+                     * @property {number|Long|null} [createddate] Body createddate
+                     * @property {number|Long|null} [id] Body id
+                     */
+
+                    /**
+                     * Constructs a new Body.
+                     * @memberof type.googleapis.com.FillsPbMsg
+                     * @classdesc Represents a Body.
+                     * @implements IBody
+                     * @constructor
+                     * @param {type.googleapis.com.FillsPbMsg.IBody=} [properties] Properties to set
+                     */
+                    function Body(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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Data";
-                };
-
-                return Data;
-            })();
-
-            com.OrderVoPb = (function() {
-
-                /**
-                 * Properties of an OrderVoPb.
-                 * @memberof type.googleapis.com
-                 * @interface IOrderVoPb
-                 * @property {string|null} [price] OrderVoPb price
-                 * @property {string|null} [amount] OrderVoPb amount
-                 * @property {string|null} [side] OrderVoPb side
-                 * @property {number|Long|null} [createddate] OrderVoPb createddate
-                 * @property {number|Long|null} [id] OrderVoPb id
-                 */
-
-                /**
-                 * Constructs a new OrderVoPb.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents an OrderVoPb.
-                 * @implements IOrderVoPb
-                 * @constructor
-                 * @param {type.googleapis.com.IOrderVoPb=} [properties] Properties to set
-                 */
-                function OrderVoPb(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]];
-                }
-
-                /**
-                 * OrderVoPb price.
-                 * @member {string} price
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @instance
-                 */
-                OrderVoPb.prototype.price = "";
-
-                /**
-                 * OrderVoPb amount.
-                 * @member {string} amount
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @instance
-                 */
-                OrderVoPb.prototype.amount = "";
-
-                /**
-                 * OrderVoPb side.
-                 * @member {string} side
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @instance
-                 */
-                OrderVoPb.prototype.side = "";
-
-                /**
-                 * OrderVoPb createddate.
-                 * @member {number|Long} createddate
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @instance
-                 */
-                OrderVoPb.prototype.createddate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
-
-                /**
-                 * OrderVoPb id.
-                 * @member {number|Long} id
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @instance
-                 */
-                OrderVoPb.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
-
-                /**
-                 * Creates a new OrderVoPb instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {type.googleapis.com.IOrderVoPb=} [properties] Properties to set
-                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb instance
-                 */
-                OrderVoPb.create = function create(properties) {
-                    return new OrderVoPb(properties);
-                };
 
-                /**
-                 * Encodes the specified OrderVoPb message. Does not implicitly {@link type.googleapis.com.OrderVoPb.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {type.googleapis.com.IOrderVoPb} message OrderVoPb message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                OrderVoPb.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.price != null && Object.hasOwnProperty.call(message, "price"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.price);
-                    if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.amount);
-                    if (message.side != null && Object.hasOwnProperty.call(message, "side"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.side);
-                    if (message.createddate != null && Object.hasOwnProperty.call(message, "createddate"))
-                        writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createddate);
-                    if (message.id != null && Object.hasOwnProperty.call(message, "id"))
-                        writer.uint32(/* id 5, wireType 0 =*/40).int64(message.id);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified OrderVoPb message, length delimited. Does not implicitly {@link type.googleapis.com.OrderVoPb.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {type.googleapis.com.IOrderVoPb} message OrderVoPb message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                OrderVoPb.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes an OrderVoPb message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                OrderVoPb.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.type.googleapis.com.OrderVoPb();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.price = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.amount = reader.string();
+                    /**
+                     * Body price.
+                     * @member {string} price
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.price = "";
+
+                    /**
+                     * Body amount.
+                     * @member {string} amount
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.amount = "";
+
+                    /**
+                     * Body side.
+                     * @member {string} side
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.side = "";
+
+                    /**
+                     * Body createddate.
+                     * @member {number|Long} createddate
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.createddate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                    /**
+                     * Body id.
+                     * @member {number|Long} id
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                    /**
+                     * Creates a new Body instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IBody=} [properties] Properties to set
+                     * @returns {type.googleapis.com.FillsPbMsg.Body} Body instance
+                     */
+                    Body.create = function create(properties) {
+                        return new Body(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Body message. Does not implicitly {@link type.googleapis.com.FillsPbMsg.Body.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.price != null && Object.hasOwnProperty.call(message, "price"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.price);
+                        if (message.amount != null && Object.hasOwnProperty.call(message, "amount"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.amount);
+                        if (message.side != null && Object.hasOwnProperty.call(message, "side"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.side);
+                        if (message.createddate != null && Object.hasOwnProperty.call(message, "createddate"))
+                            writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createddate);
+                        if (message.id != null && Object.hasOwnProperty.call(message, "id"))
+                            writer.uint32(/* id 5, wireType 0 =*/40).int64(message.id);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Body message, length delimited. Does not implicitly {@link type.googleapis.com.FillsPbMsg.Body.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.FillsPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.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.type.googleapis.com.FillsPbMsg.Body();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.price = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.amount = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.side = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.createddate = reader.int64();
+                                    break;
+                                }
+                            case 5: {
+                                    message.id = reader.int64();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 3: {
-                                message.side = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.createddate = reader.int64();
-                                break;
-                            }
-                        case 5: {
-                                message.id = reader.int64();
-                                break;
-                            }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes an OrderVoPb message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                OrderVoPb.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies an OrderVoPb message.
-                 * @function verify
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                OrderVoPb.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.price != null && message.hasOwnProperty("price"))
-                        if (!$util.isString(message.price))
-                            return "price: string expected";
-                    if (message.amount != null && message.hasOwnProperty("amount"))
-                        if (!$util.isString(message.amount))
-                            return "amount: string expected";
-                    if (message.side != null && message.hasOwnProperty("side"))
-                        if (!$util.isString(message.side))
-                            return "side: string expected";
-                    if (message.createddate != null && message.hasOwnProperty("createddate"))
-                        if (!$util.isInteger(message.createddate) && !(message.createddate && $util.isInteger(message.createddate.low) && $util.isInteger(message.createddate.high)))
-                            return "createddate: integer|Long expected";
-                    if (message.id != null && message.hasOwnProperty("id"))
-                        if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))
-                            return "id: integer|Long expected";
-                    return null;
-                };
-
-                /**
-                 * Creates an OrderVoPb message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.OrderVoPb} OrderVoPb
-                 */
-                OrderVoPb.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.OrderVoPb)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.FillsPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Body message.
+                     * @function verify
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Body.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.price != null && message.hasOwnProperty("price"))
+                            if (!$util.isString(message.price))
+                                return "price: string expected";
+                        if (message.amount != null && message.hasOwnProperty("amount"))
+                            if (!$util.isString(message.amount))
+                                return "amount: string expected";
+                        if (message.side != null && message.hasOwnProperty("side"))
+                            if (!$util.isString(message.side))
+                                return "side: string expected";
+                        if (message.createddate != null && message.hasOwnProperty("createddate"))
+                            if (!$util.isInteger(message.createddate) && !(message.createddate && $util.isInteger(message.createddate.low) && $util.isInteger(message.createddate.high)))
+                                return "createddate: integer|Long expected";
+                        if (message.id != null && message.hasOwnProperty("id"))
+                            if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))
+                                return "id: integer|Long expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Body message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.FillsPbMsg.Body} Body
+                     */
+                    Body.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.FillsPbMsg.Body)
+                            return object;
+                        var message = new $root.type.googleapis.com.FillsPbMsg.Body();
+                        if (object.price != null)
+                            message.price = String(object.price);
+                        if (object.amount != null)
+                            message.amount = String(object.amount);
+                        if (object.side != null)
+                            message.side = String(object.side);
+                        if (object.createddate != null)
+                            if ($util.Long)
+                                (message.createddate = $util.Long.fromValue(object.createddate)).unsigned = false;
+                            else if (typeof object.createddate === "string")
+                                message.createddate = parseInt(object.createddate, 10);
+                            else if (typeof object.createddate === "number")
+                                message.createddate = object.createddate;
+                            else if (typeof object.createddate === "object")
+                                message.createddate = new $util.LongBits(object.createddate.low >>> 0, object.createddate.high >>> 0).toNumber();
+                        if (object.id != null)
+                            if ($util.Long)
+                                (message.id = $util.Long.fromValue(object.id)).unsigned = false;
+                            else if (typeof object.id === "string")
+                                message.id = parseInt(object.id, 10);
+                            else if (typeof object.id === "number")
+                                message.id = object.id;
+                            else if (typeof object.id === "object")
+                                message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Body message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FillsPbMsg.Body} message Body
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Body.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.price = "";
+                            object.amount = "";
+                            object.side = "";
+                            if ($util.Long) {
+                                var long = new $util.Long(0, 0, false);
+                                object.createddate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                            } else
+                                object.createddate = options.longs === String ? "0" : 0;
+                            if ($util.Long) {
+                                var long = new $util.Long(0, 0, false);
+                                object.id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                            } else
+                                object.id = options.longs === String ? "0" : 0;
+                        }
+                        if (message.price != null && message.hasOwnProperty("price"))
+                            object.price = message.price;
+                        if (message.amount != null && message.hasOwnProperty("amount"))
+                            object.amount = message.amount;
+                        if (message.side != null && message.hasOwnProperty("side"))
+                            object.side = message.side;
+                        if (message.createddate != null && message.hasOwnProperty("createddate"))
+                            if (typeof message.createddate === "number")
+                                object.createddate = options.longs === String ? String(message.createddate) : message.createddate;
+                            else
+                                object.createddate = options.longs === String ? $util.Long.prototype.toString.call(message.createddate) : options.longs === Number ? new $util.LongBits(message.createddate.low >>> 0, message.createddate.high >>> 0).toNumber() : message.createddate;
+                        if (message.id != null && message.hasOwnProperty("id"))
+                            if (typeof message.id === "number")
+                                object.id = options.longs === String ? String(message.id) : message.id;
+                            else
+                                object.id = options.longs === String ? $util.Long.prototype.toString.call(message.id) : options.longs === Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;
                         return object;
-                    var message = new $root.type.googleapis.com.OrderVoPb();
-                    if (object.price != null)
-                        message.price = String(object.price);
-                    if (object.amount != null)
-                        message.amount = String(object.amount);
-                    if (object.side != null)
-                        message.side = String(object.side);
-                    if (object.createddate != null)
-                        if ($util.Long)
-                            (message.createddate = $util.Long.fromValue(object.createddate)).unsigned = false;
-                        else if (typeof object.createddate === "string")
-                            message.createddate = parseInt(object.createddate, 10);
-                        else if (typeof object.createddate === "number")
-                            message.createddate = object.createddate;
-                        else if (typeof object.createddate === "object")
-                            message.createddate = new $util.LongBits(object.createddate.low >>> 0, object.createddate.high >>> 0).toNumber();
-                    if (object.id != null)
-                        if ($util.Long)
-                            (message.id = $util.Long.fromValue(object.id)).unsigned = false;
-                        else if (typeof object.id === "string")
-                            message.id = parseInt(object.id, 10);
-                        else if (typeof object.id === "number")
-                            message.id = object.id;
-                        else if (typeof object.id === "object")
-                            message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from an OrderVoPb message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {type.googleapis.com.OrderVoPb} message OrderVoPb
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                OrderVoPb.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.price = "";
-                        object.amount = "";
-                        object.side = "";
-                        if ($util.Long) {
-                            var long = new $util.Long(0, 0, false);
-                            object.createddate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
-                        } else
-                            object.createddate = options.longs === String ? "0" : 0;
-                        if ($util.Long) {
-                            var long = new $util.Long(0, 0, false);
-                            object.id = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
-                        } else
-                            object.id = options.longs === String ? "0" : 0;
-                    }
-                    if (message.price != null && message.hasOwnProperty("price"))
-                        object.price = message.price;
-                    if (message.amount != null && message.hasOwnProperty("amount"))
-                        object.amount = message.amount;
-                    if (message.side != null && message.hasOwnProperty("side"))
-                        object.side = message.side;
-                    if (message.createddate != null && message.hasOwnProperty("createddate"))
-                        if (typeof message.createddate === "number")
-                            object.createddate = options.longs === String ? String(message.createddate) : message.createddate;
-                        else
-                            object.createddate = options.longs === String ? $util.Long.prototype.toString.call(message.createddate) : options.longs === Number ? new $util.LongBits(message.createddate.low >>> 0, message.createddate.high >>> 0).toNumber() : message.createddate;
-                    if (message.id != null && message.hasOwnProperty("id"))
-                        if (typeof message.id === "number")
-                            object.id = options.longs === String ? String(message.id) : message.id;
-                        else
-                            object.id = options.longs === String ? $util.Long.prototype.toString.call(message.id) : options.longs === Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;
-                    return object;
-                };
-
-                /**
-                 * Converts this OrderVoPb to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                OrderVoPb.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
+                    };
+
+                    /**
+                     * Converts this Body to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Body.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Body
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.FillsPbMsg.Body
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.FillsPbMsg.Body";
+                    };
 
-                /**
-                 * Gets the default type url for OrderVoPb
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.OrderVoPb
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                OrderVoPb.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
-                    }
-                    return typeUrlPrefix + "/type.googleapis.com.OrderVoPb";
-                };
+                    return Body;
+                })();
 
-                return OrderVoPb;
+                return FillsPbMsg;
             })();
 
             return com;

+ 68 - 67
client/hotconi/proto/type.googleapis.com.FillsPbMsg.json

@@ -9,75 +9,76 @@
           "nested": {
             "com": {
               "nested": {
-                "Response": {
-                  "fields": {
-                    "biz": {
-                      "type": "string",
-                      "id": 1
+                "FillsPbMsg": {
+                  "nested": {
+                    "Response": {
+                      "fields": {
+                        "biz": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "type": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "granularity": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "data": {
+                          "type": "Data",
+                          "id": 7
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 8
+                        }
+                      }
                     },
-                    "type": {
-                      "type": "string",
-                      "id": 2
+                    "Data": {
+                      "fields": {
+                        "fills": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 1
+                        }
+                      }
                     },
-                    "base": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "granularity": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "data": {
-                      "type": "Data",
-                      "id": 7
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 8
-                    }
-                  }
-                },
-                "Data": {
-                  "fields": {
-                    "typeUrl": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "value": {
-                      "type": "OrderVoPb",
-                      "id": 2
-                    }
-                  }
-                },
-                "OrderVoPb": {
-                  "fields": {
-                    "price": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "amount": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "side": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "createddate": {
-                      "type": "int64",
-                      "id": 4
-                    },
-                    "id": {
-                      "type": "int64",
-                      "id": 5
+                    "Body": {
+                      "fields": {
+                        "price": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "amount": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "side": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "createddate": {
+                          "type": "int64",
+                          "id": 4
+                        },
+                        "id": {
+                          "type": "int64",
+                          "id": 5
+                        }
+                      }
                     }
                   }
                 }

+ 11 - 10
client/hotconi/proto/type.googleapis.com.FillsPbMsg.proto

@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-package type.googleapis.com; // 替换为你的包名
+package type.googleapis.com.FillsPbMsg; // 替换为你的包名
 
 // 响应消息
 message Response {
@@ -15,16 +15,17 @@ message Response {
 }
 
 // 数据消息
+// 定义 FillsPbMsg 消息
 message Data {
-  string typeUrl = 1; // 数据类型URL
-  OrderVoPb value = 2; // 数据值
+  // repeated 字段表示可以有多个 Body
+  repeated Body fills = 1;
 }
+// 定义 Body 子消息
+message Body {
+  string price = 1;        // 字段1: 价格,字符串类型
+  string amount = 2;       // 字段2: 数量,字符串类型
+  string side = 3;         // 字段3: 买卖方向,字符串类型
+  int64 createddate = 4;   // 字段4: 创建日期,64位整型
+  int64 id = 5;            // 字段5: 唯一标识符,64位整型
 
-
-message OrderVoPb {
-  string price = 1;          // 价格
-  string amount = 2;         // 数量
-  string side = 3;           // 交易方向,例如:"buy" 或 "sell"
-  int64 createddate = 4;     // 创建日期
-  int64 id = 5;              // 订单ID
 }

+ 1214 - 1186
client/hotconi/proto/type.googleapis.com.FundRatesPbMsg.js

@@ -36,1215 +36,1243 @@ $root.type = (function() {
              */
             var com = {};
 
-            com.Response = (function() {
+            com.FundRatesPbMsg = (function() {
 
                 /**
-                 * Properties of a Response.
+                 * Namespace FundRatesPbMsg.
                  * @memberof type.googleapis.com
-                 * @interface IResponse
-                 * @property {string|null} [biz] Response biz
-                 * @property {string|null} [type] Response type
-                 * @property {string|null} [base] Response base
-                 * @property {string|null} [quote] Response quote
-                 * @property {string|null} [contractcode] Response contractcode
-                 * @property {string|null} [granularity] Response granularity
-                 * @property {type.googleapis.com.IData|null} [data] Response data
-                 * @property {number|null} [env] Response env
-                 */
-
-                /**
-                 * Constructs a new Response.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Response.
-                 * @implements IResponse
-                 * @constructor
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 */
-                function Response(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]];
-                }
-
-                /**
-                 * Response biz.
-                 * @member {string} biz
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.biz = "";
-
-                /**
-                 * Response type.
-                 * @member {string} type
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.type = "";
-
-                /**
-                 * Response base.
-                 * @member {string} base
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.base = "";
-
-                /**
-                 * Response quote.
-                 * @member {string} quote
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.quote = "";
-
-                /**
-                 * Response contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.contractcode = "";
-
-                /**
-                 * Response granularity.
-                 * @member {string} granularity
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.granularity = "";
-
-                /**
-                 * Response data.
-                 * @member {type.googleapis.com.IData|null|undefined} data
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.data = null;
-
-                /**
-                 * Response env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.env = 0;
-
-                /**
-                 * Creates a new Response instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Response} Response instance
-                 */
-                Response.create = function create(properties) {
-                    return new Response(properties);
-                };
-
-                /**
-                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
-                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
-                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
-                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
-                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
-                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
-                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
+                 * @namespace
+                 */
+                var FundRatesPbMsg = {};
+
+                FundRatesPbMsg.Response = (function() {
+
+                    /**
+                     * Properties of a Response.
+                     * @memberof type.googleapis.com.FundRatesPbMsg
+                     * @interface IResponse
+                     * @property {string|null} [biz] Response biz
+                     * @property {string|null} [type] Response type
+                     * @property {string|null} [base] Response base
+                     * @property {string|null} [quote] Response quote
+                     * @property {string|null} [contractcode] Response contractcode
+                     * @property {string|null} [granularity] Response granularity
+                     * @property {type.googleapis.com.FundRatesPbMsg.IData|null} [data] Response data
+                     * @property {number|null} [env] Response env
+                     */
+
+                    /**
+                     * Constructs a new Response.
+                     * @memberof type.googleapis.com.FundRatesPbMsg
+                     * @classdesc Represents a Response.
+                     * @implements IResponse
+                     * @constructor
+                     * @param {type.googleapis.com.FundRatesPbMsg.IResponse=} [properties] Properties to set
+                     */
+                    function Response(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]];
+                    }
 
-                /**
-                 * Decodes a Response message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.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.type.googleapis.com.Response();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.biz = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.type = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.base = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.quote = reader.string();
-                                break;
-                            }
-                        case 5: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.granularity = reader.string();
+                    /**
+                     * Response biz.
+                     * @member {string} biz
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.biz = "";
+
+                    /**
+                     * Response type.
+                     * @member {string} type
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.type = "";
+
+                    /**
+                     * Response base.
+                     * @member {string} base
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.base = "";
+
+                    /**
+                     * Response quote.
+                     * @member {string} quote
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.quote = "";
+
+                    /**
+                     * Response contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.contractcode = "";
+
+                    /**
+                     * Response granularity.
+                     * @member {string} granularity
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.granularity = "";
+
+                    /**
+                     * Response data.
+                     * @member {type.googleapis.com.FundRatesPbMsg.IData|null|undefined} data
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.data = null;
+
+                    /**
+                     * Response env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.env = 0;
+
+                    /**
+                     * Creates a new Response instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IResponse=} [properties] Properties to set
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Response} Response instance
+                     */
+                    Response.create = function create(properties) {
+                        return new Response(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.FundRatesPbMsg.Response.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                        if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                        if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                        if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                        if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                        if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                            $root.type.googleapis.com.FundRatesPbMsg.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.FundRatesPbMsg.Response.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.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.type.googleapis.com.FundRatesPbMsg.Response();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.biz = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.type = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.base = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.quote = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.granularity = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.data = $root.type.googleapis.com.FundRatesPbMsg.Data.decode(reader, reader.uint32());
+                                    break;
+                                }
+                            case 8: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 7: {
-                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
-                                break;
-                            }
-                        case 8: {
-                                message.env = reader.int32();
-                                break;
-                            }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Response message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Response.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        if (!$util.isString(message.biz))
-                            return "biz: string expected";
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        if (!$util.isString(message.type))
-                            return "type: string expected";
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        if (!$util.isString(message.base))
-                            return "base: string expected";
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        if (!$util.isString(message.quote))
-                            return "quote: string expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        if (!$util.isString(message.granularity))
-                            return "granularity: string expected";
-                    if (message.data != null && message.hasOwnProperty("data")) {
-                        var error = $root.type.googleapis.com.Data.verify(message.data);
-                        if (error)
-                            return "data." + error;
-                    }
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Response} Response
-                 */
-                Response.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Response)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Response message.
+                     * @function verify
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Response.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            if (!$util.isString(message.biz))
+                                return "biz: string expected";
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            if (!$util.isString(message.type))
+                                return "type: string expected";
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            if (!$util.isString(message.base))
+                                return "base: string expected";
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            if (!$util.isString(message.quote))
+                                return "quote: string expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            if (!$util.isString(message.granularity))
+                                return "granularity: string expected";
+                        if (message.data != null && message.hasOwnProperty("data")) {
+                            var error = $root.type.googleapis.com.FundRatesPbMsg.Data.verify(message.data);
+                            if (error)
+                                return "data." + error;
+                        }
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Response} Response
+                     */
+                    Response.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.FundRatesPbMsg.Response)
+                            return object;
+                        var message = new $root.type.googleapis.com.FundRatesPbMsg.Response();
+                        if (object.biz != null)
+                            message.biz = String(object.biz);
+                        if (object.type != null)
+                            message.type = String(object.type);
+                        if (object.base != null)
+                            message.base = String(object.base);
+                        if (object.quote != null)
+                            message.quote = String(object.quote);
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.granularity != null)
+                            message.granularity = String(object.granularity);
+                        if (object.data != null) {
+                            if (typeof object.data !== "object")
+                                throw TypeError(".type.googleapis.com.FundRatesPbMsg.Response.data: object expected");
+                            message.data = $root.type.googleapis.com.FundRatesPbMsg.Data.fromObject(object.data);
+                        }
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Response message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.Response} message Response
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Response.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.biz = "";
+                            object.type = "";
+                            object.base = "";
+                            object.quote = "";
+                            object.contractcode = "";
+                            object.granularity = "";
+                            object.data = null;
+                            object.env = 0;
+                        }
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            object.biz = message.biz;
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            object.type = message.type;
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            object.base = message.base;
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            object.quote = message.quote;
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            object.granularity = message.granularity;
+                        if (message.data != null && message.hasOwnProperty("data"))
+                            object.data = $root.type.googleapis.com.FundRatesPbMsg.Data.toObject(message.data, options);
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
                         return object;
-                    var message = new $root.type.googleapis.com.Response();
-                    if (object.biz != null)
-                        message.biz = String(object.biz);
-                    if (object.type != null)
-                        message.type = String(object.type);
-                    if (object.base != null)
-                        message.base = String(object.base);
-                    if (object.quote != null)
-                        message.quote = String(object.quote);
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.granularity != null)
-                        message.granularity = String(object.granularity);
-                    if (object.data != null) {
-                        if (typeof object.data !== "object")
-                            throw TypeError(".type.googleapis.com.Response.data: object expected");
-                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
-                    }
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Response message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.Response} message Response
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Response.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.biz = "";
-                        object.type = "";
-                        object.base = "";
-                        object.quote = "";
-                        object.contractcode = "";
-                        object.granularity = "";
-                        object.data = null;
-                        object.env = 0;
-                    }
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        object.biz = message.biz;
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        object.type = message.type;
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        object.base = message.base;
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        object.quote = message.quote;
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        object.granularity = message.granularity;
-                    if (message.data != null && message.hasOwnProperty("data"))
-                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    return object;
-                };
-
-                /**
-                 * Converts this Response to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Response.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Response
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Response to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Response.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Response
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Response
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.FundRatesPbMsg.Response";
+                    };
+
+                    return Response;
+                })();
+
+                FundRatesPbMsg.Data = (function() {
+
+                    /**
+                     * Properties of a Data.
+                     * @memberof type.googleapis.com.FundRatesPbMsg
+                     * @interface IData
+                     * @property {string|null} [typeUrl] Data typeUrl
+                     * @property {Array.<type.googleapis.com.FundRatesPbMsg.IBody>|null} [value] Data value
+                     */
+
+                    /**
+                     * Constructs a new Data.
+                     * @memberof type.googleapis.com.FundRatesPbMsg
+                     * @classdesc Represents a Data.
+                     * @implements IData
+                     * @constructor
+                     * @param {type.googleapis.com.FundRatesPbMsg.IData=} [properties] Properties to set
+                     */
+                    function Data(properties) {
+                        this.value = [];
+                        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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Response";
-                };
-
-                return Response;
-            })();
-
-            com.Data = (function() {
-
-                /**
-                 * Properties of a Data.
-                 * @memberof type.googleapis.com
-                 * @interface IData
-                 * @property {string|null} [typeUrl] Data typeUrl
-                 * @property {type.googleapis.com.IContractInfo|null} [value] Data value
-                 */
 
-                /**
-                 * Constructs a new Data.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Data.
-                 * @implements IData
-                 * @constructor
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 */
-                function Data(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]];
-                }
-
-                /**
-                 * Data typeUrl.
-                 * @member {string} typeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.typeUrl = "";
-
-                /**
-                 * Data value.
-                 * @member {type.googleapis.com.IContractInfo|null|undefined} value
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.value = null;
-
-                /**
-                 * Creates a new Data instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Data} Data instance
-                 */
-                Data.create = function create(properties) {
-                    return new Data(properties);
-                };
-
-                /**
-                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
-                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
-                        $root.type.googleapis.com.ContractInfo.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.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.type.googleapis.com.Data();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.typeUrl = reader.string();
+                    /**
+                     * Data typeUrl.
+                     * @member {string} typeUrl
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.typeUrl = "";
+
+                    /**
+                     * Data value.
+                     * @member {Array.<type.googleapis.com.FundRatesPbMsg.IBody>} value
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.value = $util.emptyArray;
+
+                    /**
+                     * Creates a new Data instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IData=} [properties] Properties to set
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Data} Data instance
+                     */
+                    Data.create = function create(properties) {
+                        return new Data(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.FundRatesPbMsg.Data.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                        if (message.value != null && message.value.length)
+                            for (var i = 0; i < message.value.length; ++i)
+                                $root.type.googleapis.com.FundRatesPbMsg.Body.encode(message.value[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.FundRatesPbMsg.Data.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.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.type.googleapis.com.FundRatesPbMsg.Data();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.typeUrl = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    if (!(message.value && message.value.length))
+                                        message.value = [];
+                                    message.value.push($root.type.googleapis.com.FundRatesPbMsg.Body.decode(reader, reader.uint32()));
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 2: {
-                                message.value = $root.type.googleapis.com.ContractInfo.decode(reader, reader.uint32());
-                                break;
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Data message.
+                     * @function verify
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Data.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            if (!$util.isString(message.typeUrl))
+                                return "typeUrl: string expected";
+                        if (message.value != null && message.hasOwnProperty("value")) {
+                            if (!Array.isArray(message.value))
+                                return "value: array expected";
+                            for (var i = 0; i < message.value.length; ++i) {
+                                var error = $root.type.googleapis.com.FundRatesPbMsg.Body.verify(message.value[i]);
+                                if (error)
+                                    return "value." + error;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Data message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Data.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        if (!$util.isString(message.typeUrl))
-                            return "typeUrl: string expected";
-                    if (message.value != null && message.hasOwnProperty("value")) {
-                        var error = $root.type.googleapis.com.ContractInfo.verify(message.value);
-                        if (error)
-                            return "value." + error;
-                    }
-                    return null;
-                };
-
-                /**
-                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Data} Data
-                 */
-                Data.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Data)
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Data} Data
+                     */
+                    Data.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.FundRatesPbMsg.Data)
+                            return object;
+                        var message = new $root.type.googleapis.com.FundRatesPbMsg.Data();
+                        if (object.typeUrl != null)
+                            message.typeUrl = String(object.typeUrl);
+                        if (object.value) {
+                            if (!Array.isArray(object.value))
+                                throw TypeError(".type.googleapis.com.FundRatesPbMsg.Data.value: array expected");
+                            message.value = [];
+                            for (var i = 0; i < object.value.length; ++i) {
+                                if (typeof object.value[i] !== "object")
+                                    throw TypeError(".type.googleapis.com.FundRatesPbMsg.Data.value: object expected");
+                                message.value[i] = $root.type.googleapis.com.FundRatesPbMsg.Body.fromObject(object.value[i]);
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Data message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.Data} message Data
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Data.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.arrays || options.defaults)
+                            object.value = [];
+                        if (options.defaults)
+                            object.typeUrl = "";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            object.typeUrl = message.typeUrl;
+                        if (message.value && message.value.length) {
+                            object.value = [];
+                            for (var j = 0; j < message.value.length; ++j)
+                                object.value[j] = $root.type.googleapis.com.FundRatesPbMsg.Body.toObject(message.value[j], options);
+                        }
                         return object;
-                    var message = new $root.type.googleapis.com.Data();
-                    if (object.typeUrl != null)
-                        message.typeUrl = String(object.typeUrl);
-                    if (object.value != null) {
-                        if (typeof object.value !== "object")
-                            throw TypeError(".type.googleapis.com.Data.value: object expected");
-                        message.value = $root.type.googleapis.com.ContractInfo.fromObject(object.value);
-                    }
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Data message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.Data} message Data
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Data.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.typeUrl = "";
-                        object.value = null;
-                    }
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        object.typeUrl = message.typeUrl;
-                    if (message.value != null && message.hasOwnProperty("value"))
-                        object.value = $root.type.googleapis.com.ContractInfo.toObject(message.value, options);
-                    return object;
-                };
-
-                /**
-                 * Converts this Data to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Data.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Data
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Data to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Data.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Data
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Data
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.FundRatesPbMsg.Data";
+                    };
+
+                    return Data;
+                })();
+
+                FundRatesPbMsg.Body = (function() {
+
+                    /**
+                     * Properties of a Body.
+                     * @memberof type.googleapis.com.FundRatesPbMsg
+                     * @interface IBody
+                     * @property {string|null} [contractcode] Body contractcode
+                     * @property {string|null} [markprice] Body markprice
+                     * @property {string|null} [indexprice] Body indexprice
+                     * @property {string|null} [feeRate] Body feeRate
+                     * @property {string|null} [estimateFeeRate] Body estimateFeeRate
+                     * @property {number|Long|null} [nextLiquidationInterval] Body nextLiquidationInterval
+                     * @property {string|null} [totalPosition] Body totalPosition
+                     * @property {string|null} [indexCny] Body indexCny
+                     * @property {string|null} [markCny] Body markCny
+                     * @property {number|null} [env] Body env
+                     * @property {string|null} [base] Body base
+                     * @property {string|null} [indexBase] Body indexBase
+                     * @property {string|null} [quote] Body quote
+                     * @property {string|null} [baseDisplayName] Body baseDisplayName
+                     * @property {string|null} [indexBaseDisplayName] Body indexBaseDisplayName
+                     * @property {string|null} [quoteDisplayName] Body quoteDisplayName
+                     * @property {string|null} [preDeliveryPrice] Body preDeliveryPrice
+                     * @property {number|null} [online] Body online
+                     */
+
+                    /**
+                     * Constructs a new Body.
+                     * @memberof type.googleapis.com.FundRatesPbMsg
+                     * @classdesc Represents a Body.
+                     * @implements IBody
+                     * @constructor
+                     * @param {type.googleapis.com.FundRatesPbMsg.IBody=} [properties] Properties to set
+                     */
+                    function Body(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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Data";
-                };
-
-                return Data;
-            })();
-
-            com.ContractInfo = (function() {
-
-                /**
-                 * Properties of a ContractInfo.
-                 * @memberof type.googleapis.com
-                 * @interface IContractInfo
-                 * @property {string|null} [contractcode] ContractInfo contractcode
-                 * @property {string|null} [markprice] ContractInfo markprice
-                 * @property {string|null} [indexprice] ContractInfo indexprice
-                 * @property {string|null} [feeRate] ContractInfo feeRate
-                 * @property {string|null} [estimateFeeRate] ContractInfo estimateFeeRate
-                 * @property {number|Long|null} [nextLiquidationInterval] ContractInfo nextLiquidationInterval
-                 * @property {string|null} [totalPosition] ContractInfo totalPosition
-                 * @property {string|null} [indexCny] ContractInfo indexCny
-                 * @property {string|null} [markCny] ContractInfo markCny
-                 * @property {number|null} [env] ContractInfo env
-                 * @property {string|null} [base] ContractInfo base
-                 * @property {string|null} [indexBase] ContractInfo indexBase
-                 * @property {string|null} [quote] ContractInfo quote
-                 * @property {string|null} [baseDisplayName] ContractInfo baseDisplayName
-                 * @property {string|null} [indexBaseDisplayName] ContractInfo indexBaseDisplayName
-                 * @property {string|null} [quoteDisplayName] ContractInfo quoteDisplayName
-                 * @property {string|null} [preDeliveryPrice] ContractInfo preDeliveryPrice
-                 * @property {number|null} [online] ContractInfo online
-                 */
-
-                /**
-                 * Constructs a new ContractInfo.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a ContractInfo.
-                 * @implements IContractInfo
-                 * @constructor
-                 * @param {type.googleapis.com.IContractInfo=} [properties] Properties to set
-                 */
-                function ContractInfo(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]];
-                }
-
-                /**
-                 * ContractInfo contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.contractcode = "";
-
-                /**
-                 * ContractInfo markprice.
-                 * @member {string} markprice
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.markprice = "";
-
-                /**
-                 * ContractInfo indexprice.
-                 * @member {string} indexprice
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.indexprice = "";
-
-                /**
-                 * ContractInfo feeRate.
-                 * @member {string} feeRate
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.feeRate = "";
-
-                /**
-                 * ContractInfo estimateFeeRate.
-                 * @member {string} estimateFeeRate
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.estimateFeeRate = "";
-
-                /**
-                 * ContractInfo nextLiquidationInterval.
-                 * @member {number|Long} nextLiquidationInterval
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.nextLiquidationInterval = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
-
-                /**
-                 * ContractInfo totalPosition.
-                 * @member {string} totalPosition
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.totalPosition = "";
-
-                /**
-                 * ContractInfo indexCny.
-                 * @member {string} indexCny
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.indexCny = "";
-
-                /**
-                 * ContractInfo markCny.
-                 * @member {string} markCny
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.markCny = "";
-
-                /**
-                 * ContractInfo env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.env = 0;
-
-                /**
-                 * ContractInfo base.
-                 * @member {string} base
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.base = "";
-
-                /**
-                 * ContractInfo indexBase.
-                 * @member {string} indexBase
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.indexBase = "";
-
-                /**
-                 * ContractInfo quote.
-                 * @member {string} quote
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.quote = "";
-
-                /**
-                 * ContractInfo baseDisplayName.
-                 * @member {string} baseDisplayName
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.baseDisplayName = "";
-
-                /**
-                 * ContractInfo indexBaseDisplayName.
-                 * @member {string} indexBaseDisplayName
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.indexBaseDisplayName = "";
-
-                /**
-                 * ContractInfo quoteDisplayName.
-                 * @member {string} quoteDisplayName
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.quoteDisplayName = "";
-
-                /**
-                 * ContractInfo preDeliveryPrice.
-                 * @member {string} preDeliveryPrice
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.preDeliveryPrice = "";
-
-                /**
-                 * ContractInfo online.
-                 * @member {number} online
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 */
-                ContractInfo.prototype.online = 0;
 
-                /**
-                 * Creates a new ContractInfo instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {type.googleapis.com.IContractInfo=} [properties] Properties to set
-                 * @returns {type.googleapis.com.ContractInfo} ContractInfo instance
-                 */
-                ContractInfo.create = function create(properties) {
-                    return new ContractInfo(properties);
-                };
-
-                /**
-                 * Encodes the specified ContractInfo message. Does not implicitly {@link type.googleapis.com.ContractInfo.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {type.googleapis.com.IContractInfo} message ContractInfo message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                ContractInfo.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.contractcode);
-                    if (message.markprice != null && Object.hasOwnProperty.call(message, "markprice"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.markprice);
-                    if (message.indexprice != null && Object.hasOwnProperty.call(message, "indexprice"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.indexprice);
-                    if (message.feeRate != null && Object.hasOwnProperty.call(message, "feeRate"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.feeRate);
-                    if (message.estimateFeeRate != null && Object.hasOwnProperty.call(message, "estimateFeeRate"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.estimateFeeRate);
-                    if (message.nextLiquidationInterval != null && Object.hasOwnProperty.call(message, "nextLiquidationInterval"))
-                        writer.uint32(/* id 6, wireType 0 =*/48).int64(message.nextLiquidationInterval);
-                    if (message.totalPosition != null && Object.hasOwnProperty.call(message, "totalPosition"))
-                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.totalPosition);
-                    if (message.indexCny != null && Object.hasOwnProperty.call(message, "indexCny"))
-                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.indexCny);
-                    if (message.markCny != null && Object.hasOwnProperty.call(message, "markCny"))
-                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.markCny);
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 10, wireType 0 =*/80).int32(message.env);
-                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
-                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.base);
-                    if (message.indexBase != null && Object.hasOwnProperty.call(message, "indexBase"))
-                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.indexBase);
-                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
-                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.quote);
-                    if (message.baseDisplayName != null && Object.hasOwnProperty.call(message, "baseDisplayName"))
-                        writer.uint32(/* id 14, wireType 2 =*/114).string(message.baseDisplayName);
-                    if (message.indexBaseDisplayName != null && Object.hasOwnProperty.call(message, "indexBaseDisplayName"))
-                        writer.uint32(/* id 15, wireType 2 =*/122).string(message.indexBaseDisplayName);
-                    if (message.quoteDisplayName != null && Object.hasOwnProperty.call(message, "quoteDisplayName"))
-                        writer.uint32(/* id 16, wireType 2 =*/130).string(message.quoteDisplayName);
-                    if (message.preDeliveryPrice != null && Object.hasOwnProperty.call(message, "preDeliveryPrice"))
-                        writer.uint32(/* id 17, wireType 2 =*/138).string(message.preDeliveryPrice);
-                    if (message.online != null && Object.hasOwnProperty.call(message, "online"))
-                        writer.uint32(/* id 18, wireType 0 =*/144).int32(message.online);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified ContractInfo message, length delimited. Does not implicitly {@link type.googleapis.com.ContractInfo.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {type.googleapis.com.IContractInfo} message ContractInfo message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                ContractInfo.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a ContractInfo message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.ContractInfo} ContractInfo
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                ContractInfo.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.type.googleapis.com.ContractInfo();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.markprice = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.indexprice = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.feeRate = reader.string();
+                    /**
+                     * Body contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.contractcode = "";
+
+                    /**
+                     * Body markprice.
+                     * @member {string} markprice
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.markprice = "";
+
+                    /**
+                     * Body indexprice.
+                     * @member {string} indexprice
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.indexprice = "";
+
+                    /**
+                     * Body feeRate.
+                     * @member {string} feeRate
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.feeRate = "";
+
+                    /**
+                     * Body estimateFeeRate.
+                     * @member {string} estimateFeeRate
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.estimateFeeRate = "";
+
+                    /**
+                     * Body nextLiquidationInterval.
+                     * @member {number|Long} nextLiquidationInterval
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.nextLiquidationInterval = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                    /**
+                     * Body totalPosition.
+                     * @member {string} totalPosition
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.totalPosition = "";
+
+                    /**
+                     * Body indexCny.
+                     * @member {string} indexCny
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.indexCny = "";
+
+                    /**
+                     * Body markCny.
+                     * @member {string} markCny
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.markCny = "";
+
+                    /**
+                     * Body env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.env = 0;
+
+                    /**
+                     * Body base.
+                     * @member {string} base
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.base = "";
+
+                    /**
+                     * Body indexBase.
+                     * @member {string} indexBase
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.indexBase = "";
+
+                    /**
+                     * Body quote.
+                     * @member {string} quote
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.quote = "";
+
+                    /**
+                     * Body baseDisplayName.
+                     * @member {string} baseDisplayName
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.baseDisplayName = "";
+
+                    /**
+                     * Body indexBaseDisplayName.
+                     * @member {string} indexBaseDisplayName
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.indexBaseDisplayName = "";
+
+                    /**
+                     * Body quoteDisplayName.
+                     * @member {string} quoteDisplayName
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.quoteDisplayName = "";
+
+                    /**
+                     * Body preDeliveryPrice.
+                     * @member {string} preDeliveryPrice
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.preDeliveryPrice = "";
+
+                    /**
+                     * Body online.
+                     * @member {number} online
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.online = 0;
+
+                    /**
+                     * Creates a new Body instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IBody=} [properties] Properties to set
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Body} Body instance
+                     */
+                    Body.create = function create(properties) {
+                        return new Body(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Body message. Does not implicitly {@link type.googleapis.com.FundRatesPbMsg.Body.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.contractcode);
+                        if (message.markprice != null && Object.hasOwnProperty.call(message, "markprice"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.markprice);
+                        if (message.indexprice != null && Object.hasOwnProperty.call(message, "indexprice"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.indexprice);
+                        if (message.feeRate != null && Object.hasOwnProperty.call(message, "feeRate"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.feeRate);
+                        if (message.estimateFeeRate != null && Object.hasOwnProperty.call(message, "estimateFeeRate"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.estimateFeeRate);
+                        if (message.nextLiquidationInterval != null && Object.hasOwnProperty.call(message, "nextLiquidationInterval"))
+                            writer.uint32(/* id 6, wireType 0 =*/48).int64(message.nextLiquidationInterval);
+                        if (message.totalPosition != null && Object.hasOwnProperty.call(message, "totalPosition"))
+                            writer.uint32(/* id 7, wireType 2 =*/58).string(message.totalPosition);
+                        if (message.indexCny != null && Object.hasOwnProperty.call(message, "indexCny"))
+                            writer.uint32(/* id 8, wireType 2 =*/66).string(message.indexCny);
+                        if (message.markCny != null && Object.hasOwnProperty.call(message, "markCny"))
+                            writer.uint32(/* id 9, wireType 2 =*/74).string(message.markCny);
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 10, wireType 0 =*/80).int32(message.env);
+                        if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                            writer.uint32(/* id 11, wireType 2 =*/90).string(message.base);
+                        if (message.indexBase != null && Object.hasOwnProperty.call(message, "indexBase"))
+                            writer.uint32(/* id 12, wireType 2 =*/98).string(message.indexBase);
+                        if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                            writer.uint32(/* id 13, wireType 2 =*/106).string(message.quote);
+                        if (message.baseDisplayName != null && Object.hasOwnProperty.call(message, "baseDisplayName"))
+                            writer.uint32(/* id 14, wireType 2 =*/114).string(message.baseDisplayName);
+                        if (message.indexBaseDisplayName != null && Object.hasOwnProperty.call(message, "indexBaseDisplayName"))
+                            writer.uint32(/* id 15, wireType 2 =*/122).string(message.indexBaseDisplayName);
+                        if (message.quoteDisplayName != null && Object.hasOwnProperty.call(message, "quoteDisplayName"))
+                            writer.uint32(/* id 16, wireType 2 =*/130).string(message.quoteDisplayName);
+                        if (message.preDeliveryPrice != null && Object.hasOwnProperty.call(message, "preDeliveryPrice"))
+                            writer.uint32(/* id 17, wireType 2 =*/138).string(message.preDeliveryPrice);
+                        if (message.online != null && Object.hasOwnProperty.call(message, "online"))
+                            writer.uint32(/* id 18, wireType 0 =*/144).int32(message.online);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Body message, length delimited. Does not implicitly {@link type.googleapis.com.FundRatesPbMsg.Body.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.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.type.googleapis.com.FundRatesPbMsg.Body();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.markprice = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.indexprice = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.feeRate = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.estimateFeeRate = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.nextLiquidationInterval = reader.int64();
+                                    break;
+                                }
+                            case 7: {
+                                    message.totalPosition = reader.string();
+                                    break;
+                                }
+                            case 8: {
+                                    message.indexCny = reader.string();
+                                    break;
+                                }
+                            case 9: {
+                                    message.markCny = reader.string();
+                                    break;
+                                }
+                            case 10: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            case 11: {
+                                    message.base = reader.string();
+                                    break;
+                                }
+                            case 12: {
+                                    message.indexBase = reader.string();
+                                    break;
+                                }
+                            case 13: {
+                                    message.quote = reader.string();
+                                    break;
+                                }
+                            case 14: {
+                                    message.baseDisplayName = reader.string();
+                                    break;
+                                }
+                            case 15: {
+                                    message.indexBaseDisplayName = reader.string();
+                                    break;
+                                }
+                            case 16: {
+                                    message.quoteDisplayName = reader.string();
+                                    break;
+                                }
+                            case 17: {
+                                    message.preDeliveryPrice = reader.string();
+                                    break;
+                                }
+                            case 18: {
+                                    message.online = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 5: {
-                                message.estimateFeeRate = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.nextLiquidationInterval = reader.int64();
-                                break;
-                            }
-                        case 7: {
-                                message.totalPosition = reader.string();
-                                break;
-                            }
-                        case 8: {
-                                message.indexCny = reader.string();
-                                break;
-                            }
-                        case 9: {
-                                message.markCny = reader.string();
-                                break;
-                            }
-                        case 10: {
-                                message.env = reader.int32();
-                                break;
-                            }
-                        case 11: {
-                                message.base = reader.string();
-                                break;
-                            }
-                        case 12: {
-                                message.indexBase = reader.string();
-                                break;
-                            }
-                        case 13: {
-                                message.quote = reader.string();
-                                break;
-                            }
-                        case 14: {
-                                message.baseDisplayName = reader.string();
-                                break;
-                            }
-                        case 15: {
-                                message.indexBaseDisplayName = reader.string();
-                                break;
-                            }
-                        case 16: {
-                                message.quoteDisplayName = reader.string();
-                                break;
-                            }
-                        case 17: {
-                                message.preDeliveryPrice = reader.string();
-                                break;
-                            }
-                        case 18: {
-                                message.online = reader.int32();
-                                break;
-                            }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a ContractInfo message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.ContractInfo} ContractInfo
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                ContractInfo.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a ContractInfo message.
-                 * @function verify
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                ContractInfo.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.markprice != null && message.hasOwnProperty("markprice"))
-                        if (!$util.isString(message.markprice))
-                            return "markprice: string expected";
-                    if (message.indexprice != null && message.hasOwnProperty("indexprice"))
-                        if (!$util.isString(message.indexprice))
-                            return "indexprice: string expected";
-                    if (message.feeRate != null && message.hasOwnProperty("feeRate"))
-                        if (!$util.isString(message.feeRate))
-                            return "feeRate: string expected";
-                    if (message.estimateFeeRate != null && message.hasOwnProperty("estimateFeeRate"))
-                        if (!$util.isString(message.estimateFeeRate))
-                            return "estimateFeeRate: string expected";
-                    if (message.nextLiquidationInterval != null && message.hasOwnProperty("nextLiquidationInterval"))
-                        if (!$util.isInteger(message.nextLiquidationInterval) && !(message.nextLiquidationInterval && $util.isInteger(message.nextLiquidationInterval.low) && $util.isInteger(message.nextLiquidationInterval.high)))
-                            return "nextLiquidationInterval: integer|Long expected";
-                    if (message.totalPosition != null && message.hasOwnProperty("totalPosition"))
-                        if (!$util.isString(message.totalPosition))
-                            return "totalPosition: string expected";
-                    if (message.indexCny != null && message.hasOwnProperty("indexCny"))
-                        if (!$util.isString(message.indexCny))
-                            return "indexCny: string expected";
-                    if (message.markCny != null && message.hasOwnProperty("markCny"))
-                        if (!$util.isString(message.markCny))
-                            return "markCny: string expected";
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        if (!$util.isString(message.base))
-                            return "base: string expected";
-                    if (message.indexBase != null && message.hasOwnProperty("indexBase"))
-                        if (!$util.isString(message.indexBase))
-                            return "indexBase: string expected";
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        if (!$util.isString(message.quote))
-                            return "quote: string expected";
-                    if (message.baseDisplayName != null && message.hasOwnProperty("baseDisplayName"))
-                        if (!$util.isString(message.baseDisplayName))
-                            return "baseDisplayName: string expected";
-                    if (message.indexBaseDisplayName != null && message.hasOwnProperty("indexBaseDisplayName"))
-                        if (!$util.isString(message.indexBaseDisplayName))
-                            return "indexBaseDisplayName: string expected";
-                    if (message.quoteDisplayName != null && message.hasOwnProperty("quoteDisplayName"))
-                        if (!$util.isString(message.quoteDisplayName))
-                            return "quoteDisplayName: string expected";
-                    if (message.preDeliveryPrice != null && message.hasOwnProperty("preDeliveryPrice"))
-                        if (!$util.isString(message.preDeliveryPrice))
-                            return "preDeliveryPrice: string expected";
-                    if (message.online != null && message.hasOwnProperty("online"))
-                        if (!$util.isInteger(message.online))
-                            return "online: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a ContractInfo message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.ContractInfo} ContractInfo
-                 */
-                ContractInfo.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.ContractInfo)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Body message.
+                     * @function verify
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Body.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.markprice != null && message.hasOwnProperty("markprice"))
+                            if (!$util.isString(message.markprice))
+                                return "markprice: string expected";
+                        if (message.indexprice != null && message.hasOwnProperty("indexprice"))
+                            if (!$util.isString(message.indexprice))
+                                return "indexprice: string expected";
+                        if (message.feeRate != null && message.hasOwnProperty("feeRate"))
+                            if (!$util.isString(message.feeRate))
+                                return "feeRate: string expected";
+                        if (message.estimateFeeRate != null && message.hasOwnProperty("estimateFeeRate"))
+                            if (!$util.isString(message.estimateFeeRate))
+                                return "estimateFeeRate: string expected";
+                        if (message.nextLiquidationInterval != null && message.hasOwnProperty("nextLiquidationInterval"))
+                            if (!$util.isInteger(message.nextLiquidationInterval) && !(message.nextLiquidationInterval && $util.isInteger(message.nextLiquidationInterval.low) && $util.isInteger(message.nextLiquidationInterval.high)))
+                                return "nextLiquidationInterval: integer|Long expected";
+                        if (message.totalPosition != null && message.hasOwnProperty("totalPosition"))
+                            if (!$util.isString(message.totalPosition))
+                                return "totalPosition: string expected";
+                        if (message.indexCny != null && message.hasOwnProperty("indexCny"))
+                            if (!$util.isString(message.indexCny))
+                                return "indexCny: string expected";
+                        if (message.markCny != null && message.hasOwnProperty("markCny"))
+                            if (!$util.isString(message.markCny))
+                                return "markCny: string expected";
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            if (!$util.isString(message.base))
+                                return "base: string expected";
+                        if (message.indexBase != null && message.hasOwnProperty("indexBase"))
+                            if (!$util.isString(message.indexBase))
+                                return "indexBase: string expected";
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            if (!$util.isString(message.quote))
+                                return "quote: string expected";
+                        if (message.baseDisplayName != null && message.hasOwnProperty("baseDisplayName"))
+                            if (!$util.isString(message.baseDisplayName))
+                                return "baseDisplayName: string expected";
+                        if (message.indexBaseDisplayName != null && message.hasOwnProperty("indexBaseDisplayName"))
+                            if (!$util.isString(message.indexBaseDisplayName))
+                                return "indexBaseDisplayName: string expected";
+                        if (message.quoteDisplayName != null && message.hasOwnProperty("quoteDisplayName"))
+                            if (!$util.isString(message.quoteDisplayName))
+                                return "quoteDisplayName: string expected";
+                        if (message.preDeliveryPrice != null && message.hasOwnProperty("preDeliveryPrice"))
+                            if (!$util.isString(message.preDeliveryPrice))
+                                return "preDeliveryPrice: string expected";
+                        if (message.online != null && message.hasOwnProperty("online"))
+                            if (!$util.isInteger(message.online))
+                                return "online: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Body message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.FundRatesPbMsg.Body} Body
+                     */
+                    Body.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.FundRatesPbMsg.Body)
+                            return object;
+                        var message = new $root.type.googleapis.com.FundRatesPbMsg.Body();
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.markprice != null)
+                            message.markprice = String(object.markprice);
+                        if (object.indexprice != null)
+                            message.indexprice = String(object.indexprice);
+                        if (object.feeRate != null)
+                            message.feeRate = String(object.feeRate);
+                        if (object.estimateFeeRate != null)
+                            message.estimateFeeRate = String(object.estimateFeeRate);
+                        if (object.nextLiquidationInterval != null)
+                            if ($util.Long)
+                                (message.nextLiquidationInterval = $util.Long.fromValue(object.nextLiquidationInterval)).unsigned = false;
+                            else if (typeof object.nextLiquidationInterval === "string")
+                                message.nextLiquidationInterval = parseInt(object.nextLiquidationInterval, 10);
+                            else if (typeof object.nextLiquidationInterval === "number")
+                                message.nextLiquidationInterval = object.nextLiquidationInterval;
+                            else if (typeof object.nextLiquidationInterval === "object")
+                                message.nextLiquidationInterval = new $util.LongBits(object.nextLiquidationInterval.low >>> 0, object.nextLiquidationInterval.high >>> 0).toNumber();
+                        if (object.totalPosition != null)
+                            message.totalPosition = String(object.totalPosition);
+                        if (object.indexCny != null)
+                            message.indexCny = String(object.indexCny);
+                        if (object.markCny != null)
+                            message.markCny = String(object.markCny);
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        if (object.base != null)
+                            message.base = String(object.base);
+                        if (object.indexBase != null)
+                            message.indexBase = String(object.indexBase);
+                        if (object.quote != null)
+                            message.quote = String(object.quote);
+                        if (object.baseDisplayName != null)
+                            message.baseDisplayName = String(object.baseDisplayName);
+                        if (object.indexBaseDisplayName != null)
+                            message.indexBaseDisplayName = String(object.indexBaseDisplayName);
+                        if (object.quoteDisplayName != null)
+                            message.quoteDisplayName = String(object.quoteDisplayName);
+                        if (object.preDeliveryPrice != null)
+                            message.preDeliveryPrice = String(object.preDeliveryPrice);
+                        if (object.online != null)
+                            message.online = object.online | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Body message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.FundRatesPbMsg.Body} message Body
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Body.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.contractcode = "";
+                            object.markprice = "";
+                            object.indexprice = "";
+                            object.feeRate = "";
+                            object.estimateFeeRate = "";
+                            if ($util.Long) {
+                                var long = new $util.Long(0, 0, false);
+                                object.nextLiquidationInterval = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                            } else
+                                object.nextLiquidationInterval = options.longs === String ? "0" : 0;
+                            object.totalPosition = "";
+                            object.indexCny = "";
+                            object.markCny = "";
+                            object.env = 0;
+                            object.base = "";
+                            object.indexBase = "";
+                            object.quote = "";
+                            object.baseDisplayName = "";
+                            object.indexBaseDisplayName = "";
+                            object.quoteDisplayName = "";
+                            object.preDeliveryPrice = "";
+                            object.online = 0;
+                        }
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.markprice != null && message.hasOwnProperty("markprice"))
+                            object.markprice = message.markprice;
+                        if (message.indexprice != null && message.hasOwnProperty("indexprice"))
+                            object.indexprice = message.indexprice;
+                        if (message.feeRate != null && message.hasOwnProperty("feeRate"))
+                            object.feeRate = message.feeRate;
+                        if (message.estimateFeeRate != null && message.hasOwnProperty("estimateFeeRate"))
+                            object.estimateFeeRate = message.estimateFeeRate;
+                        if (message.nextLiquidationInterval != null && message.hasOwnProperty("nextLiquidationInterval"))
+                            if (typeof message.nextLiquidationInterval === "number")
+                                object.nextLiquidationInterval = options.longs === String ? String(message.nextLiquidationInterval) : message.nextLiquidationInterval;
+                            else
+                                object.nextLiquidationInterval = options.longs === String ? $util.Long.prototype.toString.call(message.nextLiquidationInterval) : options.longs === Number ? new $util.LongBits(message.nextLiquidationInterval.low >>> 0, message.nextLiquidationInterval.high >>> 0).toNumber() : message.nextLiquidationInterval;
+                        if (message.totalPosition != null && message.hasOwnProperty("totalPosition"))
+                            object.totalPosition = message.totalPosition;
+                        if (message.indexCny != null && message.hasOwnProperty("indexCny"))
+                            object.indexCny = message.indexCny;
+                        if (message.markCny != null && message.hasOwnProperty("markCny"))
+                            object.markCny = message.markCny;
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            object.base = message.base;
+                        if (message.indexBase != null && message.hasOwnProperty("indexBase"))
+                            object.indexBase = message.indexBase;
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            object.quote = message.quote;
+                        if (message.baseDisplayName != null && message.hasOwnProperty("baseDisplayName"))
+                            object.baseDisplayName = message.baseDisplayName;
+                        if (message.indexBaseDisplayName != null && message.hasOwnProperty("indexBaseDisplayName"))
+                            object.indexBaseDisplayName = message.indexBaseDisplayName;
+                        if (message.quoteDisplayName != null && message.hasOwnProperty("quoteDisplayName"))
+                            object.quoteDisplayName = message.quoteDisplayName;
+                        if (message.preDeliveryPrice != null && message.hasOwnProperty("preDeliveryPrice"))
+                            object.preDeliveryPrice = message.preDeliveryPrice;
+                        if (message.online != null && message.hasOwnProperty("online"))
+                            object.online = message.online;
                         return object;
-                    var message = new $root.type.googleapis.com.ContractInfo();
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.markprice != null)
-                        message.markprice = String(object.markprice);
-                    if (object.indexprice != null)
-                        message.indexprice = String(object.indexprice);
-                    if (object.feeRate != null)
-                        message.feeRate = String(object.feeRate);
-                    if (object.estimateFeeRate != null)
-                        message.estimateFeeRate = String(object.estimateFeeRate);
-                    if (object.nextLiquidationInterval != null)
-                        if ($util.Long)
-                            (message.nextLiquidationInterval = $util.Long.fromValue(object.nextLiquidationInterval)).unsigned = false;
-                        else if (typeof object.nextLiquidationInterval === "string")
-                            message.nextLiquidationInterval = parseInt(object.nextLiquidationInterval, 10);
-                        else if (typeof object.nextLiquidationInterval === "number")
-                            message.nextLiquidationInterval = object.nextLiquidationInterval;
-                        else if (typeof object.nextLiquidationInterval === "object")
-                            message.nextLiquidationInterval = new $util.LongBits(object.nextLiquidationInterval.low >>> 0, object.nextLiquidationInterval.high >>> 0).toNumber();
-                    if (object.totalPosition != null)
-                        message.totalPosition = String(object.totalPosition);
-                    if (object.indexCny != null)
-                        message.indexCny = String(object.indexCny);
-                    if (object.markCny != null)
-                        message.markCny = String(object.markCny);
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    if (object.base != null)
-                        message.base = String(object.base);
-                    if (object.indexBase != null)
-                        message.indexBase = String(object.indexBase);
-                    if (object.quote != null)
-                        message.quote = String(object.quote);
-                    if (object.baseDisplayName != null)
-                        message.baseDisplayName = String(object.baseDisplayName);
-                    if (object.indexBaseDisplayName != null)
-                        message.indexBaseDisplayName = String(object.indexBaseDisplayName);
-                    if (object.quoteDisplayName != null)
-                        message.quoteDisplayName = String(object.quoteDisplayName);
-                    if (object.preDeliveryPrice != null)
-                        message.preDeliveryPrice = String(object.preDeliveryPrice);
-                    if (object.online != null)
-                        message.online = object.online | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a ContractInfo message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {type.googleapis.com.ContractInfo} message ContractInfo
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                ContractInfo.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.contractcode = "";
-                        object.markprice = "";
-                        object.indexprice = "";
-                        object.feeRate = "";
-                        object.estimateFeeRate = "";
-                        if ($util.Long) {
-                            var long = new $util.Long(0, 0, false);
-                            object.nextLiquidationInterval = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
-                        } else
-                            object.nextLiquidationInterval = options.longs === String ? "0" : 0;
-                        object.totalPosition = "";
-                        object.indexCny = "";
-                        object.markCny = "";
-                        object.env = 0;
-                        object.base = "";
-                        object.indexBase = "";
-                        object.quote = "";
-                        object.baseDisplayName = "";
-                        object.indexBaseDisplayName = "";
-                        object.quoteDisplayName = "";
-                        object.preDeliveryPrice = "";
-                        object.online = 0;
-                    }
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.markprice != null && message.hasOwnProperty("markprice"))
-                        object.markprice = message.markprice;
-                    if (message.indexprice != null && message.hasOwnProperty("indexprice"))
-                        object.indexprice = message.indexprice;
-                    if (message.feeRate != null && message.hasOwnProperty("feeRate"))
-                        object.feeRate = message.feeRate;
-                    if (message.estimateFeeRate != null && message.hasOwnProperty("estimateFeeRate"))
-                        object.estimateFeeRate = message.estimateFeeRate;
-                    if (message.nextLiquidationInterval != null && message.hasOwnProperty("nextLiquidationInterval"))
-                        if (typeof message.nextLiquidationInterval === "number")
-                            object.nextLiquidationInterval = options.longs === String ? String(message.nextLiquidationInterval) : message.nextLiquidationInterval;
-                        else
-                            object.nextLiquidationInterval = options.longs === String ? $util.Long.prototype.toString.call(message.nextLiquidationInterval) : options.longs === Number ? new $util.LongBits(message.nextLiquidationInterval.low >>> 0, message.nextLiquidationInterval.high >>> 0).toNumber() : message.nextLiquidationInterval;
-                    if (message.totalPosition != null && message.hasOwnProperty("totalPosition"))
-                        object.totalPosition = message.totalPosition;
-                    if (message.indexCny != null && message.hasOwnProperty("indexCny"))
-                        object.indexCny = message.indexCny;
-                    if (message.markCny != null && message.hasOwnProperty("markCny"))
-                        object.markCny = message.markCny;
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        object.base = message.base;
-                    if (message.indexBase != null && message.hasOwnProperty("indexBase"))
-                        object.indexBase = message.indexBase;
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        object.quote = message.quote;
-                    if (message.baseDisplayName != null && message.hasOwnProperty("baseDisplayName"))
-                        object.baseDisplayName = message.baseDisplayName;
-                    if (message.indexBaseDisplayName != null && message.hasOwnProperty("indexBaseDisplayName"))
-                        object.indexBaseDisplayName = message.indexBaseDisplayName;
-                    if (message.quoteDisplayName != null && message.hasOwnProperty("quoteDisplayName"))
-                        object.quoteDisplayName = message.quoteDisplayName;
-                    if (message.preDeliveryPrice != null && message.hasOwnProperty("preDeliveryPrice"))
-                        object.preDeliveryPrice = message.preDeliveryPrice;
-                    if (message.online != null && message.hasOwnProperty("online"))
-                        object.online = message.online;
-                    return object;
-                };
-
-                /**
-                 * Converts this ContractInfo to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                ContractInfo.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
+                    };
+
+                    /**
+                     * Converts this Body to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Body.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Body
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.FundRatesPbMsg.Body
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.FundRatesPbMsg.Body";
+                    };
 
-                /**
-                 * Gets the default type url for ContractInfo
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.ContractInfo
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                ContractInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
-                    }
-                    return typeUrlPrefix + "/type.googleapis.com.ContractInfo";
-                };
+                    return Body;
+                })();
 
-                return ContractInfo;
+                return FundRatesPbMsg;
             })();
 
             return com;

+ 126 - 121
client/hotconi/proto/type.googleapis.com.FundRatesPbMsg.json

@@ -9,127 +9,132 @@
           "nested": {
             "com": {
               "nested": {
-                "Response": {
-                  "fields": {
-                    "biz": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "type": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "base": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "granularity": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "data": {
-                      "type": "Data",
-                      "id": 7
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 8
-                    }
-                  }
-                },
-                "Data": {
-                  "fields": {
-                    "typeUrl": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "value": {
-                      "type": "ContractInfo",
-                      "id": 2
-                    }
-                  }
-                },
-                "ContractInfo": {
-                  "fields": {
-                    "contractcode": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "markprice": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "indexprice": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "feeRate": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "estimateFeeRate": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "nextLiquidationInterval": {
-                      "type": "int64",
-                      "id": 6
-                    },
-                    "totalPosition": {
-                      "type": "string",
-                      "id": 7
-                    },
-                    "indexCny": {
-                      "type": "string",
-                      "id": 8
-                    },
-                    "markCny": {
-                      "type": "string",
-                      "id": 9
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 10
-                    },
-                    "base": {
-                      "type": "string",
-                      "id": 11
-                    },
-                    "indexBase": {
-                      "type": "string",
-                      "id": 12
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 13
-                    },
-                    "baseDisplayName": {
-                      "type": "string",
-                      "id": 14
-                    },
-                    "indexBaseDisplayName": {
-                      "type": "string",
-                      "id": 15
-                    },
-                    "quoteDisplayName": {
-                      "type": "string",
-                      "id": 16
-                    },
-                    "preDeliveryPrice": {
-                      "type": "string",
-                      "id": 17
-                    },
-                    "online": {
-                      "type": "int32",
-                      "id": 18
+                "FundRatesPbMsg": {
+                  "nested": {
+                    "Response": {
+                      "fields": {
+                        "biz": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "type": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "granularity": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "data": {
+                          "type": "Data",
+                          "id": 7
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 8
+                        }
+                      }
+                    },
+                    "Data": {
+                      "fields": {
+                        "typeUrl": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "value": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 2
+                        }
+                      }
+                    },
+                    "Body": {
+                      "fields": {
+                        "contractcode": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "markprice": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "indexprice": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "feeRate": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "estimateFeeRate": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "nextLiquidationInterval": {
+                          "type": "int64",
+                          "id": 6
+                        },
+                        "totalPosition": {
+                          "type": "string",
+                          "id": 7
+                        },
+                        "indexCny": {
+                          "type": "string",
+                          "id": 8
+                        },
+                        "markCny": {
+                          "type": "string",
+                          "id": 9
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 10
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 11
+                        },
+                        "indexBase": {
+                          "type": "string",
+                          "id": 12
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 13
+                        },
+                        "baseDisplayName": {
+                          "type": "string",
+                          "id": 14
+                        },
+                        "indexBaseDisplayName": {
+                          "type": "string",
+                          "id": 15
+                        },
+                        "quoteDisplayName": {
+                          "type": "string",
+                          "id": 16
+                        },
+                        "preDeliveryPrice": {
+                          "type": "string",
+                          "id": 17
+                        },
+                        "online": {
+                          "type": "int32",
+                          "id": 18
+                        }
+                      }
                     }
                   }
                 }

+ 3 - 3
client/hotconi/proto/type.googleapis.com.FundRatesPbMsg.proto

@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-package type.googleapis.com; // 替换为你的包名
+package type.googleapis.com.FundRatesPbMsg; // 替换为你的包名
 
 // 响应消息
 message Response {
@@ -17,12 +17,12 @@ message Response {
 // 数据消息
 message Data {
   string typeUrl = 1; // 数据类型URL
-  ContractInfo value = 2; // 数据值
+  repeated Body value = 2; // 数据值
 }
 
 
 
-message ContractInfo {
+message Body {
   string contractcode = 1;               // 合约代码
   string markprice = 2;                 // 标记价格
   string indexprice = 3;                // 指数价格

+ 1121 - 1093
client/hotconi/proto/type.googleapis.com.TickersPbMsg.js

@@ -36,1123 +36,1151 @@ $root.type = (function() {
              */
             var com = {};
 
-            com.Response = (function() {
+            com.TickersPbMsg = (function() {
 
                 /**
-                 * Properties of a Response.
+                 * Namespace TickersPbMsg.
                  * @memberof type.googleapis.com
-                 * @interface IResponse
-                 * @property {string|null} [biz] Response biz
-                 * @property {string|null} [type] Response type
-                 * @property {string|null} [base] Response base
-                 * @property {string|null} [quote] Response quote
-                 * @property {string|null} [contractcode] Response contractcode
-                 * @property {string|null} [granularity] Response granularity
-                 * @property {type.googleapis.com.IData|null} [data] Response data
-                 * @property {number|null} [env] Response env
+                 * @namespace
                  */
+                var TickersPbMsg = {};
+
+                TickersPbMsg.Response = (function() {
+
+                    /**
+                     * Properties of a Response.
+                     * @memberof type.googleapis.com.TickersPbMsg
+                     * @interface IResponse
+                     * @property {string|null} [biz] Response biz
+                     * @property {string|null} [type] Response type
+                     * @property {string|null} [base] Response base
+                     * @property {string|null} [quote] Response quote
+                     * @property {string|null} [contractcode] Response contractcode
+                     * @property {string|null} [granularity] Response granularity
+                     * @property {type.googleapis.com.TickersPbMsg.IData|null} [data] Response data
+                     * @property {number|null} [env] Response env
+                     */
+
+                    /**
+                     * Constructs a new Response.
+                     * @memberof type.googleapis.com.TickersPbMsg
+                     * @classdesc Represents a Response.
+                     * @implements IResponse
+                     * @constructor
+                     * @param {type.googleapis.com.TickersPbMsg.IResponse=} [properties] Properties to set
+                     */
+                    function Response(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]];
+                    }
 
-                /**
-                 * Constructs a new Response.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Response.
-                 * @implements IResponse
-                 * @constructor
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 */
-                function Response(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]];
-                }
-
-                /**
-                 * Response biz.
-                 * @member {string} biz
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.biz = "";
-
-                /**
-                 * Response type.
-                 * @member {string} type
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.type = "";
-
-                /**
-                 * Response base.
-                 * @member {string} base
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.base = "";
-
-                /**
-                 * Response quote.
-                 * @member {string} quote
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.quote = "";
-
-                /**
-                 * Response contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.contractcode = "";
-
-                /**
-                 * Response granularity.
-                 * @member {string} granularity
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.granularity = "";
-
-                /**
-                 * Response data.
-                 * @member {type.googleapis.com.IData|null|undefined} data
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.data = null;
-
-                /**
-                 * Response env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 */
-                Response.prototype.env = 0;
-
-                /**
-                 * Creates a new Response instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Response} Response instance
-                 */
-                Response.create = function create(properties) {
-                    return new Response(properties);
-                };
-
-                /**
-                 * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
-                    if (message.type != null && Object.hasOwnProperty.call(message, "type"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
-                    if (message.base != null && Object.hasOwnProperty.call(message, "base"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
-                    if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
-                    if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
-                    if (message.data != null && Object.hasOwnProperty.call(message, "data"))
-                        $root.type.googleapis.com.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.Response.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.IResponse} message Response message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Response.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.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.type.googleapis.com.Response();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.biz = reader.string();
-                                break;
-                            }
-                        case 2: {
-                                message.type = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.base = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.quote = reader.string();
+                    /**
+                     * Response biz.
+                     * @member {string} biz
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.biz = "";
+
+                    /**
+                     * Response type.
+                     * @member {string} type
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.type = "";
+
+                    /**
+                     * Response base.
+                     * @member {string} base
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.base = "";
+
+                    /**
+                     * Response quote.
+                     * @member {string} quote
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.quote = "";
+
+                    /**
+                     * Response contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.contractcode = "";
+
+                    /**
+                     * Response granularity.
+                     * @member {string} granularity
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.granularity = "";
+
+                    /**
+                     * Response data.
+                     * @member {type.googleapis.com.TickersPbMsg.IData|null|undefined} data
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.data = null;
+
+                    /**
+                     * Response env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     */
+                    Response.prototype.env = 0;
+
+                    /**
+                     * Creates a new Response instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IResponse=} [properties] Properties to set
+                     * @returns {type.googleapis.com.TickersPbMsg.Response} Response instance
+                     */
+                    Response.create = function create(properties) {
+                        return new Response(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Response message. Does not implicitly {@link type.googleapis.com.TickersPbMsg.Response.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.biz != null && Object.hasOwnProperty.call(message, "biz"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.biz);
+                        if (message.type != null && Object.hasOwnProperty.call(message, "type"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.type);
+                        if (message.base != null && Object.hasOwnProperty.call(message, "base"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.base);
+                        if (message.quote != null && Object.hasOwnProperty.call(message, "quote"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.quote);
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.contractcode);
+                        if (message.granularity != null && Object.hasOwnProperty.call(message, "granularity"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.granularity);
+                        if (message.data != null && Object.hasOwnProperty.call(message, "data"))
+                            $root.type.googleapis.com.TickersPbMsg.Data.encode(message.data, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 8, wireType 0 =*/64).int32(message.env);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Response message, length delimited. Does not implicitly {@link type.googleapis.com.TickersPbMsg.Response.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IResponse} message Response message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Response.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.TickersPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.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.type.googleapis.com.TickersPbMsg.Response();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.biz = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    message.type = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.base = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.quote = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.granularity = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.data = $root.type.googleapis.com.TickersPbMsg.Data.decode(reader, reader.uint32());
+                                    break;
+                                }
+                            case 8: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 5: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.granularity = reader.string();
-                                break;
-                            }
-                        case 7: {
-                                message.data = $root.type.googleapis.com.Data.decode(reader, reader.uint32());
-                                break;
-                            }
-                        case 8: {
-                                message.env = reader.int32();
-                                break;
-                            }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Response message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Response} Response
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Response.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Response message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Response.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        if (!$util.isString(message.biz))
-                            return "biz: string expected";
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        if (!$util.isString(message.type))
-                            return "type: string expected";
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        if (!$util.isString(message.base))
-                            return "base: string expected";
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        if (!$util.isString(message.quote))
-                            return "quote: string expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        if (!$util.isString(message.granularity))
-                            return "granularity: string expected";
-                    if (message.data != null && message.hasOwnProperty("data")) {
-                        var error = $root.type.googleapis.com.Data.verify(message.data);
-                        if (error)
-                            return "data." + error;
-                    }
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a Response message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Response} Response
-                 */
-                Response.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Response)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Response message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.TickersPbMsg.Response} Response
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Response.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Response message.
+                     * @function verify
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Response.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            if (!$util.isString(message.biz))
+                                return "biz: string expected";
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            if (!$util.isString(message.type))
+                                return "type: string expected";
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            if (!$util.isString(message.base))
+                                return "base: string expected";
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            if (!$util.isString(message.quote))
+                                return "quote: string expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            if (!$util.isString(message.granularity))
+                                return "granularity: string expected";
+                        if (message.data != null && message.hasOwnProperty("data")) {
+                            var error = $root.type.googleapis.com.TickersPbMsg.Data.verify(message.data);
+                            if (error)
+                                return "data." + error;
+                        }
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Response message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.TickersPbMsg.Response} Response
+                     */
+                    Response.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.TickersPbMsg.Response)
+                            return object;
+                        var message = new $root.type.googleapis.com.TickersPbMsg.Response();
+                        if (object.biz != null)
+                            message.biz = String(object.biz);
+                        if (object.type != null)
+                            message.type = String(object.type);
+                        if (object.base != null)
+                            message.base = String(object.base);
+                        if (object.quote != null)
+                            message.quote = String(object.quote);
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.granularity != null)
+                            message.granularity = String(object.granularity);
+                        if (object.data != null) {
+                            if (typeof object.data !== "object")
+                                throw TypeError(".type.googleapis.com.TickersPbMsg.Response.data: object expected");
+                            message.data = $root.type.googleapis.com.TickersPbMsg.Data.fromObject(object.data);
+                        }
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Response message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.Response} message Response
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Response.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            object.biz = "";
+                            object.type = "";
+                            object.base = "";
+                            object.quote = "";
+                            object.contractcode = "";
+                            object.granularity = "";
+                            object.data = null;
+                            object.env = 0;
+                        }
+                        if (message.biz != null && message.hasOwnProperty("biz"))
+                            object.biz = message.biz;
+                        if (message.type != null && message.hasOwnProperty("type"))
+                            object.type = message.type;
+                        if (message.base != null && message.hasOwnProperty("base"))
+                            object.base = message.base;
+                        if (message.quote != null && message.hasOwnProperty("quote"))
+                            object.quote = message.quote;
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.granularity != null && message.hasOwnProperty("granularity"))
+                            object.granularity = message.granularity;
+                        if (message.data != null && message.hasOwnProperty("data"))
+                            object.data = $root.type.googleapis.com.TickersPbMsg.Data.toObject(message.data, options);
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
                         return object;
-                    var message = new $root.type.googleapis.com.Response();
-                    if (object.biz != null)
-                        message.biz = String(object.biz);
-                    if (object.type != null)
-                        message.type = String(object.type);
-                    if (object.base != null)
-                        message.base = String(object.base);
-                    if (object.quote != null)
-                        message.quote = String(object.quote);
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.granularity != null)
-                        message.granularity = String(object.granularity);
-                    if (object.data != null) {
-                        if (typeof object.data !== "object")
-                            throw TypeError(".type.googleapis.com.Response.data: object expected");
-                        message.data = $root.type.googleapis.com.Data.fromObject(object.data);
-                    }
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Response message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {type.googleapis.com.Response} message Response
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Response.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.biz = "";
-                        object.type = "";
-                        object.base = "";
-                        object.quote = "";
-                        object.contractcode = "";
-                        object.granularity = "";
-                        object.data = null;
-                        object.env = 0;
-                    }
-                    if (message.biz != null && message.hasOwnProperty("biz"))
-                        object.biz = message.biz;
-                    if (message.type != null && message.hasOwnProperty("type"))
-                        object.type = message.type;
-                    if (message.base != null && message.hasOwnProperty("base"))
-                        object.base = message.base;
-                    if (message.quote != null && message.hasOwnProperty("quote"))
-                        object.quote = message.quote;
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.granularity != null && message.hasOwnProperty("granularity"))
-                        object.granularity = message.granularity;
-                    if (message.data != null && message.hasOwnProperty("data"))
-                        object.data = $root.type.googleapis.com.Data.toObject(message.data, options);
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    return object;
-                };
-
-                /**
-                 * Converts this Response to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Response
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Response.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Response
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Response
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Response to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Response.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Response
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.TickersPbMsg.Response
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Response.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.TickersPbMsg.Response";
+                    };
+
+                    return Response;
+                })();
+
+                TickersPbMsg.Data = (function() {
+
+                    /**
+                     * Properties of a Data.
+                     * @memberof type.googleapis.com.TickersPbMsg
+                     * @interface IData
+                     * @property {string|null} [typeUrl] Data typeUrl
+                     * @property {Array.<type.googleapis.com.TickersPbMsg.IBody>|null} [value] Data value
+                     */
+
+                    /**
+                     * Constructs a new Data.
+                     * @memberof type.googleapis.com.TickersPbMsg
+                     * @classdesc Represents a Data.
+                     * @implements IData
+                     * @constructor
+                     * @param {type.googleapis.com.TickersPbMsg.IData=} [properties] Properties to set
+                     */
+                    function Data(properties) {
+                        this.value = [];
+                        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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Response";
-                };
-
-                return Response;
-            })();
-
-            com.Data = (function() {
-
-                /**
-                 * Properties of a Data.
-                 * @memberof type.googleapis.com
-                 * @interface IData
-                 * @property {string|null} [typeUrl] Data typeUrl
-                 * @property {type.googleapis.com.IMarketData|null} [value] Data value
-                 */
-
-                /**
-                 * Constructs a new Data.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a Data.
-                 * @implements IData
-                 * @constructor
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 */
-                function Data(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]];
-                }
-
-                /**
-                 * Data typeUrl.
-                 * @member {string} typeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.typeUrl = "";
-
-                /**
-                 * Data value.
-                 * @member {type.googleapis.com.IMarketData|null|undefined} value
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 */
-                Data.prototype.value = null;
-
-                /**
-                 * Creates a new Data instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.Data} Data instance
-                 */
-                Data.create = function create(properties) {
-                    return new Data(properties);
-                };
-
-                /**
-                 * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
-                        writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
-                    if (message.value != null && Object.hasOwnProperty.call(message, "value"))
-                        $root.type.googleapis.com.MarketData.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.Data.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.IData} message Data message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                Data.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
 
-                /**
-                 * Decodes a Data message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.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.type.googleapis.com.Data();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.typeUrl = reader.string();
+                    /**
+                     * Data typeUrl.
+                     * @member {string} typeUrl
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.typeUrl = "";
+
+                    /**
+                     * Data value.
+                     * @member {Array.<type.googleapis.com.TickersPbMsg.IBody>} value
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @instance
+                     */
+                    Data.prototype.value = $util.emptyArray;
+
+                    /**
+                     * Creates a new Data instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IData=} [properties] Properties to set
+                     * @returns {type.googleapis.com.TickersPbMsg.Data} Data instance
+                     */
+                    Data.create = function create(properties) {
+                        return new Data(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Data message. Does not implicitly {@link type.googleapis.com.TickersPbMsg.Data.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.typeUrl != null && Object.hasOwnProperty.call(message, "typeUrl"))
+                            writer.uint32(/* id 1, wireType 2 =*/10).string(message.typeUrl);
+                        if (message.value != null && message.value.length)
+                            for (var i = 0; i < message.value.length; ++i)
+                                $root.type.googleapis.com.TickersPbMsg.Body.encode(message.value[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Data message, length delimited. Does not implicitly {@link type.googleapis.com.TickersPbMsg.Data.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IData} message Data message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Data.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.TickersPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.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.type.googleapis.com.TickersPbMsg.Data();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.typeUrl = reader.string();
+                                    break;
+                                }
+                            case 2: {
+                                    if (!(message.value && message.value.length))
+                                        message.value = [];
+                                    message.value.push($root.type.googleapis.com.TickersPbMsg.Body.decode(reader, reader.uint32()));
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        case 2: {
-                                message.value = $root.type.googleapis.com.MarketData.decode(reader, reader.uint32());
-                                break;
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Data message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.TickersPbMsg.Data} Data
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Data.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Data message.
+                     * @function verify
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Data.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            if (!$util.isString(message.typeUrl))
+                                return "typeUrl: string expected";
+                        if (message.value != null && message.hasOwnProperty("value")) {
+                            if (!Array.isArray(message.value))
+                                return "value: array expected";
+                            for (var i = 0; i < message.value.length; ++i) {
+                                var error = $root.type.googleapis.com.TickersPbMsg.Body.verify(message.value[i]);
+                                if (error)
+                                    return "value." + error;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a Data message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.Data} Data
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                Data.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a Data message.
-                 * @function verify
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                Data.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        if (!$util.isString(message.typeUrl))
-                            return "typeUrl: string expected";
-                    if (message.value != null && message.hasOwnProperty("value")) {
-                        var error = $root.type.googleapis.com.MarketData.verify(message.value);
-                        if (error)
-                            return "value." + error;
-                    }
-                    return null;
-                };
-
-                /**
-                 * Creates a Data message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.Data} Data
-                 */
-                Data.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.Data)
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Data message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.TickersPbMsg.Data} Data
+                     */
+                    Data.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.TickersPbMsg.Data)
+                            return object;
+                        var message = new $root.type.googleapis.com.TickersPbMsg.Data();
+                        if (object.typeUrl != null)
+                            message.typeUrl = String(object.typeUrl);
+                        if (object.value) {
+                            if (!Array.isArray(object.value))
+                                throw TypeError(".type.googleapis.com.TickersPbMsg.Data.value: array expected");
+                            message.value = [];
+                            for (var i = 0; i < object.value.length; ++i) {
+                                if (typeof object.value[i] !== "object")
+                                    throw TypeError(".type.googleapis.com.TickersPbMsg.Data.value: object expected");
+                                message.value[i] = $root.type.googleapis.com.TickersPbMsg.Body.fromObject(object.value[i]);
+                            }
+                        }
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Data message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.Data} message Data
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Data.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.arrays || options.defaults)
+                            object.value = [];
+                        if (options.defaults)
+                            object.typeUrl = "";
+                        if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
+                            object.typeUrl = message.typeUrl;
+                        if (message.value && message.value.length) {
+                            object.value = [];
+                            for (var j = 0; j < message.value.length; ++j)
+                                object.value[j] = $root.type.googleapis.com.TickersPbMsg.Body.toObject(message.value[j], options);
+                        }
                         return object;
-                    var message = new $root.type.googleapis.com.Data();
-                    if (object.typeUrl != null)
-                        message.typeUrl = String(object.typeUrl);
-                    if (object.value != null) {
-                        if (typeof object.value !== "object")
-                            throw TypeError(".type.googleapis.com.Data.value: object expected");
-                        message.value = $root.type.googleapis.com.MarketData.fromObject(object.value);
-                    }
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a Data message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {type.googleapis.com.Data} message Data
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                Data.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        object.typeUrl = "";
-                        object.value = null;
-                    }
-                    if (message.typeUrl != null && message.hasOwnProperty("typeUrl"))
-                        object.typeUrl = message.typeUrl;
-                    if (message.value != null && message.hasOwnProperty("value"))
-                        object.value = $root.type.googleapis.com.MarketData.toObject(message.value, options);
-                    return object;
-                };
-
-                /**
-                 * Converts this Data to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.Data
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                Data.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
-
-                /**
-                 * Gets the default type url for Data
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.Data
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
+                    };
+
+                    /**
+                     * Converts this Data to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Data.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Data
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.TickersPbMsg.Data
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Data.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.TickersPbMsg.Data";
+                    };
+
+                    return Data;
+                })();
+
+                TickersPbMsg.Body = (function() {
+
+                    /**
+                     * Properties of a Body.
+                     * @memberof type.googleapis.com.TickersPbMsg
+                     * @interface IBody
+                     * @property {number|Long|null} [createddate] Body createddate
+                     * @property {string|null} [high] Body high
+                     * @property {string|null} [low] Body low
+                     * @property {string|null} [amount24] Body amount24
+                     * @property {string|null} [size24] Body size24
+                     * @property {string|null} [first] Body first
+                     * @property {string|null} [last] Body last
+                     * @property {string|null} [change24] Body change24
+                     * @property {string|null} [changepercentage] Body changepercentage
+                     * @property {string|null} [buy] Body buy
+                     * @property {string|null} [sell] Body sell
+                     * @property {string|null} [contractcode] Body contractcode
+                     * @property {string|null} [lastcny] Body lastcny
+                     * @property {number|null} [env] Body env
+                     */
+
+                    /**
+                     * Constructs a new Body.
+                     * @memberof type.googleapis.com.TickersPbMsg
+                     * @classdesc Represents a Body.
+                     * @implements IBody
+                     * @constructor
+                     * @param {type.googleapis.com.TickersPbMsg.IBody=} [properties] Properties to set
+                     */
+                    function Body(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]];
                     }
-                    return typeUrlPrefix + "/type.googleapis.com.Data";
-                };
-
-                return Data;
-            })();
-
-            com.MarketData = (function() {
-
-                /**
-                 * Properties of a MarketData.
-                 * @memberof type.googleapis.com
-                 * @interface IMarketData
-                 * @property {number|Long|null} [createddate] MarketData createddate
-                 * @property {string|null} [high] MarketData high
-                 * @property {string|null} [low] MarketData low
-                 * @property {string|null} [amount24] MarketData amount24
-                 * @property {string|null} [size24] MarketData size24
-                 * @property {string|null} [first] MarketData first
-                 * @property {string|null} [last] MarketData last
-                 * @property {string|null} [change24] MarketData change24
-                 * @property {string|null} [changepercentage] MarketData changepercentage
-                 * @property {string|null} [buy] MarketData buy
-                 * @property {string|null} [sell] MarketData sell
-                 * @property {string|null} [contractcode] MarketData contractcode
-                 * @property {string|null} [lastcny] MarketData lastcny
-                 * @property {number|null} [env] MarketData env
-                 */
-
-                /**
-                 * Constructs a new MarketData.
-                 * @memberof type.googleapis.com
-                 * @classdesc Represents a MarketData.
-                 * @implements IMarketData
-                 * @constructor
-                 * @param {type.googleapis.com.IMarketData=} [properties] Properties to set
-                 */
-                function MarketData(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]];
-                }
-
-                /**
-                 * MarketData createddate.
-                 * @member {number|Long} createddate
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.createddate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
-
-                /**
-                 * MarketData high.
-                 * @member {string} high
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.high = "";
-
-                /**
-                 * MarketData low.
-                 * @member {string} low
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.low = "";
-
-                /**
-                 * MarketData amount24.
-                 * @member {string} amount24
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.amount24 = "";
-
-                /**
-                 * MarketData size24.
-                 * @member {string} size24
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.size24 = "";
-
-                /**
-                 * MarketData first.
-                 * @member {string} first
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.first = "";
-
-                /**
-                 * MarketData last.
-                 * @member {string} last
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.last = "";
-
-                /**
-                 * MarketData change24.
-                 * @member {string} change24
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.change24 = "";
-
-                /**
-                 * MarketData changepercentage.
-                 * @member {string} changepercentage
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.changepercentage = "";
-
-                /**
-                 * MarketData buy.
-                 * @member {string} buy
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.buy = "";
-
-                /**
-                 * MarketData sell.
-                 * @member {string} sell
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.sell = "";
-
-                /**
-                 * MarketData contractcode.
-                 * @member {string} contractcode
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.contractcode = "";
-
-                /**
-                 * MarketData lastcny.
-                 * @member {string} lastcny
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.lastcny = "";
 
-                /**
-                 * MarketData env.
-                 * @member {number} env
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 */
-                MarketData.prototype.env = 0;
-
-                /**
-                 * Creates a new MarketData instance using the specified properties.
-                 * @function create
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {type.googleapis.com.IMarketData=} [properties] Properties to set
-                 * @returns {type.googleapis.com.MarketData} MarketData instance
-                 */
-                MarketData.create = function create(properties) {
-                    return new MarketData(properties);
-                };
-
-                /**
-                 * Encodes the specified MarketData message. Does not implicitly {@link type.googleapis.com.MarketData.verify|verify} messages.
-                 * @function encode
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {type.googleapis.com.IMarketData} message MarketData message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                MarketData.encode = function encode(message, writer) {
-                    if (!writer)
-                        writer = $Writer.create();
-                    if (message.createddate != null && Object.hasOwnProperty.call(message, "createddate"))
-                        writer.uint32(/* id 1, wireType 0 =*/8).int64(message.createddate);
-                    if (message.high != null && Object.hasOwnProperty.call(message, "high"))
-                        writer.uint32(/* id 2, wireType 2 =*/18).string(message.high);
-                    if (message.low != null && Object.hasOwnProperty.call(message, "low"))
-                        writer.uint32(/* id 3, wireType 2 =*/26).string(message.low);
-                    if (message.amount24 != null && Object.hasOwnProperty.call(message, "amount24"))
-                        writer.uint32(/* id 4, wireType 2 =*/34).string(message.amount24);
-                    if (message.size24 != null && Object.hasOwnProperty.call(message, "size24"))
-                        writer.uint32(/* id 5, wireType 2 =*/42).string(message.size24);
-                    if (message.first != null && Object.hasOwnProperty.call(message, "first"))
-                        writer.uint32(/* id 6, wireType 2 =*/50).string(message.first);
-                    if (message.last != null && Object.hasOwnProperty.call(message, "last"))
-                        writer.uint32(/* id 7, wireType 2 =*/58).string(message.last);
-                    if (message.change24 != null && Object.hasOwnProperty.call(message, "change24"))
-                        writer.uint32(/* id 8, wireType 2 =*/66).string(message.change24);
-                    if (message.changepercentage != null && Object.hasOwnProperty.call(message, "changepercentage"))
-                        writer.uint32(/* id 9, wireType 2 =*/74).string(message.changepercentage);
-                    if (message.buy != null && Object.hasOwnProperty.call(message, "buy"))
-                        writer.uint32(/* id 10, wireType 2 =*/82).string(message.buy);
-                    if (message.sell != null && Object.hasOwnProperty.call(message, "sell"))
-                        writer.uint32(/* id 11, wireType 2 =*/90).string(message.sell);
-                    if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
-                        writer.uint32(/* id 12, wireType 2 =*/98).string(message.contractcode);
-                    if (message.lastcny != null && Object.hasOwnProperty.call(message, "lastcny"))
-                        writer.uint32(/* id 13, wireType 2 =*/106).string(message.lastcny);
-                    if (message.env != null && Object.hasOwnProperty.call(message, "env"))
-                        writer.uint32(/* id 14, wireType 0 =*/112).int32(message.env);
-                    return writer;
-                };
-
-                /**
-                 * Encodes the specified MarketData message, length delimited. Does not implicitly {@link type.googleapis.com.MarketData.verify|verify} messages.
-                 * @function encodeDelimited
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {type.googleapis.com.IMarketData} message MarketData message or plain object to encode
-                 * @param {$protobuf.Writer} [writer] Writer to encode to
-                 * @returns {$protobuf.Writer} Writer
-                 */
-                MarketData.encodeDelimited = function encodeDelimited(message, writer) {
-                    return this.encode(message, writer).ldelim();
-                };
-
-                /**
-                 * Decodes a MarketData message from the specified reader or buffer.
-                 * @function decode
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @param {number} [length] Message length if known beforehand
-                 * @returns {type.googleapis.com.MarketData} MarketData
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                MarketData.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.type.googleapis.com.MarketData();
-                    while (reader.pos < end) {
-                        var tag = reader.uint32();
-                        switch (tag >>> 3) {
-                        case 1: {
-                                message.createddate = reader.int64();
-                                break;
-                            }
-                        case 2: {
-                                message.high = reader.string();
-                                break;
-                            }
-                        case 3: {
-                                message.low = reader.string();
-                                break;
-                            }
-                        case 4: {
-                                message.amount24 = reader.string();
-                                break;
-                            }
-                        case 5: {
-                                message.size24 = reader.string();
-                                break;
-                            }
-                        case 6: {
-                                message.first = reader.string();
-                                break;
-                            }
-                        case 7: {
-                                message.last = reader.string();
-                                break;
-                            }
-                        case 8: {
-                                message.change24 = reader.string();
-                                break;
-                            }
-                        case 9: {
-                                message.changepercentage = reader.string();
-                                break;
-                            }
-                        case 10: {
-                                message.buy = reader.string();
-                                break;
-                            }
-                        case 11: {
-                                message.sell = reader.string();
-                                break;
-                            }
-                        case 12: {
-                                message.contractcode = reader.string();
-                                break;
-                            }
-                        case 13: {
-                                message.lastcny = reader.string();
-                                break;
-                            }
-                        case 14: {
-                                message.env = reader.int32();
+                    /**
+                     * Body createddate.
+                     * @member {number|Long} createddate
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.createddate = $util.Long ? $util.Long.fromBits(0,0,false) : 0;
+
+                    /**
+                     * Body high.
+                     * @member {string} high
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.high = "";
+
+                    /**
+                     * Body low.
+                     * @member {string} low
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.low = "";
+
+                    /**
+                     * Body amount24.
+                     * @member {string} amount24
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.amount24 = "";
+
+                    /**
+                     * Body size24.
+                     * @member {string} size24
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.size24 = "";
+
+                    /**
+                     * Body first.
+                     * @member {string} first
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.first = "";
+
+                    /**
+                     * Body last.
+                     * @member {string} last
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.last = "";
+
+                    /**
+                     * Body change24.
+                     * @member {string} change24
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.change24 = "";
+
+                    /**
+                     * Body changepercentage.
+                     * @member {string} changepercentage
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.changepercentage = "";
+
+                    /**
+                     * Body buy.
+                     * @member {string} buy
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.buy = "";
+
+                    /**
+                     * Body sell.
+                     * @member {string} sell
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.sell = "";
+
+                    /**
+                     * Body contractcode.
+                     * @member {string} contractcode
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.contractcode = "";
+
+                    /**
+                     * Body lastcny.
+                     * @member {string} lastcny
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.lastcny = "";
+
+                    /**
+                     * Body env.
+                     * @member {number} env
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     */
+                    Body.prototype.env = 0;
+
+                    /**
+                     * Creates a new Body instance using the specified properties.
+                     * @function create
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IBody=} [properties] Properties to set
+                     * @returns {type.googleapis.com.TickersPbMsg.Body} Body instance
+                     */
+                    Body.create = function create(properties) {
+                        return new Body(properties);
+                    };
+
+                    /**
+                     * Encodes the specified Body message. Does not implicitly {@link type.googleapis.com.TickersPbMsg.Body.verify|verify} messages.
+                     * @function encode
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encode = function encode(message, writer) {
+                        if (!writer)
+                            writer = $Writer.create();
+                        if (message.createddate != null && Object.hasOwnProperty.call(message, "createddate"))
+                            writer.uint32(/* id 1, wireType 0 =*/8).int64(message.createddate);
+                        if (message.high != null && Object.hasOwnProperty.call(message, "high"))
+                            writer.uint32(/* id 2, wireType 2 =*/18).string(message.high);
+                        if (message.low != null && Object.hasOwnProperty.call(message, "low"))
+                            writer.uint32(/* id 3, wireType 2 =*/26).string(message.low);
+                        if (message.amount24 != null && Object.hasOwnProperty.call(message, "amount24"))
+                            writer.uint32(/* id 4, wireType 2 =*/34).string(message.amount24);
+                        if (message.size24 != null && Object.hasOwnProperty.call(message, "size24"))
+                            writer.uint32(/* id 5, wireType 2 =*/42).string(message.size24);
+                        if (message.first != null && Object.hasOwnProperty.call(message, "first"))
+                            writer.uint32(/* id 6, wireType 2 =*/50).string(message.first);
+                        if (message.last != null && Object.hasOwnProperty.call(message, "last"))
+                            writer.uint32(/* id 7, wireType 2 =*/58).string(message.last);
+                        if (message.change24 != null && Object.hasOwnProperty.call(message, "change24"))
+                            writer.uint32(/* id 8, wireType 2 =*/66).string(message.change24);
+                        if (message.changepercentage != null && Object.hasOwnProperty.call(message, "changepercentage"))
+                            writer.uint32(/* id 9, wireType 2 =*/74).string(message.changepercentage);
+                        if (message.buy != null && Object.hasOwnProperty.call(message, "buy"))
+                            writer.uint32(/* id 10, wireType 2 =*/82).string(message.buy);
+                        if (message.sell != null && Object.hasOwnProperty.call(message, "sell"))
+                            writer.uint32(/* id 11, wireType 2 =*/90).string(message.sell);
+                        if (message.contractcode != null && Object.hasOwnProperty.call(message, "contractcode"))
+                            writer.uint32(/* id 12, wireType 2 =*/98).string(message.contractcode);
+                        if (message.lastcny != null && Object.hasOwnProperty.call(message, "lastcny"))
+                            writer.uint32(/* id 13, wireType 2 =*/106).string(message.lastcny);
+                        if (message.env != null && Object.hasOwnProperty.call(message, "env"))
+                            writer.uint32(/* id 14, wireType 0 =*/112).int32(message.env);
+                        return writer;
+                    };
+
+                    /**
+                     * Encodes the specified Body message, length delimited. Does not implicitly {@link type.googleapis.com.TickersPbMsg.Body.verify|verify} messages.
+                     * @function encodeDelimited
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.IBody} message Body message or plain object to encode
+                     * @param {$protobuf.Writer} [writer] Writer to encode to
+                     * @returns {$protobuf.Writer} Writer
+                     */
+                    Body.encodeDelimited = function encodeDelimited(message, writer) {
+                        return this.encode(message, writer).ldelim();
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer.
+                     * @function decode
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @param {number} [length] Message length if known beforehand
+                     * @returns {type.googleapis.com.TickersPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.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.type.googleapis.com.TickersPbMsg.Body();
+                        while (reader.pos < end) {
+                            var tag = reader.uint32();
+                            switch (tag >>> 3) {
+                            case 1: {
+                                    message.createddate = reader.int64();
+                                    break;
+                                }
+                            case 2: {
+                                    message.high = reader.string();
+                                    break;
+                                }
+                            case 3: {
+                                    message.low = reader.string();
+                                    break;
+                                }
+                            case 4: {
+                                    message.amount24 = reader.string();
+                                    break;
+                                }
+                            case 5: {
+                                    message.size24 = reader.string();
+                                    break;
+                                }
+                            case 6: {
+                                    message.first = reader.string();
+                                    break;
+                                }
+                            case 7: {
+                                    message.last = reader.string();
+                                    break;
+                                }
+                            case 8: {
+                                    message.change24 = reader.string();
+                                    break;
+                                }
+                            case 9: {
+                                    message.changepercentage = reader.string();
+                                    break;
+                                }
+                            case 10: {
+                                    message.buy = reader.string();
+                                    break;
+                                }
+                            case 11: {
+                                    message.sell = reader.string();
+                                    break;
+                                }
+                            case 12: {
+                                    message.contractcode = reader.string();
+                                    break;
+                                }
+                            case 13: {
+                                    message.lastcny = reader.string();
+                                    break;
+                                }
+                            case 14: {
+                                    message.env = reader.int32();
+                                    break;
+                                }
+                            default:
+                                reader.skipType(tag & 7);
                                 break;
                             }
-                        default:
-                            reader.skipType(tag & 7);
-                            break;
                         }
-                    }
-                    return message;
-                };
-
-                /**
-                 * Decodes a MarketData message from the specified reader or buffer, length delimited.
-                 * @function decodeDelimited
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
-                 * @returns {type.googleapis.com.MarketData} MarketData
-                 * @throws {Error} If the payload is not a reader or valid buffer
-                 * @throws {$protobuf.util.ProtocolError} If required fields are missing
-                 */
-                MarketData.decodeDelimited = function decodeDelimited(reader) {
-                    if (!(reader instanceof $Reader))
-                        reader = new $Reader(reader);
-                    return this.decode(reader, reader.uint32());
-                };
-
-                /**
-                 * Verifies a MarketData message.
-                 * @function verify
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {Object.<string,*>} message Plain object to verify
-                 * @returns {string|null} `null` if valid, otherwise the reason why it is not
-                 */
-                MarketData.verify = function verify(message) {
-                    if (typeof message !== "object" || message === null)
-                        return "object expected";
-                    if (message.createddate != null && message.hasOwnProperty("createddate"))
-                        if (!$util.isInteger(message.createddate) && !(message.createddate && $util.isInteger(message.createddate.low) && $util.isInteger(message.createddate.high)))
-                            return "createddate: integer|Long expected";
-                    if (message.high != null && message.hasOwnProperty("high"))
-                        if (!$util.isString(message.high))
-                            return "high: string expected";
-                    if (message.low != null && message.hasOwnProperty("low"))
-                        if (!$util.isString(message.low))
-                            return "low: string expected";
-                    if (message.amount24 != null && message.hasOwnProperty("amount24"))
-                        if (!$util.isString(message.amount24))
-                            return "amount24: string expected";
-                    if (message.size24 != null && message.hasOwnProperty("size24"))
-                        if (!$util.isString(message.size24))
-                            return "size24: string expected";
-                    if (message.first != null && message.hasOwnProperty("first"))
-                        if (!$util.isString(message.first))
-                            return "first: string expected";
-                    if (message.last != null && message.hasOwnProperty("last"))
-                        if (!$util.isString(message.last))
-                            return "last: string expected";
-                    if (message.change24 != null && message.hasOwnProperty("change24"))
-                        if (!$util.isString(message.change24))
-                            return "change24: string expected";
-                    if (message.changepercentage != null && message.hasOwnProperty("changepercentage"))
-                        if (!$util.isString(message.changepercentage))
-                            return "changepercentage: string expected";
-                    if (message.buy != null && message.hasOwnProperty("buy"))
-                        if (!$util.isString(message.buy))
-                            return "buy: string expected";
-                    if (message.sell != null && message.hasOwnProperty("sell"))
-                        if (!$util.isString(message.sell))
-                            return "sell: string expected";
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        if (!$util.isString(message.contractcode))
-                            return "contractcode: string expected";
-                    if (message.lastcny != null && message.hasOwnProperty("lastcny"))
-                        if (!$util.isString(message.lastcny))
-                            return "lastcny: string expected";
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        if (!$util.isInteger(message.env))
-                            return "env: integer expected";
-                    return null;
-                };
-
-                /**
-                 * Creates a MarketData message from a plain object. Also converts values to their respective internal types.
-                 * @function fromObject
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {Object.<string,*>} object Plain object
-                 * @returns {type.googleapis.com.MarketData} MarketData
-                 */
-                MarketData.fromObject = function fromObject(object) {
-                    if (object instanceof $root.type.googleapis.com.MarketData)
+                        return message;
+                    };
+
+                    /**
+                     * Decodes a Body message from the specified reader or buffer, length delimited.
+                     * @function decodeDelimited
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from
+                     * @returns {type.googleapis.com.TickersPbMsg.Body} Body
+                     * @throws {Error} If the payload is not a reader or valid buffer
+                     * @throws {$protobuf.util.ProtocolError} If required fields are missing
+                     */
+                    Body.decodeDelimited = function decodeDelimited(reader) {
+                        if (!(reader instanceof $Reader))
+                            reader = new $Reader(reader);
+                        return this.decode(reader, reader.uint32());
+                    };
+
+                    /**
+                     * Verifies a Body message.
+                     * @function verify
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} message Plain object to verify
+                     * @returns {string|null} `null` if valid, otherwise the reason why it is not
+                     */
+                    Body.verify = function verify(message) {
+                        if (typeof message !== "object" || message === null)
+                            return "object expected";
+                        if (message.createddate != null && message.hasOwnProperty("createddate"))
+                            if (!$util.isInteger(message.createddate) && !(message.createddate && $util.isInteger(message.createddate.low) && $util.isInteger(message.createddate.high)))
+                                return "createddate: integer|Long expected";
+                        if (message.high != null && message.hasOwnProperty("high"))
+                            if (!$util.isString(message.high))
+                                return "high: string expected";
+                        if (message.low != null && message.hasOwnProperty("low"))
+                            if (!$util.isString(message.low))
+                                return "low: string expected";
+                        if (message.amount24 != null && message.hasOwnProperty("amount24"))
+                            if (!$util.isString(message.amount24))
+                                return "amount24: string expected";
+                        if (message.size24 != null && message.hasOwnProperty("size24"))
+                            if (!$util.isString(message.size24))
+                                return "size24: string expected";
+                        if (message.first != null && message.hasOwnProperty("first"))
+                            if (!$util.isString(message.first))
+                                return "first: string expected";
+                        if (message.last != null && message.hasOwnProperty("last"))
+                            if (!$util.isString(message.last))
+                                return "last: string expected";
+                        if (message.change24 != null && message.hasOwnProperty("change24"))
+                            if (!$util.isString(message.change24))
+                                return "change24: string expected";
+                        if (message.changepercentage != null && message.hasOwnProperty("changepercentage"))
+                            if (!$util.isString(message.changepercentage))
+                                return "changepercentage: string expected";
+                        if (message.buy != null && message.hasOwnProperty("buy"))
+                            if (!$util.isString(message.buy))
+                                return "buy: string expected";
+                        if (message.sell != null && message.hasOwnProperty("sell"))
+                            if (!$util.isString(message.sell))
+                                return "sell: string expected";
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            if (!$util.isString(message.contractcode))
+                                return "contractcode: string expected";
+                        if (message.lastcny != null && message.hasOwnProperty("lastcny"))
+                            if (!$util.isString(message.lastcny))
+                                return "lastcny: string expected";
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            if (!$util.isInteger(message.env))
+                                return "env: integer expected";
+                        return null;
+                    };
+
+                    /**
+                     * Creates a Body message from a plain object. Also converts values to their respective internal types.
+                     * @function fromObject
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {Object.<string,*>} object Plain object
+                     * @returns {type.googleapis.com.TickersPbMsg.Body} Body
+                     */
+                    Body.fromObject = function fromObject(object) {
+                        if (object instanceof $root.type.googleapis.com.TickersPbMsg.Body)
+                            return object;
+                        var message = new $root.type.googleapis.com.TickersPbMsg.Body();
+                        if (object.createddate != null)
+                            if ($util.Long)
+                                (message.createddate = $util.Long.fromValue(object.createddate)).unsigned = false;
+                            else if (typeof object.createddate === "string")
+                                message.createddate = parseInt(object.createddate, 10);
+                            else if (typeof object.createddate === "number")
+                                message.createddate = object.createddate;
+                            else if (typeof object.createddate === "object")
+                                message.createddate = new $util.LongBits(object.createddate.low >>> 0, object.createddate.high >>> 0).toNumber();
+                        if (object.high != null)
+                            message.high = String(object.high);
+                        if (object.low != null)
+                            message.low = String(object.low);
+                        if (object.amount24 != null)
+                            message.amount24 = String(object.amount24);
+                        if (object.size24 != null)
+                            message.size24 = String(object.size24);
+                        if (object.first != null)
+                            message.first = String(object.first);
+                        if (object.last != null)
+                            message.last = String(object.last);
+                        if (object.change24 != null)
+                            message.change24 = String(object.change24);
+                        if (object.changepercentage != null)
+                            message.changepercentage = String(object.changepercentage);
+                        if (object.buy != null)
+                            message.buy = String(object.buy);
+                        if (object.sell != null)
+                            message.sell = String(object.sell);
+                        if (object.contractcode != null)
+                            message.contractcode = String(object.contractcode);
+                        if (object.lastcny != null)
+                            message.lastcny = String(object.lastcny);
+                        if (object.env != null)
+                            message.env = object.env | 0;
+                        return message;
+                    };
+
+                    /**
+                     * Creates a plain object from a Body message. Also converts values to other types if specified.
+                     * @function toObject
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {type.googleapis.com.TickersPbMsg.Body} message Body
+                     * @param {$protobuf.IConversionOptions} [options] Conversion options
+                     * @returns {Object.<string,*>} Plain object
+                     */
+                    Body.toObject = function toObject(message, options) {
+                        if (!options)
+                            options = {};
+                        var object = {};
+                        if (options.defaults) {
+                            if ($util.Long) {
+                                var long = new $util.Long(0, 0, false);
+                                object.createddate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
+                            } else
+                                object.createddate = options.longs === String ? "0" : 0;
+                            object.high = "";
+                            object.low = "";
+                            object.amount24 = "";
+                            object.size24 = "";
+                            object.first = "";
+                            object.last = "";
+                            object.change24 = "";
+                            object.changepercentage = "";
+                            object.buy = "";
+                            object.sell = "";
+                            object.contractcode = "";
+                            object.lastcny = "";
+                            object.env = 0;
+                        }
+                        if (message.createddate != null && message.hasOwnProperty("createddate"))
+                            if (typeof message.createddate === "number")
+                                object.createddate = options.longs === String ? String(message.createddate) : message.createddate;
+                            else
+                                object.createddate = options.longs === String ? $util.Long.prototype.toString.call(message.createddate) : options.longs === Number ? new $util.LongBits(message.createddate.low >>> 0, message.createddate.high >>> 0).toNumber() : message.createddate;
+                        if (message.high != null && message.hasOwnProperty("high"))
+                            object.high = message.high;
+                        if (message.low != null && message.hasOwnProperty("low"))
+                            object.low = message.low;
+                        if (message.amount24 != null && message.hasOwnProperty("amount24"))
+                            object.amount24 = message.amount24;
+                        if (message.size24 != null && message.hasOwnProperty("size24"))
+                            object.size24 = message.size24;
+                        if (message.first != null && message.hasOwnProperty("first"))
+                            object.first = message.first;
+                        if (message.last != null && message.hasOwnProperty("last"))
+                            object.last = message.last;
+                        if (message.change24 != null && message.hasOwnProperty("change24"))
+                            object.change24 = message.change24;
+                        if (message.changepercentage != null && message.hasOwnProperty("changepercentage"))
+                            object.changepercentage = message.changepercentage;
+                        if (message.buy != null && message.hasOwnProperty("buy"))
+                            object.buy = message.buy;
+                        if (message.sell != null && message.hasOwnProperty("sell"))
+                            object.sell = message.sell;
+                        if (message.contractcode != null && message.hasOwnProperty("contractcode"))
+                            object.contractcode = message.contractcode;
+                        if (message.lastcny != null && message.hasOwnProperty("lastcny"))
+                            object.lastcny = message.lastcny;
+                        if (message.env != null && message.hasOwnProperty("env"))
+                            object.env = message.env;
                         return object;
-                    var message = new $root.type.googleapis.com.MarketData();
-                    if (object.createddate != null)
-                        if ($util.Long)
-                            (message.createddate = $util.Long.fromValue(object.createddate)).unsigned = false;
-                        else if (typeof object.createddate === "string")
-                            message.createddate = parseInt(object.createddate, 10);
-                        else if (typeof object.createddate === "number")
-                            message.createddate = object.createddate;
-                        else if (typeof object.createddate === "object")
-                            message.createddate = new $util.LongBits(object.createddate.low >>> 0, object.createddate.high >>> 0).toNumber();
-                    if (object.high != null)
-                        message.high = String(object.high);
-                    if (object.low != null)
-                        message.low = String(object.low);
-                    if (object.amount24 != null)
-                        message.amount24 = String(object.amount24);
-                    if (object.size24 != null)
-                        message.size24 = String(object.size24);
-                    if (object.first != null)
-                        message.first = String(object.first);
-                    if (object.last != null)
-                        message.last = String(object.last);
-                    if (object.change24 != null)
-                        message.change24 = String(object.change24);
-                    if (object.changepercentage != null)
-                        message.changepercentage = String(object.changepercentage);
-                    if (object.buy != null)
-                        message.buy = String(object.buy);
-                    if (object.sell != null)
-                        message.sell = String(object.sell);
-                    if (object.contractcode != null)
-                        message.contractcode = String(object.contractcode);
-                    if (object.lastcny != null)
-                        message.lastcny = String(object.lastcny);
-                    if (object.env != null)
-                        message.env = object.env | 0;
-                    return message;
-                };
-
-                /**
-                 * Creates a plain object from a MarketData message. Also converts values to other types if specified.
-                 * @function toObject
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {type.googleapis.com.MarketData} message MarketData
-                 * @param {$protobuf.IConversionOptions} [options] Conversion options
-                 * @returns {Object.<string,*>} Plain object
-                 */
-                MarketData.toObject = function toObject(message, options) {
-                    if (!options)
-                        options = {};
-                    var object = {};
-                    if (options.defaults) {
-                        if ($util.Long) {
-                            var long = new $util.Long(0, 0, false);
-                            object.createddate = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;
-                        } else
-                            object.createddate = options.longs === String ? "0" : 0;
-                        object.high = "";
-                        object.low = "";
-                        object.amount24 = "";
-                        object.size24 = "";
-                        object.first = "";
-                        object.last = "";
-                        object.change24 = "";
-                        object.changepercentage = "";
-                        object.buy = "";
-                        object.sell = "";
-                        object.contractcode = "";
-                        object.lastcny = "";
-                        object.env = 0;
-                    }
-                    if (message.createddate != null && message.hasOwnProperty("createddate"))
-                        if (typeof message.createddate === "number")
-                            object.createddate = options.longs === String ? String(message.createddate) : message.createddate;
-                        else
-                            object.createddate = options.longs === String ? $util.Long.prototype.toString.call(message.createddate) : options.longs === Number ? new $util.LongBits(message.createddate.low >>> 0, message.createddate.high >>> 0).toNumber() : message.createddate;
-                    if (message.high != null && message.hasOwnProperty("high"))
-                        object.high = message.high;
-                    if (message.low != null && message.hasOwnProperty("low"))
-                        object.low = message.low;
-                    if (message.amount24 != null && message.hasOwnProperty("amount24"))
-                        object.amount24 = message.amount24;
-                    if (message.size24 != null && message.hasOwnProperty("size24"))
-                        object.size24 = message.size24;
-                    if (message.first != null && message.hasOwnProperty("first"))
-                        object.first = message.first;
-                    if (message.last != null && message.hasOwnProperty("last"))
-                        object.last = message.last;
-                    if (message.change24 != null && message.hasOwnProperty("change24"))
-                        object.change24 = message.change24;
-                    if (message.changepercentage != null && message.hasOwnProperty("changepercentage"))
-                        object.changepercentage = message.changepercentage;
-                    if (message.buy != null && message.hasOwnProperty("buy"))
-                        object.buy = message.buy;
-                    if (message.sell != null && message.hasOwnProperty("sell"))
-                        object.sell = message.sell;
-                    if (message.contractcode != null && message.hasOwnProperty("contractcode"))
-                        object.contractcode = message.contractcode;
-                    if (message.lastcny != null && message.hasOwnProperty("lastcny"))
-                        object.lastcny = message.lastcny;
-                    if (message.env != null && message.hasOwnProperty("env"))
-                        object.env = message.env;
-                    return object;
-                };
-
-                /**
-                 * Converts this MarketData to JSON.
-                 * @function toJSON
-                 * @memberof type.googleapis.com.MarketData
-                 * @instance
-                 * @returns {Object.<string,*>} JSON object
-                 */
-                MarketData.prototype.toJSON = function toJSON() {
-                    return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
-                };
+                    };
+
+                    /**
+                     * Converts this Body to JSON.
+                     * @function toJSON
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @instance
+                     * @returns {Object.<string,*>} JSON object
+                     */
+                    Body.prototype.toJSON = function toJSON() {
+                        return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
+                    };
+
+                    /**
+                     * Gets the default type url for Body
+                     * @function getTypeUrl
+                     * @memberof type.googleapis.com.TickersPbMsg.Body
+                     * @static
+                     * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
+                     * @returns {string} The default type url
+                     */
+                    Body.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
+                        if (typeUrlPrefix === undefined) {
+                            typeUrlPrefix = "type.googleapis.com";
+                        }
+                        return typeUrlPrefix + "/type.googleapis.com.TickersPbMsg.Body";
+                    };
 
-                /**
-                 * Gets the default type url for MarketData
-                 * @function getTypeUrl
-                 * @memberof type.googleapis.com.MarketData
-                 * @static
-                 * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default "type.googleapis.com")
-                 * @returns {string} The default type url
-                 */
-                MarketData.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
-                    if (typeUrlPrefix === undefined) {
-                        typeUrlPrefix = "type.googleapis.com";
-                    }
-                    return typeUrlPrefix + "/type.googleapis.com.MarketData";
-                };
+                    return Body;
+                })();
 
-                return MarketData;
+                return TickersPbMsg;
             })();
 
             return com;

+ 110 - 105
client/hotconi/proto/type.googleapis.com.TickersPbMsg.json

@@ -9,111 +9,116 @@
           "nested": {
             "com": {
               "nested": {
-                "Response": {
-                  "fields": {
-                    "biz": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "type": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "base": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "quote": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "granularity": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "data": {
-                      "type": "Data",
-                      "id": 7
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 8
-                    }
-                  }
-                },
-                "Data": {
-                  "fields": {
-                    "typeUrl": {
-                      "type": "string",
-                      "id": 1
-                    },
-                    "value": {
-                      "type": "MarketData",
-                      "id": 2
-                    }
-                  }
-                },
-                "MarketData": {
-                  "fields": {
-                    "createddate": {
-                      "type": "int64",
-                      "id": 1
-                    },
-                    "high": {
-                      "type": "string",
-                      "id": 2
-                    },
-                    "low": {
-                      "type": "string",
-                      "id": 3
-                    },
-                    "amount24": {
-                      "type": "string",
-                      "id": 4
-                    },
-                    "size24": {
-                      "type": "string",
-                      "id": 5
-                    },
-                    "first": {
-                      "type": "string",
-                      "id": 6
-                    },
-                    "last": {
-                      "type": "string",
-                      "id": 7
-                    },
-                    "change24": {
-                      "type": "string",
-                      "id": 8
-                    },
-                    "changepercentage": {
-                      "type": "string",
-                      "id": 9
-                    },
-                    "buy": {
-                      "type": "string",
-                      "id": 10
-                    },
-                    "sell": {
-                      "type": "string",
-                      "id": 11
-                    },
-                    "contractcode": {
-                      "type": "string",
-                      "id": 12
-                    },
-                    "lastcny": {
-                      "type": "string",
-                      "id": 13
-                    },
-                    "env": {
-                      "type": "int32",
-                      "id": 14
+                "TickersPbMsg": {
+                  "nested": {
+                    "Response": {
+                      "fields": {
+                        "biz": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "type": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "base": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "quote": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "granularity": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "data": {
+                          "type": "Data",
+                          "id": 7
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 8
+                        }
+                      }
+                    },
+                    "Data": {
+                      "fields": {
+                        "typeUrl": {
+                          "type": "string",
+                          "id": 1
+                        },
+                        "value": {
+                          "rule": "repeated",
+                          "type": "Body",
+                          "id": 2
+                        }
+                      }
+                    },
+                    "Body": {
+                      "fields": {
+                        "createddate": {
+                          "type": "int64",
+                          "id": 1
+                        },
+                        "high": {
+                          "type": "string",
+                          "id": 2
+                        },
+                        "low": {
+                          "type": "string",
+                          "id": 3
+                        },
+                        "amount24": {
+                          "type": "string",
+                          "id": 4
+                        },
+                        "size24": {
+                          "type": "string",
+                          "id": 5
+                        },
+                        "first": {
+                          "type": "string",
+                          "id": 6
+                        },
+                        "last": {
+                          "type": "string",
+                          "id": 7
+                        },
+                        "change24": {
+                          "type": "string",
+                          "id": 8
+                        },
+                        "changepercentage": {
+                          "type": "string",
+                          "id": 9
+                        },
+                        "buy": {
+                          "type": "string",
+                          "id": 10
+                        },
+                        "sell": {
+                          "type": "string",
+                          "id": 11
+                        },
+                        "contractcode": {
+                          "type": "string",
+                          "id": 12
+                        },
+                        "lastcny": {
+                          "type": "string",
+                          "id": 13
+                        },
+                        "env": {
+                          "type": "int32",
+                          "id": 14
+                        }
+                      }
                     }
                   }
                 }

+ 3 - 3
client/hotconi/proto/type.googleapis.com.TickersPbMsg.proto

@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-package type.googleapis.com; // 替换为你的包名
+package type.googleapis.com.TickersPbMsg; // 替换为你的包名
 
 // 响应消息
 message Response {
@@ -17,11 +17,11 @@ message Response {
 // 数据消息
 message Data {
   string typeUrl = 1; // 数据类型URL
-  MarketData value = 2; // 数据值
+  repeated Body value = 2; // 数据值
 }
 
 
-message MarketData {
+message Body {
   int64 createddate = 1;               // 创建日期
   string high = 2;                     // 最高价
   string low = 3;                      // 最低价

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
client/tmp/hotcoin_cookies


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
client/tmp/hotcoin_storage


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно