mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 14:57:27 +00:00 
			
		
		
		
	Add Earn deposits value_in_staked_tokens query parameter (#1325)
				
					
				
			* Add earn deposits query param to return individual vaults value as ukava * Add value_in_staked_tokens param handler to specific vault query * Use separate ukava coins when querying deposits in ukava Avoid usd of sdk.Coins.Add() as those will aggregate ukava amounts
This commit is contained in:
		
							parent
							
								
									c773d874ae
								
							
						
					
					
						commit
						4c879bc4fb
					
				@ -7077,6 +7077,12 @@ paths:
 | 
				
			|||||||
          in: query
 | 
					          in: query
 | 
				
			||||||
          required: false
 | 
					          required: false
 | 
				
			||||||
          type: string
 | 
					          type: string
 | 
				
			||||||
 | 
					        - name: value_in_staked_tokens
 | 
				
			||||||
 | 
					          description: respond with vault value in ukava for bkava vaults.
 | 
				
			||||||
 | 
					          in: query
 | 
				
			||||||
 | 
					          required: false
 | 
				
			||||||
 | 
					          type: boolean
 | 
				
			||||||
 | 
					          format: boolean
 | 
				
			||||||
        - name: pagination.key
 | 
					        - name: pagination.key
 | 
				
			||||||
          description: |-
 | 
					          description: |-
 | 
				
			||||||
            key is a value returned in PageResponse.next_key to begin
 | 
					            key is a value returned in PageResponse.next_key to begin
 | 
				
			||||||
@ -10785,6 +10791,66 @@ paths:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                        representing the yearly APR of KAVA tokens that will be
 | 
					                        representing the yearly APR of KAVA tokens that will be
 | 
				
			||||||
                        minted during that period
 | 
					                        minted during that period
 | 
				
			||||||
 | 
					                  infrastructure_params:
 | 
				
			||||||
 | 
					                    type: object
 | 
				
			||||||
 | 
					                    properties:
 | 
				
			||||||
 | 
					                      infrastructure_periods:
 | 
				
			||||||
 | 
					                        type: array
 | 
				
			||||||
 | 
					                        items:
 | 
				
			||||||
 | 
					                          type: object
 | 
				
			||||||
 | 
					                          properties:
 | 
				
			||||||
 | 
					                            start:
 | 
				
			||||||
 | 
					                              type: string
 | 
				
			||||||
 | 
					                              format: date-time
 | 
				
			||||||
 | 
					                              title: example "2020-03-01T15:20:00Z"
 | 
				
			||||||
 | 
					                            end:
 | 
				
			||||||
 | 
					                              type: string
 | 
				
			||||||
 | 
					                              format: date-time
 | 
				
			||||||
 | 
					                              title: example "2020-06-01T15:20:00Z"
 | 
				
			||||||
 | 
					                            inflation:
 | 
				
			||||||
 | 
					                              type: string
 | 
				
			||||||
 | 
					                              format: byte
 | 
				
			||||||
 | 
					                              title: example "1.000000003022265980"  - 10% inflation
 | 
				
			||||||
 | 
					                          title: >-
 | 
				
			||||||
 | 
					                            Period stores the specified start and end dates, and
 | 
				
			||||||
 | 
					                            the inflation, expressed as a decimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            representing the yearly APR of KAVA tokens that will
 | 
				
			||||||
 | 
					                            be minted during that period
 | 
				
			||||||
 | 
					                      core_rewards:
 | 
				
			||||||
 | 
					                        type: array
 | 
				
			||||||
 | 
					                        items:
 | 
				
			||||||
 | 
					                          type: object
 | 
				
			||||||
 | 
					                          properties:
 | 
				
			||||||
 | 
					                            address:
 | 
				
			||||||
 | 
					                              type: string
 | 
				
			||||||
 | 
					                              format: byte
 | 
				
			||||||
 | 
					                            weight:
 | 
				
			||||||
 | 
					                              type: string
 | 
				
			||||||
 | 
					                      partner_rewards:
 | 
				
			||||||
 | 
					                        type: array
 | 
				
			||||||
 | 
					                        items:
 | 
				
			||||||
 | 
					                          type: object
 | 
				
			||||||
 | 
					                          properties:
 | 
				
			||||||
 | 
					                            address:
 | 
				
			||||||
 | 
					                              type: string
 | 
				
			||||||
 | 
					                              format: byte
 | 
				
			||||||
 | 
					                            rewards_per_second:
 | 
				
			||||||
 | 
					                              type: object
 | 
				
			||||||
 | 
					                              properties:
 | 
				
			||||||
 | 
					                                denom:
 | 
				
			||||||
 | 
					                                  type: string
 | 
				
			||||||
 | 
					                                amount:
 | 
				
			||||||
 | 
					                                  type: string
 | 
				
			||||||
 | 
					                              description: >-
 | 
				
			||||||
 | 
					                                Coin defines a token with a denomination and an
 | 
				
			||||||
 | 
					                                amount.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                NOTE: The amount field is an Int which
 | 
				
			||||||
 | 
					                                implements the custom method
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                signatures required by gogoproto.
 | 
				
			||||||
                title: Params governance parameters for kavadist module
 | 
					                title: Params governance parameters for kavadist module
 | 
				
			||||||
            description: >-
 | 
					            description: >-
 | 
				
			||||||
              QueryParamsResponse defines the response type for querying
 | 
					              QueryParamsResponse defines the response type for querying
 | 
				
			||||||
@ -55834,6 +55900,73 @@ definitions:
 | 
				
			|||||||
      time_period:
 | 
					      time_period:
 | 
				
			||||||
        type: string
 | 
					        type: string
 | 
				
			||||||
    title: RateLimit parameters for rate-limiting the supply of an issued asset
 | 
					    title: RateLimit parameters for rate-limiting the supply of an issued asset
 | 
				
			||||||
 | 
					  kava.kavadist.v1beta1.CoreReward:
 | 
				
			||||||
 | 
					    type: object
 | 
				
			||||||
 | 
					    properties:
 | 
				
			||||||
 | 
					      address:
 | 
				
			||||||
 | 
					        type: string
 | 
				
			||||||
 | 
					        format: byte
 | 
				
			||||||
 | 
					      weight:
 | 
				
			||||||
 | 
					        type: string
 | 
				
			||||||
 | 
					  kava.kavadist.v1beta1.InfrastructureParams:
 | 
				
			||||||
 | 
					    type: object
 | 
				
			||||||
 | 
					    properties:
 | 
				
			||||||
 | 
					      infrastructure_periods:
 | 
				
			||||||
 | 
					        type: array
 | 
				
			||||||
 | 
					        items:
 | 
				
			||||||
 | 
					          type: object
 | 
				
			||||||
 | 
					          properties:
 | 
				
			||||||
 | 
					            start:
 | 
				
			||||||
 | 
					              type: string
 | 
				
			||||||
 | 
					              format: date-time
 | 
				
			||||||
 | 
					              title: example "2020-03-01T15:20:00Z"
 | 
				
			||||||
 | 
					            end:
 | 
				
			||||||
 | 
					              type: string
 | 
				
			||||||
 | 
					              format: date-time
 | 
				
			||||||
 | 
					              title: example "2020-06-01T15:20:00Z"
 | 
				
			||||||
 | 
					            inflation:
 | 
				
			||||||
 | 
					              type: string
 | 
				
			||||||
 | 
					              format: byte
 | 
				
			||||||
 | 
					              title: example "1.000000003022265980"  - 10% inflation
 | 
				
			||||||
 | 
					          title: >-
 | 
				
			||||||
 | 
					            Period stores the specified start and end dates, and the inflation,
 | 
				
			||||||
 | 
					            expressed as a decimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            representing the yearly APR of KAVA tokens that will be minted
 | 
				
			||||||
 | 
					            during that period
 | 
				
			||||||
 | 
					      core_rewards:
 | 
				
			||||||
 | 
					        type: array
 | 
				
			||||||
 | 
					        items:
 | 
				
			||||||
 | 
					          type: object
 | 
				
			||||||
 | 
					          properties:
 | 
				
			||||||
 | 
					            address:
 | 
				
			||||||
 | 
					              type: string
 | 
				
			||||||
 | 
					              format: byte
 | 
				
			||||||
 | 
					            weight:
 | 
				
			||||||
 | 
					              type: string
 | 
				
			||||||
 | 
					      partner_rewards:
 | 
				
			||||||
 | 
					        type: array
 | 
				
			||||||
 | 
					        items:
 | 
				
			||||||
 | 
					          type: object
 | 
				
			||||||
 | 
					          properties:
 | 
				
			||||||
 | 
					            address:
 | 
				
			||||||
 | 
					              type: string
 | 
				
			||||||
 | 
					              format: byte
 | 
				
			||||||
 | 
					            rewards_per_second:
 | 
				
			||||||
 | 
					              type: object
 | 
				
			||||||
 | 
					              properties:
 | 
				
			||||||
 | 
					                denom:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					                amount:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					              description: >-
 | 
				
			||||||
 | 
					                Coin defines a token with a denomination and an amount.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                NOTE: The amount field is an Int which implements the custom
 | 
				
			||||||
 | 
					                method
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                signatures required by gogoproto.
 | 
				
			||||||
  kava.kavadist.v1beta1.Params:
 | 
					  kava.kavadist.v1beta1.Params:
 | 
				
			||||||
    type: object
 | 
					    type: object
 | 
				
			||||||
    properties:
 | 
					    properties:
 | 
				
			||||||
@ -55863,7 +55996,84 @@ definitions:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            representing the yearly APR of KAVA tokens that will be minted
 | 
					            representing the yearly APR of KAVA tokens that will be minted
 | 
				
			||||||
            during that period
 | 
					            during that period
 | 
				
			||||||
 | 
					      infrastructure_params:
 | 
				
			||||||
 | 
					        type: object
 | 
				
			||||||
 | 
					        properties:
 | 
				
			||||||
 | 
					          infrastructure_periods:
 | 
				
			||||||
 | 
					            type: array
 | 
				
			||||||
 | 
					            items:
 | 
				
			||||||
 | 
					              type: object
 | 
				
			||||||
 | 
					              properties:
 | 
				
			||||||
 | 
					                start:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					                  format: date-time
 | 
				
			||||||
 | 
					                  title: example "2020-03-01T15:20:00Z"
 | 
				
			||||||
 | 
					                end:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					                  format: date-time
 | 
				
			||||||
 | 
					                  title: example "2020-06-01T15:20:00Z"
 | 
				
			||||||
 | 
					                inflation:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					                  format: byte
 | 
				
			||||||
 | 
					                  title: example "1.000000003022265980"  - 10% inflation
 | 
				
			||||||
 | 
					              title: >-
 | 
				
			||||||
 | 
					                Period stores the specified start and end dates, and the
 | 
				
			||||||
 | 
					                inflation, expressed as a decimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                representing the yearly APR of KAVA tokens that will be minted
 | 
				
			||||||
 | 
					                during that period
 | 
				
			||||||
 | 
					          core_rewards:
 | 
				
			||||||
 | 
					            type: array
 | 
				
			||||||
 | 
					            items:
 | 
				
			||||||
 | 
					              type: object
 | 
				
			||||||
 | 
					              properties:
 | 
				
			||||||
 | 
					                address:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					                  format: byte
 | 
				
			||||||
 | 
					                weight:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					          partner_rewards:
 | 
				
			||||||
 | 
					            type: array
 | 
				
			||||||
 | 
					            items:
 | 
				
			||||||
 | 
					              type: object
 | 
				
			||||||
 | 
					              properties:
 | 
				
			||||||
 | 
					                address:
 | 
				
			||||||
 | 
					                  type: string
 | 
				
			||||||
 | 
					                  format: byte
 | 
				
			||||||
 | 
					                rewards_per_second:
 | 
				
			||||||
 | 
					                  type: object
 | 
				
			||||||
 | 
					                  properties:
 | 
				
			||||||
 | 
					                    denom:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                    amount:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                  description: >-
 | 
				
			||||||
 | 
					                    Coin defines a token with a denomination and an amount.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    NOTE: The amount field is an Int which implements the custom
 | 
				
			||||||
 | 
					                    method
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    signatures required by gogoproto.
 | 
				
			||||||
    title: Params governance parameters for kavadist module
 | 
					    title: Params governance parameters for kavadist module
 | 
				
			||||||
 | 
					  kava.kavadist.v1beta1.PartnerReward:
 | 
				
			||||||
 | 
					    type: object
 | 
				
			||||||
 | 
					    properties:
 | 
				
			||||||
 | 
					      address:
 | 
				
			||||||
 | 
					        type: string
 | 
				
			||||||
 | 
					        format: byte
 | 
				
			||||||
 | 
					      rewards_per_second:
 | 
				
			||||||
 | 
					        type: object
 | 
				
			||||||
 | 
					        properties:
 | 
				
			||||||
 | 
					          denom:
 | 
				
			||||||
 | 
					            type: string
 | 
				
			||||||
 | 
					          amount:
 | 
				
			||||||
 | 
					            type: string
 | 
				
			||||||
 | 
					        description: |-
 | 
				
			||||||
 | 
					          Coin defines a token with a denomination and an amount.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          NOTE: The amount field is an Int which implements the custom method
 | 
				
			||||||
 | 
					          signatures required by gogoproto.
 | 
				
			||||||
  kava.kavadist.v1beta1.Period:
 | 
					  kava.kavadist.v1beta1.Period:
 | 
				
			||||||
    type: object
 | 
					    type: object
 | 
				
			||||||
    properties:
 | 
					    properties:
 | 
				
			||||||
@ -55937,6 +56147,65 @@ definitions:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                representing the yearly APR of KAVA tokens that will be minted
 | 
					                representing the yearly APR of KAVA tokens that will be minted
 | 
				
			||||||
                during that period
 | 
					                during that period
 | 
				
			||||||
 | 
					          infrastructure_params:
 | 
				
			||||||
 | 
					            type: object
 | 
				
			||||||
 | 
					            properties:
 | 
				
			||||||
 | 
					              infrastructure_periods:
 | 
				
			||||||
 | 
					                type: array
 | 
				
			||||||
 | 
					                items:
 | 
				
			||||||
 | 
					                  type: object
 | 
				
			||||||
 | 
					                  properties:
 | 
				
			||||||
 | 
					                    start:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                      format: date-time
 | 
				
			||||||
 | 
					                      title: example "2020-03-01T15:20:00Z"
 | 
				
			||||||
 | 
					                    end:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                      format: date-time
 | 
				
			||||||
 | 
					                      title: example "2020-06-01T15:20:00Z"
 | 
				
			||||||
 | 
					                    inflation:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                      format: byte
 | 
				
			||||||
 | 
					                      title: example "1.000000003022265980"  - 10% inflation
 | 
				
			||||||
 | 
					                  title: >-
 | 
				
			||||||
 | 
					                    Period stores the specified start and end dates, and the
 | 
				
			||||||
 | 
					                    inflation, expressed as a decimal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    representing the yearly APR of KAVA tokens that will be
 | 
				
			||||||
 | 
					                    minted during that period
 | 
				
			||||||
 | 
					              core_rewards:
 | 
				
			||||||
 | 
					                type: array
 | 
				
			||||||
 | 
					                items:
 | 
				
			||||||
 | 
					                  type: object
 | 
				
			||||||
 | 
					                  properties:
 | 
				
			||||||
 | 
					                    address:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                      format: byte
 | 
				
			||||||
 | 
					                    weight:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					              partner_rewards:
 | 
				
			||||||
 | 
					                type: array
 | 
				
			||||||
 | 
					                items:
 | 
				
			||||||
 | 
					                  type: object
 | 
				
			||||||
 | 
					                  properties:
 | 
				
			||||||
 | 
					                    address:
 | 
				
			||||||
 | 
					                      type: string
 | 
				
			||||||
 | 
					                      format: byte
 | 
				
			||||||
 | 
					                    rewards_per_second:
 | 
				
			||||||
 | 
					                      type: object
 | 
				
			||||||
 | 
					                      properties:
 | 
				
			||||||
 | 
					                        denom:
 | 
				
			||||||
 | 
					                          type: string
 | 
				
			||||||
 | 
					                        amount:
 | 
				
			||||||
 | 
					                          type: string
 | 
				
			||||||
 | 
					                      description: >-
 | 
				
			||||||
 | 
					                        Coin defines a token with a denomination and an amount.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        NOTE: The amount field is an Int which implements the
 | 
				
			||||||
 | 
					                        custom method
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        signatures required by gogoproto.
 | 
				
			||||||
        title: Params governance parameters for kavadist module
 | 
					        title: Params governance parameters for kavadist module
 | 
				
			||||||
    description: >-
 | 
					    description: >-
 | 
				
			||||||
      QueryParamsResponse defines the response type for querying x/kavadist
 | 
					      QueryParamsResponse defines the response type for querying x/kavadist
 | 
				
			||||||
 | 
				
			|||||||
@ -3089,6 +3089,7 @@ QueryDepositsRequest is the request type for the Query/Deposits RPC method.
 | 
				
			|||||||
| ----- | ---- | ----- | ----------- |
 | 
					| ----- | ---- | ----- | ----------- |
 | 
				
			||||||
| `depositor` | [string](#string) |  | depositor optionally filters deposits by depositor |
 | 
					| `depositor` | [string](#string) |  | depositor optionally filters deposits by depositor |
 | 
				
			||||||
| `denom` | [string](#string) |  | denom optionally filters deposits by vault denom |
 | 
					| `denom` | [string](#string) |  | denom optionally filters deposits by vault denom |
 | 
				
			||||||
 | 
					| `value_in_staked_tokens` | [bool](#bool) |  | respond with vault value in ukava for bkava vaults |
 | 
				
			||||||
| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |
 | 
					| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) |  | pagination defines an optional pagination for the request. |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -104,8 +104,11 @@ message QueryDepositsRequest {
 | 
				
			|||||||
  // denom optionally filters deposits by vault denom
 | 
					  // denom optionally filters deposits by vault denom
 | 
				
			||||||
  string denom = 2;
 | 
					  string denom = 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // respond with vault value in ukava for bkava vaults
 | 
				
			||||||
 | 
					  bool value_in_staked_tokens = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // pagination defines an optional pagination for the request.
 | 
					  // pagination defines an optional pagination for the request.
 | 
				
			||||||
  cosmos.base.query.v1beta1.PageRequest pagination = 3;
 | 
					  cosmos.base.query.v1beta1.PageRequest pagination = 4;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// QueryDepositsResponse is the response type for the Query/Deposits RPC method.
 | 
					// QueryDepositsResponse is the response type for the Query/Deposits RPC method.
 | 
				
			||||||
 | 
				
			|||||||
@ -13,20 +13,21 @@ option (gogoproto.goproto_getters_all)  = false;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Params governance parameters for kavadist module
 | 
					// Params governance parameters for kavadist module
 | 
				
			||||||
message Params {
 | 
					message Params {
 | 
				
			||||||
  bool            active  = 1 [(gogoproto.moretags) = "yaml:\"active\""];
 | 
					  bool                 active  = 1 [(gogoproto.moretags) = "yaml:\"active\""];
 | 
				
			||||||
  repeated Period periods = 3 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"periods\""];
 | 
					  repeated Period      periods = 3 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"periods\""];
 | 
				
			||||||
  InfrastructureParams infrastructure_params = 4 [(gogoproto.nullable) = false];
 | 
					  InfrastructureParams infrastructure_params = 4 [(gogoproto.nullable) = false];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
message InfrastructureParams {
 | 
					message InfrastructureParams {
 | 
				
			||||||
  repeated Period infrastructure_periods = 1 [(gogoproto.castrepeated) = "Periods", (gogoproto.nullable) = false];
 | 
					  repeated Period     infrastructure_periods = 1 [(gogoproto.castrepeated) = "Periods", (gogoproto.nullable) = false];
 | 
				
			||||||
  repeated CoreReward core_rewards = 2 [(gogoproto.castrepeated) = "CoreRewards", (gogoproto.nullable) = false];
 | 
					  repeated CoreReward core_rewards       = 2 [(gogoproto.castrepeated) = "CoreRewards", (gogoproto.nullable) = false];
 | 
				
			||||||
  repeated PartnerReward partner_rewards = 3 [(gogoproto.castrepeated) = "PartnerRewards", (gogoproto.nullable) = false];
 | 
					  repeated PartnerReward partner_rewards = 3
 | 
				
			||||||
  option (gogoproto.goproto_stringer)        = true;
 | 
					      [(gogoproto.castrepeated) = "PartnerRewards", (gogoproto.nullable) = false];
 | 
				
			||||||
 | 
					  option (gogoproto.goproto_stringer) = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
message CoreReward {
 | 
					message CoreReward {
 | 
				
			||||||
  bytes   address      = 1                   [
 | 
					  bytes address = 1 [
 | 
				
			||||||
    (cosmos_proto.scalar) = "cosmos.AddressBytes",
 | 
					    (cosmos_proto.scalar) = "cosmos.AddressBytes",
 | 
				
			||||||
    (gogoproto.casttype)  = "github.com/cosmos/cosmos-sdk/types.AccAddress"
 | 
					    (gogoproto.casttype)  = "github.com/cosmos/cosmos-sdk/types.AccAddress"
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
@ -35,16 +36,16 @@ message CoreReward {
 | 
				
			|||||||
    (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
 | 
					    (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
 | 
				
			||||||
    (gogoproto.nullable)   = false
 | 
					    (gogoproto.nullable)   = false
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  option (gogoproto.goproto_stringer)        = true;
 | 
					  option (gogoproto.goproto_stringer) = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
message PartnerReward {
 | 
					message PartnerReward {
 | 
				
			||||||
  bytes   address      = 1                   [
 | 
					  bytes address = 1 [
 | 
				
			||||||
    (cosmos_proto.scalar) = "cosmos.AddressBytes",
 | 
					    (cosmos_proto.scalar) = "cosmos.AddressBytes",
 | 
				
			||||||
    (gogoproto.casttype)  = "github.com/cosmos/cosmos-sdk/types.AccAddress"
 | 
					    (gogoproto.casttype)  = "github.com/cosmos/cosmos-sdk/types.AccAddress"
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  cosmos.base.v1beta1.Coin rewards_per_second         = 2[(gogoproto.nullable) = false];
 | 
					  cosmos.base.v1beta1.Coin rewards_per_second = 2 [(gogoproto.nullable) = false];
 | 
				
			||||||
  option (gogoproto.goproto_stringer)        = true;
 | 
					  option (gogoproto.goproto_stringer)         = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Period stores the specified start and end dates, and the inflation, expressed as a decimal
 | 
					// Period stores the specified start and end dates, and the inflation, expressed as a decimal
 | 
				
			||||||
@ -67,4 +68,3 @@ message Period {
 | 
				
			|||||||
    (gogoproto.moretags)   = "yaml:\"inflation\""
 | 
					    (gogoproto.moretags)   = "yaml:\"inflation\""
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -15,8 +15,9 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// flags for cli queries
 | 
					// flags for cli queries
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
	flagDenom = "denom"
 | 
						flagDenom               = "denom"
 | 
				
			||||||
	flagOwner = "owner"
 | 
						flagOwner               = "owner"
 | 
				
			||||||
 | 
						flagValueInStakedTokens = "value_in_staked_tokens"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetQueryCmd returns the cli query commands for the earn module
 | 
					// GetQueryCmd returns the cli query commands for the earn module
 | 
				
			||||||
@ -145,6 +146,10 @@ func queryDepositsCmd() *cobra.Command {
 | 
				
			|||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				return err
 | 
									return err
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								valueInStakedTokens, err := cmd.Flags().GetBool(flagValueInStakedTokens)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			pageReq, err := client.ReadPageRequest(cmd.Flags())
 | 
								pageReq, err := client.ReadPageRequest(cmd.Flags())
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
@ -156,6 +161,7 @@ func queryDepositsCmd() *cobra.Command {
 | 
				
			|||||||
			req := types.NewQueryDepositsRequest(
 | 
								req := types.NewQueryDepositsRequest(
 | 
				
			||||||
				ownerBech,
 | 
									ownerBech,
 | 
				
			||||||
				denom,
 | 
									denom,
 | 
				
			||||||
 | 
									valueInStakedTokens,
 | 
				
			||||||
				pageReq,
 | 
									pageReq,
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
			res, err := queryClient.Deposits(context.Background(), req)
 | 
								res, err := queryClient.Deposits(context.Background(), req)
 | 
				
			||||||
@ -171,6 +177,7 @@ func queryDepositsCmd() *cobra.Command {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	cmd.Flags().String(flagOwner, "", "(optional) filter for deposits by owner address")
 | 
						cmd.Flags().String(flagOwner, "", "(optional) filter for deposits by owner address")
 | 
				
			||||||
	cmd.Flags().String(flagDenom, "", "(optional) filter for deposits by vault denom")
 | 
						cmd.Flags().String(flagDenom, "", "(optional) filter for deposits by vault denom")
 | 
				
			||||||
 | 
						cmd.Flags().Bool(flagValueInStakedTokens, false, "(optional) get underlying staked tokens for staking derivative vaults")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return cmd
 | 
						return cmd
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -296,6 +296,19 @@ func (s queryServer) getOneAccountOneVaultDeposit(
 | 
				
			|||||||
		return nil, status.Error(codes.NotFound, err.Error())
 | 
							return nil, status.Error(codes.NotFound, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if req.ValueInStakedTokens {
 | 
				
			||||||
 | 
							// Get underlying ukava amount if denom is a derivative
 | 
				
			||||||
 | 
							if s.keeper.liquidKeeper.IsDerivativeDenom(ctx, req.Denom) {
 | 
				
			||||||
 | 
								ukavaValue, err := s.keeper.liquidKeeper.GetStakedTokensForDerivatives(ctx, sdk.NewCoins(value))
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									// This should "never" happen if IsDerivativeDenom is true
 | 
				
			||||||
 | 
									panic("Error getting ukava value for " + req.Denom)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								value = ukavaValue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &types.QueryDepositsResponse{
 | 
						return &types.QueryDepositsResponse{
 | 
				
			||||||
		Deposits: []types.DepositResponse{
 | 
							Deposits: []types.DepositResponse{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
@ -397,6 +410,31 @@ func (s queryServer) getOneAccountAllDeposits(
 | 
				
			|||||||
		return nil, status.Error(codes.InvalidArgument, err.Error())
 | 
							return nil, status.Error(codes.InvalidArgument, err.Error())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if req.ValueInStakedTokens {
 | 
				
			||||||
 | 
							// Plain slice to not sum ukava amounts together. This is not a valid
 | 
				
			||||||
 | 
							// sdk.Coin due to multiple coins of the same denom, but we need them to
 | 
				
			||||||
 | 
							// be separate in the response to not be an aggregate amount.
 | 
				
			||||||
 | 
							var valueInStakedTokens []sdk.Coin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for _, coin := range value {
 | 
				
			||||||
 | 
								// Non-bkava coins are kept as is
 | 
				
			||||||
 | 
								if !s.keeper.liquidKeeper.IsDerivativeDenom(ctx, coin.Denom) {
 | 
				
			||||||
 | 
									valueInStakedTokens = append(valueInStakedTokens, coin)
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Derivative coins are converted to underlying staked tokens
 | 
				
			||||||
 | 
								ukavaValue, err := s.keeper.liquidKeeper.GetStakedTokensForDerivatives(ctx, sdk.NewCoins(coin))
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									// This should "never" happen if IsDerivativeDenom is true
 | 
				
			||||||
 | 
									panic("Error getting ukava value for " + coin.Denom)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								valueInStakedTokens = append(valueInStakedTokens, ukavaValue)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							value = valueInStakedTokens
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	deposits = append(deposits, types.DepositResponse{
 | 
						deposits = append(deposits, types.DepositResponse{
 | 
				
			||||||
		Depositor: depositor.String(),
 | 
							Depositor: depositor.String(),
 | 
				
			||||||
		Shares:    accountShare.Shares,
 | 
							Shares:    accountShare.Shares,
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ package keeper_test
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/cosmos/cosmos-sdk/baseapp"
 | 
						"github.com/cosmos/cosmos-sdk/baseapp"
 | 
				
			||||||
@ -14,6 +15,7 @@ import (
 | 
				
			|||||||
	"google.golang.org/grpc/codes"
 | 
						"google.golang.org/grpc/codes"
 | 
				
			||||||
	"google.golang.org/grpc/status"
 | 
						"google.golang.org/grpc/status"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
	"github.com/kava-labs/kava/x/earn/keeper"
 | 
						"github.com/kava-labs/kava/x/earn/keeper"
 | 
				
			||||||
	"github.com/kava-labs/kava/x/earn/testutil"
 | 
						"github.com/kava-labs/kava/x/earn/testutil"
 | 
				
			||||||
	"github.com/kava-labs/kava/x/earn/types"
 | 
						"github.com/kava-labs/kava/x/earn/types"
 | 
				
			||||||
@ -217,32 +219,61 @@ func (suite *grpcQueryTestSuite) TestVault_NotFound() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
					func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
				
			||||||
 | 
						// Validator setup for bkava
 | 
				
			||||||
 | 
						_, addrs := app.GeneratePrivKeyAddressPairs(5)
 | 
				
			||||||
 | 
						valAccAddr1, valAccAddr2, delegator := addrs[0], addrs[1], addrs[2]
 | 
				
			||||||
 | 
						valAddr1 := sdk.ValAddress(valAccAddr1)
 | 
				
			||||||
 | 
						valAddr2 := sdk.ValAddress(valAccAddr2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	vault1Denom := "usdx"
 | 
						vault1Denom := "usdx"
 | 
				
			||||||
	vault2Denom := "busd"
 | 
						vault2Denom := "busd"
 | 
				
			||||||
	vault3Denom := testutil.TestBkavaDenoms[0]
 | 
						vault3Denom := fmt.Sprintf("bkava-%s", valAddr1.String())
 | 
				
			||||||
 | 
						vault4Denom := fmt.Sprintf("bkava-%s", valAddr2.String())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						initialUkavaBalance := sdk.NewInt(1e9)
 | 
				
			||||||
 | 
						startBalance := sdk.NewCoins(
 | 
				
			||||||
 | 
							sdk.NewCoin("ukava", initialUkavaBalance),
 | 
				
			||||||
 | 
							sdk.NewInt64Coin(vault1Denom, 1000),
 | 
				
			||||||
 | 
							sdk.NewInt64Coin(vault2Denom, 1000),
 | 
				
			||||||
 | 
							// Bkava isn't actually minted via x/liquid
 | 
				
			||||||
 | 
							sdk.NewInt64Coin(vault3Denom, 1000),
 | 
				
			||||||
 | 
							sdk.NewInt64Coin(vault4Denom, 1000),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						delegateAmount := sdk.NewInt(100e6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.App.FundAccount(suite.Ctx, valAccAddr1, startBalance)
 | 
				
			||||||
 | 
						suite.App.FundAccount(suite.Ctx, valAccAddr2, startBalance)
 | 
				
			||||||
 | 
						suite.App.FundAccount(suite.Ctx, delegator, startBalance)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.CreateNewUnbondedValidator(valAddr1, initialUkavaBalance)
 | 
				
			||||||
 | 
						suite.CreateNewUnbondedValidator(valAddr2, initialUkavaBalance)
 | 
				
			||||||
 | 
						suite.CreateDelegation(valAddr1, delegator, delegateAmount)
 | 
				
			||||||
 | 
						suite.CreateDelegation(valAddr2, delegator, delegateAmount)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						staking.EndBlocker(suite.Ctx, suite.App.GetStakingKeeper())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						savingsParams := suite.SavingsKeeper.GetParams(suite.Ctx)
 | 
				
			||||||
 | 
						savingsParams.SupportedDenoms = append(savingsParams.SupportedDenoms, "bkava")
 | 
				
			||||||
 | 
						suite.SavingsKeeper.SetParams(suite.Ctx, savingsParams)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Add vaults
 | 
						// Add vaults
 | 
				
			||||||
	suite.CreateVault(vault1Denom, types.StrategyTypes{types.STRATEGY_TYPE_HARD}, false, nil)
 | 
						suite.CreateVault(vault1Denom, types.StrategyTypes{types.STRATEGY_TYPE_HARD}, false, nil)
 | 
				
			||||||
	suite.CreateVault(vault2Denom, types.StrategyTypes{types.STRATEGY_TYPE_HARD}, false, nil)
 | 
						suite.CreateVault(vault2Denom, types.StrategyTypes{types.STRATEGY_TYPE_HARD}, false, nil)
 | 
				
			||||||
	suite.CreateVault("bkava", types.StrategyTypes{types.STRATEGY_TYPE_SAVINGS}, false, nil)
 | 
						suite.CreateVault("bkava", types.StrategyTypes{types.STRATEGY_TYPE_SAVINGS}, false, nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	startBalance := sdk.NewCoins(
 | 
					 | 
				
			||||||
		sdk.NewInt64Coin(vault1Denom, 1000),
 | 
					 | 
				
			||||||
		sdk.NewInt64Coin(vault2Denom, 1000),
 | 
					 | 
				
			||||||
		sdk.NewInt64Coin(vault3Denom, 1000),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	deposit1Amount := sdk.NewInt64Coin(vault1Denom, 100)
 | 
						deposit1Amount := sdk.NewInt64Coin(vault1Denom, 100)
 | 
				
			||||||
	deposit2Amount := sdk.NewInt64Coin(vault2Denom, 200)
 | 
						deposit2Amount := sdk.NewInt64Coin(vault2Denom, 200)
 | 
				
			||||||
	deposit3Amount := sdk.NewInt64Coin(vault3Denom, 200)
 | 
						deposit3Amount := sdk.NewInt64Coin(vault3Denom, 200)
 | 
				
			||||||
 | 
						deposit4Amount := sdk.NewInt64Coin(vault4Denom, 300)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Accounts
 | 
						// Accounts
 | 
				
			||||||
	acc1 := suite.CreateAccount(startBalance, 0).GetAddress()
 | 
						acc1 := suite.CreateAccount(startBalance, 0).GetAddress()
 | 
				
			||||||
	acc2 := suite.CreateAccount(startBalance, 1).GetAddress()
 | 
						acc2 := delegator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Deposit into each vault from each account - 4 total deposits
 | 
						// Deposit into each vault from each account - 4 total deposits
 | 
				
			||||||
	// Acc 1: usdx + busd
 | 
						// Acc 1: usdx + busd
 | 
				
			||||||
	// Acc 2: usdx + bkava
 | 
						// Acc 2: usdx + bkava-1 + bkava-2
 | 
				
			||||||
	err := suite.Keeper.Deposit(suite.Ctx, acc1, deposit1Amount, types.STRATEGY_TYPE_HARD)
 | 
						err := suite.Keeper.Deposit(suite.Ctx, acc1, deposit1Amount, types.STRATEGY_TYPE_HARD)
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
	err = suite.Keeper.Deposit(suite.Ctx, acc1, deposit2Amount, types.STRATEGY_TYPE_HARD)
 | 
						err = suite.Keeper.Deposit(suite.Ctx, acc1, deposit2Amount, types.STRATEGY_TYPE_HARD)
 | 
				
			||||||
@ -252,12 +283,14 @@ func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
				
			|||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
	err = suite.Keeper.Deposit(suite.Ctx, acc2, deposit3Amount, types.STRATEGY_TYPE_SAVINGS)
 | 
						err = suite.Keeper.Deposit(suite.Ctx, acc2, deposit3Amount, types.STRATEGY_TYPE_SAVINGS)
 | 
				
			||||||
	suite.Require().NoError(err)
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
						err = suite.Keeper.Deposit(suite.Ctx, acc2, deposit4Amount, types.STRATEGY_TYPE_SAVINGS)
 | 
				
			||||||
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	suite.Run("specific vault", func() {
 | 
						suite.Run("specific vault", func() {
 | 
				
			||||||
		// Query all deposits for account 1
 | 
							// Query all deposits for account 1
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(acc1.String(), vault1Denom, nil),
 | 
								types.NewQueryDepositsRequest(acc1.String(), vault1Denom, false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Len(res.Deposits, 1)
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
@ -282,7 +315,7 @@ func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
				
			|||||||
	suite.Run("specific bkava vault", func() {
 | 
						suite.Run("specific bkava vault", func() {
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(acc2.String(), vault3Denom, nil),
 | 
								types.NewQueryDepositsRequest(acc2.String(), vault3Denom, false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Len(res.Deposits, 1)
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
@ -304,10 +337,33 @@ func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
				
			|||||||
		)
 | 
							)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.Run("specific bkava vault in staked tokens", func() {
 | 
				
			||||||
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
 | 
								context.Background(),
 | 
				
			||||||
 | 
								types.NewQueryDepositsRequest(acc2.String(), vault3Denom, true, nil),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
 | 
							suite.Require().Equal(
 | 
				
			||||||
 | 
								types.DepositResponse{
 | 
				
			||||||
 | 
									Depositor: acc2.String(),
 | 
				
			||||||
 | 
									// Only includes specified deposit shares
 | 
				
			||||||
 | 
									Shares: types.NewVaultShares(
 | 
				
			||||||
 | 
										types.NewVaultShare(deposit3Amount.Denom, deposit3Amount.Amount.ToDec()),
 | 
				
			||||||
 | 
									),
 | 
				
			||||||
 | 
									// Only the specified vault denom value
 | 
				
			||||||
 | 
									Value: sdk.NewCoins(
 | 
				
			||||||
 | 
										sdk.NewCoin("ukava", deposit3Amount.Amount),
 | 
				
			||||||
 | 
									),
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								res.Deposits[0],
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	suite.Run("invalid vault", func() {
 | 
						suite.Run("invalid vault", func() {
 | 
				
			||||||
		_, err := suite.queryClient.Deposits(
 | 
							_, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(acc1.String(), "notavaliddenom", nil),
 | 
								types.NewQueryDepositsRequest(acc1.String(), "notavaliddenom", false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().Error(err)
 | 
							suite.Require().Error(err)
 | 
				
			||||||
		suite.Require().ErrorIs(err, status.Errorf(codes.NotFound, "vault for notavaliddenom not found"))
 | 
							suite.Require().ErrorIs(err, status.Errorf(codes.NotFound, "vault for notavaliddenom not found"))
 | 
				
			||||||
@ -317,7 +373,7 @@ func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
				
			|||||||
		// Query all deposits for account 1
 | 
							// Query all deposits for account 1
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(acc1.String(), "", nil),
 | 
								types.NewQueryDepositsRequest(acc1.String(), "", false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Len(res.Deposits, 1)
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
@ -335,6 +391,40 @@ func (suite *grpcQueryTestSuite) TestDeposits() {
 | 
				
			|||||||
			res.Deposits,
 | 
								res.Deposits,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						suite.Run("all vaults value in staked tokens", func() {
 | 
				
			||||||
 | 
							// Query all deposits for account 1 with value in staked tokens
 | 
				
			||||||
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
 | 
								context.Background(),
 | 
				
			||||||
 | 
								types.NewQueryDepositsRequest(acc2.String(), "", true, nil),
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
 | 
							suite.Require().Equal(
 | 
				
			||||||
 | 
								types.DepositResponse{
 | 
				
			||||||
 | 
									Depositor: acc2.String(),
 | 
				
			||||||
 | 
									Shares: types.VaultShares{
 | 
				
			||||||
 | 
										types.NewVaultShare(deposit4Amount.Denom, deposit4Amount.Amount.ToDec()),
 | 
				
			||||||
 | 
										types.NewVaultShare(deposit3Amount.Denom, deposit3Amount.Amount.ToDec()),
 | 
				
			||||||
 | 
										types.NewVaultShare(deposit1Amount.Denom, deposit1Amount.Amount.ToDec()),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Value: sdk.Coins{
 | 
				
			||||||
 | 
										sdk.NewCoin("ukava", deposit4Amount.Amount),
 | 
				
			||||||
 | 
										sdk.NewCoin("ukava", deposit3Amount.Amount),
 | 
				
			||||||
 | 
										// Deposit 1 is last as it's the same order as vault shares
 | 
				
			||||||
 | 
										deposit1Amount,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								res.Deposits[0],
 | 
				
			||||||
 | 
							)
 | 
				
			||||||
 | 
							for i := range res.Deposits[0].Shares {
 | 
				
			||||||
 | 
								suite.Equal(
 | 
				
			||||||
 | 
									res.Deposits[0].Shares[i].Amount,
 | 
				
			||||||
 | 
									res.Deposits[0].Value[i].Amount.ToDec(),
 | 
				
			||||||
 | 
									"order of deposit value should match shares",
 | 
				
			||||||
 | 
								)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (suite *grpcQueryTestSuite) TestDeposits_NoDeposits() {
 | 
					func (suite *grpcQueryTestSuite) TestDeposits_NoDeposits() {
 | 
				
			||||||
@ -353,7 +443,7 @@ func (suite *grpcQueryTestSuite) TestDeposits_NoDeposits() {
 | 
				
			|||||||
		// Query all deposits for account 1
 | 
							// Query all deposits for account 1
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(acc1.String(), vault1Denom, nil),
 | 
								types.NewQueryDepositsRequest(acc1.String(), vault1Denom, false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Len(res.Deposits, 1)
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
@ -376,7 +466,7 @@ func (suite *grpcQueryTestSuite) TestDeposits_NoDeposits() {
 | 
				
			|||||||
		// Query all deposits for account 1
 | 
							// Query all deposits for account 1
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(acc1.String(), "", nil),
 | 
								types.NewQueryDepositsRequest(acc1.String(), "", false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Empty(res.Deposits)
 | 
							suite.Require().Empty(res.Deposits)
 | 
				
			||||||
@ -386,7 +476,7 @@ func (suite *grpcQueryTestSuite) TestDeposits_NoDeposits() {
 | 
				
			|||||||
func (suite *grpcQueryTestSuite) TestDeposits_NoDepositor() {
 | 
					func (suite *grpcQueryTestSuite) TestDeposits_NoDepositor() {
 | 
				
			||||||
	_, err := suite.queryClient.Deposits(
 | 
						_, err := suite.queryClient.Deposits(
 | 
				
			||||||
		context.Background(),
 | 
							context.Background(),
 | 
				
			||||||
		types.NewQueryDepositsRequest("", "usdx", nil),
 | 
							types.NewQueryDepositsRequest("", "usdx", false, nil),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	suite.Require().Error(err)
 | 
						suite.Require().Error(err)
 | 
				
			||||||
	suite.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "depositor is required"))
 | 
						suite.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "depositor is required"))
 | 
				
			||||||
@ -395,14 +485,14 @@ func (suite *grpcQueryTestSuite) TestDeposits_NoDepositor() {
 | 
				
			|||||||
func (suite *grpcQueryTestSuite) TestDeposits_InvalidAddress() {
 | 
					func (suite *grpcQueryTestSuite) TestDeposits_InvalidAddress() {
 | 
				
			||||||
	_, err := suite.queryClient.Deposits(
 | 
						_, err := suite.queryClient.Deposits(
 | 
				
			||||||
		context.Background(),
 | 
							context.Background(),
 | 
				
			||||||
		types.NewQueryDepositsRequest("asdf", "usdx", nil),
 | 
							types.NewQueryDepositsRequest("asdf", "usdx", false, nil),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	suite.Require().Error(err)
 | 
						suite.Require().Error(err)
 | 
				
			||||||
	suite.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "Invalid address"))
 | 
						suite.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "Invalid address"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = suite.queryClient.Deposits(
 | 
						_, err = suite.queryClient.Deposits(
 | 
				
			||||||
		context.Background(),
 | 
							context.Background(),
 | 
				
			||||||
		types.NewQueryDepositsRequest("asdf", "", nil),
 | 
							types.NewQueryDepositsRequest("asdf", "", false, nil),
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	suite.Require().Error(err)
 | 
						suite.Require().Error(err)
 | 
				
			||||||
	suite.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "Invalid address"))
 | 
						suite.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "Invalid address"))
 | 
				
			||||||
@ -440,7 +530,7 @@ func (suite *grpcQueryTestSuite) TestDeposits_bKava() {
 | 
				
			|||||||
		// Query all deposits for account 1
 | 
							// Query all deposits for account 1
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(address1.String(), "bkava", nil),
 | 
								types.NewQueryDepositsRequest(address1.String(), "bkava", false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Len(res.Deposits, 1)
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
@ -475,7 +565,7 @@ func (suite *grpcQueryTestSuite) TestDeposits_bKava() {
 | 
				
			|||||||
		// Query all deposits for account 1
 | 
							// Query all deposits for account 1
 | 
				
			||||||
		res, err := suite.queryClient.Deposits(
 | 
							res, err := suite.queryClient.Deposits(
 | 
				
			||||||
			context.Background(),
 | 
								context.Background(),
 | 
				
			||||||
			types.NewQueryDepositsRequest(address1.String(), "bkava", nil),
 | 
								types.NewQueryDepositsRequest(address1.String(), "bkava", false, nil),
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		suite.Require().NoError(err)
 | 
							suite.Require().NoError(err)
 | 
				
			||||||
		suite.Require().Len(res.Deposits, 1)
 | 
							suite.Require().Len(res.Deposits, 1)
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@ import (
 | 
				
			|||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
 | 
				
			||||||
	"github.com/kava-labs/kava/app"
 | 
						"github.com/kava-labs/kava/app"
 | 
				
			||||||
	"github.com/kava-labs/kava/x/earn/keeper"
 | 
						"github.com/kava-labs/kava/x/earn/keeper"
 | 
				
			||||||
	"github.com/kava-labs/kava/x/earn/types"
 | 
						"github.com/kava-labs/kava/x/earn/types"
 | 
				
			||||||
@ -22,6 +23,8 @@ import (
 | 
				
			|||||||
	authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
						authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
 | 
				
			||||||
	bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
 | 
						bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
 | 
				
			||||||
	govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
 | 
						govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
 | 
				
			||||||
 | 
						stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
 | 
				
			||||||
 | 
						stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
 | 
				
			||||||
	"github.com/stretchr/testify/suite"
 | 
						"github.com/stretchr/testify/suite"
 | 
				
			||||||
	abci "github.com/tendermint/tendermint/abci/types"
 | 
						abci "github.com/tendermint/tendermint/abci/types"
 | 
				
			||||||
	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
						tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
 | 
				
			||||||
@ -160,6 +163,13 @@ func (suite *Suite) SetupTest() {
 | 
				
			|||||||
		nil,
 | 
							nil,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						stakingParams := stakingtypes.DefaultParams()
 | 
				
			||||||
 | 
						stakingParams.BondDenom = "ukava"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						stakingGs := stakingtypes.GenesisState{
 | 
				
			||||||
 | 
							Params: stakingParams,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tApp := app.NewTestApp()
 | 
						tApp := app.NewTestApp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tApp.InitializeFromGenesisStates(
 | 
						tApp.InitializeFromGenesisStates(
 | 
				
			||||||
@ -167,6 +177,7 @@ func (suite *Suite) SetupTest() {
 | 
				
			|||||||
			pricefeedtypes.ModuleName: tApp.AppCodec().MustMarshalJSON(&pricefeedGS),
 | 
								pricefeedtypes.ModuleName: tApp.AppCodec().MustMarshalJSON(&pricefeedGS),
 | 
				
			||||||
			hardtypes.ModuleName:      tApp.AppCodec().MustMarshalJSON(&hardGS),
 | 
								hardtypes.ModuleName:      tApp.AppCodec().MustMarshalJSON(&hardGS),
 | 
				
			||||||
			savingstypes.ModuleName:   tApp.AppCodec().MustMarshalJSON(&savingsGS),
 | 
								savingstypes.ModuleName:   tApp.AppCodec().MustMarshalJSON(&savingsGS),
 | 
				
			||||||
 | 
								stakingtypes.ModuleName:   tApp.AppCodec().MustMarshalJSON(&stakingGs),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -357,6 +368,67 @@ func (suite *Suite) SavingsDepositAmountEqual(expected sdk.Coins) {
 | 
				
			|||||||
	)
 | 
						)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					// Staking
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CreateNewUnbondedValidator creates a new validator in the staking module.
 | 
				
			||||||
 | 
					// New validators are unbonded until the end blocker is run.
 | 
				
			||||||
 | 
					func (suite *Suite) CreateNewUnbondedValidator(addr sdk.ValAddress, selfDelegation sdk.Int) stakingtypes.Validator {
 | 
				
			||||||
 | 
						// Create a validator
 | 
				
			||||||
 | 
						err := suite.deliverMsgCreateValidator(suite.Ctx, addr, suite.NewBondCoin(selfDelegation))
 | 
				
			||||||
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// New validators are created in an unbonded state. Note if the end blocker is run later this validator could become bonded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						validator, found := suite.App.GetStakingKeeper().GetValidator(suite.Ctx, addr)
 | 
				
			||||||
 | 
						suite.Require().True(found)
 | 
				
			||||||
 | 
						return validator
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NewBondCoin creates a Coin with the current staking denom.
 | 
				
			||||||
 | 
					func (suite *Suite) NewBondCoin(amount sdk.Int) sdk.Coin {
 | 
				
			||||||
 | 
						stakingDenom := suite.App.GetStakingKeeper().BondDenom(suite.Ctx)
 | 
				
			||||||
 | 
						return sdk.NewCoin(stakingDenom, amount)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// CreateDelegation delegates tokens to a validator.
 | 
				
			||||||
 | 
					func (suite *Suite) CreateDelegation(valAddr sdk.ValAddress, delegator sdk.AccAddress, amount sdk.Int) sdk.Dec {
 | 
				
			||||||
 | 
						sk := suite.App.GetStakingKeeper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						stakingDenom := sk.BondDenom(suite.Ctx)
 | 
				
			||||||
 | 
						msg := stakingtypes.NewMsgDelegate(
 | 
				
			||||||
 | 
							delegator,
 | 
				
			||||||
 | 
							valAddr,
 | 
				
			||||||
 | 
							sdk.NewCoin(stakingDenom, amount),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						msgServer := stakingkeeper.NewMsgServerImpl(sk)
 | 
				
			||||||
 | 
						_, err := msgServer.Delegate(sdk.WrapSDKContext(suite.Ctx), msg)
 | 
				
			||||||
 | 
						suite.Require().NoError(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						del, found := sk.GetDelegation(suite.Ctx, delegator, valAddr)
 | 
				
			||||||
 | 
						suite.Require().True(found)
 | 
				
			||||||
 | 
						return del.Shares
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (suite *Suite) deliverMsgCreateValidator(ctx sdk.Context, address sdk.ValAddress, selfDelegation sdk.Coin) error {
 | 
				
			||||||
 | 
						msg, err := stakingtypes.NewMsgCreateValidator(
 | 
				
			||||||
 | 
							address,
 | 
				
			||||||
 | 
							ed25519.GenPrivKey().PubKey(),
 | 
				
			||||||
 | 
							selfDelegation,
 | 
				
			||||||
 | 
							stakingtypes.Description{},
 | 
				
			||||||
 | 
							stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
 | 
				
			||||||
 | 
							sdk.NewInt(1e6),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						msgServer := stakingkeeper.NewMsgServerImpl(suite.App.GetStakingKeeper())
 | 
				
			||||||
 | 
						_, err = msgServer.CreateValidator(sdk.WrapSDKContext(suite.Ctx), msg)
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------------------
 | 
					// ----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EventsContains asserts that the expected event is in the provided events
 | 
					// EventsContains asserts that the expected event is in the provided events
 | 
				
			||||||
 | 
				
			|||||||
@ -23,11 +23,13 @@ func NewQueryVaultRequest(denom string) *QueryVaultRequest {
 | 
				
			|||||||
func NewQueryDepositsRequest(
 | 
					func NewQueryDepositsRequest(
 | 
				
			||||||
	depositor string,
 | 
						depositor string,
 | 
				
			||||||
	denom string,
 | 
						denom string,
 | 
				
			||||||
 | 
						ValueInStakedTokens bool,
 | 
				
			||||||
	pagination *query.PageRequest,
 | 
						pagination *query.PageRequest,
 | 
				
			||||||
) *QueryDepositsRequest {
 | 
					) *QueryDepositsRequest {
 | 
				
			||||||
	return &QueryDepositsRequest{
 | 
						return &QueryDepositsRequest{
 | 
				
			||||||
		Depositor:  depositor,
 | 
							Depositor:           depositor,
 | 
				
			||||||
		Denom:      denom,
 | 
							Denom:               denom,
 | 
				
			||||||
		Pagination: pagination,
 | 
							ValueInStakedTokens: ValueInStakedTokens,
 | 
				
			||||||
 | 
							Pagination:          pagination,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -323,8 +323,10 @@ type QueryDepositsRequest struct {
 | 
				
			|||||||
	Depositor string `protobuf:"bytes,1,opt,name=depositor,proto3" json:"depositor,omitempty"`
 | 
						Depositor string `protobuf:"bytes,1,opt,name=depositor,proto3" json:"depositor,omitempty"`
 | 
				
			||||||
	// denom optionally filters deposits by vault denom
 | 
						// denom optionally filters deposits by vault denom
 | 
				
			||||||
	Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"`
 | 
						Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"`
 | 
				
			||||||
 | 
						// respond with vault value in ukava for bkava vaults
 | 
				
			||||||
 | 
						ValueInStakedTokens bool `protobuf:"varint,3,opt,name=value_in_staked_tokens,json=valueInStakedTokens,proto3" json:"value_in_staked_tokens,omitempty"`
 | 
				
			||||||
	// pagination defines an optional pagination for the request.
 | 
						// pagination defines an optional pagination for the request.
 | 
				
			||||||
	Pagination *query.PageRequest `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"`
 | 
						Pagination *query.PageRequest `protobuf:"bytes,4,opt,name=pagination,proto3" json:"pagination,omitempty"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *QueryDepositsRequest) Reset()         { *m = QueryDepositsRequest{} }
 | 
					func (m *QueryDepositsRequest) Reset()         { *m = QueryDepositsRequest{} }
 | 
				
			||||||
@ -462,61 +464,63 @@ func init() {
 | 
				
			|||||||
func init() { proto.RegisterFile("kava/earn/v1beta1/query.proto", fileDescriptor_63f8dee2f3192a6b) }
 | 
					func init() { proto.RegisterFile("kava/earn/v1beta1/query.proto", fileDescriptor_63f8dee2f3192a6b) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fileDescriptor_63f8dee2f3192a6b = []byte{
 | 
					var fileDescriptor_63f8dee2f3192a6b = []byte{
 | 
				
			||||||
	// 855 bytes of a gzipped FileDescriptorProto
 | 
						// 883 bytes of a gzipped FileDescriptorProto
 | 
				
			||||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcd, 0x4f, 0x1b, 0x47,
 | 
						0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4b, 0x6f, 0xeb, 0x44,
 | 
				
			||||||
	0x14, 0xf7, 0xda, 0xd8, 0x82, 0x71, 0xa1, 0xf5, 0xe0, 0x4a, 0xb6, 0x29, 0x6b, 0xb3, 0x14, 0x58,
 | 
						0x14, 0x8e, 0xf3, 0x52, 0x3b, 0xe1, 0x5e, 0xc8, 0x34, 0xa0, 0x24, 0x97, 0x3a, 0xa9, 0x2f, 0xb7,
 | 
				
			||||||
	0x2a, 0x79, 0xb7, 0xb8, 0x52, 0x7b, 0x41, 0x95, 0xea, 0xa2, 0x22, 0x7a, 0xa8, 0xe8, 0xd2, 0x72,
 | 
						0xd7, 0x45, 0x8a, 0x4d, 0x53, 0x09, 0x36, 0x15, 0x12, 0xa1, 0xa2, 0x2a, 0x0b, 0x54, 0x9c, 0xd2,
 | 
				
			||||||
	0xa8, 0x54, 0x59, 0x63, 0x3c, 0x5a, 0x56, 0xd8, 0x3b, 0x66, 0x67, 0xec, 0x96, 0x56, 0x51, 0x24,
 | 
						0x05, 0x12, 0xb2, 0x26, 0xcd, 0xc8, 0xb5, 0x92, 0x78, 0x52, 0xcf, 0x24, 0x50, 0x10, 0x42, 0xaa,
 | 
				
			||||||
	0xa4, 0xdc, 0x23, 0xe5, 0x7f, 0xc8, 0x01, 0xe5, 0xc8, 0x1f, 0xc1, 0x11, 0x91, 0x4b, 0x94, 0x03,
 | 
						0xc4, 0x1e, 0x89, 0xff, 0xc0, 0xa2, 0xeb, 0xfe, 0x88, 0x2e, 0xab, 0xb2, 0x41, 0x2c, 0x5a, 0xda,
 | 
				
			||||||
	0x24, 0x90, 0x73, 0xce, 0x39, 0x46, 0xf3, 0xb1, 0xfe, 0x36, 0x46, 0x39, 0xc1, 0xbe, 0x8f, 0xdf,
 | 
						0xb2, 0x66, 0xcd, 0x12, 0xcd, 0xc3, 0x79, 0xa7, 0xa9, 0x58, 0x25, 0x73, 0x1e, 0xdf, 0xf7, 0x9d,
 | 
				
			||||||
	0xef, 0xf7, 0xde, 0xbc, 0xf7, 0x0c, 0x16, 0x8f, 0x50, 0x1b, 0xd9, 0x18, 0x05, 0xbe, 0xdd, 0xde,
 | 
						0x99, 0x73, 0x8e, 0xc1, 0x6a, 0x0b, 0xf5, 0x91, 0x8d, 0x51, 0x18, 0xd8, 0xfd, 0xcd, 0x06, 0x66,
 | 
				
			||||||
	0xa8, 0x62, 0x86, 0x36, 0xec, 0xe3, 0x16, 0x0e, 0x4e, 0xac, 0x66, 0x40, 0x18, 0x81, 0x29, 0xee,
 | 
						0x68, 0xd3, 0x3e, 0xe9, 0xe1, 0xf0, 0xd4, 0xea, 0x86, 0x84, 0x11, 0x98, 0xe5, 0x6e, 0x8b, 0xbb,
 | 
				
			||||||
	0xb6, 0xb8, 0xdb, 0x52, 0xee, 0x5c, 0xf6, 0x80, 0xd0, 0x06, 0xa1, 0x15, 0x11, 0x60, 0xcb, 0x0f,
 | 
						0x2d, 0xe5, 0x2e, 0x16, 0x8e, 0x08, 0xed, 0x10, 0xea, 0x8a, 0x00, 0x5b, 0x1e, 0x64, 0x74, 0xf1,
 | 
				
			||||||
	0x19, 0x9d, 0xfb, 0x46, 0x7e, 0xd9, 0x55, 0x44, 0xb1, 0x84, 0xe9, 0x80, 0x36, 0x91, 0xeb, 0xf9,
 | 
						0x7d, 0x79, 0xb2, 0x1b, 0x88, 0x62, 0x09, 0x33, 0x00, 0xed, 0x22, 0xcf, 0x0f, 0x10, 0xf3, 0x49,
 | 
				
			||||||
	0x88, 0x79, 0xc4, 0x57, 0xb1, 0x7a, 0x6f, 0x6c, 0x18, 0x75, 0x40, 0xbc, 0xd0, 0x9f, 0x76, 0x89,
 | 
						0xa0, 0x62, 0xf5, 0xd1, 0xd8, 0x28, 0xea, 0x88, 0xf8, 0x91, 0x3f, 0xe7, 0x11, 0x8f, 0x48, 0x0e,
 | 
				
			||||||
	0x4b, 0x24, 0x07, 0xff, 0x4f, 0x59, 0xbf, 0x72, 0x09, 0x71, 0xeb, 0xd8, 0x46, 0x4d, 0xcf, 0x46,
 | 
						0xfe, 0x4f, 0x59, 0xdf, 0xf5, 0x08, 0xf1, 0xda, 0xd8, 0x46, 0x5d, 0xdf, 0x46, 0x41, 0x40, 0x98,
 | 
				
			||||||
	0xbe, 0x4f, 0x98, 0x80, 0x0c, 0xf9, 0xf5, 0xe1, 0x62, 0x9a, 0x28, 0x40, 0x8d, 0xd0, 0x5f, 0x18,
 | 
						0x80, 0x8c, 0xf8, 0xf5, 0xe9, 0x62, 0xba, 0x28, 0x44, 0x9d, 0xc8, 0x5f, 0x9e, 0xf6, 0x53, 0x16,
 | 
				
			||||||
	0xf6, 0x53, 0x16, 0x20, 0x86, 0x5d, 0x55, 0x6f, 0x6e, 0x44, 0x3b, 0xda, 0xa8, 0x55, 0x67, 0xd2,
 | 
						0x22, 0x86, 0x3d, 0x55, 0x6f, 0x71, 0xc6, 0x75, 0xf4, 0x51, 0xaf, 0xcd, 0xa4, 0xdb, 0xc8, 0x01,
 | 
				
			||||||
	0x6d, 0xa4, 0x01, 0xfc, 0x9d, 0x97, 0xb5, 0x2b, 0x50, 0x1d, 0x7c, 0xdc, 0xc2, 0x94, 0x19, 0xbf,
 | 
						0xf8, 0x25, 0x2f, 0x6b, 0x5f, 0xa0, 0x3a, 0xf8, 0xa4, 0x87, 0x29, 0x33, 0xbe, 0x00, 0x2b, 0x63,
 | 
				
			||||||
	0x81, 0xf9, 0x3e, 0x2b, 0x6d, 0x12, 0x9f, 0x62, 0xf8, 0x03, 0x48, 0x48, 0xf6, 0x8c, 0x56, 0xd0,
 | 
						0x56, 0xda, 0x25, 0x01, 0xc5, 0xf0, 0x23, 0x90, 0x96, 0xec, 0x79, 0xad, 0xac, 0x99, 0x99, 0x6a,
 | 
				
			||||||
	0xcc, 0x64, 0x29, 0x6b, 0x0d, 0x35, 0xd3, 0x92, 0x29, 0xe5, 0xa9, 0x8b, 0xeb, 0x7c, 0xc4, 0x51,
 | 
						0xc1, 0x9a, 0xba, 0x4c, 0x4b, 0xa6, 0xd4, 0x92, 0x97, 0x37, 0xa5, 0x98, 0xa3, 0xc2, 0x07, 0x2c,
 | 
				
			||||||
	0xe1, 0x1d, 0x96, 0x7d, 0xce, 0xdc, 0x61, 0xf9, 0x53, 0xb1, 0x84, 0x56, 0xc5, 0xf2, 0x23, 0x48,
 | 
						0x87, 0x9c, 0x79, 0xc0, 0xf2, 0x95, 0x62, 0x89, 0xac, 0x8a, 0xe5, 0x63, 0x90, 0x16, 0x0a, 0x39,
 | 
				
			||||||
	0x08, 0x85, 0x9c, 0x25, 0x66, 0x26, 0x4b, 0x85, 0x11, 0x2c, 0x22, 0x25, 0xcc, 0x08, 0xc9, 0x64,
 | 
						0x4b, 0xc2, 0xcc, 0x54, 0xcb, 0x33, 0x58, 0x44, 0x4a, 0x94, 0x11, 0x91, 0xc9, 0x2c, 0x63, 0x03,
 | 
				
			||||||
	0x96, 0xb1, 0x0e, 0x52, 0x5d, 0x58, 0xc5, 0x05, 0xd3, 0x20, 0x5e, 0xc3, 0x3e, 0x69, 0x08, 0xe5,
 | 
						0x64, 0x87, 0xb0, 0x8a, 0x0b, 0xe6, 0x40, 0xaa, 0x89, 0x03, 0xd2, 0x11, 0xca, 0x97, 0x1d, 0x79,
 | 
				
			||||||
	0x33, 0x8e, 0xfc, 0x30, 0x9c, 0x5e, 0x5d, 0x1d, 0x01, 0x9b, 0x20, 0x2e, 0xa0, 0x54, 0x95, 0x0f,
 | 
						0x30, 0x9c, 0x51, 0x5d, 0x03, 0x01, 0xdb, 0x20, 0x25, 0xa0, 0x54, 0x95, 0x4f, 0xe5, 0x97, 0x49,
 | 
				
			||||||
	0xe5, 0x97, 0x49, 0xc6, 0xfb, 0x28, 0x98, 0xed, 0xc7, 0x1b, 0xc9, 0x0d, 0x1d, 0x00, 0xd4, 0x53,
 | 
						0xc6, 0x3f, 0x71, 0xf0, 0x6c, 0x1c, 0x6f, 0x26, 0x37, 0x74, 0x00, 0x50, 0x4f, 0xe5, 0x63, 0x9a,
 | 
				
			||||||
	0x79, 0x98, 0x66, 0xa2, 0x85, 0x98, 0x39, 0x57, 0xca, 0x8f, 0xa0, 0xda, 0x53, 0xef, 0xf9, 0xc7,
 | 
						0x8f, 0x97, 0x13, 0xe6, 0xf3, 0x6a, 0x69, 0x06, 0x55, 0x5d, 0xbd, 0xe7, 0xc1, 0x69, 0x17, 0xd7,
 | 
				
			||||||
	0x49, 0x13, 0x97, 0x53, 0x67, 0x37, 0xf9, 0xd9, 0x5e, 0x0b, 0x75, 0x7a, 0x50, 0xa0, 0x09, 0xbe,
 | 
						0xb2, 0xe7, 0xb7, 0xa5, 0x67, 0xa3, 0x16, 0xea, 0x8c, 0xa0, 0x40, 0x13, 0xbc, 0xe5, 0xf3, 0x3e,
 | 
				
			||||||
	0xf0, 0xf8, 0x1c, 0x7b, 0x6d, 0xc4, 0x70, 0x45, 0x16, 0x11, 0x2b, 0x68, 0xe6, 0xb4, 0x33, 0xe7,
 | 
						0xf6, 0xfb, 0x88, 0x61, 0x57, 0x16, 0x91, 0x28, 0x6b, 0xe6, 0x92, 0xf3, 0xdc, 0xa7, 0xfb, 0xd2,
 | 
				
			||||||
	0xd1, 0x5d, 0x69, 0x16, 0xda, 0xe0, 0x36, 0x80, 0xa8, 0x5e, 0x27, 0xff, 0xe0, 0x5a, 0xa5, 0x86,
 | 
						0x2c, 0xb4, 0xc1, 0x5d, 0x00, 0x51, 0xbb, 0x4d, 0xbe, 0xc5, 0x4d, 0xb7, 0x89, 0xbb, 0x84, 0xfa,
 | 
				
			||||||
	0x9b, 0x84, 0x7a, 0x8c, 0x04, 0x34, 0x33, 0x55, 0x88, 0x99, 0x33, 0xe5, 0xcc, 0xd5, 0x79, 0x31,
 | 
						0x8c, 0x84, 0x34, 0x9f, 0x2c, 0x27, 0xcc, 0xe5, 0x5a, 0xfe, 0xfa, 0xa2, 0x92, 0x53, 0x63, 0xf0,
 | 
				
			||||||
	0xad, 0xd6, 0xe0, 0xa7, 0x5a, 0x2d, 0xc0, 0x94, 0xee, 0xb1, 0xc0, 0xf3, 0x5d, 0x27, 0xa5, 0x72,
 | 
						0x49, 0xb3, 0x19, 0x62, 0x4a, 0xeb, 0x2c, 0xf4, 0x03, 0xcf, 0xc9, 0xaa, 0x9c, 0x9d, 0x41, 0x0a,
 | 
				
			||||||
	0xb6, 0x3a, 0x29, 0x70, 0x09, 0x7c, 0xc6, 0x08, 0x43, 0xf5, 0x0a, 0x3d, 0x44, 0x01, 0xa6, 0x99,
 | 
						0x5c, 0x03, 0x6f, 0x30, 0xc2, 0x50, 0xdb, 0xa5, 0xc7, 0x28, 0xc4, 0x34, 0x9f, 0x12, 0x35, 0x66,
 | 
				
			||||||
	0xb8, 0xa8, 0x31, 0x29, 0x6c, 0x7b, 0xc2, 0x04, 0xff, 0x06, 0xf2, 0xb3, 0xd2, 0x46, 0xf5, 0x16,
 | 
						0x84, 0xad, 0x2e, 0x4c, 0xf0, 0x1b, 0x20, 0x8f, 0x6e, 0x1f, 0xb5, 0x7b, 0x38, 0x9f, 0xe6, 0x11,
 | 
				
			||||||
	0xce, 0x24, 0x78, 0x44, 0x79, 0x93, 0xf7, 0xec, 0xf5, 0x75, 0x7e, 0xd5, 0xf5, 0xd8, 0x61, 0xab,
 | 
						0xb5, 0x6d, 0x7e, 0x67, 0x7f, 0xde, 0x94, 0xd6, 0x3d, 0x9f, 0x1d, 0xf7, 0x1a, 0xd6, 0x11, 0xe9,
 | 
				
			||||||
	0x6a, 0x1d, 0x90, 0x86, 0x5a, 0x3d, 0xf5, 0xa7, 0x48, 0x6b, 0x47, 0x36, 0xe3, 0x25, 0x5a, 0x3b,
 | 
						0xa8, 0xd1, 0x53, 0x3f, 0x15, 0xda, 0x6c, 0xd9, 0x8c, 0x97, 0x68, 0xed, 0x05, 0xec, 0xfa, 0xa2,
 | 
				
			||||||
	0x3e, 0xbb, 0x3a, 0x2f, 0x02, 0x25, 0x69, 0xc7, 0x67, 0x0e, 0x10, 0x80, 0xfb, 0x1c, 0xcf, 0x78,
 | 
						0x02, 0x94, 0xa4, 0xbd, 0x80, 0x39, 0x40, 0x00, 0x1e, 0x72, 0x3c, 0xe3, 0x4e, 0x03, 0x39, 0xf1,
 | 
				
			||||||
	0xa1, 0x81, 0xb4, 0x78, 0x45, 0xa5, 0x2a, 0x9c, 0x2f, 0xf8, 0x3d, 0x98, 0xe9, 0xd4, 0x26, 0x7b,
 | 
						0x8a, 0x4a, 0x55, 0xd4, 0x5f, 0xf0, 0x43, 0xb0, 0x3c, 0xa8, 0x4d, 0xde, 0xfd, 0x23, 0xa5, 0x0d,
 | 
				
			||||||
	0x7f, 0x4f, 0x69, 0xdd, 0xd0, 0xee, 0x7b, 0x45, 0x7b, 0xdf, 0xeb, 0x17, 0x00, 0xba, 0x2b, 0x2f,
 | 
						0x43, 0x87, 0xef, 0x15, 0x1f, 0x7d, 0xaf, 0x2d, 0xf0, 0x8e, 0xd0, 0xef, 0xfa, 0x81, 0x4b, 0x19,
 | 
				
			||||||
	0xba, 0x9a, 0x2c, 0xad, 0x5a, 0x0a, 0x8b, 0xef, 0xbc, 0x25, 0xcf, 0x4c, 0x77, 0x11, 0x5c, 0xac,
 | 
						0x6a, 0xe1, 0xa6, 0xcb, 0x48, 0x0b, 0x07, 0x54, 0xdd, 0xf0, 0x8a, 0xf0, 0xee, 0x05, 0x75, 0xe1,
 | 
				
			||||||
	0x94, 0x38, 0x3d, 0x99, 0xc6, 0x73, 0x0d, 0x7c, 0x39, 0x20, 0x57, 0xcd, 0xc9, 0x16, 0x98, 0x56,
 | 
						0x3b, 0x10, 0x2e, 0xf8, 0x19, 0x00, 0xc3, 0x3d, 0x91, 0x4f, 0x8a, 0x7e, 0x5a, 0xb7, 0x94, 0x00,
 | 
				
			||||||
	0x22, 0xc2, 0xd1, 0x37, 0x46, 0xcc, 0x83, 0x4a, 0x1b, 0x18, 0xbe, 0x4e, 0x26, 0xdc, 0xee, 0xd3,
 | 
						0xbe, 0x28, 0x2c, 0xb9, 0x9b, 0x86, 0xd3, 0xe3, 0x61, 0x25, 0xdf, 0x19, 0xc9, 0x34, 0x7e, 0xd3,
 | 
				
			||||||
	0x19, 0x15, 0x3a, 0xd7, 0x26, 0xea, 0x94, 0x60, 0x7d, 0x42, 0x3f, 0x68, 0xe0, 0xf3, 0x01, 0xb2,
 | 
						0xc0, 0xdb, 0x13, 0x35, 0xaa, 0xe6, 0xda, 0x01, 0x4b, 0x4a, 0x79, 0x34, 0x2f, 0xc6, 0x8c, 0x26,
 | 
				
			||||||
	0x4f, 0x6e, 0xe9, 0xaf, 0x20, 0xa1, 0xe6, 0x23, 0x2a, 0x0a, 0x5b, 0x1c, 0xb7, 0x53, 0x62, 0x64,
 | 
						0x52, 0x69, 0x13, 0x1d, 0x3b, 0xc8, 0x84, 0xbb, 0x63, 0x3a, 0xe3, 0x42, 0xe7, 0xeb, 0x85, 0x3a,
 | 
				
			||||||
	0xca, 0xf3, 0xbc, 0xa6, 0xb3, 0x9b, 0x7c, 0xb2, 0x6b, 0xa3, 0x8e, 0x42, 0x80, 0x88, 0xaf, 0x27,
 | 
						0x25, 0xd8, 0x98, 0xd0, 0x7f, 0x35, 0xf0, 0xe6, 0x04, 0xd9, 0xff, 0x7e, 0x87, 0xcf, 0x41, 0x5a,
 | 
				
			||||||
	0x1f, 0xa4, 0x98, 0x80, 0xca, 0xf6, 0xd5, 0x16, 0x82, 0xfd, 0x4c, 0x3c, 0xbf, 0xfc, 0xad, 0x82,
 | 
						0x35, 0x55, 0x5c, 0x14, 0xb6, 0x3a, 0x6f, 0x10, 0x45, 0x9f, 0xd5, 0x56, 0x78, 0x4d, 0xe7, 0xb7,
 | 
				
			||||||
	0x31, 0x1f, 0x30, 0x63, 0x3c, 0x81, 0x3a, 0x12, 0xb9, 0xf4, 0x64, 0x0a, 0xc4, 0xc5, 0x1b, 0xc1,
 | 
						0xa5, 0xcc, 0xd0, 0x46, 0x1d, 0x85, 0x00, 0x11, 0x9f, 0x69, 0xde, 0x7d, 0x09, 0x01, 0x55, 0x18,
 | 
				
			||||||
	0xff, 0x40, 0x42, 0x5e, 0x34, 0xb8, 0x32, 0x42, 0xf2, 0xf0, 0xe9, 0xcc, 0xad, 0x4e, 0x0a, 0x93,
 | 
						0xab, 0x2d, 0x02, 0xfb, 0x94, 0xf8, 0x41, 0xed, 0x03, 0x05, 0x63, 0x3e, 0xa1, 0x31, 0x79, 0x02,
 | 
				
			||||||
	0x9d, 0x34, 0x96, 0x4e, 0x5f, 0xbe, 0x7b, 0x16, 0x5d, 0x80, 0x59, 0x7b, 0xdc, 0x89, 0xe7, 0xdc,
 | 
						0x75, 0x24, 0x72, 0xf5, 0xe7, 0x24, 0x48, 0x89, 0x37, 0x82, 0xdf, 0x83, 0xb4, 0x5c, 0x83, 0xf0,
 | 
				
			||||||
	0xf2, 0x34, 0x8e, 0xe7, 0xee, 0x3b, 0xa8, 0xe3, 0xb9, 0xfb, 0x2f, 0xec, 0xbd, 0xdc, 0xf2, 0x88,
 | 
						0xd5, 0x0c, 0xc9, 0xd3, 0xfb, 0xb6, 0xb8, 0xbe, 0x28, 0x4c, 0xde, 0xa4, 0xb1, 0x76, 0xf6, 0xfb,
 | 
				
			||||||
	0xc2, 0xc7, 0x20, 0x2e, 0x0f, 0xc5, 0xd7, 0xf7, 0x62, 0x86, 0xcc, 0x2b, 0x13, 0xa2, 0x14, 0xf1,
 | 
						0xdf, 0xbf, 0xc6, 0x5f, 0xc0, 0x82, 0x3d, 0xef, 0xbb, 0xc0, 0xb9, 0xe5, 0x3e, 0x9d, 0xcf, 0x3d,
 | 
				
			||||||
	0xba, 0x20, 0x5e, 0x86, 0x4b, 0x63, 0x89, 0xed, 0xff, 0xc5, 0xb6, 0x3d, 0x82, 0xa7, 0x1a, 0x98,
 | 
						0xb6, 0x85, 0xe7, 0x73, 0x8f, 0xaf, 0xe5, 0x47, 0xb9, 0xe5, 0xe6, 0x85, 0x3f, 0x81, 0x94, 0xdc,
 | 
				
			||||||
	0x0e, 0x37, 0x04, 0xae, 0x8d, 0x83, 0x1f, 0x58, 0xf9, 0x9c, 0x39, 0x39, 0x50, 0x49, 0x59, 0x16,
 | 
						0x2e, 0xef, 0x3d, 0x8a, 0x19, 0x31, 0xbf, 0x5a, 0x10, 0xa5, 0x88, 0x37, 0x04, 0xf1, 0x4b, 0xb8,
 | 
				
			||||||
	0x52, 0x16, 0xe1, 0xc2, 0x08, 0x29, 0xe1, 0x2e, 0x95, 0xb7, 0x2e, 0xde, 0xea, 0x91, 0x8b, 0x5b,
 | 
						0x36, 0x97, 0xd8, 0xfe, 0x41, 0x8c, 0xe8, 0x8f, 0xf0, 0x4c, 0x03, 0x4b, 0xd1, 0x84, 0xc0, 0xd7,
 | 
				
			||||||
	0x5d, 0xbb, 0xbc, 0xd5, 0xb5, 0x37, 0xb7, 0xba, 0xf6, 0xf4, 0x4e, 0x8f, 0x5c, 0xde, 0xe9, 0x91,
 | 
						0xf3, 0xe0, 0x27, 0xf6, 0x44, 0xd1, 0x5c, 0x1c, 0xa8, 0xa4, 0xbc, 0x14, 0x52, 0x56, 0xe1, 0x8b,
 | 
				
			||||||
	0x57, 0x77, 0x7a, 0xe4, 0xaf, 0xde, 0xd3, 0xc5, 0x41, 0x8a, 0x75, 0x54, 0xa5, 0x12, 0xee, 0x5f,
 | 
						0x19, 0x52, 0xa2, 0x59, 0xaa, 0xed, 0x5c, 0xde, 0xe9, 0xb1, 0xcb, 0x7b, 0x5d, 0xbb, 0xba, 0xd7,
 | 
				
			||||||
	0x09, 0x28, 0x46, 0xab, 0x9a, 0x10, 0x3f, 0xb5, 0xdf, 0x7d, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xf4,
 | 
						0xb5, 0xbf, 0xee, 0x75, 0xed, 0x97, 0x07, 0x3d, 0x76, 0xf5, 0xa0, 0xc7, 0xfe, 0x78, 0xd0, 0x63,
 | 
				
			||||||
	0x79, 0x11, 0x40, 0x9a, 0x08, 0x00, 0x00,
 | 
						0x5f, 0x8f, 0xee, 0x3b, 0x0e, 0x52, 0x69, 0xa3, 0x06, 0x95, 0x70, 0xdf, 0x49, 0x40, 0xd1, 0x5a,
 | 
				
			||||||
 | 
						0x8d, 0xb4, 0xf8, 0x3e, 0x6f, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0xea, 0x07, 0xa4, 0x14, 0xcf,
 | 
				
			||||||
 | 
						0x08, 0x00, 0x00,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
					// Reference imports to suppress errors if they are not otherwise used.
 | 
				
			||||||
@ -1008,7 +1012,17 @@ func (m *QueryDepositsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
 | 
				
			|||||||
			i = encodeVarintQuery(dAtA, i, uint64(size))
 | 
								i = encodeVarintQuery(dAtA, i, uint64(size))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		i--
 | 
							i--
 | 
				
			||||||
		dAtA[i] = 0x1a
 | 
							dAtA[i] = 0x22
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if m.ValueInStakedTokens {
 | 
				
			||||||
 | 
							i--
 | 
				
			||||||
 | 
							if m.ValueInStakedTokens {
 | 
				
			||||||
 | 
								dAtA[i] = 1
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								dAtA[i] = 0
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							i--
 | 
				
			||||||
 | 
							dAtA[i] = 0x18
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(m.Denom) > 0 {
 | 
						if len(m.Denom) > 0 {
 | 
				
			||||||
		i -= len(m.Denom)
 | 
							i -= len(m.Denom)
 | 
				
			||||||
@ -1262,6 +1276,9 @@ func (m *QueryDepositsRequest) Size() (n int) {
 | 
				
			|||||||
	if l > 0 {
 | 
						if l > 0 {
 | 
				
			||||||
		n += 1 + l + sovQuery(uint64(l))
 | 
							n += 1 + l + sovQuery(uint64(l))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if m.ValueInStakedTokens {
 | 
				
			||||||
 | 
							n += 2
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if m.Pagination != nil {
 | 
						if m.Pagination != nil {
 | 
				
			||||||
		l = m.Pagination.Size()
 | 
							l = m.Pagination.Size()
 | 
				
			||||||
		n += 1 + l + sovQuery(uint64(l))
 | 
							n += 1 + l + sovQuery(uint64(l))
 | 
				
			||||||
@ -2114,6 +2131,26 @@ func (m *QueryDepositsRequest) Unmarshal(dAtA []byte) error {
 | 
				
			|||||||
			m.Denom = string(dAtA[iNdEx:postIndex])
 | 
								m.Denom = string(dAtA[iNdEx:postIndex])
 | 
				
			||||||
			iNdEx = postIndex
 | 
								iNdEx = postIndex
 | 
				
			||||||
		case 3:
 | 
							case 3:
 | 
				
			||||||
 | 
								if wireType != 0 {
 | 
				
			||||||
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field ValueInStakedTokens", wireType)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								var v int
 | 
				
			||||||
 | 
								for shift := uint(0); ; shift += 7 {
 | 
				
			||||||
 | 
									if shift >= 64 {
 | 
				
			||||||
 | 
										return ErrIntOverflowQuery
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if iNdEx >= l {
 | 
				
			||||||
 | 
										return io.ErrUnexpectedEOF
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									b := dAtA[iNdEx]
 | 
				
			||||||
 | 
									iNdEx++
 | 
				
			||||||
 | 
									v |= int(b&0x7F) << shift
 | 
				
			||||||
 | 
									if b < 0x80 {
 | 
				
			||||||
 | 
										break
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								m.ValueInStakedTokens = bool(v != 0)
 | 
				
			||||||
 | 
							case 4:
 | 
				
			||||||
			if wireType != 2 {
 | 
								if wireType != 2 {
 | 
				
			||||||
				return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
 | 
									return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user