diff --git a/codec/amino_codec_test.go b/codec/amino_codec_test.go
index 90008fd51fb..1863a6cb51f 100644
--- a/codec/amino_codec_test.go
+++ b/codec/amino_codec_test.go
@@ -120,7 +120,7 @@ func TestAminoCodecUnpackAnyFails(t *testing.T) {
func TestAminoCodecFullDecodeAndEncode(t *testing.T) {
// This tx comes from https://github.com/cosmos/cosmos-sdk/issues/8117.
- txSigned := `{"type":"cosmos-sdk/StdTx","value":{"msg":[{"type":"cosmos-sdk/MsgCreateValidator","value":{"description":{"moniker":"fulltest","identity":"satoshi","website":"example.com","details":"example inc"},"commission":{"rate":"0.500000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"min_self_delegation":"1000000","delegator_address":"cosmos14pt0q5cwf38zt08uu0n6yrstf3rndzr5057jys","validator_address":"cosmosvaloper14pt0q5cwf38zt08uu0n6yrstf3rndzr52q28gr","pubkey":{"type":"tendermint/PubKeyEd25519","value":"CYrOiM3HtS7uv1B1OAkknZnFYSRpQYSYII8AtMMtev0="},"value":{"denom":"umuon","amount":"700000000"}}}],"fee":{"amount":[{"denom":"umuon","amount":"6000"}],"gas":"160000"},"signatures":[{"pub_key":{"type":"tendermint/PubKeySecp256k1","value":"AwAOXeWgNf1FjMaayrSnrOOKz+Fivr6DiI/i0x0sZCHw"},"signature":"RcnfS/u2yl7uIShTrSUlDWvsXo2p2dYu6WJC8VDVHMBLEQZWc8bsINSCjOnlsIVkUNNe1q/WCA9n3Gy1+0zhYA=="}],"memo":"","timeout_height":"0"}}`
+ txSigned := `{"type":"cosmos-sdk/StdTx","value":{"msg":[{"type":"cosmos-sdk/MsgCreateValidator","value":{"description":{"moniker":"fulltest","identity":"satoshi","website":"example.com","details":"example inc"},"commission":{"rate":"0.500000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"delegator_address":"cosmos14pt0q5cwf38zt08uu0n6yrstf3rndzr5057jys","validator_address":"cosmosvaloper14pt0q5cwf38zt08uu0n6yrstf3rndzr52q28gr","pubkey":{"type":"tendermint/PubKeyEd25519","value":"CYrOiM3HtS7uv1B1OAkknZnFYSRpQYSYII8AtMMtev0="},"value":{"denom":"umuon","amount":"700000000"}}}],"fee":{"amount":[{"denom":"umuon","amount":"6000"}],"gas":"160000"},"signatures":[{"pub_key":{"type":"tendermint/PubKeySecp256k1","value":"AwAOXeWgNf1FjMaayrSnrOOKz+Fivr6DiI/i0x0sZCHw"},"signature":"RcnfS/u2yl7uIShTrSUlDWvsXo2p2dYu6WJC8VDVHMBLEQZWc8bsINSCjOnlsIVkUNNe1q/WCA9n3Gy1+0zhYA=="}],"memo":"","timeout_height":"0"}}`
legacyCdc := simapp.MakeTestEncodingConfig().Amino
var tx legacytx.StdTx
err := legacyCdc.UnmarshalJSON([]byte(txSigned), &tx)
diff --git a/docs/core/proto-docs.md b/docs/core/proto-docs.md
index 535020d37b3..e69cad6f4a9 100644
--- a/docs/core/proto-docs.md
+++ b/docs/core/proto-docs.md
@@ -473,11 +473,13 @@
- [Description](#cosmos.staking.v1beta1.Description)
- [HistoricalInfo](#cosmos.staking.v1beta1.HistoricalInfo)
- [Params](#cosmos.staking.v1beta1.Params)
+ - [PendingTokenizeShareAuthorizations](#cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations)
- [Pool](#cosmos.staking.v1beta1.Pool)
- [Redelegation](#cosmos.staking.v1beta1.Redelegation)
- [RedelegationEntry](#cosmos.staking.v1beta1.RedelegationEntry)
- [RedelegationEntryResponse](#cosmos.staking.v1beta1.RedelegationEntryResponse)
- [RedelegationResponse](#cosmos.staking.v1beta1.RedelegationResponse)
+ - [TokenizeShareRecord](#cosmos.staking.v1beta1.TokenizeShareRecord)
- [UnbondingDelegation](#cosmos.staking.v1beta1.UnbondingDelegation)
- [UnbondingDelegationEntry](#cosmos.staking.v1beta1.UnbondingDelegationEntry)
- [ValAddresses](#cosmos.staking.v1beta1.ValAddresses)
@@ -486,12 +488,15 @@
- [BondStatus](#cosmos.staking.v1beta1.BondStatus)
- [InfractionType](#cosmos.staking.v1beta1.InfractionType)
+ - [TokenizeShareLockStatus](#cosmos.staking.v1beta1.TokenizeShareLockStatus)
- [cosmos/staking/v1beta1/genesis.proto](#cosmos/staking/v1beta1/genesis.proto)
- [GenesisState](#cosmos.staking.v1beta1.GenesisState)
- [LastValidatorPower](#cosmos.staking.v1beta1.LastValidatorPower)
- [cosmos/staking/v1beta1/query.proto](#cosmos/staking/v1beta1/query.proto)
+ - [QueryAllTokenizeShareRecordsRequest](#cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest)
+ - [QueryAllTokenizeShareRecordsResponse](#cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse)
- [QueryDelegationRequest](#cosmos.staking.v1beta1.QueryDelegationRequest)
- [QueryDelegationResponse](#cosmos.staking.v1beta1.QueryDelegationResponse)
- [QueryDelegatorDelegationsRequest](#cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest)
@@ -504,12 +509,26 @@
- [QueryDelegatorValidatorsResponse](#cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse)
- [QueryHistoricalInfoRequest](#cosmos.staking.v1beta1.QueryHistoricalInfoRequest)
- [QueryHistoricalInfoResponse](#cosmos.staking.v1beta1.QueryHistoricalInfoResponse)
+ - [QueryLastTokenizeShareRecordIdRequest](#cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest)
+ - [QueryLastTokenizeShareRecordIdResponse](#cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse)
- [QueryParamsRequest](#cosmos.staking.v1beta1.QueryParamsRequest)
- [QueryParamsResponse](#cosmos.staking.v1beta1.QueryParamsResponse)
- [QueryPoolRequest](#cosmos.staking.v1beta1.QueryPoolRequest)
- [QueryPoolResponse](#cosmos.staking.v1beta1.QueryPoolResponse)
- [QueryRedelegationsRequest](#cosmos.staking.v1beta1.QueryRedelegationsRequest)
- [QueryRedelegationsResponse](#cosmos.staking.v1beta1.QueryRedelegationsResponse)
+ - [QueryTokenizeShareLockInfo](#cosmos.staking.v1beta1.QueryTokenizeShareLockInfo)
+ - [QueryTokenizeShareLockInfoResponse](#cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse)
+ - [QueryTokenizeShareRecordByDenomRequest](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest)
+ - [QueryTokenizeShareRecordByDenomResponse](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse)
+ - [QueryTokenizeShareRecordByIdRequest](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest)
+ - [QueryTokenizeShareRecordByIdResponse](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse)
+ - [QueryTokenizeShareRecordsOwnedRequest](#cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest)
+ - [QueryTokenizeShareRecordsOwnedResponse](#cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse)
+ - [QueryTotalLiquidStaked](#cosmos.staking.v1beta1.QueryTotalLiquidStaked)
+ - [QueryTotalLiquidStakedResponse](#cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse)
+ - [QueryTotalTokenizeSharedAssetsRequest](#cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest)
+ - [QueryTotalTokenizeSharedAssetsResponse](#cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse)
- [QueryUnbondingDelegationRequest](#cosmos.staking.v1beta1.QueryUnbondingDelegationRequest)
- [QueryUnbondingDelegationResponse](#cosmos.staking.v1beta1.QueryUnbondingDelegationResponse)
- [QueryValidatorDelegationsRequest](#cosmos.staking.v1beta1.QueryValidatorDelegationsRequest)
@@ -526,14 +545,30 @@
- [cosmos/staking/v1beta1/tx.proto](#cosmos/staking/v1beta1/tx.proto)
- [MsgBeginRedelegate](#cosmos.staking.v1beta1.MsgBeginRedelegate)
- [MsgBeginRedelegateResponse](#cosmos.staking.v1beta1.MsgBeginRedelegateResponse)
+ - [MsgCancelUnbondingDelegation](#cosmos.staking.v1beta1.MsgCancelUnbondingDelegation)
+ - [MsgCancelUnbondingDelegationResponse](#cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse)
- [MsgCreateValidator](#cosmos.staking.v1beta1.MsgCreateValidator)
- [MsgCreateValidatorResponse](#cosmos.staking.v1beta1.MsgCreateValidatorResponse)
- [MsgDelegate](#cosmos.staking.v1beta1.MsgDelegate)
- [MsgDelegateResponse](#cosmos.staking.v1beta1.MsgDelegateResponse)
+ - [MsgDisableTokenizeShares](#cosmos.staking.v1beta1.MsgDisableTokenizeShares)
+ - [MsgDisableTokenizeSharesResponse](#cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse)
- [MsgEditValidator](#cosmos.staking.v1beta1.MsgEditValidator)
- [MsgEditValidatorResponse](#cosmos.staking.v1beta1.MsgEditValidatorResponse)
+ - [MsgEnableTokenizeShares](#cosmos.staking.v1beta1.MsgEnableTokenizeShares)
+ - [MsgEnableTokenizeSharesResponse](#cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse)
+ - [MsgRedeemTokensForShares](#cosmos.staking.v1beta1.MsgRedeemTokensForShares)
+ - [MsgRedeemTokensForSharesResponse](#cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse)
+ - [MsgTokenizeShares](#cosmos.staking.v1beta1.MsgTokenizeShares)
+ - [MsgTokenizeSharesResponse](#cosmos.staking.v1beta1.MsgTokenizeSharesResponse)
+ - [MsgTransferTokenizeShareRecord](#cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord)
+ - [MsgTransferTokenizeShareRecordResponse](#cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse)
+ - [MsgUnbondValidator](#cosmos.staking.v1beta1.MsgUnbondValidator)
+ - [MsgUnbondValidatorResponse](#cosmos.staking.v1beta1.MsgUnbondValidatorResponse)
- [MsgUndelegate](#cosmos.staking.v1beta1.MsgUndelegate)
- [MsgUndelegateResponse](#cosmos.staking.v1beta1.MsgUndelegateResponse)
+ - [MsgValidatorBond](#cosmos.staking.v1beta1.MsgValidatorBond)
+ - [MsgValidatorBondResponse](#cosmos.staking.v1beta1.MsgValidatorBondResponse)
- [Msg](#cosmos.staking.v1beta1.Msg)
@@ -6656,6 +6691,7 @@ validator.
| `delegator_address` | [string](#string) | | delegator_address is the bech32-encoded address of the delegator. |
| `validator_address` | [string](#string) | | validator_address is the bech32-encoded address of the validator. |
| `shares` | [string](#string) | | shares define the delegation shares received. |
+| `validator_bond` | [bool](#bool) | | has this delegation been marked as a validator self bond. |
@@ -6730,6 +6766,26 @@ Params defines the parameters for the staking module.
| `max_entries` | [uint32](#uint32) | | max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). |
| `historical_entries` | [uint32](#uint32) | | historical_entries is the number of historical entries to persist. |
| `bond_denom` | [string](#string) | | bond_denom defines the bondable coin denomination. |
+| `min_commission_rate` | [string](#string) | | min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators |
+| `validator_bond_factor` | [string](#string) | | validator_bond_factor is required as a safety check for tokenizing shares and delegations from liquid staking providers |
+| `global_liquid_staking_cap` | [string](#string) | | global_liquid_staking_cap represents a cap on the portion of stake that comes from liquid staking providers |
+| `validator_liquid_staking_cap` | [string](#string) | | validator_liquid_staking_cap represents a cap on the portion of stake that comes from liquid staking providers for a specific validator |
+
+
+
+
+
+
+
+
+### PendingTokenizeShareAuthorizations
+PendingTokenizeShareAuthorizations stores a list of addresses that have their
+tokenize share enablement in progress
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `addresses` | [string](#string) | repeated | |
@@ -6830,6 +6886,24 @@ responses.
+
+
+### TokenizeShareRecord
+TokenizeShareRecord represents a tokenized delegation
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `id` | [uint64](#uint64) | | |
+| `owner` | [string](#string) | | |
+| `module_account` | [string](#string) | | module account take the role of delegator |
+| `validator` | [string](#string) | | validator delegated to for tokenize share record creation |
+
+
+
+
+
+
### UnbondingDelegation
@@ -6910,9 +6984,10 @@ multiplied by exchange rate.
| `unbonding_height` | [int64](#int64) | | unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. |
| `unbonding_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. |
| `commission` | [Commission](#cosmos.staking.v1beta1.Commission) | | commission defines the commission parameters. |
-| `min_self_delegation` | [string](#string) | | min_self_delegation is the validator's self declared minimum self delegation. |
| `unbonding_on_hold_ref_count` | [int64](#int64) | | strictly positive if this validator's unbonding has been stopped by external modules |
| `unbonding_ids` | [uint64](#uint64) | repeated | list of unbonding ids, each uniquely identifing an unbonding of this validator |
+| `total_validator_bond_shares` | [string](#string) | | Number of shares self bonded from the validator |
+| `total_liquid_shares` | [string](#string) | | Total number of shares either tokenized or owned by a liquid staking provider |
@@ -6962,6 +7037,20 @@ InfractionType indicates the infraction type a validator commited.
| INFRACTION_TYPE_DOWNTIME | 2 | DOWNTIME defines a validator that missed signing too many blocks. |
+
+
+
+### TokenizeShareLockStatus
+TokenizeShareLockStatus indicates whether the address is able to tokenize shares
+
+| Name | Number | Description |
+| ---- | ------ | ----------- |
+| TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED | 0 | UNSPECIFIED defines an empty tokenize share lock status |
+| TOKENIZE_SHARE_LOCK_STATUS_LOCKED | 1 | LOCKED indicates the account is locked and cannot tokenize shares |
+| TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED | 2 | UNLOCKED indicates the account is unlocked and can tokenize shares |
+| TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING | 3 | LOCK_EXPIRING indicates the account is unable to tokenize shares, but will be able to tokenize shortly (after 1 unbonding period) |
+
+
@@ -6993,6 +7082,8 @@ GenesisState defines the staking module's genesis state.
| `unbonding_delegations` | [UnbondingDelegation](#cosmos.staking.v1beta1.UnbondingDelegation) | repeated | unbonding_delegations defines the unbonding delegations active at genesis. |
| `redelegations` | [Redelegation](#cosmos.staking.v1beta1.Redelegation) | repeated | redelegations defines the redelegations active at genesis. |
| `exported` | [bool](#bool) | | |
+| `tokenize_share_records` | [TokenizeShareRecord](#cosmos.staking.v1beta1.TokenizeShareRecord) | repeated | store tokenize share records to provide reward to record owners |
+| `last_tokenize_share_record_id` | [uint64](#uint64) | | last tokenize share record id, used for next share record id calculation |
@@ -7031,6 +7122,33 @@ LastValidatorPower required for validator set update logic.
+
+
+### QueryAllTokenizeShareRecordsRequest
+QueryAllTokenizeShareRecordsRequest is request type for the
+Query/QueryAllTokenizeShareRecords RPC method.
+
+
+
+
+
+
+
+
+### QueryAllTokenizeShareRecordsResponse
+QueryAllTokenizeShareRecordsResponse is response type for the
+Query/QueryAllTokenizeShareRecords RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `records` | [TokenizeShareRecord](#cosmos.staking.v1beta1.TokenizeShareRecord) | repeated | |
+
+
+
+
+
+
### QueryDelegationRequest
@@ -7156,7 +7274,7 @@ Query/DelegatorValidator RPC method.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| `validator` | [Validator](#cosmos.staking.v1beta1.Validator) | | validator defines the the validator info. |
+| `validator` | [Validator](#cosmos.staking.v1beta1.Validator) | | validator defines the validator info. |
@@ -7189,7 +7307,7 @@ Query/DelegatorValidators RPC method.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| `validators` | [Validator](#cosmos.staking.v1beta1.Validator) | repeated | validators defines the the validators' info of a delegator. |
+| `validators` | [Validator](#cosmos.staking.v1beta1.Validator) | repeated | validators defines the validators' info of a delegator. |
| `pagination` | [cosmos.base.query.v1beta1.PageResponse](#cosmos.base.query.v1beta1.PageResponse) | | pagination defines the pagination in the response. |
@@ -7229,6 +7347,33 @@ method.
+
+
+### QueryLastTokenizeShareRecordIdRequest
+QueryLastTokenizeShareRecordIdRequest is request type for the
+Query/QueryLastTokenizeShareRecordId RPC method.
+
+
+
+
+
+
+
+
+### QueryLastTokenizeShareRecordIdResponse
+QueryLastTokenizeShareRecordIdResponse is response type for the
+Query/QueryLastTokenizeShareRecordId RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `id` | [uint64](#uint64) | | |
+
+
+
+
+
+
### QueryParamsRequest
@@ -7315,6 +7460,189 @@ method.
+
+
+### QueryTokenizeShareLockInfo
+QueryTokenizeShareLockInfo queries the tokenize share lock information
+associated with given account
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `address` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareLockInfoResponse
+QueryTokenizeShareLockInfoResponse is the response from the
+QueryTokenizeShareLockInfo query
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `status` | [string](#string) | | |
+| `expiration_time` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareRecordByDenomRequest
+QueryTokenizeShareRecordByDenomRequest is request type for the
+Query/QueryTokenizeShareRecordByDenom RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `denom` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareRecordByDenomResponse
+QueryTokenizeShareRecordByDenomResponse is response type for the
+Query/QueryTokenizeShareRecordByDenom RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `record` | [TokenizeShareRecord](#cosmos.staking.v1beta1.TokenizeShareRecord) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareRecordByIdRequest
+QueryTokenizeShareRecordByIdRequest is request type for the
+Query/QueryTokenizeShareRecordById RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `id` | [uint64](#uint64) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareRecordByIdResponse
+QueryTokenizeShareRecordByIdRequest is response type for the
+Query/QueryTokenizeShareRecordById RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `record` | [TokenizeShareRecord](#cosmos.staking.v1beta1.TokenizeShareRecord) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareRecordsOwnedRequest
+QueryTokenizeShareRecordsOwnedRequest is request type for the
+Query/QueryTokenizeShareRecordsOwned RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `owner` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### QueryTokenizeShareRecordsOwnedResponse
+QueryTokenizeShareRecordsOwnedResponse is response type for the
+Query/QueryTokenizeShareRecordsOwned RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `records` | [TokenizeShareRecord](#cosmos.staking.v1beta1.TokenizeShareRecord) | repeated | |
+
+
+
+
+
+
+
+
+### QueryTotalLiquidStaked
+QueryQueryTotalLiquidStakedRequest is request type for the
+Query/QueryQueryTotalLiquidStaked RPC method.
+
+
+
+
+
+
+
+
+### QueryTotalLiquidStakedResponse
+QueryQueryTotalLiquidStakedResponse is response type for the
+Query/QueryQueryTotalLiquidStaked RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `tokens` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### QueryTotalTokenizeSharedAssetsRequest
+QueryTotalTokenizeSharedAssetsRequest is request type for the
+Query/QueryTotalTokenizeSharedAssets RPC method.
+
+
+
+
+
+
+
+
+### QueryTotalTokenizeSharedAssetsResponse
+QueryTotalTokenizeSharedAssetsResponse is response type for the
+Query/QueryTotalTokenizeSharedAssets RPC method.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `value` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | |
+
+
+
+
+
+
### QueryUnbondingDelegationRequest
@@ -7405,7 +7733,7 @@ QueryValidatorResponse is response type for the Query/Validator RPC method
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
-| `validator` | [Validator](#cosmos.staking.v1beta1.Validator) | | validator defines the the validator info. |
+| `validator` | [Validator](#cosmos.staking.v1beta1.Validator) | | validator defines the validator info. |
@@ -7505,6 +7833,14 @@ Query defines the gRPC querier service.
| `HistoricalInfo` | [QueryHistoricalInfoRequest](#cosmos.staking.v1beta1.QueryHistoricalInfoRequest) | [QueryHistoricalInfoResponse](#cosmos.staking.v1beta1.QueryHistoricalInfoResponse) | HistoricalInfo queries the historical info for given height. | GET|/cosmos/staking/v1beta1/historical_info/{height}|
| `Pool` | [QueryPoolRequest](#cosmos.staking.v1beta1.QueryPoolRequest) | [QueryPoolResponse](#cosmos.staking.v1beta1.QueryPoolResponse) | Pool queries the pool info. | GET|/cosmos/staking/v1beta1/pool|
| `Params` | [QueryParamsRequest](#cosmos.staking.v1beta1.QueryParamsRequest) | [QueryParamsResponse](#cosmos.staking.v1beta1.QueryParamsResponse) | Parameters queries the staking parameters. | GET|/cosmos/staking/v1beta1/params|
+| `TokenizeShareRecordById` | [QueryTokenizeShareRecordByIdRequest](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest) | [QueryTokenizeShareRecordByIdResponse](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse) | Query for individual tokenize share record information by share by id | |
+| `TokenizeShareRecordByDenom` | [QueryTokenizeShareRecordByDenomRequest](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest) | [QueryTokenizeShareRecordByDenomResponse](#cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse) | Query for individual tokenize share record information by share denom | |
+| `TokenizeShareRecordsOwned` | [QueryTokenizeShareRecordsOwnedRequest](#cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest) | [QueryTokenizeShareRecordsOwnedResponse](#cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse) | Query tokenize share records by address | |
+| `AllTokenizeShareRecords` | [QueryAllTokenizeShareRecordsRequest](#cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest) | [QueryAllTokenizeShareRecordsResponse](#cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse) | Query for all tokenize share records | |
+| `LastTokenizeShareRecordId` | [QueryLastTokenizeShareRecordIdRequest](#cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest) | [QueryLastTokenizeShareRecordIdResponse](#cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse) | Query for last tokenize share record id | |
+| `TotalTokenizeSharedAssets` | [QueryTotalTokenizeSharedAssetsRequest](#cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest) | [QueryTotalTokenizeSharedAssetsResponse](#cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse) | Query for total tokenized staked assets | |
+| `TotalLiquidStaked` | [QueryTotalLiquidStaked](#cosmos.staking.v1beta1.QueryTotalLiquidStaked) | [QueryTotalLiquidStakedResponse](#cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse) | Query for total liquid staked (including tokenized shares or owned by an liquid staking provider) | |
+| `TokenizeShareLockInfo` | [QueryTokenizeShareLockInfo](#cosmos.staking.v1beta1.QueryTokenizeShareLockInfo) | [QueryTokenizeShareLockInfoResponse](#cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse) | Query tokenize share locks | |
@@ -7551,6 +7887,38 @@ MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type.
+
+
+### MsgCancelUnbondingDelegation
+MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator
+
+Since: cosmos-sdk 0.46
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `delegator_address` | [string](#string) | | |
+| `validator_address` | [string](#string) | | |
+| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | amount is always less than or equal to unbonding delegation entry balance |
+| `creation_height` | [int64](#int64) | | creation_height is the height which the unbonding took place. |
+
+
+
+
+
+
+
+
+### MsgCancelUnbondingDelegationResponse
+MsgCancelUnbondingDelegationResponse
+
+Since: cosmos-sdk 0.46
+
+
+
+
+
+
### MsgCreateValidator
@@ -7561,7 +7929,6 @@ MsgCreateValidator defines a SDK message for creating a new validator.
| ----- | ---- | ----- | ----------- |
| `description` | [Description](#cosmos.staking.v1beta1.Description) | | |
| `commission` | [CommissionRates](#cosmos.staking.v1beta1.CommissionRates) | | |
-| `min_self_delegation` | [string](#string) | | |
| `delegator_address` | [string](#string) | | |
| `validator_address` | [string](#string) | | |
| `pubkey` | [google.protobuf.Any](#google.protobuf.Any) | | |
@@ -7610,6 +7977,31 @@ MsgDelegateResponse defines the Msg/Delegate response type.
+
+
+### MsgDisableTokenizeShares
+MsgDisableTokenizeShares prevents the tokenization of shares for a given address
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `delegator_address` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### MsgDisableTokenizeSharesResponse
+MsgDisableTokenizeSharesResponse defines the Msg/DisableTokenizeShares response type.
+
+
+
+
+
+
### MsgEditValidator
@@ -7621,7 +8013,6 @@ MsgEditValidator defines a SDK message for editing an existing validator.
| `description` | [Description](#cosmos.staking.v1beta1.Description) | | |
| `validator_address` | [string](#string) | | |
| `commission_rate` | [string](#string) | | We pass a reference to the new commission rate and min self delegation as it's not mandatory to update. If not updated, the deserialized rate will be zero with no way to distinguish if an update was intended. REF: #2373 |
-| `min_self_delegation` | [string](#string) | | |
@@ -7638,6 +8029,153 @@ MsgEditValidatorResponse defines the Msg/EditValidator response type.
+
+
+### MsgEnableTokenizeShares
+MsgEnableTokenizeShares re-enables tokenization of shares for a given address
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `delegator_address` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### MsgEnableTokenizeSharesResponse
+MsgEnableTokenizeSharesResponse defines the Msg/EnableTokenizeShares response type.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `completion_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | |
+
+
+
+
+
+
+
+
+### MsgRedeemTokensForShares
+MsgRedeemTokensForShares redeems a tokenized share back into a native delegation
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `delegator_address` | [string](#string) | | |
+| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | |
+
+
+
+
+
+
+
+
+### MsgRedeemTokensForSharesResponse
+MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares response type.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | |
+
+
+
+
+
+
+
+
+### MsgTokenizeShares
+MsgTokenizeShares tokenizes a delegation
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `delegator_address` | [string](#string) | | |
+| `validator_address` | [string](#string) | | |
+| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | |
+| `tokenized_share_owner` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### MsgTokenizeSharesResponse
+MsgTokenizeSharesResponse defines the Msg/MsgTokenizeShares response type.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | |
+
+
+
+
+
+
+
+
+### MsgTransferTokenizeShareRecord
+MsgTransferTokenizeShareRecord transfer a tokenize share record
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `tokenize_share_record_id` | [uint64](#uint64) | | |
+| `sender` | [string](#string) | | |
+| `new_owner` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### MsgTransferTokenizeShareRecordResponse
+MsgTransferTokenizeShareRecordResponse defines the Msg/MsgTransferTokenizeShareRecord response type.
+
+
+
+
+
+
+
+
+### MsgUnbondValidator
+MsgUnbondValidator defines a method for performing the status transition for
+a validator from bonded to unbonded
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `validator_address` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### MsgUnbondValidatorResponse
+MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type.
+
+
+
+
+
+
### MsgUndelegate
@@ -7670,6 +8208,33 @@ MsgUndelegateResponse defines the Msg/Undelegate response type.
+
+
+
+### MsgValidatorBond
+MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins
+from a delegator to a validator.
+
+
+| Field | Type | Label | Description |
+| ----- | ---- | ----- | ----------- |
+| `delegator_address` | [string](#string) | | |
+| `validator_address` | [string](#string) | | |
+
+
+
+
+
+
+
+
+### MsgValidatorBondResponse
+MsgValidatorBondResponse defines the Msg/ValidatorBond response type.
+
+
+
+
+
@@ -7689,6 +8254,16 @@ Msg defines the staking Msg service.
| `Delegate` | [MsgDelegate](#cosmos.staking.v1beta1.MsgDelegate) | [MsgDelegateResponse](#cosmos.staking.v1beta1.MsgDelegateResponse) | Delegate defines a method for performing a delegation of coins from a delegator to a validator. | |
| `BeginRedelegate` | [MsgBeginRedelegate](#cosmos.staking.v1beta1.MsgBeginRedelegate) | [MsgBeginRedelegateResponse](#cosmos.staking.v1beta1.MsgBeginRedelegateResponse) | BeginRedelegate defines a method for performing a redelegation of coins from a delegator and source validator to a destination validator. | |
| `Undelegate` | [MsgUndelegate](#cosmos.staking.v1beta1.MsgUndelegate) | [MsgUndelegateResponse](#cosmos.staking.v1beta1.MsgUndelegateResponse) | Undelegate defines a method for performing an undelegation from a delegate and a validator. | |
+| `UnbondValidator` | [MsgUnbondValidator](#cosmos.staking.v1beta1.MsgUnbondValidator) | [MsgUnbondValidatorResponse](#cosmos.staking.v1beta1.MsgUnbondValidatorResponse) | UnbondValidator defines a method for performing the status transition for a validator from bonded to unbonded | |
+| `CancelUnbondingDelegation` | [MsgCancelUnbondingDelegation](#cosmos.staking.v1beta1.MsgCancelUnbondingDelegation) | [MsgCancelUnbondingDelegationResponse](#cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse) | CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation and delegate back to previous validator.
+
+Since: cosmos-sdk 0.46 | |
+| `TokenizeShares` | [MsgTokenizeShares](#cosmos.staking.v1beta1.MsgTokenizeShares) | [MsgTokenizeSharesResponse](#cosmos.staking.v1beta1.MsgTokenizeSharesResponse) | TokenizeShares defines a method for tokenizing shares from a validator. | |
+| `RedeemTokensForShares` | [MsgRedeemTokensForShares](#cosmos.staking.v1beta1.MsgRedeemTokensForShares) | [MsgRedeemTokensForSharesResponse](#cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse) | RedeemTokensForShares defines a method for redeeming tokens from a validator for shares. | |
+| `TransferTokenizeShareRecord` | [MsgTransferTokenizeShareRecord](#cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord) | [MsgTransferTokenizeShareRecordResponse](#cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse) | TransferTokenizeShareRecord defines a method to transfer ownership of TokenizeShareRecord | |
+| `DisableTokenizeShares` | [MsgDisableTokenizeShares](#cosmos.staking.v1beta1.MsgDisableTokenizeShares) | [MsgDisableTokenizeSharesResponse](#cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse) | DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake | |
+| `EnableTokenizeShares` | [MsgEnableTokenizeShares](#cosmos.staking.v1beta1.MsgEnableTokenizeShares) | [MsgEnableTokenizeSharesResponse](#cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse) | EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake after it has been disabled | |
+| `ValidatorBond` | [MsgValidatorBond](#cosmos.staking.v1beta1.MsgValidatorBond) | [MsgValidatorBondResponse](#cosmos.staking.v1beta1.MsgValidatorBondResponse) | ValidatorBond defines a method for performing a validator self-bond | |
diff --git a/proto/cosmos/base/store/v1beta1/listening.proto b/proto/cosmos/base/store/v1beta1/listening.proto
index 753f7c16551..d6f7128931e 100644
--- a/proto/cosmos/base/store/v1beta1/listening.proto
+++ b/proto/cosmos/base/store/v1beta1/listening.proto
@@ -20,15 +20,15 @@ message StoreKVPair {
// BlockMetadata contains all the abci event data of a block
// the file streamer dump them into files together with the state changes.
message BlockMetadata {
- // DeliverTx encapulate deliver tx request and response.
- message DeliverTx {
- tendermint.abci.RequestDeliverTx request = 1;
- tendermint.abci.ResponseDeliverTx response = 2;
- }
- tendermint.abci.RequestBeginBlock request_begin_block = 1;
- tendermint.abci.ResponseBeginBlock response_begin_block = 2;
- repeated DeliverTx deliver_txs = 3;
- tendermint.abci.RequestEndBlock request_end_block = 4;
- tendermint.abci.ResponseEndBlock response_end_block = 5;
- tendermint.abci.ResponseCommit response_commit = 6;
+ // DeliverTx encapulate deliver tx request and response.
+ message DeliverTx {
+ tendermint.abci.RequestDeliverTx request = 1;
+ tendermint.abci.ResponseDeliverTx response = 2;
+ }
+ tendermint.abci.RequestBeginBlock request_begin_block = 1;
+ tendermint.abci.ResponseBeginBlock response_begin_block = 2;
+ repeated DeliverTx deliver_txs = 3;
+ tendermint.abci.RequestEndBlock request_end_block = 4;
+ tendermint.abci.ResponseEndBlock response_end_block = 5;
+ tendermint.abci.ResponseCommit response_commit = 6;
}
diff --git a/proto/cosmos/staking/v1beta1/genesis.proto b/proto/cosmos/staking/v1beta1/genesis.proto
index d1563dbc547..81eeb7b092b 100644
--- a/proto/cosmos/staking/v1beta1/genesis.proto
+++ b/proto/cosmos/staking/v1beta1/genesis.proto
@@ -38,6 +38,12 @@ message GenesisState {
repeated Redelegation redelegations = 7 [(gogoproto.nullable) = false];
bool exported = 8;
+
+ // store tokenize share records to provide reward to record owners
+ repeated TokenizeShareRecord tokenize_share_records = 9 [(gogoproto.nullable) = false];
+
+ // last tokenize share record id, used for next share record id calculation
+ uint64 last_tokenize_share_record_id = 10;
}
// LastValidatorPower required for validator set update logic.
diff --git a/proto/cosmos/staking/v1beta1/query.proto b/proto/cosmos/staking/v1beta1/query.proto
index 4852c535358..fbda305b6f3 100644
--- a/proto/cosmos/staking/v1beta1/query.proto
+++ b/proto/cosmos/staking/v1beta1/query.proto
@@ -5,6 +5,7 @@ import "cosmos/base/query/v1beta1/pagination.proto";
import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "cosmos/staking/v1beta1/staking.proto";
+import "cosmos/base/v1beta1/coin.proto";
option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types";
@@ -90,6 +91,34 @@ service Query {
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/cosmos/staking/v1beta1/params";
}
+
+ // Query for individual tokenize share record information by share by id
+ rpc TokenizeShareRecordById(QueryTokenizeShareRecordByIdRequest) returns (QueryTokenizeShareRecordByIdResponse) {}
+
+ // Query for individual tokenize share record information by share denom
+ rpc TokenizeShareRecordByDenom(QueryTokenizeShareRecordByDenomRequest)
+ returns (QueryTokenizeShareRecordByDenomResponse) {}
+
+ // Query tokenize share records by address
+ rpc TokenizeShareRecordsOwned(QueryTokenizeShareRecordsOwnedRequest)
+ returns (QueryTokenizeShareRecordsOwnedResponse) {}
+
+ // Query for all tokenize share records
+ rpc AllTokenizeShareRecords(QueryAllTokenizeShareRecordsRequest) returns (QueryAllTokenizeShareRecordsResponse) {}
+
+ // Query for last tokenize share record id
+ rpc LastTokenizeShareRecordId(QueryLastTokenizeShareRecordIdRequest)
+ returns (QueryLastTokenizeShareRecordIdResponse) {}
+
+ // Query for total tokenized staked assets
+ rpc TotalTokenizeSharedAssets(QueryTotalTokenizeSharedAssetsRequest)
+ returns (QueryTotalTokenizeSharedAssetsResponse) {}
+
+ // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider)
+ rpc TotalLiquidStaked(QueryTotalLiquidStaked) returns (QueryTotalLiquidStakedResponse) {}
+
+ // Query tokenize share locks
+ rpc TokenizeShareLockInfo(QueryTokenizeShareLockInfo) returns (QueryTokenizeShareLockInfoResponse) {}
}
// QueryValidatorsRequest is request type for Query/Validators RPC method.
@@ -118,7 +147,7 @@ message QueryValidatorRequest {
// QueryValidatorResponse is response type for the Query/Validator RPC method
message QueryValidatorResponse {
- // validator defines the the validator info.
+ // validator defines the validator info.
Validator validator = 1 [(gogoproto.nullable) = false];
}
@@ -288,7 +317,7 @@ message QueryDelegatorValidatorsRequest {
// QueryDelegatorValidatorsResponse is response type for the
// Query/DelegatorValidators RPC method.
message QueryDelegatorValidatorsResponse {
- // validators defines the the validators' info of a delegator.
+ // validators defines the validators' info of a delegator.
repeated Validator validators = 1 [(gogoproto.nullable) = false];
// pagination defines the pagination in the response.
@@ -311,7 +340,7 @@ message QueryDelegatorValidatorRequest {
// QueryDelegatorValidatorResponse response type for the
// Query/DelegatorValidator RPC method.
message QueryDelegatorValidatorResponse {
- // validator defines the the validator info.
+ // validator defines the validator info.
Validator validator = 1 [(gogoproto.nullable) = false];
}
@@ -346,3 +375,95 @@ message QueryParamsResponse {
// params holds all the parameters of this module.
Params params = 1 [(gogoproto.nullable) = false];
}
+
+// QueryTokenizeShareRecordByIdRequest is request type for the
+// Query/QueryTokenizeShareRecordById RPC method.
+message QueryTokenizeShareRecordByIdRequest {
+ uint64 id = 1;
+}
+
+// QueryTokenizeShareRecordByIdRequest is response type for the
+// Query/QueryTokenizeShareRecordById RPC method.
+message QueryTokenizeShareRecordByIdResponse {
+ TokenizeShareRecord record = 1 [(gogoproto.nullable) = false];
+}
+
+// QueryTokenizeShareRecordByDenomRequest is request type for the
+// Query/QueryTokenizeShareRecordByDenom RPC method.
+message QueryTokenizeShareRecordByDenomRequest {
+ string denom = 1;
+}
+
+// QueryTokenizeShareRecordByDenomResponse is response type for the
+// Query/QueryTokenizeShareRecordByDenom RPC method.
+message QueryTokenizeShareRecordByDenomResponse {
+ TokenizeShareRecord record = 1 [(gogoproto.nullable) = false];
+}
+
+// QueryTokenizeShareRecordsOwnedRequest is request type for the
+// Query/QueryTokenizeShareRecordsOwned RPC method.
+message QueryTokenizeShareRecordsOwnedRequest {
+ string owner = 1;
+}
+
+// QueryTokenizeShareRecordsOwnedResponse is response type for the
+// Query/QueryTokenizeShareRecordsOwned RPC method.
+message QueryTokenizeShareRecordsOwnedResponse {
+ repeated TokenizeShareRecord records = 1 [(gogoproto.nullable) = false];
+}
+
+// QueryAllTokenizeShareRecordsRequest is request type for the
+// Query/QueryAllTokenizeShareRecords RPC method.
+message QueryAllTokenizeShareRecordsRequest {}
+
+// QueryAllTokenizeShareRecordsResponse is response type for the
+// Query/QueryAllTokenizeShareRecords RPC method.
+message QueryAllTokenizeShareRecordsResponse {
+ repeated TokenizeShareRecord records = 1 [(gogoproto.nullable) = false];
+}
+
+// QueryLastTokenizeShareRecordIdRequest is request type for the
+// Query/QueryLastTokenizeShareRecordId RPC method.
+message QueryLastTokenizeShareRecordIdRequest {}
+
+// QueryLastTokenizeShareRecordIdResponse is response type for the
+// Query/QueryLastTokenizeShareRecordId RPC method.
+message QueryLastTokenizeShareRecordIdResponse {
+ uint64 id = 1;
+}
+
+// QueryTotalTokenizeSharedAssetsRequest is request type for the
+// Query/QueryTotalTokenizeSharedAssets RPC method.
+message QueryTotalTokenizeSharedAssetsRequest {}
+
+// QueryTotalTokenizeSharedAssetsResponse is response type for the
+// Query/QueryTotalTokenizeSharedAssets RPC method.
+message QueryTotalTokenizeSharedAssetsResponse {
+ cosmos.base.v1beta1.Coin value = 1 [(gogoproto.nullable) = false];
+}
+
+// QueryQueryTotalLiquidStakedRequest is request type for the
+// Query/QueryQueryTotalLiquidStaked RPC method.
+message QueryTotalLiquidStaked {}
+
+// QueryQueryTotalLiquidStakedResponse is response type for the
+// Query/QueryQueryTotalLiquidStaked RPC method.
+message QueryTotalLiquidStakedResponse {
+ string tokens = 1 [
+ (gogoproto.moretags) = "yaml:\"tokens\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
+ (gogoproto.nullable) = false
+ ];
+}
+
+// QueryTokenizeShareLockInfo queries the tokenize share lock information
+// associated with given account
+message QueryTokenizeShareLockInfo {
+ string address = 1;
+}
+// QueryTokenizeShareLockInfoResponse is the response from the
+// QueryTokenizeShareLockInfo query
+message QueryTokenizeShareLockInfoResponse {
+ string status = 1;
+ string expiration_time = 2;
+}
diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto
index 27581a12cf9..67c639b7814 100644
--- a/proto/cosmos/staking/v1beta1/staking.proto
+++ b/proto/cosmos/staking/v1beta1/staking.proto
@@ -112,18 +112,23 @@ message Validator {
[(gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"unbonding_time\""];
// commission defines the commission parameters.
Commission commission = 10 [(gogoproto.nullable) = false];
- // min_self_delegation is the validator's self declared minimum self delegation.
- string min_self_delegation = 11 [
- (gogoproto.moretags) = "yaml:\"min_self_delegation\"",
- (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
- (gogoproto.nullable) = false
- ];
-
// strictly positive if this validator's unbonding has been stopped by external modules
int64 unbonding_on_hold_ref_count = 12;
-
// list of unbonding ids, each uniquely identifing an unbonding of this validator
repeated uint64 unbonding_ids = 13;
+ // Number of shares self bonded from the validator
+ string total_validator_bond_shares = 14 [
+ (gogoproto.moretags) = "yaml:\"total_validator_bond_shares\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
+ (gogoproto.nullable) = false
+ ];
+ // Total number of shares either tokenized or owned by a liquid staking provider
+ string total_liquid_shares = 15 [
+ (gogoproto.moretags) = "yaml:\"total_liquid_shares\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
+ (gogoproto.nullable) = false
+ ];
+ reserved 11;
}
// BondStatus is the status of a validator.
@@ -198,6 +203,8 @@ message Delegation {
string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""];
// shares define the delegation shares received.
string shares = 3 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false];
+ // has this delegation been marked as a validator self bond.
+ bool validator_bond = 4;
}
// UnbondingDelegation stores all of a single delegator's unbonding bonds
@@ -301,6 +308,33 @@ message Params {
uint32 historical_entries = 4 [(gogoproto.moretags) = "yaml:\"historical_entries\""];
// bond_denom defines the bondable coin denomination.
string bond_denom = 5 [(gogoproto.moretags) = "yaml:\"bond_denom\""];
+ // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators
+ string min_commission_rate = 6 [
+ (gogoproto.moretags) = "yaml:\"min_commission_rate\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
+ (gogoproto.nullable) = false
+ ];
+ // validator_bond_factor is required as a safety check for tokenizing shares and
+ // delegations from liquid staking providers
+ string validator_bond_factor = 7 [
+ (gogoproto.moretags) = "yaml:\"validator_bond_factor\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
+ (gogoproto.nullable) = false
+ ];
+ // global_liquid_staking_cap represents a cap on the portion of stake that
+ // comes from liquid staking providers
+ string global_liquid_staking_cap = 8 [
+ (gogoproto.moretags) = "yaml:\"global_liquid_staking_cap\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
+ (gogoproto.nullable) = false
+ ];
+ // validator_liquid_staking_cap represents a cap on the portion of stake that
+ // comes from liquid staking providers for a specific validator
+ string validator_liquid_staking_cap = 9 [
+ (gogoproto.moretags) = "yaml:\"validator_liquid_staking_cap\"",
+ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
+ (gogoproto.nullable) = false
+ ];
}
// DelegationResponse is equivalent to Delegation except that it contains a
@@ -367,4 +401,36 @@ enum InfractionType {
// ValidatorUpdates defines an array of abci.ValidatorUpdate objects.
message ValidatorUpdates {
repeated tendermint.abci.ValidatorUpdate updates = 1 [(gogoproto.nullable) = false];
+}
+
+// TokenizeShareRecord represents a tokenized delegation
+message TokenizeShareRecord {
+ option (gogoproto.description) = true;
+ option (gogoproto.equal) = true;
+
+ uint64 id = 1;
+ string owner = 2;
+ string module_account = 3; // module account take the role of delegator
+ string validator = 4; // validator delegated to for tokenize share record creation
+}
+
+// PendingTokenizeShareAuthorizations stores a list of addresses that have their
+// tokenize share enablement in progress
+message PendingTokenizeShareAuthorizations {
+ repeated string addresses = 1;
+}
+
+// TokenizeShareLockStatus indicates whether the address is able to tokenize shares
+enum TokenizeShareLockStatus {
+ option (gogoproto.goproto_enum_prefix) = false;
+
+ // UNSPECIFIED defines an empty tokenize share lock status
+ TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED = 0;
+ // LOCKED indicates the account is locked and cannot tokenize shares
+ TOKENIZE_SHARE_LOCK_STATUS_LOCKED = 1;
+ // UNLOCKED indicates the account is unlocked and can tokenize shares
+ TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED = 2;
+ // LOCK_EXPIRING indicates the account is unable to tokenize shares, but
+ // will be able to tokenize shortly (after 1 unbonding period)
+ TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING = 3;
}
\ No newline at end of file
diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto
index d074fe010e3..708b910fb35 100644
--- a/proto/cosmos/staking/v1beta1/tx.proto
+++ b/proto/cosmos/staking/v1beta1/tx.proto
@@ -30,6 +30,37 @@ service Msg {
// Undelegate defines a method for performing an undelegation from a
// delegate and a validator.
rpc Undelegate(MsgUndelegate) returns (MsgUndelegateResponse);
+
+ // UnbondValidator defines a method for performing the status transition for a validator
+ // from bonded to unbonded
+ rpc UnbondValidator(MsgUnbondValidator) returns (MsgUnbondValidatorResponse);
+
+ // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation
+ // and delegate back to previous validator.
+ //
+ // Since: cosmos-sdk 0.46
+ rpc CancelUnbondingDelegation(MsgCancelUnbondingDelegation) returns (MsgCancelUnbondingDelegationResponse);
+
+ // TokenizeShares defines a method for tokenizing shares from a validator.
+ rpc TokenizeShares(MsgTokenizeShares) returns (MsgTokenizeSharesResponse);
+
+ // RedeemTokensForShares defines a method for redeeming tokens from a validator for
+ // shares.
+ rpc RedeemTokensForShares(MsgRedeemTokensForShares) returns (MsgRedeemTokensForSharesResponse);
+
+ // TransferTokenizeShareRecord defines a method to transfer ownership of
+ // TokenizeShareRecord
+ rpc TransferTokenizeShareRecord(MsgTransferTokenizeShareRecord) returns (MsgTransferTokenizeShareRecordResponse);
+
+ // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake
+ rpc DisableTokenizeShares(MsgDisableTokenizeShares) returns (MsgDisableTokenizeSharesResponse);
+
+ // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake
+ // after it has been disabled
+ rpc EnableTokenizeShares(MsgEnableTokenizeShares) returns (MsgEnableTokenizeSharesResponse);
+
+ // ValidatorBond defines a method for performing a validator self-bond
+ rpc ValidatorBond(MsgValidatorBond) returns (MsgValidatorBondResponse);
}
// MsgCreateValidator defines a SDK message for creating a new validator.
@@ -37,17 +68,13 @@ message MsgCreateValidator {
option (gogoproto.equal) = false;
option (gogoproto.goproto_getters) = false;
- Description description = 1 [(gogoproto.nullable) = false];
- CommissionRates commission = 2 [(gogoproto.nullable) = false];
- string min_self_delegation = 3 [
- (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
- (gogoproto.moretags) = "yaml:\"min_self_delegation\"",
- (gogoproto.nullable) = false
- ];
+ Description description = 1 [(gogoproto.nullable) = false];
+ CommissionRates commission = 2 [(gogoproto.nullable) = false];
string delegator_address = 4 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
string validator_address = 5 [(gogoproto.moretags) = "yaml:\"validator_address\""];
google.protobuf.Any pubkey = 6 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"];
cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false];
+ reserved 3;
}
// MsgCreateValidatorResponse defines the Msg/CreateValidator response type.
@@ -69,10 +96,7 @@ message MsgEditValidator {
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.moretags) = "yaml:\"commission_rate\""
];
- string min_self_delegation = 4 [
- (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int",
- (gogoproto.moretags) = "yaml:\"min_self_delegation\""
- ];
+ reserved 4;
}
// MsgEditValidatorResponse defines the Msg/EditValidator response type.
@@ -121,3 +145,108 @@ message MsgUndelegate {
message MsgUndelegateResponse {
google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
}
+
+// MsgUnbondValidator defines a method for performing the status transition for
+// a validator from bonded to unbonded
+message MsgUnbondValidator {
+ string validator_address = 1 [(gogoproto.moretags) = "yaml:\"address\""];
+}
+// MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type.
+message MsgUnbondValidatorResponse {}
+
+// MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator
+//
+// Since: cosmos-sdk 0.46
+message MsgCancelUnbondingDelegation {
+ string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
+ string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""];
+ // amount is always less than or equal to unbonding delegation entry balance
+ cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false];
+ // creation_height is the height which the unbonding took place.
+ int64 creation_height = 4;
+}
+
+// MsgCancelUnbondingDelegationResponse
+//
+// Since: cosmos-sdk 0.46
+message MsgCancelUnbondingDelegationResponse {}
+
+// MsgTokenizeShares tokenizes a delegation
+message MsgTokenizeShares {
+ option (gogoproto.equal) = false;
+ option (gogoproto.goproto_getters) = false;
+
+ string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
+ string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""];
+ cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false];
+ string tokenized_share_owner = 4;
+}
+
+// MsgTokenizeSharesResponse defines the Msg/MsgTokenizeShares response type.
+message MsgTokenizeSharesResponse {
+ cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false];
+}
+
+// MsgRedeemTokensForShares redeems a tokenized share back into a native delegation
+message MsgRedeemTokensForShares {
+ option (gogoproto.equal) = false;
+ option (gogoproto.goproto_getters) = false;
+
+ string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
+ cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false];
+}
+
+// MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares response type.
+message MsgRedeemTokensForSharesResponse {
+ cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false];
+}
+
+// MsgTransferTokenizeShareRecord transfer a tokenize share record
+message MsgTransferTokenizeShareRecord {
+ option (gogoproto.equal) = false;
+ option (gogoproto.goproto_getters) = false;
+
+ uint64 tokenize_share_record_id = 1;
+ string sender = 2;
+ string new_owner = 3;
+}
+
+// MsgTransferTokenizeShareRecordResponse defines the Msg/MsgTransferTokenizeShareRecord response type.
+message MsgTransferTokenizeShareRecordResponse {}
+
+// MsgDisableTokenizeShares prevents the tokenization of shares for a given address
+message MsgDisableTokenizeShares {
+ option (gogoproto.equal) = false;
+ option (gogoproto.goproto_getters) = false;
+
+ string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
+}
+
+// MsgDisableTokenizeSharesResponse defines the Msg/DisableTokenizeShares response type.
+message MsgDisableTokenizeSharesResponse {}
+
+// MsgEnableTokenizeShares re-enables tokenization of shares for a given address
+message MsgEnableTokenizeShares {
+ option (gogoproto.equal) = false;
+ option (gogoproto.goproto_getters) = false;
+
+ string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
+}
+
+// MsgEnableTokenizeSharesResponse defines the Msg/EnableTokenizeShares response type.
+message MsgEnableTokenizeSharesResponse {
+ google.protobuf.Timestamp completion_time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
+}
+
+// MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins
+// from a delegator to a validator.
+message MsgValidatorBond {
+ option (gogoproto.equal) = false;
+ option (gogoproto.goproto_getters) = false;
+
+ string delegator_address = 1 [(gogoproto.moretags) = "yaml:\"delegator_address\""];
+ string validator_address = 2 [(gogoproto.moretags) = "yaml:\"validator_address\""];
+}
+
+// MsgValidatorBondResponse defines the Msg/ValidatorBond response type.
+message MsgValidatorBondResponse {}
\ No newline at end of file
diff --git a/simapp/params/weights.go b/simapp/params/weights.go
index 746e304de2b..5a75027e4c6 100644
--- a/simapp/params/weights.go
+++ b/simapp/params/weights.go
@@ -17,6 +17,12 @@ const (
DefaultWeightMsgDelegate int = 100
DefaultWeightMsgUndelegate int = 100
DefaultWeightMsgBeginRedelegate int = 100
+ DefaultWeightMsgCancelUnbondingDelegation int = 100
+ DefaultWeightMsgTokenizeShares int = 100
+ DefaultWeightMsgRedeemTokensforShares int = 100
+ DefaultWeightMsgTransferTokenizeShareRecord int = 50
+ DefaultWeightMsgEnableTokenizeShares int = 100
+ DefaultWeightMsgDisableTokenizeShares int = 100
DefaultWeightCommunitySpendProposal int = 5
DefaultWeightTextProposal int = 5
diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go
index 150dd895ca0..ad9b1923180 100644
--- a/simapp/simd/cmd/testnet.go
+++ b/simapp/simd/cmd/testnet.go
@@ -213,7 +213,6 @@ func InitTestnet(
sdk.NewCoin(sdk.DefaultBondDenom, valTokens),
stakingtypes.NewDescription(nodeDirName, "", "", "", ""),
stakingtypes.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.OneDec()),
- sdk.OneInt(),
)
if err != nil {
return err
diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go
index c428fdb2e2b..a70cd6e4c47 100644
--- a/simapp/test_helpers.go
+++ b/simapp/test_helpers.go
@@ -106,20 +106,19 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
pkAny, err := codectypes.NewAnyWithValue(pk)
require.NoError(t, err)
validator := stakingtypes.Validator{
- OperatorAddress: sdk.ValAddress(val.Address).String(),
- ConsensusPubkey: pkAny,
- Jailed: false,
- Status: stakingtypes.Bonded,
- Tokens: bondAmt,
- DelegatorShares: sdk.OneDec(),
- Description: stakingtypes.Description{},
- UnbondingHeight: int64(0),
- UnbondingTime: time.Unix(0, 0).UTC(),
- Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
- MinSelfDelegation: sdk.ZeroInt(),
+ OperatorAddress: sdk.ValAddress(val.Address).String(),
+ ConsensusPubkey: pkAny,
+ Jailed: false,
+ Status: stakingtypes.Bonded,
+ Tokens: bondAmt,
+ DelegatorShares: sdk.OneDec(),
+ Description: stakingtypes.Description{},
+ UnbondingHeight: int64(0),
+ UnbondingTime: time.Unix(0, 0).UTC(),
+ Commission: stakingtypes.NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
}
validators = append(validators, validator)
- delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec()))
+ delegations = append(delegations, stakingtypes.NewDelegation(genAccs[0].GetAddress(), val.Address.Bytes(), sdk.OneDec(), false))
}
// set validators and delegations
diff --git a/testutil/network/network.go b/testutil/network/network.go
index d4214644c49..6f5891fdc88 100644
--- a/testutil/network/network.go
+++ b/testutil/network/network.go
@@ -316,7 +316,6 @@ func New(t *testing.T, cfg Config) *Network {
sdk.NewCoin(cfg.BondDenom, cfg.BondedTokens),
stakingtypes.NewDescription(nodeDirName, "", "", "", ""),
stakingtypes.NewCommissionRates(commission, sdk.OneDec(), sdk.OneDec()),
- sdk.OneInt(),
)
require.NoError(t, err)
diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go
index 4ca75691f51..83946e53610 100644
--- a/x/distribution/keeper/hooks.go
+++ b/x/distribution/keeper/hooks.go
@@ -108,3 +108,6 @@ func (h Hooks) BeforeDelegationRemoved(_ sdk.Context, _ sdk.AccAddress, _ sdk.Va
func (h Hooks) AfterUnbondingInitiated(_ sdk.Context, _ uint64) error {
return nil
}
+func (h Hooks) BeforeTokenizeShareRecordRemoved(_ sdk.Context, _ uint64) error {
+ return nil
+}
diff --git a/x/distribution/simulation/operations_test.go b/x/distribution/simulation/operations_test.go
index 0e5dfdd4613..d198e4f4224 100644
--- a/x/distribution/simulation/operations_test.go
+++ b/x/distribution/simulation/operations_test.go
@@ -97,7 +97,7 @@ func (suite *SimTestSuite) TestSimulateMsgWithdrawDelegatorReward() {
delTokens := suite.app.StakingKeeper.TokensFromConsensusPower(suite.ctx, 2)
validator0, issuedShares := validator0.AddTokensFromDel(delTokens)
delegator := accounts[1]
- delegation := stakingtypes.NewDelegation(delegator.Address, validator0.GetOperator(), issuedShares)
+ delegation := stakingtypes.NewDelegation(delegator.Address, validator0.GetOperator(), issuedShares, false)
suite.app.StakingKeeper.SetDelegation(suite.ctx, delegation)
suite.app.DistrKeeper.SetDelegatorStartingInfo(suite.ctx, validator0.GetOperator(), delegator.Address, distrtypes.NewDelegatorStartingInfo(2, sdk.OneDec(), 200))
diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go
index 1fc964afc36..1928e0e5dd3 100644
--- a/x/genutil/gentx_test.go
+++ b/x/genutil/gentx_test.go
@@ -53,12 +53,11 @@ func (suite *GenTxTestSuite) SetupTest() {
var err error
amount := sdk.NewInt64Coin(sdk.DefaultBondDenom, 50)
- one := sdk.OneInt()
suite.msg1, err = stakingtypes.NewMsgCreateValidator(
- sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm, one)
+ sdk.ValAddress(pk1.Address()), pk1, amount, desc, comm)
suite.NoError(err)
suite.msg2, err = stakingtypes.NewMsgCreateValidator(
- sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm, one)
+ sdk.ValAddress(pk2.Address()), pk1, amount, desc, comm)
suite.NoError(err)
}
diff --git a/x/genutil/types/genesis_state_test.go b/x/genutil/types/genesis_state_test.go
index 9c225fd3f7c..dcf8978507f 100644
--- a/x/genutil/types/genesis_state_test.go
+++ b/x/genutil/types/genesis_state_test.go
@@ -38,11 +38,11 @@ func TestValidateGenesisMultipleMessages(t *testing.T) {
comm := stakingtypes.CommissionRates{}
msg1, err := stakingtypes.NewMsgCreateValidator(sdk.ValAddress(pk1.Address()), pk1,
- sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt())
+ sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm)
require.NoError(t, err)
msg2, err := stakingtypes.NewMsgCreateValidator(sdk.ValAddress(pk2.Address()), pk2,
- sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm, sdk.OneInt())
+ sdk.NewInt64Coin(sdk.DefaultBondDenom, 50), desc, comm)
require.NoError(t, err)
txGen := simapp.MakeTestEncodingConfig().TxConfig
@@ -59,7 +59,7 @@ func TestValidateGenesisMultipleMessages(t *testing.T) {
func TestValidateGenesisBadMessage(t *testing.T) {
desc := stakingtypes.NewDescription("testname", "", "", "", "")
- msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil, nil)
+ msg1 := stakingtypes.NewMsgEditValidator(sdk.ValAddress(pk1.Address()), desc, nil)
txGen := simapp.MakeTestEncodingConfig().TxConfig
txBuilder := txGen.NewTxBuilder()
diff --git a/x/gov/common_test.go b/x/gov/common_test.go
index cc759d4e961..b3a4389eb73 100644
--- a/x/gov/common_test.go
+++ b/x/gov/common_test.go
@@ -83,7 +83,7 @@ func createValidators(t *testing.T, stakingHandler sdk.Handler, ctx sdk.Context,
valTokens := sdk.TokensFromConsensusPower(powerAmt[i], sdk.DefaultPowerReduction)
valCreateMsg, err := stakingtypes.NewMsgCreateValidator(
addrs[i], pubkeys[i], sdk.NewCoin(sdk.DefaultBondDenom, valTokens),
- TestDescription, TestCommissionRates, sdk.OneInt(),
+ TestDescription, TestCommissionRates,
)
require.NoError(t, err)
handleAndCheck(t, stakingHandler, ctx, valCreateMsg)
diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go
index 028d4175560..a3868c66bda 100644
--- a/x/slashing/app_test.go
+++ b/x/slashing/app_test.go
@@ -64,7 +64,7 @@ func TestSlashingMsgs(t *testing.T) {
commission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec())
createValidatorMsg, err := stakingtypes.NewMsgCreateValidator(
- sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(),
+ sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission,
)
require.NoError(t, err)
diff --git a/x/slashing/handler_test.go b/x/slashing/handler_test.go
index 25fed487ba7..86fa6db303b 100644
--- a/x/slashing/handler_test.go
+++ b/x/slashing/handler_test.go
@@ -47,37 +47,6 @@ func TestCannotUnjailUnlessJailed(t *testing.T) {
require.True(t, errors.Is(types.ErrValidatorNotJailed, err))
}
-func TestCannotUnjailUnlessMeetMinSelfDelegation(t *testing.T) {
- // initial setup
- app := simapp.Setup(false)
- ctx := app.BaseApp.NewContext(false, tmproto.Header{})
- pks := simapp.CreateTestPubKeys(1)
- simapp.AddTestAddrsFromPubKeys(app, ctx, pks, app.StakingKeeper.TokensFromConsensusPower(ctx, 200))
-
- tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
- slh := slashing.NewHandler(app.SlashingKeeper)
- addr, val := sdk.ValAddress(pks[0].Address()), pks[0]
- amt := app.StakingKeeper.TokensFromConsensusPower(ctx, 100)
- msg := tstaking.CreateValidatorMsg(addr, val, amt)
- msg.MinSelfDelegation = amt
- tstaking.Handle(msg, true)
-
- staking.EndBlocker(ctx, app.StakingKeeper)
- require.Equal(
- t, app.BankKeeper.GetAllBalances(ctx, sdk.AccAddress(addr)),
- sdk.Coins{sdk.NewCoin(app.StakingKeeper.GetParams(ctx).BondDenom, InitTokens.Sub(amt))},
- )
-
- tstaking.Undelegate(sdk.AccAddress(addr), addr, sdk.OneInt(), true)
- require.True(t, app.StakingKeeper.Validator(ctx, addr).IsJailed())
-
- // assert non-jailed validator can't be unjailed
- res, err := slh(ctx, types.NewMsgUnjail(addr))
- require.Error(t, err)
- require.Nil(t, res)
- require.True(t, errors.Is(types.ErrSelfDelegationTooLowToUnjail, err))
-}
-
func TestJailedValidatorDelegations(t *testing.T) {
// initial setup
app := simapp.Setup(false)
@@ -90,7 +59,7 @@ func TestJailedValidatorDelegations(t *testing.T) {
tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
stakingParams := app.StakingKeeper.GetParams(ctx)
app.StakingKeeper.SetParams(ctx, stakingParams)
- valAddr, consAddr := sdk.ValAddress(pks[1].Address()), sdk.ConsAddress(pks[0].Address())
+ valAddr, consAddr := sdk.ValAddress(pks[1].Address()), sdk.ConsAddress(pks[1].Address())
amt := tstaking.CreateValidatorWithValPower(valAddr, pks[1], 10, true)
staking.EndBlocker(ctx, app.StakingKeeper)
@@ -103,12 +72,15 @@ func TestJailedValidatorDelegations(t *testing.T) {
delAddr := sdk.AccAddress(pks[2].Address())
tstaking.Delegate(delAddr, valAddr, amt)
- // unbond validator total self-delegations (which should jail the validator)
+ // unbond validator total self-delegations
valAcc := sdk.AccAddress(valAddr)
tstaking.Undelegate(valAcc, valAddr, amt, true)
_, err := app.StakingKeeper.CompleteUnbonding(ctx, sdk.AccAddress(valAddr), valAddr)
require.Nil(t, err, "expected complete unbonding validator to be ok, got: %v", err)
+ // jail the validator
+ app.StakingKeeper.Jail(ctx, consAddr)
+
// verify validator still exists and is jailed
validator, found := app.StakingKeeper.GetValidator(ctx, valAddr)
require.True(t, found)
diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go
index fdcc7814adf..150cca571c7 100644
--- a/x/slashing/keeper/hooks.go
+++ b/x/slashing/keeper/hooks.go
@@ -80,3 +80,6 @@ func (h Hooks) BeforeValidatorSlashed(_ sdk.Context, _ sdk.ValAddress, _ sdk.Dec
func (h Hooks) AfterUnbondingInitiated(_ sdk.Context, _ uint64) error {
return nil
}
+func (h Hooks) BeforeTokenizeShareRecordRemoved(_ sdk.Context, _ uint64) error {
+ return nil
+}
diff --git a/x/slashing/keeper/keeper_test.go b/x/slashing/keeper/keeper_test.go
index 2e7e727a269..27cfcce00f4 100644
--- a/x/slashing/keeper/keeper_test.go
+++ b/x/slashing/keeper/keeper_test.go
@@ -15,67 +15,6 @@ import (
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
)
-func TestUnJailNotBonded(t *testing.T) {
- app := simapp.Setup(false)
- ctx := app.BaseApp.NewContext(false, tmproto.Header{})
-
- p := app.StakingKeeper.GetParams(ctx)
- p.MaxValidators = 5
- app.StakingKeeper.SetParams(ctx, p)
-
- addrDels := simapp.AddTestAddrsIncremental(app, ctx, 6, app.StakingKeeper.TokensFromConsensusPower(ctx, 200))
- valAddrs := simapp.ConvertAddrsToValAddrs(addrDels)
- pks := simapp.CreateTestPubKeys(6)
- tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
-
- // create max (5) validators all with the same power
- for i := uint32(0); i < p.MaxValidators; i++ {
- addr, val := valAddrs[i], pks[i]
- tstaking.CreateValidatorWithValPower(addr, val, 100, true)
- }
-
- staking.EndBlocker(ctx, app.StakingKeeper)
- ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
-
- // create a 6th validator with less power than the cliff validator (won't be bonded)
- addr, val := valAddrs[5], pks[5]
- amt := app.StakingKeeper.TokensFromConsensusPower(ctx, 50)
- msg := tstaking.CreateValidatorMsg(addr, val, amt)
- msg.MinSelfDelegation = amt
- tstaking.Handle(msg, true)
-
- staking.EndBlocker(ctx, app.StakingKeeper)
- ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
-
- tstaking.CheckValidator(addr, stakingtypes.Unbonded, false)
-
- // unbond below minimum self-delegation
- require.Equal(t, p.BondDenom, tstaking.Denom)
- tstaking.Undelegate(sdk.AccAddress(addr), addr, app.StakingKeeper.TokensFromConsensusPower(ctx, 1), true)
-
- staking.EndBlocker(ctx, app.StakingKeeper)
- ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
-
- // verify that validator is jailed
- tstaking.CheckValidator(addr, -1, true)
-
- // verify we cannot unjail (yet)
- require.Error(t, app.SlashingKeeper.Unjail(ctx, addr))
-
- staking.EndBlocker(ctx, app.StakingKeeper)
- ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
- // bond to meet minimum self-delegation
- tstaking.DelegateWithPower(sdk.AccAddress(addr), addr, 1)
-
- staking.EndBlocker(ctx, app.StakingKeeper)
- ctx = ctx.WithBlockHeight(ctx.BlockHeight() + 1)
-
- // verify we can immediately unjail
- require.NoError(t, app.SlashingKeeper.Unjail(ctx, addr))
-
- tstaking.CheckValidator(addr, -1, false)
-}
-
// Test a new validator entering the validator set
// Ensure that SigningInfo.StartHeight is set correctly
// and that they are not immediately jailed
diff --git a/x/slashing/keeper/signing_info_test.go b/x/slashing/keeper/signing_info_test.go
index 2748042b360..6e040545603 100644
--- a/x/slashing/keeper/signing_info_test.go
+++ b/x/slashing/keeper/signing_info_test.go
@@ -8,6 +8,7 @@ import (
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
"github.com/cosmos/cosmos-sdk/simapp"
+
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/slashing/types"
)
@@ -17,7 +18,7 @@ func TestGetSetValidatorSigningInfo(t *testing.T) {
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, app.StakingKeeper.TokensFromConsensusPower(ctx, 200))
- info, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0]))
+ _, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0]))
require.False(t, found)
newInfo := types.NewValidatorSigningInfo(
sdk.ConsAddress(addrDels[0]),
@@ -28,7 +29,7 @@ func TestGetSetValidatorSigningInfo(t *testing.T) {
int64(10),
)
app.SlashingKeeper.SetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0]), newInfo)
- info, found = app.SlashingKeeper.GetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0]))
+ info, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0]))
require.True(t, found)
require.Equal(t, info.StartHeight, int64(4))
require.Equal(t, info.IndexOffset, int64(3))
diff --git a/x/slashing/keeper/unjail.go b/x/slashing/keeper/unjail.go
index 23a9121e547..f417bdc546f 100644
--- a/x/slashing/keeper/unjail.go
+++ b/x/slashing/keeper/unjail.go
@@ -2,7 +2,6 @@ package keeper
import (
sdk "github.com/cosmos/cosmos-sdk/types"
- sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/slashing/types"
)
@@ -20,14 +19,6 @@ func (k Keeper) Unjail(ctx sdk.Context, validatorAddr sdk.ValAddress) error {
return types.ErrMissingSelfDelegation
}
- tokens := validator.TokensFromShares(selfDel.GetShares()).TruncateInt()
- minSelfBond := validator.GetMinSelfDelegation()
- if tokens.LT(minSelfBond) {
- return sdkerrors.Wrapf(
- types.ErrSelfDelegationTooLowToUnjail, "%s less than %s", tokens, minSelfBond,
- )
- }
-
// cannot be unjailed if not jailed
if !validator.IsJailed() {
return types.ErrValidatorNotJailed
diff --git a/x/slashing/simulation/operations_test.go b/x/slashing/simulation/operations_test.go
index ea58a6e67c8..917db8e22fc 100644
--- a/x/slashing/simulation/operations_test.go
+++ b/x/slashing/simulation/operations_test.go
@@ -5,10 +5,6 @@ import (
"testing"
"time"
- "github.com/stretchr/testify/require"
- abci "github.com/tendermint/tendermint/abci/types"
- tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
-
"github.com/cosmos/cosmos-sdk/simapp"
simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
sdk "github.com/cosmos/cosmos-sdk/types"
@@ -18,6 +14,9 @@ import (
"github.com/cosmos/cosmos-sdk/x/slashing/simulation"
"github.com/cosmos/cosmos-sdk/x/slashing/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
+ "github.com/stretchr/testify/require"
+ abci "github.com/tendermint/tendermint/abci/types"
+ tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
)
// TestWeightedOperations tests the weights of the operations.
@@ -66,7 +65,8 @@ func TestSimulateMsgUnjail(t *testing.T) {
validator0 := getTestingValidator0(t, app, ctx, accounts)
// setup validator0 by consensus address
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validator0)
+ err := app.StakingKeeper.SetValidatorByConsAddr(ctx, validator0)
+ require.NoError(t, err)
val0ConsAddress, err := validator0.GetConsAddr()
require.NoError(t, err)
info := types.NewValidatorSigningInfo(val0ConsAddress, int64(4), int64(3),
@@ -81,7 +81,7 @@ func TestSimulateMsgUnjail(t *testing.T) {
validator0, issuedShares := validator0.AddTokensFromDel(delTokens)
val0AccAddress, err := sdk.ValAddressFromBech32(validator0.OperatorAddress)
require.NoError(t, err)
- selfDelegation := stakingtypes.NewDelegation(val0AccAddress.Bytes(), validator0.GetOperator(), issuedShares)
+ selfDelegation := stakingtypes.NewDelegation(val0AccAddress.Bytes(), validator0.GetOperator(), issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
app.DistrKeeper.SetDelegatorStartingInfo(ctx, validator0.GetOperator(), val0AccAddress.Bytes(), distrtypes.NewDelegatorStartingInfo(2, sdk.OneDec(), 200))
@@ -94,8 +94,8 @@ func TestSimulateMsgUnjail(t *testing.T) {
require.NoError(t, err)
var msg types.MsgUnjail
- types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
-
+ err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
+ require.NoError(t, err)
require.True(t, operationMsg.OK)
require.Equal(t, types.TypeMsgUnjail, msg.Type())
require.Equal(t, "cosmosvaloper1tnh2q55v8wyygtt9srz5safamzdengsn9dsd7z", msg.ValidatorAddr)
diff --git a/x/slashing/types/events.go b/x/slashing/types/events.go
index e9fb254545f..cf419ab6b99 100644
--- a/x/slashing/types/events.go
+++ b/x/slashing/types/events.go
@@ -11,6 +11,7 @@ const (
AttributeKeyReason = "reason"
AttributeKeyJailed = "jailed"
AttributeKeyMissedBlocks = "missed_blocks"
+ AttributeKeyBurnedCoins = "burned_coins"
AttributeValueDoubleSign = "double_sign"
AttributeValueMissingSignature = "missing_signature"
diff --git a/x/staking/abci.go b/x/staking/abci.go
index 28253b5bd3f..a843fffb01d 100644
--- a/x/staking/abci.go
+++ b/x/staking/abci.go
@@ -17,6 +17,7 @@ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker)
k.TrackHistoricalInfo(ctx)
+ k.RemoveExpiredTokenizeShareLocks(ctx, ctx.BlockTime())
}
// Called every block, update validator set
diff --git a/x/staking/app_test.go b/x/staking/app_test.go
index a011186ca71..a6c2c66a220 100644
--- a/x/staking/app_test.go
+++ b/x/staking/app_test.go
@@ -3,11 +3,11 @@ package staking_test
import (
"testing"
+ "github.com/cosmos/cosmos-sdk/simapp"
"github.com/stretchr/testify/require"
abci "github.com/tendermint/tendermint/abci/types"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
- "github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
@@ -65,7 +65,7 @@ func TestStakingMsgs(t *testing.T) {
// create validator
description := types.NewDescription("foo_moniker", "", "", "", "")
createValidatorMsg, err := types.NewMsgCreateValidator(
- sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(),
+ sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates,
)
require.NoError(t, err)
@@ -88,7 +88,7 @@ func TestStakingMsgs(t *testing.T) {
// edit the validator
description = types.NewDescription("bar_moniker", "", "", "", "")
- editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil)
+ editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil)
header = tmproto.Header{Height: app.LastBlockHeight() + 1}
_, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, "", []uint64{0}, []uint64{1}, true, true, priv1)
diff --git a/x/staking/client/cli/flags.go b/x/staking/client/cli/flags.go
index 85879567a6a..5b1b49b06dd 100644
--- a/x/staking/client/cli/flags.go
+++ b/x/staking/client/cli/flags.go
@@ -26,8 +26,6 @@ const (
FlagCommissionMaxRate = "commission-max-rate"
FlagCommissionMaxChangeRate = "commission-max-change-rate"
- FlagMinSelfDelegation = "min-self-delegation"
-
FlagGenesisFormat = "genesis-format"
FlagNodeID = "node-id"
FlagIP = "ip"
@@ -59,13 +57,6 @@ func FlagSetCommissionCreate() *flag.FlagSet {
return fs
}
-// FlagSetMinSelfDelegation Returns the FlagSet used for minimum set delegation.
-func FlagSetMinSelfDelegation() *flag.FlagSet {
- fs := flag.NewFlagSet("", flag.ContinueOnError)
- fs.String(FlagMinSelfDelegation, "", "The minimum self delegation required on the validator")
- return fs
-}
-
// FlagSetAmount Returns the FlagSet for amount related operations.
func FlagSetAmount() *flag.FlagSet {
fs := flag.NewFlagSet("", flag.ContinueOnError)
diff --git a/x/staking/client/cli/query.go b/x/staking/client/cli/query.go
index 0982296161e..3167ecaa866 100644
--- a/x/staking/client/cli/query.go
+++ b/x/staking/client/cli/query.go
@@ -39,6 +39,14 @@ func GetQueryCmd() *cobra.Command {
GetCmdQueryHistoricalInfo(),
GetCmdQueryParams(),
GetCmdQueryPool(),
+ GetCmdQueryTokenizeShareRecordByID(),
+ GetCmdQueryTokenizeShareRecordByDenom(),
+ GetCmdQueryTokenizeShareRecordsOwned(),
+ GetCmdQueryAllTokenizeShareRecords(),
+ GetCmdQueryLastTokenizeShareRecordID(),
+ GetCmdQueryTotalTokenizeSharedAssets(),
+ GetCmdQueryTokenizeShareLockInfo(),
+ GetCmdQueryTotalLiquidStaked(),
)
return stakingQueryCmd
@@ -744,3 +752,316 @@ $ %s query staking params
return cmd
}
+
+// GetCmdQueryTokenizeShareRecordById implements the query for individual tokenize share record information by share by id
+func GetCmdQueryTokenizeShareRecordByID() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "tokenize-share-record-by-id [id]",
+ Args: cobra.ExactArgs(1),
+ Short: "Query individual tokenize share record information by share by id",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query individual tokenize share record information by share by id.
+
+Example:
+$ %s query staking tokenize-share-record-by-id [id]
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ id, err := strconv.Atoi(args[0])
+ if err != nil {
+ return err
+ }
+
+ res, err := queryClient.TokenizeShareRecordById(cmd.Context(), &types.QueryTokenizeShareRecordByIdRequest{
+ Id: uint64(id),
+ })
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryTokenizeShareRecordByDenom implements the query for individual tokenize share record information by share denom
+func GetCmdQueryTokenizeShareRecordByDenom() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "tokenize-share-record-by-denom",
+ Args: cobra.ExactArgs(1),
+ Short: "Query individual tokenize share record information by share denom",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query individual tokenize share record information by share denom.
+
+Example:
+$ %s query staking tokenize-share-record-by-denom
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ res, err := queryClient.TokenizeShareRecordByDenom(cmd.Context(), &types.QueryTokenizeShareRecordByDenomRequest{
+ Denom: args[0],
+ })
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryTokenizeShareRecordsOwned implements the query tokenize share records by address
+func GetCmdQueryTokenizeShareRecordsOwned() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "tokenize-share-records-owned",
+ Args: cobra.ExactArgs(1),
+ Short: "Query tokenize share records by address",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query tokenize share records by address.
+
+Example:
+$ %s query staking tokenize-share-records-owned [owner]
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ owner, err := sdk.AccAddressFromBech32(args[0])
+ if err != nil {
+ return err
+ }
+
+ res, err := queryClient.TokenizeShareRecordsOwned(cmd.Context(), &types.QueryTokenizeShareRecordsOwnedRequest{
+ Owner: owner.String(),
+ })
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryAllTokenizeShareRecords implements the query for all tokenize share records
+func GetCmdQueryAllTokenizeShareRecords() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "all-tokenize-share-records",
+ Args: cobra.NoArgs,
+ Short: "Query for all tokenize share records",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query for all tokenize share records.
+
+Example:
+$ %s query staking all-tokenize-share-records
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ res, err := queryClient.AllTokenizeShareRecords(cmd.Context(), &types.QueryAllTokenizeShareRecordsRequest{})
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryLastTokenizeShareRecordId implements the query for last tokenize share record id
+func GetCmdQueryLastTokenizeShareRecordID() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "last-tokenize-share-record-id",
+ Args: cobra.NoArgs,
+ Short: "Query for last tokenize share record id",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query for last tokenize share record id.
+
+Example:
+$ %s query staking last-tokenize-share-record-id
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ res, err := queryClient.LastTokenizeShareRecordId(cmd.Context(), &types.QueryLastTokenizeShareRecordIdRequest{})
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryTotalTokenizeSharedAssets implements the query for total tokenized staked assets
+func GetCmdQueryTotalTokenizeSharedAssets() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "total-tokenize-share-assets",
+ Args: cobra.NoArgs,
+ Short: "Query for total tokenized staked assets",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query for total tokenized staked assets.
+
+Example:
+$ %s query staking total-tokenize-share-assets
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ res, err := queryClient.TotalTokenizeSharedAssets(cmd.Context(), &types.QueryTotalTokenizeSharedAssetsRequest{})
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryTotalLiquidStaked implements the query for total liquid staked tokens
+func GetCmdQueryTotalLiquidStaked() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "total-liquid-staked",
+ Args: cobra.NoArgs,
+ Short: "Query for total liquid staked tokens",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query for total number of liquid staked tokens.
+Liquid staked tokens are identified as either a tokenized delegation,
+or tokens owned by an interchain account.
+Example:
+$ %s query staking total-liquid-staked
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ res, err := queryClient.TotalLiquidStaked(cmd.Context(), &types.QueryTotalLiquidStaked{})
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// GetCmdQueryTokenizeShareLockInfo returns the tokenize share lock status for a user
+func GetCmdQueryTokenizeShareLockInfo() *cobra.Command {
+ bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
+
+ cmd := &cobra.Command{
+ Use: "tokenize-share-lock-info [address]",
+ Args: cobra.ExactArgs(1),
+ Short: "Query tokenize share lock information",
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Query the status of a tokenize share lock for a given account
+Example:
+$ %s query staking tokenize-share-lock-info %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj
+`,
+ version.AppName, bech32PrefixAccAddr,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientQueryContext(cmd)
+ if err != nil {
+ return err
+ }
+ queryClient := types.NewQueryClient(clientCtx)
+
+ address := args[0]
+ if _, err := sdk.AccAddressFromBech32(address); err != nil {
+ return err
+ }
+
+ res, err := queryClient.TokenizeShareLockInfo(
+ cmd.Context(),
+ &types.QueryTokenizeShareLockInfo{Address: address},
+ )
+ if err != nil {
+ return err
+ }
+
+ return clientCtx.PrintProto(res)
+ },
+ }
+
+ flags.AddQueryFlagsToCmd(cmd)
+ return cmd
+}
diff --git a/x/staking/client/cli/tx.go b/x/staking/client/cli/tx.go
index 1cd0b70172b..47744060c33 100644
--- a/x/staking/client/cli/tx.go
+++ b/x/staking/client/cli/tx.go
@@ -3,6 +3,7 @@ package cli
import (
"fmt"
"os"
+ "strconv"
"strings"
"github.com/spf13/cobra"
@@ -13,7 +14,6 @@ import (
"github.com/cosmos/cosmos-sdk/client/tx"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
- sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
@@ -25,7 +25,6 @@ var (
defaultCommissionRate = "0.1"
defaultCommissionMaxRate = "0.2"
defaultCommissionMaxChangeRate = "0.01"
- defaultMinSelfDelegation = "1"
)
// NewTxCmd returns a root CLI command handler for all x/staking transaction commands.
@@ -44,6 +43,13 @@ func NewTxCmd() *cobra.Command {
NewDelegateCmd(),
NewRedelegateCmd(),
NewUnbondCmd(),
+ NewUnbondValidatorCmd(),
+ NewTokenizeSharesCmd(),
+ NewRedeemTokensCmd(),
+ NewTransferTokenizeShareRecordCmd(),
+ NewDisableTokenizeShares(),
+ NewEnableTokenizeShares(),
+ NewValidatorBondCmd(),
)
return stakingTxCmd
@@ -74,7 +80,6 @@ func NewCreateValidatorCmd() *cobra.Command {
cmd.Flags().AddFlagSet(FlagSetAmount())
cmd.Flags().AddFlagSet(flagSetDescriptionCreate())
cmd.Flags().AddFlagSet(FlagSetCommissionCreate())
- cmd.Flags().AddFlagSet(FlagSetMinSelfDelegation())
cmd.Flags().String(FlagIP, "", fmt.Sprintf("The node's public IP. It takes effect only when used in combination with --%s", flags.FlagGenerateOnly))
cmd.Flags().String(FlagNodeID, "", "The node's ID")
@@ -117,19 +122,7 @@ func NewEditValidatorCmd() *cobra.Command {
newRate = &rate
}
- var newMinSelfDelegation *sdk.Int
-
- minSelfDelegationString, _ := cmd.Flags().GetString(FlagMinSelfDelegation)
- if minSelfDelegationString != "" {
- msb, ok := sdk.NewIntFromString(minSelfDelegationString)
- if !ok {
- return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer")
- }
-
- newMinSelfDelegation = &msb
- }
-
- msg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, newRate, newMinSelfDelegation)
+ msg := types.NewMsgEditValidator(sdk.ValAddress(valAddr), description, newRate)
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
},
@@ -137,7 +130,6 @@ func NewEditValidatorCmd() *cobra.Command {
cmd.Flags().AddFlagSet(flagSetDescriptionEdit())
cmd.Flags().AddFlagSet(flagSetCommissionUpdate())
- cmd.Flags().AddFlagSet(FlagSetMinSelfDelegation())
flags.AddTxFlagsToCmd(cmd)
return cmd
@@ -277,6 +269,37 @@ $ %s tx staking unbond %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake --from
return cmd
}
+func NewUnbondValidatorCmd() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "unbond-validator",
+ Short: "Unbond a validator",
+ Args: cobra.ExactArgs(0),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Unbond a validator.
+
+Example:
+$ %s tx staking unbond-validator --from mykey
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+
+ msg := types.NewMsgUnbondValidator(sdk.ValAddress(clientCtx.GetFromAddress()))
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
+
func newBuildCreateValidatorMsg(clientCtx client.Context, txf tx.Factory, fs *flag.FlagSet) (tx.Factory, *types.MsgCreateValidator, error) {
fAmount, _ := fs.GetString(FlagAmount)
amount, err := sdk.ParseCoinNormalized(fAmount)
@@ -318,17 +341,8 @@ func newBuildCreateValidatorMsg(clientCtx client.Context, txf tx.Factory, fs *fl
return txf, nil, err
}
- // get the initial validator min self delegation
- msbStr, _ := fs.GetString(FlagMinSelfDelegation)
-
- minSelfDelegation, ok := sdk.NewIntFromString(msbStr)
- if !ok {
- return txf, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer")
- }
-
msg, err := types.NewMsgCreateValidator(
- sdk.ValAddress(valAddr), pk, amount, description, commissionRates, minSelfDelegation,
- )
+ sdk.ValAddress(valAddr), pk, amount, description, commissionRates)
if err != nil {
return txf, nil, err
}
@@ -361,7 +375,6 @@ func CreateValidatorMsgFlagSet(ipDefault string) (fs *flag.FlagSet, defaultsDesc
fsCreateValidator.String(FlagDetails, "", "The validator's (optional) details")
fsCreateValidator.String(FlagIdentity, "", "The (optional) identity signature (ex. UPort or Keybase)")
fsCreateValidator.AddFlagSet(FlagSetCommissionCreate())
- fsCreateValidator.AddFlagSet(FlagSetMinSelfDelegation())
fsCreateValidator.AddFlagSet(FlagSetAmount())
fsCreateValidator.AddFlagSet(FlagSetPublicKey())
@@ -370,10 +383,8 @@ func CreateValidatorMsgFlagSet(ipDefault string) (fs *flag.FlagSet, defaultsDesc
commission rate: %s
commission max rate: %s
commission max change rate: %s
- minimum self delegation: %s
`, defaultAmount, defaultCommissionRate,
- defaultCommissionMaxRate, defaultCommissionMaxChangeRate,
- defaultMinSelfDelegation)
+ defaultCommissionMaxRate, defaultCommissionMaxChangeRate)
return fsCreateValidator, defaultsDesc
}
@@ -388,7 +399,6 @@ type TxCreateValidatorConfig struct {
CommissionRate string
CommissionMaxRate string
CommissionMaxChangeRate string
- MinSelfDelegation string
PubKey cryptotypes.PubKey
@@ -456,11 +466,6 @@ func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, c
return c, err
}
- c.MinSelfDelegation, err = flagSet.GetString(FlagMinSelfDelegation)
- if err != nil {
- return c, err
- }
-
c.NodeID = nodeID
c.PubKey = valPubKey
c.Website = website
@@ -486,10 +491,6 @@ func PrepareConfigForTxCreateValidator(flagSet *flag.FlagSet, moniker, nodeID, c
c.CommissionMaxChangeRate = defaultCommissionMaxChangeRate
}
- if c.MinSelfDelegation == "" {
- c.MinSelfDelegation = defaultMinSelfDelegation
- }
-
return c, nil
}
@@ -519,16 +520,8 @@ func BuildCreateValidatorMsg(clientCtx client.Context, config TxCreateValidatorC
return txBldr, nil, err
}
- // get the initial validator min self delegation
- msbStr := config.MinSelfDelegation
- minSelfDelegation, ok := sdk.NewIntFromString(msbStr)
-
- if !ok {
- return txBldr, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "minimum self delegation must be a positive integer")
- }
-
msg, err := types.NewMsgCreateValidator(
- sdk.ValAddress(valAddr), config.PubKey, amount, description, commissionRates, minSelfDelegation,
+ sdk.ValAddress(valAddr), config.PubKey, amount, description, commissionRates,
)
if err != nil {
return txBldr, msg, err
@@ -544,3 +537,251 @@ func BuildCreateValidatorMsg(clientCtx client.Context, config TxCreateValidatorC
return txBldr, msg, nil
}
+
+// NewTokenizeSharesCmd defines a command for tokenizing shares from a validator.
+func NewTokenizeSharesCmd() *cobra.Command {
+ bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix()
+ bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
+
+ cmd := &cobra.Command{
+ Use: "tokenize-share [validator-addr] [amount] [rewardOwner]",
+ Short: "Tokenize delegation to share tokens",
+ Args: cobra.ExactArgs(3),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Tokenize delegation to share tokens.
+
+Example:
+$ %s tx staking tokenize-share %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj 100stake %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj --from mykey
+`,
+ version.AppName, bech32PrefixValAddr, bech32PrefixAccAddr,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+ delAddr := clientCtx.GetFromAddress()
+ valAddr, err := sdk.ValAddressFromBech32(args[0])
+ if err != nil {
+ return err
+ }
+
+ amount, err := sdk.ParseCoinNormalized(args[1])
+ if err != nil {
+ return err
+ }
+
+ rewardOwner, err := sdk.AccAddressFromBech32(args[2])
+ if err != nil {
+ return err
+ }
+
+ msg := &types.MsgTokenizeShares{
+ DelegatorAddress: delAddr.String(),
+ ValidatorAddress: valAddr.String(),
+ Amount: amount,
+ TokenizedShareOwner: rewardOwner.String(),
+ }
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// NewRedeemTokensCmd defines a command for redeeming tokens from a validator for shares.
+func NewRedeemTokensCmd() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "redeem-tokens [amount]",
+ Short: "Redeem specified amount of share tokens to delegation",
+ Args: cobra.ExactArgs(1),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Redeem specified amount of share tokens to delegation.
+
+Example:
+$ %s tx staking redeem-tokens 100sharetoken --from mykey
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+ delAddr := clientCtx.GetFromAddress()
+
+ amount, err := sdk.ParseCoinNormalized(args[0])
+ if err != nil {
+ return err
+ }
+
+ msg := &types.MsgRedeemTokensForShares{
+ DelegatorAddress: delAddr.String(),
+ Amount: amount,
+ }
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// NewTransferTokenizeShareRecordCmd defines a command to transfer ownership of TokenizeShareRecord
+func NewTransferTokenizeShareRecordCmd() *cobra.Command {
+ bech32PrefixAccAddr := sdk.GetConfig().GetBech32AccountAddrPrefix()
+
+ cmd := &cobra.Command{
+ Use: "transfer-tokenize-share-record [record-id] [new-owner]",
+ Short: "Transfer ownership of TokenizeShareRecord",
+ Args: cobra.ExactArgs(2),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Transfer ownership of TokenizeShareRecord.
+
+Example:
+$ %s tx staking transfer-tokenize-share-record 1 %s1gghjut3ccd8ay0zduzj64hwre2fxs9ldmqhffj --from mykey
+`,
+ version.AppName, bech32PrefixAccAddr,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+
+ recordID, err := strconv.Atoi(args[0])
+ if err != nil {
+ return err
+ }
+
+ ownerAddr, err := sdk.AccAddressFromBech32(args[1])
+ if err != nil {
+ return err
+ }
+
+ msg := &types.MsgTransferTokenizeShareRecord{
+ Sender: clientCtx.GetFromAddress().String(),
+ TokenizeShareRecordId: uint64(recordID),
+ NewOwner: ownerAddr.String(),
+ }
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// NewDisableTokenizeShares defines a command to disable tokenization for an address
+func NewDisableTokenizeShares() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "disable-tokenize-shares",
+ Short: "Disable tokenization of shares",
+ Args: cobra.ExactArgs(0),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Disables the tokenization of shares for an address. The account
+must explicitly re-enable if they wish to tokenize again, at which point they must wait
+the chain's unbonding period.
+
+Example:
+$ %s tx staking disable-tokenize-shares --from mykey
+`, version.AppName),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+
+ msg := &types.MsgDisableTokenizeShares{
+ DelegatorAddress: clientCtx.GetFromAddress().String(),
+ }
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// NewEnableTokenizeShares defines a command to re-enable tokenization for an address
+func NewEnableTokenizeShares() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "enable-tokenize-shares",
+ Short: "Enable tokenization of shares",
+ Args: cobra.ExactArgs(0),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Enables the tokenization of shares for an address after
+it had been disable. This transaction queues the enablement of tokenization, but
+the address must wait 1 unbonding period from the time of this transaction before
+tokenization is permitted.
+
+Example:
+$ %s tx staking enable-tokenize-shares --from mykey
+`, version.AppName),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+
+ msg := &types.MsgEnableTokenizeShares{
+ DelegatorAddress: clientCtx.GetFromAddress().String(),
+ }
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
+
+// NewValidatorBondCmd defines a command to mark a delegation as a validator self bond
+func NewValidatorBondCmd() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "validator-bond [validator]",
+ Short: "Mark a delegation as a validator self-bond",
+ Args: cobra.ExactArgs(1),
+ Long: strings.TrimSpace(
+ fmt.Sprintf(`Mark a delegation as a validator self-bond.
+
+Example:
+$ %s tx staking validator-bond cosmosvaloper13h5xdxhsdaugwdrkusf8lkgu406h8t62jkqv3h --from mykey
+`,
+ version.AppName,
+ ),
+ ),
+ RunE: func(cmd *cobra.Command, args []string) error {
+ clientCtx, err := client.GetClientTxContext(cmd)
+ if err != nil {
+ return err
+ }
+
+ msg := &types.MsgValidatorBond{
+ DelegatorAddress: clientCtx.GetFromAddress().String(),
+ ValidatorAddress: args[0],
+ }
+
+ return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
+ },
+ }
+
+ flags.AddTxFlagsToCmd(cmd)
+
+ return cmd
+}
diff --git a/x/staking/client/cli/tx_test.go b/x/staking/client/cli/tx_test.go
index 243780bc6e0..4956c067e0d 100644
--- a/x/staking/client/cli/tx_test.go
+++ b/x/staking/client/cli/tx_test.go
@@ -17,7 +17,7 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) {
privKey := ed25519.GenPrivKey()
valPubKey := privKey.PubKey()
moniker := "DefaultMoniker"
- mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange, minSelfDelegation string) TxCreateValidatorConfig {
+ mkTxValCfg := func(amount, commission, commissionMax, commissionMaxChange string) TxCreateValidatorConfig {
return TxCreateValidatorConfig{
IP: ip,
ChainID: chainID,
@@ -28,7 +28,6 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) {
CommissionRate: commission,
CommissionMaxRate: commissionMax,
CommissionMaxChangeRate: commissionMaxChange,
- MinSelfDelegation: minSelfDelegation,
}
}
@@ -42,42 +41,43 @@ func TestPrepareConfigForTxCreateValidator(t *testing.T) {
fsModify: func(fs *pflag.FlagSet) {
return
},
- expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "1"),
- },
- {
+ expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01"),
+ }, {
name: "Custom amount",
fsModify: func(fs *pflag.FlagSet) {
- fs.Set(FlagAmount, "2000stake")
+ err := fs.Set(FlagAmount, "2000stake")
+ if err != nil {
+ panic(err)
+ }
},
- expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01", "1"),
- },
- {
+ expectedCfg: mkTxValCfg("2000stake", "0.1", "0.2", "0.01"),
+ }, {
name: "Custom commission rate",
fsModify: func(fs *pflag.FlagSet) {
- fs.Set(FlagCommissionRate, "0.54")
+ err := fs.Set(FlagCommissionRate, "0.54")
+ if err != nil {
+ panic(err)
+ }
},
- expectedCfg: mkTxValCfg(defaultAmount, "0.54", "0.2", "0.01", "1"),
- },
- {
+ expectedCfg: mkTxValCfg(defaultAmount, "0.54", "0.2", "0.01"),
+ }, {
name: "Custom commission max rate",
fsModify: func(fs *pflag.FlagSet) {
- fs.Set(FlagCommissionMaxRate, "0.89")
+ err := fs.Set(FlagCommissionMaxRate, "0.89")
+ if err != nil {
+ panic(err)
+ }
},
- expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.89", "0.01", "1"),
- },
- {
+ expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.89", "0.01"),
+ }, {
name: "Custom commission max change rate",
fsModify: func(fs *pflag.FlagSet) {
- fs.Set(FlagCommissionMaxChangeRate, "0.55")
- },
- expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.55", "1"),
- },
- {
- name: "Custom min self delegations",
- fsModify: func(fs *pflag.FlagSet) {
- fs.Set(FlagMinSelfDelegation, "0.33")
+ err := fs.Set(FlagCommissionMaxChangeRate, "0.55")
+ if err != nil {
+ panic(err)
+ }
},
- expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.01", "0.33"),
+ expectedCfg: mkTxValCfg(defaultAmount, "0.1", "0.2", "0.55"),
},
}
diff --git a/x/staking/client/rest/grpc_query_test.go b/x/staking/client/rest/grpc_query_test.go
index c53635128ae..344da4e9405 100644
--- a/x/staking/client/rest/grpc_query_test.go
+++ b/x/staking/client/rest/grpc_query_test.go
@@ -50,7 +50,8 @@ func (s *IntegrationTestSuite) SetupSuite() {
val2 := s.network.Validators[1]
// redelegate
- _, err = stakingtestutil.MsgRedelegateExec(
+ stakingtestutil.MsgRedelegateExec(
+ s.T(),
val.ClientCtx,
val.Address,
val.ValAddress,
@@ -64,8 +65,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
s.Require().NoError(err)
// unbonding
- _, err = stakingtestutil.MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbond)
- s.Require().NoError(err)
+ stakingtestutil.MsgUnbondExec(s.T(), val.ClientCtx, val.Address, val.ValAddress, unbond)
_, err = s.network.WaitForHeight(1)
s.Require().NoError(err)
}
@@ -207,7 +207,7 @@ func (s *IntegrationTestSuite) TestQueryValidatorDelegationsGRPC() {
&types.QueryValidatorDelegationsResponse{},
&types.QueryValidatorDelegationsResponse{
DelegationResponses: types.DelegationResponses{
- types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
+ types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
},
Pagination: &query.PageResponse{Total: 1},
},
@@ -456,7 +456,7 @@ func (s *IntegrationTestSuite) TestQueryDelegatorDelegationsGRPC() {
&types.QueryDelegatorDelegationsResponse{},
&types.QueryDelegatorDelegationsResponse{
DelegationResponses: types.DelegationResponses{
- types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
+ types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
},
Pagination: &query.PageResponse{Total: 1},
},
diff --git a/x/staking/client/testutil/suite.go b/x/staking/client/testutil/suite.go
index a0ef083d47f..4612c44edd1 100644
--- a/x/staking/client/testutil/suite.go
+++ b/x/staking/client/testutil/suite.go
@@ -48,29 +48,51 @@ func (s *IntegrationTestSuite) SetupSuite() {
_, err := s.network.WaitForHeight(1)
s.Require().NoError(err)
- unbond, err := sdk.ParseCoinNormalized("10stake")
+ unbondCoin, err := sdk.ParseCoinNormalized("10stake")
+ s.Require().NoError(err)
+
+ tokenizeCoin, err := sdk.ParseCoinNormalized("1000stake")
s.Require().NoError(err)
val := s.network.Validators[0]
val2 := s.network.Validators[1]
// redelegate
- _, err = MsgRedelegateExec(
+ MsgRedelegateExec(
+ s.T(),
val.ClientCtx,
val.Address,
val.ValAddress,
val2.ValAddress,
- unbond,
+ unbondCoin,
fmt.Sprintf("--%s=%d", flags.FlagGas, 300000),
)
- s.Require().NoError(err)
+
_, err = s.network.WaitForHeight(1)
s.Require().NoError(err)
+
// unbonding
- _, err = MsgUnbondExec(val.ClientCtx, val.Address, val.ValAddress, unbond)
+ MsgUnbondExec(s.T(), val.ClientCtx, val.Address, val.ValAddress, unbondCoin)
s.Require().NoError(err)
+
_, err = s.network.WaitForHeight(1)
s.Require().NoError(err)
+
+ // tokenize shares twice (once for the transfer and one for the redeem)
+ for i := 1; i <= 2; i++ {
+ MsgTokenizeSharesExec(
+ s.T(),
+ val.ClientCtx,
+ val.Address,
+ val.ValAddress,
+ val.Address,
+ tokenizeCoin,
+ fmt.Sprintf("--%s=%d", flags.FlagGas, 1000000),
+ )
+
+ _, err = s.network.WaitForHeight(1)
+ s.Require().NoError(err)
+ }
}
func (s *IntegrationTestSuite) TearDownSuite() {
@@ -118,7 +140,6 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() {
fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate),
fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate),
fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate),
- fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation),
fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
@@ -137,7 +158,6 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() {
fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate),
fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate),
fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate),
- fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation),
fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
@@ -157,7 +177,6 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() {
fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate),
fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate),
fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate),
- fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation),
fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
@@ -178,7 +197,6 @@ func (s *IntegrationTestSuite) TestNewCreateValidatorCmd() {
fmt.Sprintf("--%s=0.5", cli.FlagCommissionRate),
fmt.Sprintf("--%s=1.0", cli.FlagCommissionMaxRate),
fmt.Sprintf("--%s=0.1", cli.FlagCommissionMaxChangeRate),
- fmt.Sprintf("--%s=1", cli.FlagMinSelfDelegation),
fmt.Sprintf("--%s=%s", flags.FlagFrom, newAddr),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
@@ -399,7 +417,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryDelegations() {
&types.QueryDelegatorDelegationsResponse{},
&types.QueryDelegatorDelegationsResponse{
DelegationResponses: types.DelegationResponses{
- types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
+ types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
},
Pagination: &query.PageResponse{},
},
@@ -455,7 +473,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryValidatorDelegations() {
&types.QueryValidatorDelegationsResponse{},
&types.QueryValidatorDelegationsResponse{
DelegationResponses: types.DelegationResponses{
- types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
+ types.NewDelegationResp(val.Address, val.ValAddress, sdk.NewDecFromInt(cli.DefaultTokens), false, sdk.NewCoin(sdk.DefaultBondDenom, cli.DefaultTokens)),
},
Pagination: &query.PageResponse{},
},
@@ -873,15 +891,19 @@ func (s *IntegrationTestSuite) TestGetCmdQueryParams() {
"with text output",
[]string{fmt.Sprintf("--%s=text", tmcli.OutputFlag)},
`bond_denom: stake
+global_liquid_staking_cap: "1.000000000000000000"
historical_entries: 10000
max_entries: 7
max_validators: 100
-unbonding_time: 1814400s`,
+min_commission_rate: "0.000000000000000000"
+unbonding_time: 1814400s
+validator_bond_factor: "-1.000000000000000000"
+validator_liquid_staking_cap: "1.000000000000000000"`,
},
{
"with json output",
[]string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)},
- `{"unbonding_time":"1814400s","max_validators":100,"max_entries":7,"historical_entries":10000,"bond_denom":"stake"}`,
+ `{"unbonding_time":"1814400s","max_validators":100,"max_entries":7,"historical_entries":10000,"bond_denom":"stake","min_commission_rate":"0.000000000000000000","validator_bond_factor":"-1.000000000000000000","global_liquid_staking_cap":"1.000000000000000000","validator_liquid_staking_cap":"1.000000000000000000"}`,
},
}
for _, tc := range testCases {
@@ -1178,7 +1200,7 @@ func (s *IntegrationTestSuite) TestNewRedelegateCmd() {
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
},
- false, 31, &sdk.TxResponse{},
+ false, 3, &sdk.TxResponse{},
},
{
"valid transaction of delegate",
@@ -1187,7 +1209,7 @@ func (s *IntegrationTestSuite) TestNewRedelegateCmd() {
val2.ValAddress.String(), // dst-validator-addr
sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(150)).String(), // amount
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
- fmt.Sprintf("--%s=%s", flags.FlagGas, "auto"),
+ fmt.Sprintf("--%s=%d", flags.FlagGas, 300000),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
@@ -1255,6 +1277,7 @@ func (s *IntegrationTestSuite) TestNewUnbondCmd() {
val.ValAddress.String(),
sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(150)).String(),
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=%d", flags.FlagGas, 300000),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
@@ -1284,6 +1307,254 @@ func (s *IntegrationTestSuite) TestNewUnbondCmd() {
}
}
+func (s *IntegrationTestSuite) TestNewTokenizeSharesCmd() {
+ val := s.network.Validators[0]
+
+ testCases := []struct {
+ name string
+ args []string
+ expectErr bool
+ expectedCode uint32
+ respType proto.Message
+ }{
+ {
+ "Without reward owner",
+ []string{
+ val.ValAddress.String(),
+ sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(150)).String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without tokenize share amount",
+ []string{
+ val.ValAddress.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without tokenize share amount and reward owner",
+ []string{
+ val.ValAddress.String(),
+ val.Address.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without validator address",
+ []string{
+ sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(150)).String(),
+ val.Address.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without validator address and reward owner",
+ []string{
+ sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(150)).String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without validator address, tokenize share amount and reward owner",
+ []string{
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "valid transaction of tokenize share",
+ []string{
+ val.ValAddress.String(),
+ sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(150)).String(),
+ val.Address.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=%d", flags.FlagGas, 1000000),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ false, 0, &sdk.TxResponse{},
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ s.Run(tc.name, func() {
+ cmd := cli.NewTokenizeSharesCmd()
+ clientCtx := val.ClientCtx
+
+ out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
+ if tc.expectErr {
+ s.Require().Error(err)
+ } else {
+ s.Require().NoError(err, out.String())
+ s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String())
+
+ txResp := tc.respType.(*sdk.TxResponse)
+ s.Require().Equal(tc.expectedCode, txResp.Code, out.String())
+ }
+ })
+ }
+}
+
+func (s *IntegrationTestSuite) TestNewRedeemTokensCmd() {
+ val := s.network.Validators[0]
+
+ testCases := []struct {
+ name string
+ args []string
+ expectErr bool
+ expectedCode uint32
+ respType proto.Message
+ }{
+ {
+ "Without redeem token amount",
+ []string{
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "valid transaction of redeem token",
+ []string{
+ sdk.NewCoin(fmt.Sprintf("%s/%d", val.ValAddress.String(), 1), sdk.NewInt(150)).String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=%d", flags.FlagGas, 1000000),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ false, 0, &sdk.TxResponse{},
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ s.Run(tc.name, func() {
+ cmd := cli.NewRedeemTokensCmd()
+ clientCtx := val.ClientCtx
+
+ out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
+ if tc.expectErr {
+ s.Require().Error(err)
+ } else {
+ s.Require().NoError(err, out.String())
+ s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String())
+
+ txResp := tc.respType.(*sdk.TxResponse)
+ s.Require().Equal(tc.expectedCode, txResp.Code, out.String())
+ }
+ })
+ }
+}
+
+func (s *IntegrationTestSuite) TestNewTransferTokenizeShareRecordCmd() {
+ val := s.network.Validators[0]
+
+ testCases := []struct {
+ name string
+ args []string
+ expectErr bool
+ expectedCode uint32
+ respType proto.Message
+ }{
+ {
+ "Without new owner",
+ []string{
+ "123",
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without record id",
+ []string{
+ val.Address.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "Without record id and new owner",
+ []string{
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ true, 0, nil,
+ },
+ {
+ "valid transaction of transfer tokenize share record",
+ []string{
+ "2",
+ val.Address.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
+ fmt.Sprintf("--%s=%d", flags.FlagGas, 1000000),
+ fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
+ fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
+ fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
+ },
+ false, 0, &sdk.TxResponse{},
+ },
+ }
+
+ for _, tc := range testCases {
+ tc := tc
+
+ s.Run(tc.name, func() {
+ cmd := cli.NewTransferTokenizeShareRecordCmd()
+ clientCtx := val.ClientCtx
+
+ out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
+ if tc.expectErr {
+ s.Require().Error(err)
+ } else {
+ s.Require().NoError(err, out.String())
+ s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), tc.respType), out.String())
+
+ txResp := tc.respType.(*sdk.TxResponse)
+ s.Require().Equal(tc.expectedCode, txResp.Code, out.String())
+ }
+ })
+ }
+}
+
// TestBlockResults tests that the validator updates correctly show when
// calling the /block_results RPC endpoint.
// ref: https://github.com/cosmos/cosmos-sdk/issues/7401.
@@ -1350,7 +1621,8 @@ func (s *IntegrationTestSuite) TestBlockResults() {
break
}
- s.network.WaitForNextBlock()
+ err = s.network.WaitForNextBlock()
+ require.NoError(err)
}
}
diff --git a/x/staking/client/testutil/test_helpers.go b/x/staking/client/testutil/test_helpers.go
index e54dc82bf39..45d0a1b1dec 100644
--- a/x/staking/client/testutil/test_helpers.go
+++ b/x/staking/client/testutil/test_helpers.go
@@ -2,13 +2,15 @@ package testutil
import (
"fmt"
+ "testing"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
- "github.com/cosmos/cosmos-sdk/testutil"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
stakingcli "github.com/cosmos/cosmos-sdk/x/staking/client/cli"
+ "github.com/spf13/cobra"
+ "github.com/stretchr/testify/require"
)
var commonArgs = []string{
@@ -17,10 +19,21 @@ var commonArgs = []string{
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(10))).String()),
}
+func ExecuteCmdAndCheckSuccess(t *testing.T, clientContext client.Context, cmd *cobra.Command, extraArgs []string) {
+ out, err := clitestutil.ExecTestCLICmd(clientContext, cmd, extraArgs)
+ require.NoError(t, err)
+
+ var txRes sdk.TxResponse
+ clientContext.Codec.UnmarshalJSON(out.Bytes(), &txRes)
+ require.Equal(t, int64(0), int64(txRes.Code), "Response returned non-zero exit code:\n%+v", txRes)
+}
+
// MsgRedelegateExec creates a redelegate message.
-func MsgRedelegateExec(clientCtx client.Context, from, src, dst, amount fmt.Stringer,
+func MsgRedelegateExec(
+ t *testing.T, clientCtx client.Context,
+ from, src, dst, amount fmt.Stringer,
extraArgs ...string,
-) (testutil.BufferWriter, error) {
+) {
args := []string{
src.String(),
dst.String(),
@@ -31,20 +44,40 @@ func MsgRedelegateExec(clientCtx client.Context, from, src, dst, amount fmt.Stri
args = append(args, extraArgs...)
args = append(args, commonArgs...)
- return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewRedelegateCmd(), args)
+ ExecuteCmdAndCheckSuccess(t, clientCtx, stakingcli.NewRedelegateCmd(), args)
}
// MsgUnbondExec creates a unbond message.
-func MsgUnbondExec(clientCtx client.Context, from fmt.Stringer, valAddress,
- amount fmt.Stringer, extraArgs ...string,
-) (testutil.BufferWriter, error) {
+func MsgUnbondExec(
+ t *testing.T, clientCtx client.Context,
+ from fmt.Stringer, valAddress, amount fmt.Stringer,
+ extraArgs ...string,
+) {
+ args := []string{
+ valAddress.String(),
+ amount.String(),
+ fmt.Sprintf("--%s=%s", flags.FlagFrom, from.String()),
+ }
+
+ args = append(args, commonArgs...)
+ args = append(args, extraArgs...)
+ ExecuteCmdAndCheckSuccess(t, clientCtx, stakingcli.NewUnbondCmd(), args)
+}
+
+// MsgTokenizeSharesExec creates a delegation message.
+func MsgTokenizeSharesExec(
+ t *testing.T, clientCtx client.Context,
+ from fmt.Stringer, valAddress, rewardOwner, amount fmt.Stringer,
+ extraArgs ...string,
+) {
args := []string{
valAddress.String(),
amount.String(),
+ rewardOwner.String(),
fmt.Sprintf("--%s=%s", flags.FlagFrom, from.String()),
}
args = append(args, commonArgs...)
args = append(args, extraArgs...)
- return clitestutil.ExecTestCLICmd(clientCtx, stakingcli.NewUnbondCmd(), args)
+ ExecuteCmdAndCheckSuccess(t, clientCtx, stakingcli.NewTokenizeSharesCmd(), args)
}
diff --git a/x/staking/handler.go b/x/staking/handler.go
index 6d89c7a29c5..862afe67e01 100644
--- a/x/staking/handler.go
+++ b/x/staking/handler.go
@@ -34,6 +34,30 @@ func NewHandler(k keeper.Keeper) sdk.Handler {
res, err := msgServer.Undelegate(sdk.WrapSDKContext(ctx), msg)
return sdk.WrapServiceResult(ctx, res, err)
+ case *types.MsgUnbondValidator:
+ res, err := msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), msg)
+ return sdk.WrapServiceResult(ctx, res, err)
+
+ case *types.MsgTokenizeShares:
+ res, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), msg)
+ return sdk.WrapServiceResult(ctx, res, err)
+
+ case *types.MsgRedeemTokensForShares:
+ res, err := msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), msg)
+ return sdk.WrapServiceResult(ctx, res, err)
+
+ case *types.MsgTransferTokenizeShareRecord:
+ res, err := msgServer.TransferTokenizeShareRecord(sdk.WrapSDKContext(ctx), msg)
+ return sdk.WrapServiceResult(ctx, res, err)
+
+ case *types.MsgDisableTokenizeShares:
+ res, err := msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), msg)
+ return sdk.WrapServiceResult(ctx, res, err)
+
+ case *types.MsgEnableTokenizeShares:
+ res, err := msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), msg)
+ return sdk.WrapServiceResult(ctx, res, err)
+
default:
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized %s message type: %T", types.ModuleName, msg)
}
diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go
index d23a13f94f0..1f9d4d2c4f2 100644
--- a/x/staking/handler_test.go
+++ b/x/staking/handler_test.go
@@ -243,7 +243,7 @@ func TestLegacyValidatorDelegations(t *testing.T) {
require.Equal(t, bondAmount.MulRaw(2), validator.DelegatorShares.RoundInt())
require.Equal(t, bondAmount.MulRaw(2), validator.BondedTokens())
- // unbond validator total self-delegations (which should jail the validator)
+ // unbond validator total self-delegations
res := tstaking.Undelegate(sdk.AccAddress(valAddr), valAddr, bondAmount, true)
var resData types.MsgUndelegateResponse
@@ -254,6 +254,9 @@ func TestLegacyValidatorDelegations(t *testing.T) {
tstaking.Ctx = ctx
staking.EndBlocker(ctx, app.StakingKeeper)
+ // jail the validator
+ app.StakingKeeper.Jail(ctx, valConsAddr)
+
// verify the validator record still exists, is jailed, and has correct tokens
validator = tstaking.CheckValidator(valAddr, -1, true)
require.Equal(t, bondAmount, validator.Tokens)
@@ -351,68 +354,6 @@ func TestIncrementsMsgDelegate(t *testing.T) {
}
}
-func TestEditValidatorDecreaseMinSelfDelegation(t *testing.T) {
- initPower := int64(100)
- initBond := sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction)
- app, ctx, _, valAddrs := bootstrapHandlerGenesisTest(t, initPower, 1, sdk.TokensFromConsensusPower(initPower, sdk.DefaultPowerReduction))
-
- validatorAddr := valAddrs[0]
- tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
-
- // create validator
- msgCreateValidator := tstaking.CreateValidatorMsg(validatorAddr, PKs[0], initBond)
- msgCreateValidator.MinSelfDelegation = sdk.NewInt(2)
- tstaking.Handle(msgCreateValidator, true)
-
- // must end-block
- updates, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
- require.NoError(t, err)
- require.Equal(t, 1, len(updates))
-
- // verify the self-delegation exists
- bond, found := app.StakingKeeper.GetDelegation(ctx, sdk.AccAddress(validatorAddr), validatorAddr)
- require.True(t, found)
- gotBond := bond.Shares.RoundInt()
- require.Equal(t, initBond, gotBond,
- "initBond: %v\ngotBond: %v\nbond: %v\n",
- initBond, gotBond, bond)
-
- newMinSelfDelegation := sdk.OneInt()
- msgEditValidator := types.NewMsgEditValidator(validatorAddr, types.Description{}, nil, &newMinSelfDelegation)
- tstaking.Handle(msgEditValidator, false)
-}
-
-func TestEditValidatorIncreaseMinSelfDelegationBeyondCurrentBond(t *testing.T) {
- initPower := int64(100)
- initBond := sdk.TokensFromConsensusPower(100, sdk.DefaultPowerReduction)
-
- app, ctx, _, valAddrs := bootstrapHandlerGenesisTest(t, initPower, 2, sdk.TokensFromConsensusPower(initPower, sdk.DefaultPowerReduction))
- validatorAddr := valAddrs[0]
- tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
-
- // create validator
- msgCreateValidator := tstaking.CreateValidatorMsg(validatorAddr, PKs[0], initBond)
- msgCreateValidator.MinSelfDelegation = sdk.NewInt(2)
- tstaking.Handle(msgCreateValidator, true)
-
- // must end-block
- updates, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
- require.NoError(t, err)
- require.Equal(t, 1, len(updates))
-
- // verify the self-delegation exists
- bond, found := app.StakingKeeper.GetDelegation(ctx, sdk.AccAddress(validatorAddr), validatorAddr)
- require.True(t, found)
- gotBond := bond.Shares.RoundInt()
- require.Equal(t, initBond, gotBond,
- "initBond: %v\ngotBond: %v\nbond: %v\n",
- initBond, gotBond, bond)
-
- newMinSelfDelegation := initBond.Add(sdk.OneInt())
- msgEditValidator := types.NewMsgEditValidator(validatorAddr, types.Description{}, nil, &newMinSelfDelegation)
- tstaking.Handle(msgEditValidator, false)
-}
-
func TestIncrementsMsgUnbond(t *testing.T) {
initPower := int64(1000)
@@ -629,6 +570,9 @@ func TestJailValidator(t *testing.T) {
staking.EndBlocker(ctx, app.StakingKeeper)
tstaking.Ctx = ctx
+ // jail the validator
+ app.StakingKeeper.Jail(ctx, sdk.GetConsAddress(PKs[0]))
+
tstaking.CheckValidator(validatorAddr, -1, true)
// test that the delegator can still withdraw their bonds
@@ -661,8 +605,9 @@ func TestValidatorQueue(t *testing.T) {
tstaking.Delegate(delegatorAddr, validatorAddr, amt)
staking.EndBlocker(ctx, app.StakingKeeper)
- // unbond the all self-delegation to put validator in unbonding state
+ // unbond the and jail the validator to put it in an unbonding state
res := tstaking.Undelegate(sdk.AccAddress(validatorAddr), validatorAddr, amt, true)
+ app.StakingKeeper.Jail(ctx, sdk.GetConsAddress(PKs[0]))
var resData types.MsgUndelegateResponse
err := proto.Unmarshal(res.Data, &resData)
@@ -1185,15 +1130,15 @@ func TestInvalidCoinDenom(t *testing.T) {
oneCoin := sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())
commission := types.NewCommissionRates(sdk.OneDec(), sdk.OneDec(), sdk.ZeroDec())
- msgCreate, err := types.NewMsgCreateValidator(valA, PKs[0], invalidCoin, types.Description{}, commission, sdk.OneInt())
+ msgCreate, err := types.NewMsgCreateValidator(valA, PKs[0], invalidCoin, types.Description{}, commission)
require.NoError(t, err)
tstaking.Handle(msgCreate, false)
- msgCreate, err = types.NewMsgCreateValidator(valA, PKs[0], validCoin, types.Description{}, commission, sdk.OneInt())
+ msgCreate, err = types.NewMsgCreateValidator(valA, PKs[0], validCoin, types.Description{}, commission)
require.NoError(t, err)
tstaking.Handle(msgCreate, true)
- msgCreate, err = types.NewMsgCreateValidator(valB, PKs[1], validCoin, types.Description{}, commission, sdk.OneInt())
+ msgCreate, err = types.NewMsgCreateValidator(valB, PKs[1], validCoin, types.Description{}, commission)
require.NoError(t, err)
tstaking.Handle(msgCreate, true)
@@ -1215,3 +1160,218 @@ func TestInvalidCoinDenom(t *testing.T) {
msgRedelegate = types.NewMsgBeginRedelegate(delAddr, valA, valB, oneCoin)
tstaking.Handle(msgRedelegate, true)
}
+
+func TestTokenizeShares(t *testing.T) {
+ initPower := int64(1000)
+
+ testCases := []struct {
+ name string
+ delIndex int64
+ valIndex int64
+ amount sdk.Int
+ isSuccess bool
+ expStatus types.BondStatus
+ expJailed bool
+ }{
+ {
+ "tokenize shares for less than self delegation",
+ 0, 0,
+ sdk.NewInt(10000),
+ true,
+ types.Bonded,
+ false,
+ },
+ {
+ "tokenize shares for more than self delegation",
+ 0, 0,
+ sdk.TokensFromConsensusPower(initPower+1, sdk.DefaultPowerReduction),
+ false,
+ types.Bonded,
+ false,
+ },
+ {
+ "tokenize share for full self delegation",
+ 0, 0,
+ sdk.TokensFromConsensusPower(50, sdk.DefaultPowerReduction),
+ true,
+ types.Bonded,
+ false,
+ },
+ {
+ "tokenize shares for less than delegation",
+ 1, 0,
+ sdk.NewInt(1000),
+ true,
+ types.Bonded,
+ false,
+ },
+ {
+ "tokenize shares for more than delegation",
+ 1, 0,
+ sdk.NewInt(20000),
+ false,
+ types.Bonded,
+ false,
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(*testing.T) {
+ app, ctx, delAddrs, valAddrs := bootstrapHandlerGenesisTest(t, initPower, 3, sdk.TokensFromConsensusPower(initPower, sdk.DefaultPowerReduction))
+ val1 := valAddrs[0]
+ del2 := delAddrs[1]
+ tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
+
+ // set staking params
+ params := app.StakingKeeper.GetParams(ctx)
+ params.MaxValidators = 2
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // add validators
+ tstaking.CreateValidatorWithValPower(val1, PKs[0], 50, true)
+
+ // call it to update validator status to bonded
+ _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
+ require.NoError(t, err)
+
+ // delegate tokens to the validator
+ tstaking.Delegate(del2, val1, sdk.NewInt(10000))
+
+ del := delAddrs[tc.delIndex]
+ val := valAddrs[tc.valIndex]
+
+ tstaking.TokenizeShares(del, val, sdk.NewCoin(sdk.DefaultBondDenom, tc.amount), del, tc.isSuccess)
+
+ if tc.isSuccess {
+ // call it to update validator status automatically
+ _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
+ require.NoError(t, err)
+
+ tstaking.CheckValidator(val, tc.expStatus, tc.expJailed)
+ }
+ })
+ }
+}
+
+func TestRedeemTokensforShares(t *testing.T) {
+ initPower := int64(1000)
+
+ testCases := []struct {
+ name string
+ amount sdk.Int
+ isSuccess bool
+ }{
+ {
+ "redeem full shares",
+ sdk.NewInt(10000),
+ true,
+ },
+ {
+ "redeem partial shares",
+ sdk.NewInt(1000),
+ true,
+ },
+ {
+ "redeem zero shares",
+ sdk.NewInt(0),
+ false,
+ },
+ {
+ "redeem more than shares",
+ sdk.NewInt(20000),
+ false,
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(*testing.T) {
+ app, ctx, delAddrs, valAddrs := bootstrapHandlerGenesisTest(t, initPower, 3, sdk.TokensFromConsensusPower(initPower, sdk.DefaultPowerReduction))
+ val1 := valAddrs[0]
+ del2 := delAddrs[1]
+ tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
+
+ // set staking params
+ params := app.StakingKeeper.GetParams(ctx)
+ params.MaxValidators = 2
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // add validators
+ tstaking.CreateValidatorWithValPower(val1, PKs[0], 50, true)
+
+ // call it to update validator status to bonded
+ _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
+ require.NoError(t, err)
+
+ // delegate tokens to the validator
+ tstaking.Delegate(del2, val1, sdk.NewInt(10000))
+
+ // tokenize shares
+ tstaking.TokenizeShares(del2, val1, sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000), del2, true)
+
+ // get tokenize share record
+ record, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 1)
+ require.NoError(t, err)
+
+ // redeem share
+ tstaking.RedeemTokensForShares(del2, sdk.NewCoin(record.GetShareTokenDenom(), tc.amount), tc.isSuccess)
+ })
+ }
+}
+
+func TransferTokenizeShareRecord(t *testing.T) {
+ initPower := int64(1000)
+
+ testCases := []struct {
+ name string
+ recordID uint64
+ oldOwner int64
+ newOwner int64
+ isSuccess bool
+ }{
+ {
+ "transfer to other",
+ 1,
+ 2, 1,
+ true,
+ },
+ {
+ "self transfer",
+ 1,
+ 2, 2,
+ true,
+ },
+ {
+ "transfer non-existent",
+ 2,
+ 2, 2,
+ false,
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(*testing.T) {
+ app, ctx, delAddrs, valAddrs := bootstrapHandlerGenesisTest(t, initPower, 3, sdk.TokensFromConsensusPower(initPower, sdk.DefaultPowerReduction))
+ val1 := valAddrs[0]
+ del2 := delAddrs[1]
+ tstaking := teststaking.NewHelper(t, ctx, app.StakingKeeper)
+
+ // set staking params
+ params := app.StakingKeeper.GetParams(ctx)
+ params.MaxValidators = 2
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // add validators
+ tstaking.CreateValidatorWithValPower(val1, PKs[0], 50, true)
+
+ // call it to update validator status to bonded
+ _, err := app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
+ require.NoError(t, err)
+
+ // delegate tokens to the validator
+ tstaking.Delegate(del2, val1, sdk.NewInt(10000))
+
+ // tokenize shares
+ tstaking.TokenizeShares(del2, val1, sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000), del2, true)
+
+ // redeem share
+ tstaking.TranserTokenizeShareRecord(tc.recordID, delAddrs[tc.oldOwner], delAddrs[tc.newOwner], tc.isSuccess)
+ })
+ }
+}
diff --git a/x/staking/keeper/common_test.go b/x/staking/keeper/common_test.go
index 99c3d2b27a7..4a13c25352a 100644
--- a/x/staking/keeper/common_test.go
+++ b/x/staking/keeper/common_test.go
@@ -47,3 +47,9 @@ func generateAddresses(app *simapp.SimApp, ctx sdk.Context, numAddrs int) ([]sdk
return addrDels, addrVals
}
+
+func delegateCoinsFromAccount(ctx sdk.Context, app *simapp.SimApp, addr sdk.AccAddress, amount sdk.Int, val types.Validator) error {
+ _, err := app.StakingKeeper.Delegate(ctx, addr, amount, types.Unbonded, val, true)
+
+ return err
+}
diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go
index e204f71c152..4b2b419948a 100644
--- a/x/staking/keeper/delegation.go
+++ b/x/staking/keeper/delegation.go
@@ -10,10 +10,8 @@ import (
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
-// return a specific delegation
-func (k Keeper) GetDelegation(ctx sdk.Context,
- delAddr sdk.AccAddress, valAddr sdk.ValAddress,
-) (delegation types.Delegation, found bool) {
+// GetDelegation returns a specific delegation.
+func (k Keeper) GetDelegation(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (delegation types.Delegation, found bool) {
store := ctx.KVStore(k.storeKey)
key := types.GetDelegationKey(delAddr, valAddr)
@@ -72,9 +70,7 @@ func (k Keeper) GetValidatorDelegations(ctx sdk.Context, valAddr sdk.ValAddress)
// GetDelegatorDelegations returns a given amount of all the delegations from a
// delegator.
-func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress,
- maxRetrieve uint16,
-) (delegations []types.Delegation) {
+func (k Keeper) GetDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress, maxRetrieve uint16) (delegations []types.Delegation) {
delegations = make([]types.Delegation, maxRetrieve)
store := ctx.KVStore(k.storeKey)
delegatorPrefixKey := types.GetDelegationsKey(delegator)
@@ -149,7 +145,8 @@ func (k Keeper) GetUnbondingDelegation(
return ubd, true
}
-// return all unbonding delegations from a particular validator
+// GetUnbondingDelegationsFromValidator returns all unbonding delegations from a
+// particular validator.
func (k Keeper) GetUnbondingDelegationsFromValidator(ctx sdk.Context, valAddr sdk.ValAddress) (ubds []types.UnbondingDelegation) {
store := ctx.KVStore(k.storeKey)
@@ -261,9 +258,7 @@ func (k Keeper) IterateDelegatorRedelegations(ctx sdk.Context, delegator sdk.Acc
}
// HasMaxUnbondingDelegationEntries - check if unbonding delegation has maximum number of entries.
-func (k Keeper) HasMaxUnbondingDelegationEntries(ctx sdk.Context,
- delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress,
-) bool {
+func (k Keeper) HasMaxUnbondingDelegationEntries(ctx sdk.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress) bool {
ubd, found := k.GetUnbondingDelegation(ctx, delegatorAddr, validatorAddr)
if !found {
return false
@@ -355,9 +350,7 @@ func (k Keeper) SetUBDQueueTimeSlice(ctx sdk.Context, timestamp time.Time, keys
// InsertUBDQueue inserts an unbonding delegation to the appropriate timeslice
// in the unbonding queue.
-func (k Keeper) InsertUBDQueue(ctx sdk.Context, ubd types.UnbondingDelegation,
- completionTime time.Time,
-) {
+func (k Keeper) InsertUBDQueue(ctx sdk.Context, ubd types.UnbondingDelegation, completionTime time.Time) {
dvPair := types.DVPair{DelegatorAddress: ubd.DelegatorAddress, ValidatorAddress: ubd.ValidatorAddress}
timeSlice := k.GetUBDQueueTimeSlice(ctx, completionTime)
@@ -382,7 +375,7 @@ func (k Keeper) DequeueAllMatureUBDQueue(ctx sdk.Context, currTime time.Time) (m
store := ctx.KVStore(k.storeKey)
// gets an iterator for all timeslices from time 0 until the current Blockheader time
- unbondingTimesliceIterator := k.UBDQueueIterator(ctx, ctx.BlockHeader().Time)
+ unbondingTimesliceIterator := k.UBDQueueIterator(ctx, currTime)
defer unbondingTimesliceIterator.Close()
for ; unbondingTimesliceIterator.Valid(); unbondingTimesliceIterator.Next() {
@@ -399,9 +392,7 @@ func (k Keeper) DequeueAllMatureUBDQueue(ctx sdk.Context, currTime time.Time) (m
}
// GetRedelegations returns a given amount of all the delegator redelegations.
-func (k Keeper) GetRedelegations(ctx sdk.Context, delegator sdk.AccAddress,
- maxRetrieve uint16,
-) (redelegations []types.Redelegation) {
+func (k Keeper) GetRedelegations(ctx sdk.Context, delegator sdk.AccAddress, maxRetrieve uint16) (redelegations []types.Redelegation) {
redelegations = make([]types.Redelegation, maxRetrieve)
store := ctx.KVStore(k.storeKey)
@@ -421,8 +412,10 @@ func (k Keeper) GetRedelegations(ctx sdk.Context, delegator sdk.AccAddress,
}
// GetRedelegation returns a redelegation.
-func (k Keeper) GetRedelegation(ctx sdk.Context,
- delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress,
+func (k Keeper) GetRedelegation(
+ ctx sdk.Context,
+ delAddr sdk.AccAddress,
+ valSrcAddr, valDstAddr sdk.ValAddress,
) (red types.Redelegation, found bool) {
store := ctx.KVStore(k.storeKey)
key := types.GetREDKey(delAddr, valSrcAddr, valDstAddr)
@@ -456,9 +449,7 @@ func (k Keeper) GetRedelegationsFromSrcValidator(ctx sdk.Context, valAddr sdk.Va
}
// HasReceivingRedelegation checks if validator is receiving a redelegation.
-func (k Keeper) HasReceivingRedelegation(ctx sdk.Context,
- delAddr sdk.AccAddress, valDstAddr sdk.ValAddress,
-) bool {
+func (k Keeper) HasReceivingRedelegation(ctx sdk.Context, delAddr sdk.AccAddress, valDstAddr sdk.ValAddress) bool {
store := ctx.KVStore(k.storeKey)
prefix := types.GetREDsByDelToValDstIndexKey(delAddr, valDstAddr)
@@ -469,8 +460,10 @@ func (k Keeper) HasReceivingRedelegation(ctx sdk.Context,
}
// HasMaxRedelegationEntries checks if redelegation has maximum number of entries.
-func (k Keeper) HasMaxRedelegationEntries(ctx sdk.Context,
- delegatorAddr sdk.AccAddress, validatorSrcAddr,
+func (k Keeper) HasMaxRedelegationEntries(
+ ctx sdk.Context,
+ delegatorAddr sdk.AccAddress,
+ validatorSrcAddr sdk.ValAddress,
validatorDstAddr sdk.ValAddress,
) bool {
red, found := k.GetRedelegation(ctx, delegatorAddr, validatorSrcAddr, validatorDstAddr)
@@ -593,9 +586,7 @@ func (k Keeper) SetRedelegationQueueTimeSlice(ctx sdk.Context, timestamp time.Ti
// InsertRedelegationQueue insert an redelegation delegation to the appropriate
// timeslice in the redelegation queue.
-func (k Keeper) InsertRedelegationQueue(ctx sdk.Context, red types.Redelegation,
- completionTime time.Time,
-) {
+func (k Keeper) InsertRedelegationQueue(ctx sdk.Context, red types.Redelegation, completionTime time.Time) {
timeSlice := k.GetRedelegationQueueTimeSlice(ctx, completionTime)
dvvTriplet := types.DVVTriplet{
DelegatorAddress: red.DelegatorAddress,
@@ -657,7 +648,7 @@ func (k Keeper) Delegate(
// Get or create the delegation object
delegation, found := k.GetDelegation(ctx, delAddr, validator.GetOperator())
if !found {
- delegation = types.NewDelegation(delAddr, validator.GetOperator(), sdk.ZeroDec())
+ delegation = types.NewDelegation(delAddr, validator.GetOperator(), sdk.ZeroDec(), false)
}
// call the appropriate hook if present
@@ -667,6 +658,10 @@ func (k Keeper) Delegate(
k.BeforeDelegationCreated(ctx, delAddr, validator.GetOperator())
}
+ if err != nil {
+ return sdk.ZeroDec(), err
+ }
+
delegatorAddress := sdk.MustAccAddressFromBech32(delegation.DelegatorAddress)
// if subtractAccount is true then we are
@@ -754,16 +749,6 @@ func (k Keeper) Unbond(
return amount, err
}
- isValidatorOperator := delegatorAddress.Equals(validator.GetOperator())
-
- // If the delegation is the operator of the validator and undelegating will decrease the validator's
- // self-delegation below their minimum, we jail the validator.
- if isValidatorOperator && !validator.Jailed &&
- validator.TokensFromShares(delegation.Shares).TruncateInt().LT(validator.MinSelfDelegation) {
- k.jailValidator(ctx, validator)
- validator = k.mustGetValidator(ctx, validator.GetOperator())
- }
-
// remove the delegation
if delegation.Shares.IsZero() {
k.RemoveDelegation(ctx, delegation)
@@ -898,7 +883,8 @@ func (k Keeper) CompleteUnbonding(ctx sdk.Context, delAddr sdk.AccAddress, valAd
return balances, nil
}
-// begin unbonding / redelegation; create a redelegation record
+// BeginRedelegation begins unbonding / redelegation and creates a redelegation
+// record.
func (k Keeper) BeginRedelegation(
ctx sdk.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress, sharesAmount sdk.Dec,
) (completionTime time.Time, err error) {
diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go
index a3364bae970..fcc4b00a821 100644
--- a/x/staking/keeper/delegation_test.go
+++ b/x/staking/keeper/delegation_test.go
@@ -34,7 +34,7 @@ func TestDelegation(t *testing.T) {
validators[2] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[2], true)
// first add a validators[0] to delegate too
- bond1to1 := types.NewDelegation(addrDels[0], valAddrs[0], sdk.NewDec(9))
+ bond1to1 := types.NewDelegation(addrDels[0], valAddrs[0], sdk.NewDec(9), false)
// check the empty keeper first
_, found := app.StakingKeeper.GetDelegation(ctx, addrDels[0], valAddrs[0])
@@ -54,11 +54,11 @@ func TestDelegation(t *testing.T) {
require.Equal(t, bond1to1, resBond)
// add some more records
- bond1to2 := types.NewDelegation(addrDels[0], valAddrs[1], sdk.NewDec(9))
- bond1to3 := types.NewDelegation(addrDels[0], valAddrs[2], sdk.NewDec(9))
- bond2to1 := types.NewDelegation(addrDels[1], valAddrs[0], sdk.NewDec(9))
- bond2to2 := types.NewDelegation(addrDels[1], valAddrs[1], sdk.NewDec(9))
- bond2to3 := types.NewDelegation(addrDels[1], valAddrs[2], sdk.NewDec(9))
+ bond1to2 := types.NewDelegation(addrDels[0], valAddrs[1], sdk.NewDec(9), false)
+ bond1to3 := types.NewDelegation(addrDels[0], valAddrs[2], sdk.NewDec(9), false)
+ bond2to1 := types.NewDelegation(addrDels[1], valAddrs[0], sdk.NewDec(9), false)
+ bond2to2 := types.NewDelegation(addrDels[1], valAddrs[1], sdk.NewDec(9), false)
+ bond2to3 := types.NewDelegation(addrDels[1], valAddrs[2], sdk.NewDec(9), false)
app.StakingKeeper.SetDelegation(ctx, bond1to2)
app.StakingKeeper.SetDelegation(ctx, bond1to3)
app.StakingKeeper.SetDelegation(ctx, bond2to1)
@@ -206,9 +206,9 @@ func TestUnbondDelegation(t *testing.T) {
validator, issuedShares := validator.AddTokensFromDel(startTokens)
require.Equal(t, startTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
+ _ = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- delegation := types.NewDelegation(delAddrs[0], valAddrs[0], issuedShares)
+ delegation := types.NewDelegation(delAddrs[0], valAddrs[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
bondTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 6)
@@ -250,7 +250,7 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) {
require.True(sdk.IntEq(t, startTokens, validator.BondedTokens()))
require.True(t, validator.IsBonded())
- delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares)
+ delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
maxEntries := app.StakingKeeper.MaxEntries(ctx)
@@ -306,68 +306,6 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) {
require.True(sdk.IntEq(t, newNotBonded, oldNotBonded.AddRaw(1)))
}
-// test undelegating self delegation from a validator pushing it below MinSelfDelegation
-// shift it from the bonded to unbonding state and jailed
-func TestUndelegateSelfDelegationBelowMinSelfDelegation(t *testing.T) {
- _, app, ctx := createTestInput()
-
- addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.NewInt(10000))
- addrVals := simapp.ConvertAddrsToValAddrs(addrDels)
- delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- delCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delTokens))
-
- // create a validator with a self-delegation
- validator := teststaking.NewValidator(t, addrVals[0], PKs[0])
-
- validator.MinSelfDelegation = delTokens
- validator, issuedShares := validator.AddTokensFromDel(delTokens)
- require.Equal(t, delTokens, issuedShares.RoundInt())
-
- // add bonded tokens to pool for delegations
- notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
- require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), delCoins))
- app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
-
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
- require.True(t, validator.IsBonded())
-
- selfDelegation := types.NewDelegation(sdk.AccAddress(addrVals[0].Bytes()), addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, selfDelegation)
-
- // add bonded tokens to pool for delegations
- bondedPool := app.StakingKeeper.GetBondedPool(ctx)
- require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, bondedPool.GetName(), delCoins))
- app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
-
- // create a second delegation to this validator
- app.StakingKeeper.DeleteValidatorByPowerIndex(ctx, validator)
- validator, issuedShares = validator.AddTokensFromDel(delTokens)
- require.True(t, validator.IsBonded())
- require.Equal(t, delTokens, issuedShares.RoundInt())
-
- // add bonded tokens to pool for delegations
- require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, bondedPool.GetName(), delCoins))
- app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
-
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, delegation)
-
- val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
- _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], app.StakingKeeper.TokensFromConsensusPower(ctx, 6).ToDec())
- require.NoError(t, err)
-
- // end block
- applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 1)
-
- validator, found := app.StakingKeeper.GetValidator(ctx, addrVals[0])
- require.True(t, found)
- require.Equal(t, app.StakingKeeper.TokensFromConsensusPower(ctx, 14), validator.Tokens)
- require.Equal(t, types.Unbonding, validator.Status)
- require.True(t, validator.Jailed)
-}
-
func TestUndelegateFromUnbondingValidator(t *testing.T) {
_, app, ctx := createTestInput()
delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
@@ -391,7 +329,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
require.True(t, validator.IsBonded())
- selfDelegation := types.NewDelegation(addrVals[0].Bytes(), addrVals[0], issuedShares)
+ selfDelegation := types.NewDelegation(addrVals[0].Bytes(), addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
// add bonded tokens to pool for delegations
@@ -409,7 +347,7 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares)
+ delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, bondedPool.GetName(), delCoins))
@@ -422,10 +360,11 @@ func TestUndelegateFromUnbondingValidator(t *testing.T) {
header.Time = blockTime
ctx = ctx.WithBlockHeader(header)
- // unbond the all self-delegation to put validator in unbonding state
+ // unbond the and jail the validator to put it in an unbonding state
val0AccAddr := sdk.AccAddress(addrVals[0])
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
require.NoError(t, err)
+ app.StakingKeeper.Jail(ctx, sdk.GetConsAddress(PKs[0]))
// end block
applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 1)
@@ -478,7 +417,7 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) {
require.True(t, validator.IsBonded())
val0AccAddr := sdk.AccAddress(addrVals[0])
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
+ selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
// add bonded tokens to pool for delegations
@@ -492,15 +431,16 @@ func TestUndelegateFromUnbondedValidator(t *testing.T) {
require.Equal(t, delTokens, issuedShares.RoundInt())
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
require.True(t, validator.IsBonded())
- delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares)
+ delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
ctx = ctx.WithBlockHeight(10)
ctx = ctx.WithBlockTime(time.Unix(333, 0))
- // unbond the all self-delegation to put validator in unbonding state
+ // unbond the and jail the validator to put it in an unbonding state
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], valTokens.ToDec())
require.NoError(t, err)
+ app.StakingKeeper.Jail(ctx, sdk.GetConsAddress(PKs[0]))
// end block
applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 1)
@@ -560,7 +500,7 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) {
require.True(t, validator.IsBonded())
val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
+ selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
// create a second delegation to this validator
@@ -576,15 +516,16 @@ func TestUnbondingAllDelegationFromValidator(t *testing.T) {
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
require.True(t, validator.IsBonded())
- delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares)
+ delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
ctx = ctx.WithBlockHeight(10)
ctx = ctx.WithBlockTime(time.Unix(333, 0))
- // unbond the all self-delegation to put validator in unbonding state
+ // unbond the and jail the validator to put it in an unbonding state
_, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], valTokens.ToDec())
require.NoError(t, err)
+ app.StakingKeeper.Jail(ctx, sdk.GetConsAddress(PKs[0]))
// end block
applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 1)
@@ -720,7 +661,7 @@ func TestRedelegateToSameValidator(t *testing.T) {
require.True(t, validator.IsBonded())
val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
+ selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
_, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[0], sdk.NewDec(5))
@@ -746,9 +687,9 @@ func TestRedelegationMaxEntries(t *testing.T) {
valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
validator, issuedShares := validator.AddTokensFromDel(valTokens)
require.Equal(t, valTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
+ _ = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
+ selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, selfDelegation)
// create a second validator
@@ -783,211 +724,166 @@ func TestRedelegationMaxEntries(t *testing.T) {
require.NoError(t, err)
}
-func TestRedelegateSelfDelegation(t *testing.T) {
+func TestValidatorBondUndelegate(t *testing.T) {
_, app, ctx := createTestInput()
- addrDels := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(0))
+ addrDels := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
addrVals := simapp.ConvertAddrsToValAddrs(addrDels)
- startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 30)
- startCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens))
+ startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- // add bonded tokens to pool for delegations
+ bondDenom := app.StakingKeeper.BondDenom(ctx)
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
- require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startCoins))
- app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
-
- // create a validator with a self-delegation
- validator := teststaking.NewValidator(t, addrVals[0], PKs[0])
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
-
- valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- validator, issuedShares := validator.AddTokensFromDel(valTokens)
- require.Equal(t, valTokens, issuedShares.RoundInt())
-
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
-
- val0AccAddr := sdk.AccAddress(addrVals[0])
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, selfDelegation)
-
- // create a second validator
- validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1])
- validator2, issuedShares = validator2.AddTokensFromDel(valTokens)
- require.Equal(t, valTokens, issuedShares.RoundInt())
- validator2 = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator2, true)
- require.Equal(t, types.Bonded, validator2.Status)
-
- // create a second delegation to validator 1
- delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- validator, issuedShares = validator.AddTokensFromDel(delTokens)
- require.Equal(t, delTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
-
- delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, delegation)
-
- _, err := app.StakingKeeper.BeginRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1], delTokens.ToDec())
- require.NoError(t, err)
-
- // end block
- applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 2)
-
- validator, found := app.StakingKeeper.GetValidator(ctx, addrVals[0])
- require.True(t, found)
- require.Equal(t, valTokens, validator.Tokens)
- require.Equal(t, types.Unbonding, validator.Status)
-}
-
-func TestRedelegateFromUnbondingValidator(t *testing.T) {
- _, app, ctx := createTestInput()
- addrDels := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(0))
- addrVals := simapp.ConvertAddrsToValAddrs(addrDels)
-
- startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 30)
- startCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens))
-
- // add bonded tokens to pool for delegations
- notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
- require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startCoins))
+ require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens))))
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
- // create a validator with a self-delegation
+ // create a validator and a delegator to that validator
validator := teststaking.NewValidator(t, addrVals[0], PKs[0])
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
-
- valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- validator, issuedShares := validator.AddTokensFromDel(valTokens)
- require.Equal(t, valTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, selfDelegation)
+ validator.Status = types.Bonded
+ app.StakingKeeper.SetValidator(ctx, validator)
- // create a second delegation to this validator
- app.StakingKeeper.DeleteValidatorByPowerIndex(ctx, validator)
- delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- validator, issuedShares = validator.AddTokensFromDel(delTokens)
- require.Equal(t, delTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, delegation)
-
- // create a second validator
- validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1])
- validator2, issuedShares = validator2.AddTokensFromDel(valTokens)
- require.Equal(t, valTokens, issuedShares.RoundInt())
- validator2 = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator2, true)
+ // set validator bond factor
+ params := app.StakingKeeper.GetParams(ctx)
+ params.ValidatorBondFactor = sdk.NewDec(1)
+ app.StakingKeeper.SetParams(ctx, params)
- header := ctx.BlockHeader()
- blockHeight := int64(10)
- header.Height = blockHeight
- blockTime := time.Unix(333, 0)
- header.Time = blockTime
- ctx = ctx.WithBlockHeader(header)
+ // convert to validator self-bond
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
- // unbond the all self-delegation to put validator in unbonding state
- _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ err := delegateCoinsFromAccount(ctx, app, addrDels[0], startTokens, validator)
+ require.NoError(t, err)
+ _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{
+ DelegatorAddress: addrDels[0].String(),
+ ValidatorAddress: addrVals[0].String(),
+ })
require.NoError(t, err)
- // end block
- applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 1)
+ // tokenize share for 2nd account delegation
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator)
+ require.NoError(t, err)
+ tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{
+ DelegatorAddress: addrDels[1].String(),
+ ValidatorAddress: addrVals[0].String(),
+ Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
+ TokenizedShareOwner: addrDels[0].String(),
+ })
+ require.NoError(t, err)
- validator, found := app.StakingKeeper.GetValidator(ctx, addrVals[0])
- require.True(t, found)
- require.Equal(t, blockHeight, validator.UnbondingHeight)
- params := app.StakingKeeper.GetParams(ctx)
- require.True(t, blockTime.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
+ // try undelegating
+ _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{
+ DelegatorAddress: addrDels[0].String(),
+ ValidatorAddress: addrVals[0].String(),
+ Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
+ })
+ require.Error(t, err)
- // change the context
- header = ctx.BlockHeader()
- blockHeight2 := int64(20)
- header.Height = blockHeight2
- blockTime2 := time.Unix(444, 0)
- header.Time = blockTime2
- ctx = ctx.WithBlockHeader(header)
+ // redeem full amount on 2nd account and try undelegation
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator)
+ require.NoError(t, err)
+ _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{
+ DelegatorAddress: addrDels[1].String(),
+ Amount: tokenizeShareResp.Amount,
+ })
+ require.NoError(t, err)
- // unbond some of the other delegation's shares
- redelegateTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 6)
- _, err = app.StakingKeeper.BeginRedelegation(ctx, addrDels[1], addrVals[0], addrVals[1], redelegateTokens.ToDec())
+ // try undelegating
+ _, err = msgServer.Undelegate(sdk.WrapSDKContext(ctx), &types.MsgUndelegate{
+ DelegatorAddress: addrDels[0].String(),
+ ValidatorAddress: addrVals[0].String(),
+ Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
+ })
require.NoError(t, err)
- // retrieve the unbonding delegation
- ubd, found := app.StakingKeeper.GetRedelegation(ctx, addrDels[1], addrVals[0], addrVals[1])
- require.True(t, found)
- require.Len(t, ubd.Entries, 1)
- assert.Equal(t, blockHeight, ubd.Entries[0].CreationHeight)
- assert.True(t, blockTime.Add(params.UnbondingTime).Equal(ubd.Entries[0].CompletionTime))
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ require.Equal(t, validator.TotalValidatorBondShares, sdk.ZeroDec())
}
-func TestRedelegateFromUnbondedValidator(t *testing.T) {
+func TestValidatorBondRedelegate(t *testing.T) {
_, app, ctx := createTestInput()
- addrDels := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(0))
+ addrDels := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
addrVals := simapp.ConvertAddrsToValAddrs(addrDels)
- startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 30)
- startCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), startTokens))
+ startTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- // add bonded tokens to pool for delegations
+ bondDenom := app.StakingKeeper.BondDenom(ctx)
notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx)
- require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), startCoins))
+
+ require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens))))
app.AccountKeeper.SetModuleAccount(ctx, notBondedPool)
- // create a validator with a self-delegation
+ // create a validator and a delegator to that validator
validator := teststaking.NewValidator(t, addrVals[0], PKs[0])
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
-
- valTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- validator, issuedShares := validator.AddTokensFromDel(valTokens)
- require.Equal(t, valTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- val0AccAddr := sdk.AccAddress(addrVals[0].Bytes())
- selfDelegation := types.NewDelegation(val0AccAddr, addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, selfDelegation)
+ validator.Status = types.Bonded
+ app.StakingKeeper.SetValidator(ctx, validator)
+ validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1])
+ validator.Status = types.Bonded
+ app.StakingKeeper.SetValidator(ctx, validator2)
- // create a second delegation to this validator
- app.StakingKeeper.DeleteValidatorByPowerIndex(ctx, validator)
- delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 10)
- validator, issuedShares = validator.AddTokensFromDel(delTokens)
- require.Equal(t, delTokens, issuedShares.RoundInt())
- validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
- delegation := types.NewDelegation(addrDels[1], addrVals[0], issuedShares)
- app.StakingKeeper.SetDelegation(ctx, delegation)
+ // set validator bond factor
+ params := app.StakingKeeper.GetParams(ctx)
+ params.ValidatorBondFactor = sdk.NewDec(1)
+ app.StakingKeeper.SetParams(ctx, params)
- // create a second validator
- validator2 := teststaking.NewValidator(t, addrVals[1], PKs[1])
- validator2, issuedShares = validator2.AddTokensFromDel(valTokens)
- require.Equal(t, valTokens, issuedShares.RoundInt())
- validator2 = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator2, true)
- require.Equal(t, types.Bonded, validator2.Status)
+ // set total liquid stake
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(100))
- ctx = ctx.WithBlockHeight(10)
- ctx = ctx.WithBlockTime(time.Unix(333, 0))
+ // convert to validator self-bond
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
- // unbond the all self-delegation to put validator in unbonding state
- _, err := app.StakingKeeper.Undelegate(ctx, val0AccAddr, addrVals[0], delTokens.ToDec())
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ err := delegateCoinsFromAccount(ctx, app, addrDels[0], startTokens, validator)
+ require.NoError(t, err)
+ _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{
+ DelegatorAddress: addrDels[0].String(),
+ ValidatorAddress: addrVals[0].String(),
+ })
require.NoError(t, err)
- // end block
- applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 1)
+ // tokenize share for 2nd account delegation
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator)
+ require.NoError(t, err)
+ tokenizeShareResp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{
+ DelegatorAddress: addrDels[1].String(),
+ ValidatorAddress: addrVals[0].String(),
+ Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
+ TokenizedShareOwner: addrDels[0].String(),
+ })
+ require.NoError(t, err)
- validator, found := app.StakingKeeper.GetValidator(ctx, addrVals[0])
- require.True(t, found)
- require.Equal(t, ctx.BlockHeight(), validator.UnbondingHeight)
- params := app.StakingKeeper.GetParams(ctx)
- require.True(t, ctx.BlockHeader().Time.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
+ // try undelegating
+ _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{
+ DelegatorAddress: addrDels[0].String(),
+ ValidatorSrcAddress: addrVals[0].String(),
+ ValidatorDstAddress: addrVals[1].String(),
+ Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
+ })
+ require.Error(t, err)
- // unbond the validator
- app.StakingKeeper.UnbondingToUnbonded(ctx, validator)
+ // redeem full amount on 2nd account and try undelegation
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ err = delegateCoinsFromAccount(ctx, app, addrDels[1], startTokens, validator)
+ require.NoError(t, err)
+ _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{
+ DelegatorAddress: addrDels[1].String(),
+ Amount: tokenizeShareResp.Amount,
+ })
+ require.NoError(t, err)
- // redelegate some of the delegation's shares
- redelegationTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 6)
- _, err = app.StakingKeeper.BeginRedelegation(ctx, addrDels[1], addrVals[0], addrVals[1], redelegationTokens.ToDec())
+ // try undelegating
+ _, err = msgServer.BeginRedelegate(sdk.WrapSDKContext(ctx), &types.MsgBeginRedelegate{
+ DelegatorAddress: addrDels[0].String(),
+ ValidatorSrcAddress: addrVals[0].String(),
+ ValidatorDstAddress: addrVals[1].String(),
+ Amount: sdk.NewCoin(sdk.DefaultBondDenom, startTokens),
+ })
require.NoError(t, err)
- // no red should have been found
- red, found := app.StakingKeeper.GetRedelegation(ctx, addrDels[0], addrVals[0], addrVals[1])
- require.False(t, found, "%v", red)
+ validator, _ = app.StakingKeeper.GetValidator(ctx, addrVals[0])
+ require.Equal(t, validator.TotalValidatorBondShares, sdk.ZeroDec())
}
diff --git a/x/staking/keeper/grpc_query.go b/x/staking/keeper/grpc_query.go
index 79f9542adf2..7dd876eb72c 100644
--- a/x/staking/keeper/grpc_query.go
+++ b/x/staking/keeper/grpc_query.go
@@ -537,3 +537,149 @@ func queryAllRedelegations(store sdk.KVStore, k Querier, req *types.QueryRedeleg
return redels, res, err
}
+
+// Query for individual tokenize share record information by share by id
+func (k Querier) TokenizeShareRecordById(c context.Context, req *types.QueryTokenizeShareRecordByIdRequest) (*types.QueryTokenizeShareRecordByIdResponse, error) { //nolint:revive // fixing this would require changing the .proto files, so we might as well leave it alone
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+
+ ctx := sdk.UnwrapSDKContext(c)
+ record, err := k.GetTokenizeShareRecord(ctx, req.Id)
+ if err != nil {
+ return nil, err
+ }
+
+ return &types.QueryTokenizeShareRecordByIdResponse{
+ Record: record,
+ }, nil
+}
+
+// Query for individual tokenize share record information by share denom
+func (k Querier) TokenizeShareRecordByDenom(c context.Context, req *types.QueryTokenizeShareRecordByDenomRequest) (*types.QueryTokenizeShareRecordByDenomResponse, error) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+
+ ctx := sdk.UnwrapSDKContext(c)
+ record, err := k.GetTokenizeShareRecordByDenom(ctx, req.Denom)
+ if err != nil {
+ return nil, err
+ }
+
+ return &types.QueryTokenizeShareRecordByDenomResponse{
+ Record: record,
+ }, nil
+}
+
+// Query tokenize share records by address
+func (k Querier) TokenizeShareRecordsOwned(c context.Context, req *types.QueryTokenizeShareRecordsOwnedRequest) (*types.QueryTokenizeShareRecordsOwnedResponse, error) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+
+ ctx := sdk.UnwrapSDKContext(c)
+ owner, err := sdk.AccAddressFromBech32(req.Owner)
+ if err != nil {
+ return nil, err
+ }
+ records := k.GetTokenizeShareRecordsByOwner(ctx, owner)
+
+ return &types.QueryTokenizeShareRecordsOwnedResponse{
+ Records: records,
+ }, nil
+}
+
+// Query for all tokenize share records
+func (k Querier) AllTokenizeShareRecords(c context.Context, req *types.QueryAllTokenizeShareRecordsRequest) (*types.QueryAllTokenizeShareRecordsResponse, error) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+ ctx := sdk.UnwrapSDKContext(c)
+ records := k.GetAllTokenizeShareRecords(ctx)
+
+ return &types.QueryAllTokenizeShareRecordsResponse{
+ Records: records,
+ }, nil
+}
+
+// Query for last tokenize share record id
+func (k Querier) LastTokenizeShareRecordId(c context.Context, req *types.QueryLastTokenizeShareRecordIdRequest) (*types.QueryLastTokenizeShareRecordIdResponse, error) { //nolint:revive // fixing this would require changing the .proto files, so we might as well leave it alone
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+
+ ctx := sdk.UnwrapSDKContext(c)
+ return &types.QueryLastTokenizeShareRecordIdResponse{
+ Id: k.GetLastTokenizeShareRecordID(ctx),
+ }, nil
+}
+
+// Query for total tokenized staked assets
+func (k Querier) TotalTokenizeSharedAssets(c context.Context, req *types.QueryTotalTokenizeSharedAssetsRequest) (*types.QueryTotalTokenizeSharedAssetsResponse, error) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+ ctx := sdk.UnwrapSDKContext(c)
+ records := k.GetAllTokenizeShareRecords(ctx)
+ totalTokenizeShared := sdk.ZeroInt()
+
+ for _, record := range records {
+ moduleAcc := record.GetModuleAddress()
+ valAddr, err := sdk.ValAddressFromBech32(record.Validator)
+ if err != nil {
+ return nil, err
+ }
+
+ validator, found := k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ delegation, found := k.GetDelegation(ctx, moduleAcc, valAddr)
+ if !found {
+ return nil, types.ErrNoDelegation
+ }
+
+ tokens := validator.TokensFromShares(delegation.Shares)
+ totalTokenizeShared = totalTokenizeShared.Add(tokens.RoundInt())
+ }
+ return &types.QueryTotalTokenizeSharedAssetsResponse{
+ Value: sdk.NewCoin(k.BondDenom(ctx), totalTokenizeShared),
+ }, nil
+}
+
+// Query for total tokenized staked tokens
+// Liquid staked tokens are either tokenized delegations or delegations
+// owned by a module account
+func (k Querier) TotalLiquidStaked(c context.Context, req *types.QueryTotalLiquidStaked) (*types.QueryTotalLiquidStakedResponse, error) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+ ctx := sdk.UnwrapSDKContext(c)
+ totalLiquidStaked := k.GetTotalLiquidStakedTokens(ctx)
+ return &types.QueryTotalLiquidStakedResponse{
+ Tokens: totalLiquidStaked,
+ }, nil
+}
+
+// Query status of an account's tokenize share lock
+func (k Querier) TokenizeShareLockInfo(c context.Context, req *types.QueryTokenizeShareLockInfo) (*types.QueryTokenizeShareLockInfoResponse, error) {
+ if req == nil {
+ return nil, status.Error(codes.InvalidArgument, "empty request")
+ }
+ ctx := sdk.UnwrapSDKContext(c)
+
+ address := sdk.MustAccAddressFromBech32(req.Address)
+ status, completionTime := k.GetTokenizeSharesLock(ctx, address)
+
+ timeString := ""
+ if !completionTime.IsZero() {
+ timeString = completionTime.String()
+ }
+
+ return &types.QueryTokenizeShareLockInfoResponse{
+ Status: status.String(),
+ ExpirationTime: timeString,
+ }, nil
+}
diff --git a/x/staking/keeper/grpc_query_test.go b/x/staking/keeper/grpc_query_test.go
index 13155bd660f..b652851ebaa 100644
--- a/x/staking/keeper/grpc_query_test.go
+++ b/x/staking/keeper/grpc_query_test.go
@@ -804,12 +804,14 @@ func createValidators(t *testing.T, ctx sdk.Context, app *simapp.SimApp, powers
app.StakingKeeper.SetValidator(ctx, val1)
app.StakingKeeper.SetValidator(ctx, val2)
- app.StakingKeeper.SetValidatorByConsAddr(ctx, val1)
- app.StakingKeeper.SetValidatorByConsAddr(ctx, val2)
+ err := app.StakingKeeper.SetValidatorByConsAddr(ctx, val1)
+ require.NoError(t, err)
+ err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val2)
+ require.NoError(t, err)
app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val1)
app.StakingKeeper.SetNewValidatorByPowerIndex(ctx, val2)
- _, err := app.StakingKeeper.Delegate(ctx, addrs[0], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[0]), types.Unbonded, val1, true)
+ _, err = app.StakingKeeper.Delegate(ctx, addrs[0], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[0]), types.Unbonded, val1, true)
require.NoError(t, err)
_, err = app.StakingKeeper.Delegate(ctx, addrs[1], app.StakingKeeper.TokensFromConsensusPower(ctx, powers[1]), types.Unbonded, val2, true)
require.NoError(t, err)
diff --git a/x/staking/keeper/historical_info_test.go b/x/staking/keeper/historical_info_test.go
index db6c6a6b47a..5c7bb15cf2d 100644
--- a/x/staking/keeper/historical_info_test.go
+++ b/x/staking/keeper/historical_info_test.go
@@ -99,7 +99,7 @@ func TestTrackHistoricalInfo(t *testing.T) {
app.StakingKeeper.SetLastValidatorPower(ctx, val2.GetOperator(), 80)
vals := []types.Validator{val1, val2}
- IsValSetSorted(vals, app.StakingKeeper.PowerReduction(ctx))
+ require.True(t, IsValSetSorted(vals, app.StakingKeeper.PowerReduction(ctx)))
// Set Header for BeginBlock context
header := tmproto.Header{
diff --git a/x/staking/keeper/hooks.go b/x/staking/keeper/hooks.go
index 314daaf1bf2..7f4c3e87946 100644
--- a/x/staking/keeper/hooks.go
+++ b/x/staking/keeper/hooks.go
@@ -85,3 +85,11 @@ func (k Keeper) AfterUnbondingInitiated(ctx sdk.Context, id uint64) error {
}
return nil
}
+
+// This is called before a TokenizeShareRecord is removed
+func (k Keeper) BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordID uint64) error {
+ if k.hooks != nil {
+ return k.hooks.BeforeTokenizeShareRecordRemoved(ctx, recordID)
+ }
+ return nil
+}
diff --git a/x/staking/keeper/keeper.go b/x/staking/keeper/keeper.go
index 7f120af196f..ce3f3e6791b 100644
--- a/x/staking/keeper/keeper.go
+++ b/x/staking/keeper/keeper.go
@@ -3,13 +3,13 @@ package keeper
import (
"fmt"
- abci "github.com/tendermint/tendermint/abci/types"
"github.com/tendermint/tendermint/libs/log"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
"github.com/cosmos/cosmos-sdk/x/staking/types"
+ abci "github.com/tendermint/tendermint/abci/types"
)
// Implements ValidatorSet interface
diff --git a/x/staking/keeper/liquid_stake.go b/x/staking/keeper/liquid_stake.go
new file mode 100644
index 00000000000..e9353e558c3
--- /dev/null
+++ b/x/staking/keeper/liquid_stake.go
@@ -0,0 +1,319 @@
+package keeper
+
+import (
+ "time"
+
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
+ "github.com/cosmos/cosmos-sdk/x/staking/types"
+)
+
+// SetTotalLiquidStakedTokens stores the total outstanding tokens owned by a liquid staking provider
+func (k Keeper) SetTotalLiquidStakedTokens(ctx sdk.Context, tokens sdk.Int) {
+ store := ctx.KVStore(k.storeKey)
+
+ tokensBz, err := tokens.Marshal()
+ if err != nil {
+ panic(err)
+ }
+
+ store.Set(types.TotalLiquidStakedTokensKey, tokensBz)
+}
+
+// GetTotalLiquidStakedTokens returns the total outstanding tokens owned by a liquid staking provider
+// Returns zero if the total liquid stake amount has not been initialized
+func (k Keeper) GetTotalLiquidStakedTokens(ctx sdk.Context) sdk.Int {
+ store := ctx.KVStore(k.storeKey)
+ tokensBz := store.Get(types.TotalLiquidStakedTokensKey)
+
+ if tokensBz == nil {
+ return sdk.ZeroInt()
+ }
+
+ var tokens sdk.Int
+ if err := tokens.Unmarshal(tokensBz); err != nil {
+ panic(err)
+ }
+
+ return tokens
+}
+
+// Check if an account is a owned by a liquid staking provider
+// This is determined by checking if the account is a 32-length module account
+func (k Keeper) AccountIsLiquidStakingProvider(ctx sdk.Context, address sdk.AccAddress) bool {
+ account := k.authKeeper.GetAccount(ctx, address)
+ _, isModuleAccount := account.(*authtypes.ModuleAccount)
+ return isModuleAccount && len(address) == 32
+}
+
+// CheckExceedsGlobalLiquidStakingCap checks if a liquid delegation would cause the
+// global liquid staking cap to be exceeded
+// A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account
+// The total stake is determined by the balance of the bonded pool
+// If the delegation is for a tokenized share, the tokens are already included in the bonded pool
+// If the delegation is from an ICA account, we need to add the tokens to the current bonded pool
+// balance to get the total staked
+// Returns true if the cap is exceeded
+func (k Keeper) CheckExceedsGlobalLiquidStakingCap(ctx sdk.Context, tokens sdk.Int, tokenizingShares bool) bool {
+ liquidStakingCap := k.GlobalLiquidStakingCap(ctx)
+ liquidStakedAmount := k.GetTotalLiquidStakedTokens(ctx)
+
+ // Determine the total stake from the balance of the bonded pool
+ // If this is not a tokenized delegation, we need to add the tokens to the pool balance since
+ // they would not have been counted yet
+ // If this is for a tokenized delegation, the tokens are already included in the pool balance
+ totalStakedAmount := k.TotalBondedTokens(ctx)
+ if !tokenizingShares {
+ totalStakedAmount = totalStakedAmount.Add(tokens)
+ }
+
+ // Calculate the percentage of stake that is liquid
+ updatedLiquidStaked := liquidStakedAmount.Add(tokens).ToDec()
+ liquidStakePercent := updatedLiquidStaked.Quo(totalStakedAmount.ToDec())
+
+ return liquidStakePercent.GT(liquidStakingCap)
+}
+
+// CheckExceedsValidatorBondCap checks if a liquid delegation to a validator would cause
+// the liquid shares to exceed the validator bond factor
+// A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account
+// Returns true if the cap is exceeded
+func (k Keeper) CheckExceedsValidatorBondCap(ctx sdk.Context, validator types.Validator, shares sdk.Dec) bool {
+ validatorBondFactor := k.ValidatorBondFactor(ctx)
+ if validatorBondFactor.Equal(sdk.NewDec(-1)) {
+ return false
+ }
+ maxValLiquidShares := validator.TotalValidatorBondShares.Mul(validatorBondFactor)
+ return validator.TotalLiquidShares.Add(shares).GT(maxValLiquidShares)
+}
+
+// CheckExceedsValidatorLiquidStakingCap checks if a liquid delegation could cause the
+// total liuquid shares to exceed the liquid staking cap
+// A liquid delegation is defined as either tokenized shares, or a delegation from an ICA Account
+// Returns true if the cap is exceeded
+func (k Keeper) CheckExceedsValidatorLiquidStakingCap(ctx sdk.Context, validator types.Validator, shares sdk.Dec) bool {
+ updatedLiquidShares := validator.TotalLiquidShares.Add(shares)
+ updatedTotalShares := validator.DelegatorShares.Add(shares)
+
+ liquidStakePercent := updatedLiquidShares.Quo(updatedTotalShares)
+ liquidStakingCap := k.ValidatorLiquidStakingCap(ctx)
+
+ return liquidStakePercent.GT(liquidStakingCap)
+}
+
+// SafelyIncreaseTotalLiquidStakedTokens increments the total liquid staked tokens
+// if the global cap is not surpassed by this delegation
+func (k Keeper) SafelyIncreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int, tokenizingShares bool) error {
+ if k.CheckExceedsGlobalLiquidStakingCap(ctx, amount, tokenizingShares) {
+ return types.ErrGlobalLiquidStakingCapExceeded
+ }
+
+ k.SetTotalLiquidStakedTokens(ctx, k.GetTotalLiquidStakedTokens(ctx).Add(amount))
+ return nil
+}
+
+// DecreaseTotalLiquidStakedTokens decrements the total liquid staked tokens
+func (k Keeper) DecreaseTotalLiquidStakedTokens(ctx sdk.Context, amount sdk.Int) {
+ k.SetTotalLiquidStakedTokens(ctx, k.GetTotalLiquidStakedTokens(ctx).Sub(amount))
+}
+
+// SafelyIncreaseValidatorTotalLiquidShares increments the total liquid shares on a validator, if:
+// the validator bond factor and validator liquid staking cap will not be exceeded by this delegation
+func (k Keeper) SafelyIncreaseValidatorTotalLiquidShares(ctx sdk.Context, validator types.Validator, shares sdk.Dec) error {
+ // Confirm the validator bond factor and validator liquid staking cap will be not exceeded
+ if k.CheckExceedsValidatorBondCap(ctx, validator, shares) {
+ return types.ErrInsufficientValidatorBondShares
+ }
+ if k.CheckExceedsValidatorLiquidStakingCap(ctx, validator, shares) {
+ return types.ErrValidatorLiquidStakingCapExceeded
+ }
+
+ // Increment the validator's total liquid shares
+ validator.TotalLiquidShares = validator.TotalLiquidShares.Add(shares)
+ k.SetValidator(ctx, validator)
+
+ return nil
+}
+
+// DecreaseValidatorTotalLiquidShares decrements the total liquid shares on a validator
+func (k Keeper) DecreaseValidatorTotalLiquidShares(ctx sdk.Context, validator types.Validator, shares sdk.Dec) {
+ validator.TotalLiquidShares = validator.TotalLiquidShares.Sub(shares)
+ k.SetValidator(ctx, validator)
+}
+
+// SafelyDecreaseValidatorBond decrements the total validator's self bond
+// so long as it will not cause the current delegations to exceed the threshold
+// set by validator bond factor
+func (k Keeper) SafelyDecreaseValidatorBond(ctx sdk.Context, validator types.Validator, shares sdk.Dec) error {
+ // Check if the decreased self bond will cause the validator bond threshold to be exceeded
+ validatorBondFactor := k.ValidatorBondFactor(ctx)
+ maxValTotalShare := validator.TotalValidatorBondShares.Sub(shares).Mul(validatorBondFactor)
+ if validator.TotalLiquidShares.GT(maxValTotalShare) {
+ return types.ErrInsufficientValidatorBondShares
+ }
+
+ // Decrement the validator's total self bond
+ validator.TotalValidatorBondShares = validator.TotalValidatorBondShares.Sub(shares)
+ k.SetValidator(ctx, validator)
+
+ return nil
+}
+
+// Adds a lock that prevents tokenizing shares for an account
+// The tokenize share lock store is implemented by keying on the account address
+// and storing a timestamp as the value. The timestamp is empty when the lock is
+// set and gets populated with the unlock completion time once the unlock has started
+func (k Keeper) AddTokenizeSharesLock(ctx sdk.Context, address sdk.AccAddress) {
+ store := ctx.KVStore(k.storeKey)
+ key := types.GetTokenizeSharesLockKey(address)
+ store.Set(key, sdk.FormatTimeBytes(time.Time{}))
+}
+
+// Removes the tokenize share lock for an account to enable tokenizing shares
+func (k Keeper) RemoveTokenizeSharesLock(ctx sdk.Context, address sdk.AccAddress) {
+ store := ctx.KVStore(k.storeKey)
+ key := types.GetTokenizeSharesLockKey(address)
+ store.Delete(key)
+}
+
+// Updates the timestamp associated with a lock to the time at which the lock expires
+func (k Keeper) SetTokenizeSharesUnlockTime(ctx sdk.Context, address sdk.AccAddress, completionTime time.Time) {
+ store := ctx.KVStore(k.storeKey)
+ key := types.GetTokenizeSharesLockKey(address)
+ store.Set(key, sdk.FormatTimeBytes(completionTime))
+}
+
+// Checks if there is currently a tokenize share lock for a given account
+// Returns the status indicating whether the account is locked, unlocked,
+// or as a lock expiring. If the lock is expiring, the expiration time is returned
+func (k Keeper) GetTokenizeSharesLock(ctx sdk.Context, address sdk.AccAddress) (status types.TokenizeShareLockStatus, unlockTime time.Time) {
+ store := ctx.KVStore(k.storeKey)
+ key := types.GetTokenizeSharesLockKey(address)
+ bz := store.Get(key)
+ if len(bz) == 0 {
+ return types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED, time.Time{}
+ }
+ unlockTime, err := sdk.ParseTimeBytes(bz)
+ if err != nil {
+ panic(err)
+ }
+ if unlockTime.IsZero() {
+ return types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED, time.Time{}
+ }
+ return types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING, unlockTime
+}
+
+// Stores a list of addresses pending tokenize share unlocking at the same time
+func (k Keeper) SetPendingTokenizeShareAuthorizations(ctx sdk.Context, completionTime time.Time, authorizations types.PendingTokenizeShareAuthorizations) {
+ store := ctx.KVStore(k.storeKey)
+ timeKey := types.GetTokenizeShareAuthorizationTimeKey(completionTime)
+ bz := k.cdc.MustMarshal(&authorizations)
+ store.Set(timeKey, bz)
+}
+
+// Returns a list of addresses pending tokenize share unlocking at the same time
+func (k Keeper) GetPendingTokenizeShareAuthorizations(ctx sdk.Context, completionTime time.Time) types.PendingTokenizeShareAuthorizations {
+ store := ctx.KVStore(k.storeKey)
+
+ timeKey := types.GetTokenizeShareAuthorizationTimeKey(completionTime)
+ bz := store.Get(timeKey)
+
+ authorizations := types.PendingTokenizeShareAuthorizations{Addresses: []string{}}
+ if len(bz) == 0 {
+ return authorizations
+ }
+ k.cdc.MustUnmarshal(bz, &authorizations)
+
+ return authorizations
+}
+
+// Inserts the address into a queue where it will sit for 1 unbonding period
+// before the tokenize share lock is removed
+// Returns the completion time
+func (k Keeper) QueueTokenizeSharesAuthorization(ctx sdk.Context, address sdk.AccAddress) time.Time {
+ params := k.GetParams(ctx)
+ completionTime := ctx.BlockTime().Add(params.UnbondingTime)
+
+ // Append the address to the list of addresses that also unlock at this time
+ authorizations := k.GetPendingTokenizeShareAuthorizations(ctx, completionTime)
+ authorizations.Addresses = append(authorizations.Addresses, address.String())
+
+ k.SetPendingTokenizeShareAuthorizations(ctx, completionTime, authorizations)
+ k.SetTokenizeSharesUnlockTime(ctx, address, completionTime)
+
+ return completionTime
+}
+
+// Unlocks all queued tokenize share authorizations that have matured
+// (i.e. have waited the full unbonding period)
+func (k Keeper) RemoveExpiredTokenizeShareLocks(ctx sdk.Context, blockTime time.Time) (unlockedAddresses []string) {
+ store := ctx.KVStore(k.storeKey)
+
+ // iterators all time slices from time 0 until the current block time
+ prefixEnd := sdk.InclusiveEndBytes(types.GetTokenizeShareAuthorizationTimeKey(blockTime))
+ iterator := store.Iterator(types.TokenizeSharesUnlockQueueKey, prefixEnd)
+ defer iterator.Close()
+
+ unlockedAddresses = []string{}
+ for ; iterator.Valid(); iterator.Next() {
+ authorizations := types.PendingTokenizeShareAuthorizations{}
+ k.cdc.MustUnmarshal(iterator.Value(), &authorizations)
+
+ for _, addressString := range authorizations.Addresses {
+ k.RemoveTokenizeSharesLock(ctx, sdk.MustAccAddressFromBech32(addressString))
+ unlockedAddresses = append(unlockedAddresses, addressString)
+ }
+ store.Delete(iterator.Key())
+ }
+
+ return unlockedAddresses
+}
+
+// Calculates and sets the global liquid staked tokens and total liquid shares by validator
+// The totals are determined by looping each delegation record and summing the stake
+// if the delegator is a module account. Checking for a module account will capture
+// ICA accounts, as well as tokenized delegationswhich are owned by module accounts
+// under the hood
+// This function must be called in the upgrade handler which onboards LSM, as
+// well as any time the liquid staking cap is re-enabled
+func (k Keeper) RefreshTotalLiquidStaked(ctx sdk.Context) error {
+ // First reset each validator's liquid shares to 0
+ for _, validator := range k.GetAllValidators(ctx) {
+ validator.TotalLiquidShares = sdk.ZeroDec()
+ k.SetValidator(ctx, validator)
+ }
+
+ // Sum up the total liquid tokens and increment each validator's total liquid shares
+ totalLiquidStakedTokens := sdk.ZeroInt()
+ for _, delegation := range k.GetAllDelegations(ctx) {
+ delegatorAddress, err := sdk.AccAddressFromBech32(delegation.DelegatorAddress)
+ if err != nil {
+ return err
+ }
+ validatorAddress, err := sdk.ValAddressFromBech32(delegation.ValidatorAddress)
+ if err != nil {
+ return err
+ }
+
+ validator, found := k.GetValidator(ctx, validatorAddress)
+ if !found {
+ return types.ErrNoValidatorFound
+ }
+
+ // If the account is a liquid staking provider, increment the global number
+ // of liquid staked tokens, and the total liquid shares on the validator
+ if k.AccountIsLiquidStakingProvider(ctx, delegatorAddress) {
+ liquidShares := delegation.Shares
+ liquidTokens := validator.TokensFromShares(liquidShares).TruncateInt()
+
+ validator.TotalLiquidShares = validator.TotalLiquidShares.Add(liquidShares)
+ k.SetValidator(ctx, validator)
+
+ totalLiquidStakedTokens = totalLiquidStakedTokens.Add(liquidTokens)
+ }
+ }
+
+ k.SetTotalLiquidStakedTokens(ctx, totalLiquidStakedTokens)
+
+ return nil
+}
diff --git a/x/staking/keeper/liquid_stake_test.go b/x/staking/keeper/liquid_stake_test.go
new file mode 100644
index 00000000000..4b7639f638e
--- /dev/null
+++ b/x/staking/keeper/liquid_stake_test.go
@@ -0,0 +1,1057 @@
+package keeper_test
+
+import (
+ "testing"
+ "time"
+
+ "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
+ "github.com/cosmos/cosmos-sdk/simapp"
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ "github.com/cosmos/cosmos-sdk/types/address"
+ authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
+ minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
+ "github.com/cosmos/cosmos-sdk/x/staking/types"
+ "github.com/stretchr/testify/require"
+)
+
+// Helper function to create a base account from an account name
+// Used to differentiate against liquid staking provider module account
+func createBaseAccount(app *simapp.SimApp, ctx sdk.Context, accountName string) sdk.AccAddress {
+ baseAccountAddress := sdk.AccAddress(accountName)
+ app.AccountKeeper.SetAccount(ctx, authtypes.NewBaseAccountWithAddress(baseAccountAddress))
+ return baseAccountAddress
+}
+
+// Helper function to create a module account from an account name
+// Used to mock an liquid staking provider's ICA account
+func createICAAccount(app *simapp.SimApp, ctx sdk.Context, accountName string) sdk.AccAddress {
+ accountAddress := address.Module(accountName, []byte(accountName))
+ account := authtypes.NewModuleAccount(
+ authtypes.NewBaseAccountWithAddress(accountAddress),
+ accountName,
+ )
+ app.AccountKeeper.SetAccount(ctx, account)
+
+ return accountAddress
+}
+
+// Tests Set/Get TotalLiquidStakedTokens
+func TestTotalLiquidStakedTokens(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // Update the total liquid staked
+ total := sdk.NewInt(100)
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, total)
+
+ // Confirm it was updated
+ require.Equal(t, total, app.StakingKeeper.GetTotalLiquidStakedTokens(ctx), "initial")
+}
+
+// Tests Increase/Decrease TotalValidatorTotalLiquidShares
+func TestValidatorTotalLiquidShares(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // Create a validator address
+ privKey := secp256k1.GenPrivKey()
+ pubKey := privKey.PubKey()
+ valAddress := sdk.ValAddress(pubKey.Address())
+
+ // Set an initial total
+ initial := sdk.NewDec(100)
+ validator := types.Validator{
+ OperatorAddress: valAddress.String(),
+ TotalLiquidShares: initial,
+ }
+ app.StakingKeeper.SetValidator(ctx, validator)
+}
+
+// Tests AccountIsLiquidStakingProvider
+func TestAccountIsLiquidStakingProvider(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // Create base and ICA accounts
+ baseAccountAddress := createBaseAccount(app, ctx, "base-account")
+ icaAccountAddress := createICAAccount(app, ctx, "ica-module-account")
+
+ // Only the ICA module account should be considered a liquid staking provider
+ require.False(t, app.StakingKeeper.AccountIsLiquidStakingProvider(ctx, baseAccountAddress), "base account")
+ require.True(t, app.StakingKeeper.AccountIsLiquidStakingProvider(ctx, icaAccountAddress), "ICA module account")
+}
+
+// Helper function to clear the Bonded pool balances before a unit test
+func clearPoolBalance(t *testing.T, app *simapp.SimApp, ctx sdk.Context) {
+ bondDenom := app.StakingKeeper.BondDenom(ctx)
+ initialBondedBalance := app.BankKeeper.GetBalance(ctx, app.AccountKeeper.GetModuleAddress(types.BondedPoolName), bondDenom)
+
+ err := app.BankKeeper.SendCoinsFromModuleToModule(ctx, types.BondedPoolName, minttypes.ModuleName, sdk.NewCoins(initialBondedBalance))
+ require.NoError(t, err, "no error expected when clearing bonded pool balance")
+}
+
+// Helper function to fund the Bonded pool balances before a unit test
+func fundPoolBalance(t *testing.T, app *simapp.SimApp, ctx sdk.Context, amount sdk.Int) {
+ bondDenom := app.StakingKeeper.BondDenom(ctx)
+ bondedPoolCoin := sdk.NewCoin(bondDenom, amount)
+
+ err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(bondedPoolCoin))
+ require.NoError(t, err, "no error expected when minting")
+
+ err = app.BankKeeper.SendCoinsFromModuleToModule(ctx, minttypes.ModuleName, types.BondedPoolName, sdk.NewCoins(bondedPoolCoin))
+ require.NoError(t, err, "no error expected when sending tokens to bonded pool")
+}
+
+// Tests CheckExceedsGlobalLiquidStakingCap
+func TestCheckExceedsGlobalLiquidStakingCap(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ testCases := []struct {
+ name string
+ globalLiquidCap sdk.Dec
+ totalLiquidStake sdk.Int
+ totalStake sdk.Int
+ newLiquidStake sdk.Int
+ tokenizingShares bool
+ expectedExceeds bool
+ }{
+ {
+ // Cap: 10% - Native Delegation - Delegation Below Threshold
+ // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 1
+ // => Total Liquid Stake: 5+1=6, Total Stake: 95+1=96 => 6/96 = 6% < 10% cap
+ name: "10 percent cap _ native delegation _ delegation below cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.1"),
+ totalLiquidStake: sdk.NewInt(5),
+ totalStake: sdk.NewInt(95),
+ newLiquidStake: sdk.NewInt(1),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 10% - Native Delegation - Delegation At Threshold
+ // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 5
+ // => Total Liquid Stake: 5+5=10, Total Stake: 95+5=100 => 10/100 = 10% == 10% cap
+ name: "10 percent cap _ native delegation _ delegation equals cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.1"),
+ totalLiquidStake: sdk.NewInt(5),
+ totalStake: sdk.NewInt(95),
+ newLiquidStake: sdk.NewInt(5),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 10% - Native Delegation - Delegation Exceeds Threshold
+ // Total Liquid Stake: 5, Total Stake: 95, New Liquid Stake: 6
+ // => Total Liquid Stake: 5+6=11, Total Stake: 95+6=101 => 11/101 = 11% > 10% cap
+ name: "10 percent cap _ native delegation _ delegation exceeds cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.1"),
+ totalLiquidStake: sdk.NewInt(5),
+ totalStake: sdk.NewInt(95),
+ newLiquidStake: sdk.NewInt(6),
+ tokenizingShares: false,
+ expectedExceeds: true,
+ },
+ {
+ // Cap: 20% - Native Delegation - Delegation Below Threshold
+ // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 29
+ // => Total Liquid Stake: 20+29=49, Total Stake: 220+29=249 => 49/249 = 19% < 20% cap
+ name: "20 percent cap _ native delegation _ delegation below cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.20"),
+ totalLiquidStake: sdk.NewInt(20),
+ totalStake: sdk.NewInt(220),
+ newLiquidStake: sdk.NewInt(29),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 20% - Native Delegation - Delegation At Threshold
+ // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 30
+ // => Total Liquid Stake: 20+30=50, Total Stake: 220+30=250 => 50/250 = 20% == 20% cap
+ name: "20 percent cap _ native delegation _ delegation equals cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.20"),
+ totalLiquidStake: sdk.NewInt(20),
+ totalStake: sdk.NewInt(220),
+ newLiquidStake: sdk.NewInt(30),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 20% - Native Delegation - Delegation Exceeds Threshold
+ // Total Liquid Stake: 20, Total Stake: 220, New Liquid Stake: 31
+ // => Total Liquid Stake: 20+31=51, Total Stake: 220+31=251 => 51/251 = 21% > 20% cap
+ name: "20 percent cap _ native delegation _ delegation exceeds cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.20"),
+ totalLiquidStake: sdk.NewInt(20),
+ totalStake: sdk.NewInt(220),
+ newLiquidStake: sdk.NewInt(31),
+ tokenizingShares: false,
+ expectedExceeds: true,
+ },
+ {
+ // Cap: 50% - Native Delegation - Delegation Below Threshold
+ // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50
+ // => Total Liquid Stake: 0+50=50, Total Stake: 100+50=150 => 50/150 = 33% < 50% cap
+ name: "50 percent cap _ native delegation _ delegation below cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.5"),
+ totalLiquidStake: sdk.NewInt(0),
+ totalStake: sdk.NewInt(100),
+ newLiquidStake: sdk.NewInt(50),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 50% - Tokenized Delegation - Delegation At Threshold
+ // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 50
+ // => 50 / 100 = 50% == 50% cap
+ name: "50 percent cap _ tokenized delegation _ delegation equals cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.5"),
+ totalLiquidStake: sdk.NewInt(0),
+ totalStake: sdk.NewInt(100),
+ newLiquidStake: sdk.NewInt(50),
+ tokenizingShares: true,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 50% - Native Delegation - Delegation Below Threshold
+ // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51
+ // => Total Liquid Stake: 0+51=51, Total Stake: 100+51=151 => 51/151 = 33% < 50% cap
+ name: "50 percent cap _ native delegation _ delegation below cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.5"),
+ totalLiquidStake: sdk.NewInt(0),
+ totalStake: sdk.NewInt(100),
+ newLiquidStake: sdk.NewInt(51),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 50% - Tokenized Delegation - Delegation Exceeds Threshold
+ // Total Liquid Stake: 0, Total Stake: 100, New Liquid Stake: 51
+ // => 51 / 100 = 51% > 50% cap
+ name: "50 percent cap _ tokenized delegation _delegation exceeds cap",
+ globalLiquidCap: sdk.MustNewDecFromStr("0.5"),
+ totalLiquidStake: sdk.NewInt(0),
+ totalStake: sdk.NewInt(100),
+ newLiquidStake: sdk.NewInt(51),
+ tokenizingShares: true,
+ expectedExceeds: true,
+ },
+ {
+ // Cap of 0% - everything should exceed
+ name: "0 percent cap",
+ globalLiquidCap: sdk.ZeroDec(),
+ totalLiquidStake: sdk.NewInt(0),
+ totalStake: sdk.NewInt(1_000_000),
+ newLiquidStake: sdk.NewInt(1),
+ tokenizingShares: false,
+ expectedExceeds: true,
+ },
+ {
+ // Cap of 100% - nothing should exceed
+ name: "100 percent cap",
+ globalLiquidCap: sdk.OneDec(),
+ totalLiquidStake: sdk.NewInt(1),
+ totalStake: sdk.NewInt(1),
+ newLiquidStake: sdk.NewInt(1_000_000),
+ tokenizingShares: false,
+ expectedExceeds: false,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ // Update the global liquid staking cap
+ params := app.StakingKeeper.GetParams(ctx)
+ params.GlobalLiquidStakingCap = tc.globalLiquidCap
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Update the total liquid tokens
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, tc.totalLiquidStake)
+
+ // Fund each pool for the given test case
+ clearPoolBalance(t, app, ctx)
+ fundPoolBalance(t, app, ctx, tc.totalStake)
+
+ // Check if the new tokens would exceed the global cap
+ actualExceeds := app.StakingKeeper.CheckExceedsGlobalLiquidStakingCap(ctx, tc.newLiquidStake, tc.tokenizingShares)
+ require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name)
+ })
+ }
+}
+
+// Tests SafelyIncreaseTotalLiquidStakedTokens
+func TestSafelyIncreaseTotalLiquidStakedTokens(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ intitialTotalLiquidStaked := sdk.NewInt(100)
+ increaseAmount := sdk.NewInt(10)
+ poolBalance := sdk.NewInt(200)
+
+ // Set the total staked and total liquid staked amounts
+ // which are required components when checking the global cap
+ // Total stake is calculated from the pool balance
+ clearPoolBalance(t, app, ctx)
+ fundPoolBalance(t, app, ctx, poolBalance)
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked)
+
+ // Set the global cap such that a small delegation would exceed the cap
+ params := app.StakingKeeper.GetParams(ctx)
+ params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.0001")
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Attempt to increase the total liquid stake again, it should error since
+ // the cap was exceeded
+ err := app.StakingKeeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true)
+ require.ErrorIs(t, err, types.ErrGlobalLiquidStakingCapExceeded)
+ require.Equal(t, intitialTotalLiquidStaked, app.StakingKeeper.GetTotalLiquidStakedTokens(ctx))
+
+ // Now relax the cap so that the increase succeeds
+ params.GlobalLiquidStakingCap = sdk.MustNewDecFromStr("0.99")
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Confirm the total increased
+ err = app.StakingKeeper.SafelyIncreaseTotalLiquidStakedTokens(ctx, increaseAmount, true)
+ require.NoError(t, err)
+ require.Equal(t, intitialTotalLiquidStaked.Add(increaseAmount), app.StakingKeeper.GetTotalLiquidStakedTokens(ctx))
+}
+
+// Tests DecreaseTotalLiquidStakedTokens
+func TestDecreaseTotalLiquidStakedTokens(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ intitialTotalLiquidStaked := sdk.NewInt(100)
+ decreaseAmount := sdk.NewInt(10)
+
+ // Set the total liquid staked to an arbitrary value
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, intitialTotalLiquidStaked)
+
+ // Decrease the total liquid stake and confirm the total was updated
+ app.StakingKeeper.DecreaseTotalLiquidStakedTokens(ctx, decreaseAmount)
+ require.Equal(t, intitialTotalLiquidStaked.Sub(decreaseAmount), app.StakingKeeper.GetTotalLiquidStakedTokens(ctx))
+}
+
+// Tests CheckExceedsValidatorBondCap
+func TestCheckExceedsValidatorBondCap(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ testCases := []struct {
+ name string
+ validatorShares sdk.Dec
+ validatorBondFactor sdk.Dec
+ currentLiquidShares sdk.Dec
+ newShares sdk.Dec
+ expectedExceeds bool
+ }{
+ {
+ // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10
+ // New Shares: 5 - below cap
+ name: "factor 1 - below cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(1),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(5),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10
+ // New Shares: 10 - at cap
+ name: "factor 1 - at cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(1),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(10),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 1, Current Shares: 90 => 100 Max Shares, Capacity: 10
+ // New Shares: 15 - above cap
+ name: "factor 1 - above cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(1),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(15),
+ expectedExceeds: true,
+ },
+ {
+ // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110
+ // New Shares: 5 - below cap
+ name: "factor 2 - well below cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(2),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(5),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110
+ // New Shares: 100 - below cap
+ name: "factor 2 - below cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(2),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(100),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110
+ // New Shares: 110 - below cap
+ name: "factor 2 - at cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(2),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(110),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 2, Current Shares: 90 => 200 Max Shares, Capacity: 110
+ // New Shares: 111 - above cap
+ name: "factor 2 - above cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(2),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(111),
+ expectedExceeds: true,
+ },
+ {
+ // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910
+ // New Shares: 100 - below cap
+ name: "factor 100 - below cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(100),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(100),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910
+ // New Shares: 9910 - at cap
+ name: "factor 100 - at cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(100),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(9910),
+ expectedExceeds: false,
+ },
+ {
+ // Validator Shares: 100, Factor: 100, Current Shares: 90 => 10000 Max Shares, Capacity: 9910
+ // New Shares: 9911 - above cap
+ name: "factor 100 - above cap",
+ validatorShares: sdk.NewDec(100),
+ validatorBondFactor: sdk.NewDec(100),
+ currentLiquidShares: sdk.NewDec(90),
+ newShares: sdk.NewDec(9911),
+ expectedExceeds: true,
+ },
+ {
+ // Factor of -1 (disabled): Should always return false
+ name: "factor disabled",
+ validatorShares: sdk.NewDec(1),
+ validatorBondFactor: sdk.NewDec(-1),
+ currentLiquidShares: sdk.NewDec(1),
+ newShares: sdk.NewDec(1_000_000),
+ expectedExceeds: false,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ // Update the validator bond factor
+ params := app.StakingKeeper.GetParams(ctx)
+ params.ValidatorBondFactor = tc.validatorBondFactor
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Create a validator with designated self-bond shares
+ validator := types.Validator{
+ TotalLiquidShares: tc.currentLiquidShares,
+ TotalValidatorBondShares: tc.validatorShares,
+ }
+
+ // Check whether the cap is exceeded
+ actualExceeds := app.StakingKeeper.CheckExceedsValidatorBondCap(ctx, validator, tc.newShares)
+ require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name)
+ })
+ }
+}
+
+// Tests TestCheckExceedsValidatorLiquidStakingCap
+func TestCheckExceedsValidatorLiquidStakingCap(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ testCases := []struct {
+ name string
+ validatorLiquidCap sdk.Dec
+ validatorLiquidShares sdk.Dec
+ validatorTotalShares sdk.Dec
+ newLiquidShares sdk.Dec
+ expectedExceeds bool
+ }{
+ {
+ // Cap: 10% - Delegation Below Threshold
+ // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 1
+ // => Liquid Shares: 5+1=6, Total Shares: 95+1=96 => 6/96 = 6% < 10% cap
+ name: "10 percent cap _ delegation below cap",
+ validatorLiquidCap: sdk.MustNewDecFromStr("0.1"),
+ validatorLiquidShares: sdk.NewDec(5),
+ validatorTotalShares: sdk.NewDec(95),
+ newLiquidShares: sdk.NewDec(1),
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 10% - Delegation At Threshold
+ // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 5
+ // => Liquid Shares: 5+5=10, Total Shares: 95+5=100 => 10/100 = 10% == 10% cap
+ name: "10 percent cap _ delegation equals cap",
+ validatorLiquidCap: sdk.MustNewDecFromStr("0.1"),
+ validatorLiquidShares: sdk.NewDec(5),
+ validatorTotalShares: sdk.NewDec(95),
+ newLiquidShares: sdk.NewDec(4),
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 10% - Delegation Exceeds Threshold
+ // Liquid Shares: 5, Total Shares: 95, New Liquid Shares: 6
+ // => Liquid Shares: 5+6=11, Total Shares: 95+6=101 => 11/101 = 11% > 10% cap
+ name: "10 percent cap _ delegation exceeds cap",
+ validatorLiquidCap: sdk.MustNewDecFromStr("0.1"),
+ validatorLiquidShares: sdk.NewDec(5),
+ validatorTotalShares: sdk.NewDec(95),
+ newLiquidShares: sdk.NewDec(6),
+ expectedExceeds: true,
+ },
+ {
+ // Cap: 20% - Delegation Below Threshold
+ // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 29
+ // => Liquid Shares: 20+29=49, Total Shares: 220+29=249 => 49/249 = 19% < 20% cap
+ name: "20 percent cap _ delegation below cap",
+ validatorLiquidCap: sdk.MustNewDecFromStr("0.2"),
+ validatorLiquidShares: sdk.NewDec(20),
+ validatorTotalShares: sdk.NewDec(220),
+ newLiquidShares: sdk.NewDec(29),
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 20% - Delegation At Threshold
+ // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 30
+ // => Liquid Shares: 20+30=50, Total Shares: 220+30=250 => 50/250 = 20% == 20% cap
+ name: "20 percent cap _ delegation equals cap",
+ validatorLiquidCap: sdk.MustNewDecFromStr("0.2"),
+ validatorLiquidShares: sdk.NewDec(20),
+ validatorTotalShares: sdk.NewDec(220),
+ newLiquidShares: sdk.NewDec(30),
+ expectedExceeds: false,
+ },
+ {
+ // Cap: 20% - Delegation Exceeds Threshold
+ // Liquid Shares: 20, Total Shares: 220, New Liquid Shares: 31
+ // => Liquid Shares: 20+31=51, Total Shares: 220+31=251 => 51/251 = 21% > 20% cap
+ name: "20 percent cap _ delegation exceeds cap",
+ validatorLiquidCap: sdk.MustNewDecFromStr("0.2"),
+ validatorLiquidShares: sdk.NewDec(20),
+ validatorTotalShares: sdk.NewDec(220),
+ newLiquidShares: sdk.NewDec(31),
+ expectedExceeds: true,
+ },
+ {
+ // Cap of 0% - everything should exceed
+ name: "0 percent cap",
+ validatorLiquidCap: sdk.ZeroDec(),
+ validatorLiquidShares: sdk.NewDec(0),
+ validatorTotalShares: sdk.NewDec(1_000_000),
+ newLiquidShares: sdk.NewDec(1),
+ expectedExceeds: true,
+ },
+ {
+ // Cap of 100% - nothing should exceed
+ name: "100 percent cap",
+ validatorLiquidCap: sdk.OneDec(),
+ validatorLiquidShares: sdk.NewDec(1),
+ validatorTotalShares: sdk.NewDec(1_000_000),
+ newLiquidShares: sdk.NewDec(1),
+ expectedExceeds: false,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ // Update the validator liquid staking cap
+ params := app.StakingKeeper.GetParams(ctx)
+ params.ValidatorLiquidStakingCap = tc.validatorLiquidCap
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Create a validator with designated self-bond shares
+ validator := types.Validator{
+ TotalLiquidShares: tc.validatorLiquidShares,
+ DelegatorShares: tc.validatorTotalShares,
+ }
+
+ // Check whether the cap is exceeded
+ actualExceeds := app.StakingKeeper.CheckExceedsValidatorLiquidStakingCap(ctx, validator, tc.newLiquidShares)
+ require.Equal(t, tc.expectedExceeds, actualExceeds, tc.name)
+ })
+ }
+}
+
+// Tests SafelyIncreaseValidatorTotalLiquidShares
+func TestSafelyIncreaseValidatorTotalLiquidShares(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // Generate a test validator address
+ privKey := secp256k1.GenPrivKey()
+ pubKey := privKey.PubKey()
+ valAddress := sdk.ValAddress(pubKey.Address())
+
+ // Helper function to check the validator's liquid shares
+ checkValidatorLiquidShares := func(expected sdk.Dec, description string) {
+ actualValidator, found := app.StakingKeeper.GetValidator(ctx, valAddress)
+ require.True(t, found)
+ require.Equal(t, expected.TruncateInt64(), actualValidator.TotalLiquidShares.TruncateInt64(), description)
+ }
+
+ // Start with the following:
+ // Initial Liquid Shares: 0
+ // Validator Bond Shares: 10
+ // Validator TotalShares: 75
+ //
+ // Initial Caps:
+ // ValidatorBondFactor: 1 (Cap applied at 10 shares)
+ // ValidatorLiquidStakingCap: 25% (Cap applied at 25 shares)
+ //
+ // Cap Increases:
+ // ValidatorBondFactor: 10 (Cap applied at 100 shares)
+ // ValidatorLiquidStakingCap: 40% (Cap applied at 50 shares)
+ initialLiquidShares := sdk.NewDec(0)
+ validatorBondShares := sdk.NewDec(10)
+ validatorTotalShares := sdk.NewDec(75)
+
+ firstIncreaseAmount := sdk.NewDec(20)
+ secondIncreaseAmount := sdk.NewDec(40)
+
+ initialBondFactor := sdk.NewDec(1)
+ finalBondFactor := sdk.NewDec(10)
+ initialLiquidStakingCap := sdk.MustNewDecFromStr("0.25")
+ finalLiquidStakingCap := sdk.MustNewDecFromStr("0.4")
+
+ // Create a validator with designated self-bond shares
+ initialValidator := types.Validator{
+ OperatorAddress: valAddress.String(),
+ TotalLiquidShares: initialLiquidShares,
+ TotalValidatorBondShares: validatorBondShares,
+ DelegatorShares: validatorTotalShares,
+ }
+ app.StakingKeeper.SetValidator(ctx, initialValidator)
+
+ // Set validator bond factor to a small number such that any delegation would fail,
+ // and set the liquid staking cap such that the first stake would succeed, but the second
+ // would fail
+ params := app.StakingKeeper.GetParams(ctx)
+ params.ValidatorBondFactor = initialBondFactor
+ params.ValidatorLiquidStakingCap = initialLiquidStakingCap
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Attempt to increase the validator liquid shares, it should throw an
+ // error that the validator bond cap was exceeded
+ err := app.StakingKeeper.SafelyIncreaseValidatorTotalLiquidShares(ctx, initialValidator, firstIncreaseAmount)
+ require.ErrorIs(t, err, types.ErrInsufficientValidatorBondShares)
+ checkValidatorLiquidShares(initialLiquidShares, "shares after low bond factor")
+
+ // Change validator bond factor to a more conservative number, so that the increase succeeds
+ params.ValidatorBondFactor = finalBondFactor
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Try the increase again and check that it succeeded
+ expectedLiquidSharesAfterFirstStake := initialLiquidShares.Add(firstIncreaseAmount)
+ err = app.StakingKeeper.SafelyIncreaseValidatorTotalLiquidShares(ctx, initialValidator, firstIncreaseAmount)
+ require.NoError(t, err)
+ checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares with cap loose bond cap")
+
+ // Attempt another increase, it should fail from the liquid staking cap
+ err = app.StakingKeeper.SafelyIncreaseValidatorTotalLiquidShares(ctx, initialValidator, secondIncreaseAmount)
+ require.ErrorIs(t, err, types.ErrValidatorLiquidStakingCapExceeded)
+ checkValidatorLiquidShares(expectedLiquidSharesAfterFirstStake, "shares after liquid staking cap hit")
+
+ // Raise the liquid staking cap so the new increment succeeds
+ params.ValidatorLiquidStakingCap = finalLiquidStakingCap
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Finally confirm that the increase succeeded this time
+ expectedLiquidSharesAfterSecondStake := initialLiquidShares.Add(secondIncreaseAmount)
+ err = app.StakingKeeper.SafelyIncreaseValidatorTotalLiquidShares(ctx, initialValidator, secondIncreaseAmount)
+ require.NoError(t, err, "no error expected after increasing liquid staking cap")
+ checkValidatorLiquidShares(expectedLiquidSharesAfterSecondStake, "shares after loose liquid stake cap")
+}
+
+// Tests DecreaseValidatorTotalLiquidShares
+func TestDecreaseValidatorTotalLiquidShares(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ initialLiquidShares := sdk.NewDec(0)
+ decreaseAmount := sdk.NewDec(10)
+
+ // Create a validator with designated self-bond shares
+ privKey := secp256k1.GenPrivKey()
+ pubKey := privKey.PubKey()
+ valAddress := sdk.ValAddress(pubKey.Address())
+
+ initialValidator := types.Validator{
+ OperatorAddress: valAddress.String(),
+ TotalLiquidShares: initialLiquidShares,
+ }
+ app.StakingKeeper.SetValidator(ctx, initialValidator)
+
+ // Decrease the validator liquid shares, and confirm the new share amount has been updated
+ app.StakingKeeper.DecreaseValidatorTotalLiquidShares(ctx, initialValidator, decreaseAmount)
+ actualValidator, found := app.StakingKeeper.GetValidator(ctx, valAddress)
+ require.True(t, found)
+ require.Equal(t, initialLiquidShares.Sub(decreaseAmount), actualValidator.TotalLiquidShares, "shares with cap disabled")
+}
+
+// Tests Add/Remove/Get/SetTokenizeSharesLock
+func TestTokenizeSharesLock(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ addresses := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1))
+ addressA, addressB := addresses[0], addresses[1]
+
+ unlocked := types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED.String()
+ locked := types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED.String()
+ lockExpiring := types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING.String()
+
+ // Confirm both accounts start unlocked
+ status, _ := app.StakingKeeper.GetTokenizeSharesLock(ctx, addressA)
+ require.Equal(t, unlocked, status.String(), "addressA unlocked at start")
+
+ status, _ = app.StakingKeeper.GetTokenizeSharesLock(ctx, addressB)
+ require.Equal(t, unlocked, status.String(), "addressB unlocked at start")
+
+ // Lock the first account
+ app.StakingKeeper.AddTokenizeSharesLock(ctx, addressA)
+
+ // The first account should now have tokenize shares disabled
+ // and the unlock time should be the zero time
+ status, _ = app.StakingKeeper.GetTokenizeSharesLock(ctx, addressA)
+ require.Equal(t, locked, status.String(), "addressA locked")
+
+ status, _ = app.StakingKeeper.GetTokenizeSharesLock(ctx, addressB)
+ require.Equal(t, unlocked, status.String(), "addressB still unlocked")
+
+ // Update the lock time and confirm it was set
+ expectedUnlockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
+ app.StakingKeeper.SetTokenizeSharesUnlockTime(ctx, addressA, expectedUnlockTime)
+
+ status, actualUnlockTime := app.StakingKeeper.GetTokenizeSharesLock(ctx, addressA)
+ require.Equal(t, lockExpiring, status.String(), "addressA lock expiring")
+ require.Equal(t, expectedUnlockTime, actualUnlockTime, "addressA unlock time")
+
+ // Confirm B is still unlocked
+ status, _ = app.StakingKeeper.GetTokenizeSharesLock(ctx, addressB)
+ require.Equal(t, unlocked, status.String(), "addressB still unlocked")
+
+ // Remove the lock
+ app.StakingKeeper.RemoveTokenizeSharesLock(ctx, addressA)
+ status, _ = app.StakingKeeper.GetTokenizeSharesLock(ctx, addressA)
+ require.Equal(t, unlocked, status.String(), "addressA unlocked at end")
+
+ status, _ = app.StakingKeeper.GetTokenizeSharesLock(ctx, addressB)
+ require.Equal(t, unlocked, status.String(), "addressB unlocked at end")
+}
+
+// Test Get/SetPendingTokenizeShareAuthorizations
+func TestPendingTokenizeShareAuthorizations(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // Create dummy accounts and completion times
+ addresses := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1))
+ addressStrings := []string{}
+ for _, address := range addresses {
+ addressStrings = append(addressStrings, address.String())
+ }
+
+ timeA := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
+ timeB := timeA.Add(time.Hour)
+
+ // There should be no addresses returned originally
+ authorizationsA := app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, timeA)
+ require.Empty(t, authorizationsA.Addresses, "no addresses at timeA expected")
+
+ authorizationsB := app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, timeB)
+ require.Empty(t, authorizationsB.Addresses, "no addresses at timeB expected")
+
+ // Store addresses for timeB
+ app.StakingKeeper.SetPendingTokenizeShareAuthorizations(ctx, timeB, types.PendingTokenizeShareAuthorizations{
+ Addresses: addressStrings,
+ })
+
+ // Check addresses
+ authorizationsA = app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, timeA)
+ require.Empty(t, authorizationsA.Addresses, "no addresses at timeA expected at end")
+
+ authorizationsB = app.StakingKeeper.GetPendingTokenizeShareAuthorizations(ctx, timeB)
+ require.Equal(t, addressStrings, authorizationsB.Addresses, "address length")
+}
+
+// Test QueueTokenizeSharesAuthorization and RemoveExpiredTokenizeShareLocks
+func TestTokenizeShareAuthorizationQueue(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // We'll start by adding the following addresses to the queue
+ // Time 0: [address0]
+ // Time 1: []
+ // Time 2: [address1, address2, address3]
+ // Time 3: [address4, address5]
+ // Time 4: [address6]
+ addresses := simapp.AddTestAddrs(app, ctx, 7, sdk.NewInt(1))
+ addressesByTime := map[int][]sdk.AccAddress{
+ 0: {addresses[0]},
+ 1: {},
+ 2: {addresses[1], addresses[2], addresses[3]},
+ 3: {addresses[4], addresses[5]},
+ 4: {addresses[6]},
+ }
+
+ // Set the unbonding time to 1 day
+ unbondingPeriod := time.Hour * 24
+ params := app.StakingKeeper.GetParams(ctx)
+ params.UnbondingTime = unbondingPeriod
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Add each address to the queue and then increment the block time
+ // such that the times line up as follows
+ // Time 0: 2023-01-01 00:00:00
+ // Time 1: 2023-01-01 00:01:00
+ // Time 2: 2023-01-01 00:02:00
+ // Time 3: 2023-01-01 00:03:00
+ startTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
+ ctx = ctx.WithBlockTime(startTime)
+ blockTimeIncrement := time.Hour
+
+ for timeIndex := 0; timeIndex <= 4; timeIndex++ {
+ for _, address := range addressesByTime[timeIndex] {
+ app.StakingKeeper.QueueTokenizeSharesAuthorization(ctx, address)
+ }
+ ctx = ctx.WithBlockTime(ctx.BlockTime().Add(blockTimeIncrement))
+ }
+
+ // We'll unlock the tokens using the following progression
+ // The "alias'"/keys for these times assume a starting point of the Time 0
+ // from above, plus the Unbonding Time
+ // Time -1 (2023-01-01 23:59:99): []
+ // Time 0 (2023-01-02 00:00:00): [address0]
+ // Time 1 (2023-01-02 00:01:00): []
+ // Time 2.5 (2023-01-02 00:02:30): [address1, address2, address3]
+ // Time 10 (2023-01-02 00:10:00): [address4, address5, address6]
+ unlockBlockTimes := map[string]time.Time{
+ "-1": startTime.Add(unbondingPeriod).Add(-time.Second),
+ "0": startTime.Add(unbondingPeriod),
+ "1": startTime.Add(unbondingPeriod).Add(blockTimeIncrement),
+ "2.5": startTime.Add(unbondingPeriod).Add(2 * blockTimeIncrement).Add(blockTimeIncrement / 2),
+ "10": startTime.Add(unbondingPeriod).Add(10 * blockTimeIncrement),
+ }
+ expectedUnlockedAddresses := map[string][]string{
+ "-1": {},
+ "0": {addresses[0].String()},
+ "1": {},
+ "2.5": {addresses[1].String(), addresses[2].String(), addresses[3].String()},
+ "10": {addresses[4].String(), addresses[5].String(), addresses[6].String()},
+ }
+
+ // Now we'll remove items from the queue sequentially
+ // First check with a block time before the first expiration - it should remove no addresses
+ actualAddresses := app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["-1"])
+ require.Equal(t, expectedUnlockedAddresses["-1"], actualAddresses, "no addresses unlocked from time -1")
+
+ // Then pass in (time 0 + unbonding time) - it should remove the first address
+ actualAddresses = app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["0"])
+ require.Equal(t, expectedUnlockedAddresses["0"], actualAddresses, "one address unlocked from time 0")
+
+ // Now pass in (time 1 + unbonding time) - it should remove no addresses since
+ // the address at time 0 was already removed
+ actualAddresses = app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["1"])
+ require.Equal(t, expectedUnlockedAddresses["1"], actualAddresses, "no addresses unlocked from time 1")
+
+ // Now pass in (time 2.5 + unbonding time) - it should remove the three addresses from time 2
+ actualAddresses = app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["2.5"])
+ require.Equal(t, expectedUnlockedAddresses["2.5"], actualAddresses, "addresses unlocked from time 2.5")
+
+ // Finally pass in a block time far in the future, which should remove all the remaining locks
+ actualAddresses = app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, unlockBlockTimes["10"])
+ require.Equal(t, expectedUnlockedAddresses["10"], actualAddresses, "addresses unlocked from time 10")
+}
+
+// Test CalculateTotalLiquidStaked
+func TestCalculateTotalLiquidStaked(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ // Set an arbitrary total liquid staked tokens amount that will get overwritten by the refresh
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.NewInt(999))
+
+ // Add validator's with various exchange rates
+ validators := []types.Validator{
+ {
+ // Exchange rate of 1
+ OperatorAddress: "valA",
+ Tokens: sdk.NewInt(100),
+ DelegatorShares: sdk.NewDec(100),
+ TotalLiquidShares: sdk.NewDec(100), // should be overwritten
+ },
+ {
+ // Exchange rate of 0.9
+ OperatorAddress: "valB",
+ Tokens: sdk.NewInt(90),
+ DelegatorShares: sdk.NewDec(100),
+ TotalLiquidShares: sdk.NewDec(200), // should be overwritten
+ },
+ {
+ // Exchange rate of 0.75
+ OperatorAddress: "valC",
+ Tokens: sdk.NewInt(75),
+ DelegatorShares: sdk.NewDec(100),
+ TotalLiquidShares: sdk.NewDec(300), // should be overwritten
+ },
+ }
+
+ // Add various delegations across the above validator's
+ // Total Liquid Staked: 1,849 + 922 = 2,771
+ // Total Liquid Shares:
+ // ValA: 400 + 325 = 725
+ // ValB: 860 + 580 = 1,440
+ // ValC: 900 + 100 = 1,000
+ expectedTotalLiquidStaked := int64(2771)
+ expectedValidatorLiquidShares := map[string]sdk.Dec{
+ "valA": sdk.NewDec(725),
+ "valB": sdk.NewDec(1440),
+ "valC": sdk.NewDec(1000),
+ }
+
+ delegations := []struct {
+ delegation types.Delegation
+ isLSTP bool
+ }{
+ // Delegator A - Not a liquid staking provider
+ // Number of tokens/shares is irrelevant for this test
+ {
+ isLSTP: false,
+ delegation: types.Delegation{
+ DelegatorAddress: "delA",
+ ValidatorAddress: "valA",
+ Shares: sdk.NewDec(100),
+ },
+ },
+ {
+ isLSTP: false,
+ delegation: types.Delegation{
+ DelegatorAddress: "delA",
+ ValidatorAddress: "valB",
+ Shares: sdk.NewDec(860),
+ },
+ },
+ {
+ isLSTP: false,
+ delegation: types.Delegation{
+ DelegatorAddress: "delA",
+ ValidatorAddress: "valC",
+ Shares: sdk.NewDec(750),
+ },
+ },
+ // Delegator B - Liquid staking provider, tokens included in total
+ // Total liquid staked: 400 + 774 + 675 = 1,849
+ {
+ // Shares: 400 shares, Exchange Rate: 1.0, Tokens: 400
+ isLSTP: true,
+ delegation: types.Delegation{
+ DelegatorAddress: "delB-LSTP",
+ ValidatorAddress: "valA",
+ Shares: sdk.NewDec(400),
+ },
+ },
+ {
+ // Shares: 860 shares, Exchange Rate: 0.9, Tokens: 774
+ isLSTP: true,
+ delegation: types.Delegation{
+ DelegatorAddress: "delB-LSTP",
+ ValidatorAddress: "valB",
+ Shares: sdk.NewDec(860),
+ },
+ },
+ {
+ // Shares: 900 shares, Exchange Rate: 0.75, Tokens: 675
+ isLSTP: true,
+ delegation: types.Delegation{
+ DelegatorAddress: "delB-LSTP",
+ ValidatorAddress: "valC",
+ Shares: sdk.NewDec(900),
+ },
+ },
+ // Delegator C - Liquid staking provider, tokens included in total
+ // Total liquid staked: 325 + 522 + 75 = 922
+ {
+ // Shares: 325 shares, Exchange Rate: 1.0, Tokens: 325
+ isLSTP: true,
+ delegation: types.Delegation{
+ DelegatorAddress: "delC-LSTP",
+ ValidatorAddress: "valA",
+ Shares: sdk.NewDec(325),
+ },
+ },
+ {
+ // Shares: 580 shares, Exchange Rate: 0.9, Tokens: 522
+ isLSTP: true,
+ delegation: types.Delegation{
+ DelegatorAddress: "delC-LSTP",
+ ValidatorAddress: "valB",
+ Shares: sdk.NewDec(580),
+ },
+ },
+ {
+ // Shares: 100 shares, Exchange Rate: 0.75, Tokens: 75
+ isLSTP: true,
+ delegation: types.Delegation{
+ DelegatorAddress: "delC-LSTP",
+ ValidatorAddress: "valC",
+ Shares: sdk.NewDec(100),
+ },
+ },
+ }
+
+ // Create validators based on the above (must use an actual validator address)
+ addresses := simapp.AddTestAddrsIncremental(app, ctx, 5, app.StakingKeeper.TokensFromConsensusPower(ctx, 300))
+ validatorAddresses := map[string]sdk.ValAddress{
+ "valA": sdk.ValAddress(addresses[0]),
+ "valB": sdk.ValAddress(addresses[1]),
+ "valC": sdk.ValAddress(addresses[2]),
+ }
+ for _, validator := range validators {
+ validator.OperatorAddress = validatorAddresses[validator.OperatorAddress].String()
+ app.StakingKeeper.SetValidator(ctx, validator)
+ }
+
+ // Create the delegations based on the above (must use actual delegator addresses)
+ for _, delegationCase := range delegations {
+ var delegatorAddress sdk.AccAddress
+ if delegationCase.isLSTP {
+ delegatorAddress = createICAAccount(app, ctx, delegationCase.delegation.DelegatorAddress)
+ } else {
+ delegatorAddress = createBaseAccount(app, ctx, delegationCase.delegation.DelegatorAddress)
+ }
+
+ delegation := delegationCase.delegation
+ delegation.DelegatorAddress = delegatorAddress.String()
+ delegation.ValidatorAddress = validatorAddresses[delegation.ValidatorAddress].String()
+ app.StakingKeeper.SetDelegation(ctx, delegation)
+ }
+
+ // Refresh the total liquid staked and validator liquid shares
+ err := app.StakingKeeper.RefreshTotalLiquidStaked(ctx)
+ require.NoError(t, err, "no error expected when refreshing total liquid staked")
+
+ // Check the total liquid staked and liquid shares by validator
+ actualTotalLiquidStaked := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx)
+ require.Equal(t, expectedTotalLiquidStaked, actualTotalLiquidStaked.Int64(), "total liquid staked tokens")
+
+ for _, moniker := range []string{"valA", "valB", "valC"} {
+ address := validatorAddresses[moniker]
+ expectedLiquidShares := expectedValidatorLiquidShares[moniker]
+
+ actualValidator, found := app.StakingKeeper.GetValidator(ctx, address)
+ require.True(t, found, "validator %s should have been found after refresh", moniker)
+
+ actualLiquidShares := actualValidator.TotalLiquidShares
+ require.Equal(t, expectedLiquidShares.TruncateInt64(), actualLiquidShares.TruncateInt64(),
+ "liquid staked shares for validator %s", moniker)
+ }
+}
diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go
index 3642cef1e5a..353c2ee8a1f 100644
--- a/x/staking/keeper/msg_server.go
+++ b/x/staking/keeper/msg_server.go
@@ -2,16 +2,22 @@ package keeper
import (
"context"
+ "errors"
+ "fmt"
+ "strconv"
"time"
metrics "github.com/armon/go-metrics"
- tmstrings "github.com/tendermint/tendermint/libs/strings"
-
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/telemetry"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
+ vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported"
+ minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
"github.com/cosmos/cosmos-sdk/x/staking/types"
+ tmstrings "github.com/tendermint/tendermint/libs/strings"
+ "google.golang.org/grpc/codes"
+ "google.golang.org/grpc/status"
)
type msgServer struct {
@@ -35,6 +41,10 @@ func (k msgServer) CreateValidator(goCtx context.Context, msg *types.MsgCreateVa
return nil, err
}
+ if msg.Commission.Rate.LT(k.MinCommissionRate(ctx)) {
+ return nil, sdkerrors.Wrapf(errors.New("commission cannot be less than min rate"), "cannot set validator commission to less than minimum rate of %s", k.MinCommissionRate(ctx))
+ }
+
// check to see if the pubkey or sender has been registered before
if _, found := k.GetValidator(ctx, valAddr); found {
return nil, types.ErrValidatorOwnerExists
@@ -89,10 +99,11 @@ func (k msgServer) CreateValidator(goCtx context.Context, msg *types.MsgCreateVa
return nil, err
}
- validator.MinSelfDelegation = msg.MinSelfDelegation
-
k.SetValidator(ctx, validator)
- k.SetValidatorByConsAddr(ctx, validator)
+ err = k.SetValidatorByConsAddr(ctx, validator)
+ if err != nil {
+ return nil, err
+ }
k.SetNewValidatorByPowerIndex(ctx, validator)
// call the after-creation hook
@@ -155,25 +166,12 @@ func (k msgServer) EditValidator(goCtx context.Context, msg *types.MsgEditValida
validator.Commission = commission
}
- if msg.MinSelfDelegation != nil {
- if !msg.MinSelfDelegation.GT(validator.MinSelfDelegation) {
- return nil, types.ErrMinSelfDelegationDecreased
- }
-
- if msg.MinSelfDelegation.GT(validator.Tokens) {
- return nil, types.ErrSelfDelegationBelowMinimum
- }
-
- validator.MinSelfDelegation = (*msg.MinSelfDelegation)
- }
-
k.SetValidator(ctx, validator)
ctx.EventManager().EmitEvents(sdk.Events{
sdk.NewEvent(
types.EventTypeEditValidator,
sdk.NewAttribute(types.AttributeKeyCommissionRate, validator.Commission.String()),
- sdk.NewAttribute(types.AttributeKeyMinSelfDelegation, validator.MinSelfDelegation.String()),
),
sdk.NewEvent(
sdk.EventTypeMessage,
@@ -210,18 +208,35 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ
)
}
+ tokens := msg.Amount.Amount
+ shares, err := validator.SharesFromTokens(tokens)
+ if err != nil {
+ return nil, err
+ }
+
+ // if this delegation is from a liquid staking provider, it cannot exceed
+ // the global or validator bond cap
+ if k.AccountIsLiquidStakingProvider(ctx, delegatorAddress) {
+ if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, tokens, false); err != nil {
+ return nil, err
+ }
+ if err := k.SafelyIncreaseValidatorTotalLiquidShares(ctx, validator, shares); err != nil {
+ return nil, err
+ }
+ }
+
// NOTE: source funds are always unbonded
- newShares, err := k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true)
+ newShares, err := k.Keeper.Delegate(ctx, delegatorAddress, tokens, types.Unbonded, validator, true)
if err != nil {
return nil, err
}
- if msg.Amount.Amount.IsInt64() {
+ if tokens.IsInt64() {
defer func() {
telemetry.IncrCounter(1, types.ModuleName, "delegate")
telemetry.SetGaugeWithLabels(
[]string{"tx", "msg", msg.Type()},
- float32(msg.Amount.Amount.Int64()),
+ float32(tokens.Int64()),
[]metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)},
)
}()
@@ -247,14 +262,39 @@ func (k msgServer) Delegate(goCtx context.Context, msg *types.MsgDelegate) (*typ
// BeginRedelegate defines a method for performing a redelegation of coins from a delegator and source validator to a destination validator
func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
+
valSrcAddr, err := sdk.ValAddressFromBech32(msg.ValidatorSrcAddress)
if err != nil {
return nil, err
}
+ valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ srcValidator, found := k.GetValidator(ctx, valSrcAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+ dstValidator, found := k.GetValidator(ctx, valDstAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
if err != nil {
return nil, err
}
+
+ delegation, found := k.GetDelegation(ctx, delegatorAddress, valSrcAddr)
+ if !found {
+ return nil, status.Errorf(
+ codes.NotFound,
+ "delegation with delegator %s not found for validator %s",
+ msg.DelegatorAddress, msg.ValidatorSrcAddress,
+ )
+ }
+
shares, err := k.ValidateUnbondAmount(
ctx, delegatorAddress, valSrcAddr, msg.Amount.Amount,
)
@@ -262,6 +302,23 @@ func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRed
return nil, err
}
+ // if this is a validator self-bond, the new liquid delegation cannot fall below the self-bond * bond factor
+ if delegation.ValidatorBond {
+ if err := k.SafelyDecreaseValidatorBond(ctx, srcValidator, shares); err != nil {
+ return nil, err
+ }
+ }
+
+ // If this delegation is from a liquid staking provider, the delegation on the new validator
+ // cannot exceed that validator's self-bond cap
+ // The liquid shares from the source validator should get moved to the destination validator
+ if k.AccountIsLiquidStakingProvider(ctx, delegatorAddress) {
+ if err := k.SafelyIncreaseValidatorTotalLiquidShares(ctx, dstValidator, shares); err != nil {
+ return nil, err
+ }
+ k.DecreaseValidatorTotalLiquidShares(ctx, srcValidator, shares)
+ }
+
bondDenom := k.BondDenom(ctx)
if msg.Amount.Denom != bondDenom {
return nil, sdkerrors.Wrapf(
@@ -269,11 +326,6 @@ func (k msgServer) BeginRedelegate(goCtx context.Context, msg *types.MsgBeginRed
)
}
- valDstAddr, err := sdk.ValAddressFromBech32(msg.ValidatorDstAddress)
- if err != nil {
- return nil, err
- }
-
completionTime, err := k.BeginRedelegation(
ctx, delegatorAddress, valSrcAddr, valDstAddr, shares,
)
@@ -324,13 +376,43 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) (
if err != nil {
return nil, err
}
+
+ tokens := msg.Amount.Amount
shares, err := k.ValidateUnbondAmount(
- ctx, delegatorAddress, addr, msg.Amount.Amount,
+ ctx, delegatorAddress, addr, tokens,
)
if err != nil {
return nil, err
}
+ validator, found := k.GetValidator(ctx, addr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ delegation, found := k.GetDelegation(ctx, delegatorAddress, addr)
+ if !found {
+ return nil, status.Errorf(
+ codes.NotFound,
+ "delegation with delegator %s not found for validator %s",
+ msg.DelegatorAddress, msg.ValidatorAddress,
+ )
+ }
+
+ // if this is a validator self-bond, the new liquid delegation cannot fall below the self-bond * bond factor
+ if delegation.ValidatorBond {
+ if err := k.SafelyDecreaseValidatorBond(ctx, validator, shares); err != nil {
+ return nil, err
+ }
+ }
+
+ // if this undelegation is from a liquid staking provider, the global and validator
+ // liquid counts should be decremented
+ if k.AccountIsLiquidStakingProvider(ctx, delegatorAddress) {
+ k.DecreaseTotalLiquidStakedTokens(ctx, tokens)
+ k.DecreaseValidatorTotalLiquidShares(ctx, validator, shares)
+ }
+
bondDenom := k.BondDenom(ctx)
if msg.Amount.Denom != bondDenom {
return nil, sdkerrors.Wrapf(
@@ -343,12 +425,12 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) (
return nil, err
}
- if msg.Amount.Amount.IsInt64() {
+ if tokens.IsInt64() {
defer func() {
telemetry.IncrCounter(1, types.ModuleName, "undelegate")
telemetry.SetGaugeWithLabels(
[]string{"tx", "msg", msg.Type()},
- float32(msg.Amount.Amount.Int64()),
+ float32(tokens.Int64()),
[]metrics.Label{telemetry.NewLabel("denom", msg.Amount.Denom)},
)
}()
@@ -372,3 +454,525 @@ func (k msgServer) Undelegate(goCtx context.Context, msg *types.MsgUndelegate) (
CompletionTime: completionTime,
}, nil
}
+
+// CancelUnbondingDelegation defines a method for canceling the unbonding delegation
+// and delegate back to the validator.
+func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ bondDenom := k.BondDenom(ctx)
+ if msg.Amount.Denom != bondDenom {
+ return nil, sdkerrors.Wrapf(
+ sdkerrors.ErrInvalidRequest, "invalid coin denomination: got %s, expected %s", msg.Amount.Denom, bondDenom,
+ )
+ }
+
+ validator, found := k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ // In some situations, the exchange rate becomes invalid, e.g. if
+ // Validator loses all tokens due to slashing. In this case,
+ // make all future delegations invalid.
+ if validator.InvalidExRate() {
+ return nil, types.ErrDelegatorShareExRateInvalid
+ }
+
+ if validator.IsJailed() {
+ return nil, types.ErrValidatorJailed
+ }
+
+ ubd, found := k.GetUnbondingDelegation(ctx, delegatorAddress, valAddr)
+ if !found {
+ return nil, status.Errorf(
+ codes.NotFound,
+ "unbonding delegation with delegator %s not found for validator %s",
+ msg.DelegatorAddress, msg.ValidatorAddress,
+ )
+ }
+
+ var (
+ unbondEntry types.UnbondingDelegationEntry
+ unbondEntryIndex int64 = -1
+ )
+
+ for i, entry := range ubd.Entries {
+ if entry.CreationHeight == msg.CreationHeight {
+ unbondEntry = entry
+ unbondEntryIndex = int64(i)
+ break
+ }
+ }
+ if unbondEntryIndex == -1 {
+ return nil, sdkerrors.ErrNotFound.Wrapf("unbonding delegation entry is not found at block height %d", msg.CreationHeight)
+ }
+
+ if unbondEntry.Balance.LT(msg.Amount.Amount) {
+ return nil, sdkerrors.ErrInvalidRequest.Wrap("amount is greater than the unbonding delegation entry balance")
+ }
+
+ if unbondEntry.CompletionTime.Before(ctx.BlockTime()) {
+ return nil, sdkerrors.ErrInvalidRequest.Wrap("unbonding delegation is already processed")
+ }
+
+ // delegate back the unbonding delegation amount to the validator
+ _, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false)
+ if err != nil {
+ return nil, err
+ }
+
+ amount := unbondEntry.Balance.Sub(msg.Amount.Amount)
+ if amount.IsZero() {
+ ubd.RemoveEntry(unbondEntryIndex)
+ } else {
+ // update the unbondingDelegationEntryBalance and InitialBalance for ubd entry
+ unbondEntry.Balance = amount
+ unbondEntry.InitialBalance = unbondEntry.InitialBalance.Sub(msg.Amount.Amount)
+ ubd.Entries[unbondEntryIndex] = unbondEntry
+ }
+
+ // set the unbonding delegation or remove it if there are no more entries
+ if len(ubd.Entries) == 0 {
+ k.RemoveUnbondingDelegation(ctx, ubd)
+ } else {
+ k.SetUnbondingDelegation(ctx, ubd)
+ }
+
+ ctx.EventManager().EmitEvent(
+ sdk.NewEvent(
+ "cancel_unbonding_delegation",
+ sdk.NewAttribute(sdk.AttributeKeyAmount, msg.Amount.String()),
+ sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),
+ sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),
+ sdk.NewAttribute("creation_height", strconv.FormatInt(msg.CreationHeight, 10)),
+ ),
+ )
+
+ return &types.MsgCancelUnbondingDelegationResponse{}, nil
+}
+
+// UnbondValidator defines a method for performing the status transition for
+// a validator from bonded to unbonded
+func (k msgServer) UnbondValidator(goCtx context.Context, msg *types.MsgUnbondValidator) (*types.MsgUnbondValidatorResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+ valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
+ if err != nil {
+ return nil, err
+ }
+ // validator must already be registered
+ validator, found := k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ // jail the validator.
+ k.jailValidator(ctx, validator)
+ return &types.MsgUnbondValidatorResponse{}, nil
+}
+
+func (k msgServer) TokenizeShares(goCtx context.Context, msg *types.MsgTokenizeShares) (*types.MsgTokenizeSharesResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress)
+ if valErr != nil {
+ return nil, valErr
+ }
+ validator, found := k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ // Check if the delegator has disabled tokenization
+ lockStatus, unlockTime := k.GetTokenizeSharesLock(ctx, delegatorAddress)
+ if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED {
+ return nil, types.ErrTokenizeSharesDisabledForAccount
+ }
+ if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING {
+ return nil, types.ErrTokenizeSharesDisabledForAccount.Wrapf("tokenization will be allowed at %s", unlockTime)
+ }
+
+ delegation, found := k.GetDelegation(ctx, delegatorAddress, valAddr)
+ if !found {
+ return nil, types.ErrNoDelegatorForAddress
+ }
+
+ if delegation.ValidatorBond {
+ return nil, types.ErrValidatorBondNotAllowedForTokenizeShare
+ }
+
+ if msg.Amount.Denom != k.BondDenom(ctx) {
+ return nil, types.ErrOnlyBondDenomAllowdForTokenize
+ }
+
+ delegationAmount := sdk.NewDecFromInt(validator.Tokens).Mul(delegation.GetShares()).Quo(validator.DelegatorShares)
+ if sdk.NewDecFromInt(msg.Amount.Amount).GT(delegationAmount) {
+ return nil, types.ErrNotEnoughDelegationShares
+ }
+
+ acc := k.authKeeper.GetAccount(ctx, delegatorAddress)
+ if acc != nil {
+ acc, ok := acc.(vesting.VestingAccount)
+ if ok {
+ // if account is a vesting account, it checks if free delegation (non-vesting delegation) is not exceeding
+ // the tokenize share amount and execute further tokenize share process
+ // tokenize share is reducing unlocked tokens delegation from the vesting account and further process
+ // is not causing issues
+ delFree := acc.GetDelegatedFree().AmountOf(msg.Amount.Denom)
+ if delFree.LT(msg.Amount.Amount) {
+ return nil, types.ErrExceedingFreeVestingDelegations
+ }
+ }
+ }
+
+ shares, err := k.ValidateUnbondAmount(
+ ctx, delegatorAddress, valAddr, msg.Amount.Amount,
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ // If this tokenization is NOT from a liquid staking provider,
+ // confirm it does not exceed the global and validator liquid staking cap
+ // If the tokenization is from a liquid staking provider,
+ // the shares are already considered liquid and there's no need to increment the totals
+ if !k.AccountIsLiquidStakingProvider(ctx, delegatorAddress) {
+ if err := k.SafelyIncreaseTotalLiquidStakedTokens(ctx, msg.Amount.Amount, true); err != nil {
+ return nil, err
+ }
+ if err := k.SafelyIncreaseValidatorTotalLiquidShares(ctx, validator, shares); err != nil {
+ return nil, err
+ }
+ }
+
+ recordID := k.GetLastTokenizeShareRecordID(ctx) + 1
+ k.SetLastTokenizeShareRecordID(ctx, recordID)
+
+ record := types.TokenizeShareRecord{
+ Id: recordID,
+ Owner: msg.TokenizedShareOwner,
+ ModuleAccount: fmt.Sprintf("%s%d", types.TokenizeShareModuleAccountPrefix, recordID),
+ Validator: msg.ValidatorAddress,
+ }
+
+ shareToken := sdk.NewCoin(record.GetShareTokenDenom(), msg.Amount.Amount)
+
+ err = k.bankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.Coins{shareToken})
+ if err != nil {
+ return nil, err
+ }
+
+ err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, delegatorAddress, sdk.Coins{shareToken})
+ if err != nil {
+ return nil, err
+ }
+
+ returnAmount, err := k.Unbond(ctx, delegatorAddress, valAddr, shares)
+ if err != nil {
+ return nil, err
+ }
+
+ if validator.IsBonded() {
+ k.bondedTokensToNotBonded(ctx, returnAmount)
+ }
+
+ // Note: UndelegateCoinsFromModuleToAccount is internally calling TrackUndelegation for vesting account
+ err = k.bankKeeper.UndelegateCoinsFromModuleToAccount(ctx, types.NotBondedPoolName, delegatorAddress, sdk.Coins{msg.Amount})
+ if err != nil {
+ return nil, err
+ }
+
+ // create reward ownership record
+ err = k.AddTokenizeShareRecord(ctx, record)
+ if err != nil {
+ return nil, err
+ }
+ // send coins to module account
+ err = k.bankKeeper.SendCoins(ctx, delegatorAddress, record.GetModuleAddress(), sdk.Coins{msg.Amount})
+ if err != nil {
+ return nil, err
+ }
+
+ // Note: it is needed to get latest validator object to get Keeper.Delegate function work properly
+ validator, found = k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ // delegate from module account
+ _, err = k.Keeper.Delegate(ctx, record.GetModuleAddress(), msg.Amount.Amount, types.Unbonded, validator, true)
+ if err != nil {
+ return nil, err
+ }
+
+ ctx.EventManager().EmitEvent(
+ sdk.NewEvent(
+ types.EventTypeTokenizeShares,
+ sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),
+ sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),
+ sdk.NewAttribute(types.AttributeKeyShareOwner, msg.TokenizedShareOwner),
+ sdk.NewAttribute(types.AttributeKeyShareRecordID, fmt.Sprintf("%d", record.Id)),
+ sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()),
+ ),
+ )
+
+ return &types.MsgTokenizeSharesResponse{
+ Amount: shareToken,
+ }, nil
+}
+
+func (k msgServer) RedeemTokensForShares(goCtx context.Context, msg *types.MsgRedeemTokensForShares) (*types.MsgRedeemTokensForSharesResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ delegatorAddress, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ balance := k.bankKeeper.GetBalance(ctx, delegatorAddress, msg.Amount.Denom)
+ if balance.Amount.LT(msg.Amount.Amount) {
+ return nil, types.ErrNotEnoughBalance
+ }
+
+ record, err := k.GetTokenizeShareRecordByDenom(ctx, msg.Amount.Denom)
+ if err != nil {
+ return nil, err
+ }
+
+ valAddr, valErr := sdk.ValAddressFromBech32(record.Validator)
+ if valErr != nil {
+ return nil, valErr
+ }
+
+ validator, found := k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ // calculate the ratio between shares and redeem amount
+ // moduleAccountTotalDelegation * redeemAmount / totalIssue
+ delegation, found := k.GetDelegation(ctx, record.GetModuleAddress(), valAddr)
+ if !found {
+ return nil, types.ErrNoUnbondingDelegation
+ }
+ shareDenomSupply := k.bankKeeper.GetSupply(ctx, msg.Amount.Denom)
+ shares := delegation.Shares.Mul(sdk.NewDecFromInt(msg.Amount.Amount)).QuoInt(shareDenomSupply.Amount)
+ tokens := validator.TokensFromShares(shares).TruncateInt()
+
+ // If this redemption is NOT from a liquid staking provider, decrement the total liquid staked
+ // If the redemption was from a liquid staking provider, the shares are still considered
+ // liquid, even in their non-tokenized form (since they are owned by a liquid staking provider)
+ if !k.AccountIsLiquidStakingProvider(ctx, delegatorAddress) {
+ k.DecreaseTotalLiquidStakedTokens(ctx, tokens)
+ k.DecreaseValidatorTotalLiquidShares(ctx, validator, shares)
+ }
+
+ returnAmount, err := k.Unbond(ctx, record.GetModuleAddress(), valAddr, shares)
+ if err != nil {
+ return nil, err
+ }
+
+ if validator.IsBonded() {
+ k.bondedTokensToNotBonded(ctx, returnAmount)
+ }
+
+ // Note: since delegation object has been changed from unbond call, it gets latest delegation
+ _, found = k.GetDelegation(ctx, record.GetModuleAddress(), valAddr)
+ if !found {
+ if k.hooks != nil {
+ return nil, k.hooks.BeforeTokenizeShareRecordRemoved(ctx, record.Id)
+ }
+
+ err = k.DeleteTokenizeShareRecord(ctx, record.Id)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ // send share tokens to NotBondedPool and burn
+ err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, delegatorAddress, types.NotBondedPoolName, sdk.Coins{msg.Amount})
+ if err != nil {
+ return nil, err
+ }
+ err = k.bankKeeper.BurnCoins(ctx, types.NotBondedPoolName, sdk.Coins{msg.Amount})
+ if err != nil {
+ return nil, err
+ }
+
+ // send equivalent amount of tokens to the delegator
+ returnCoin := sdk.NewCoin(k.BondDenom(ctx), returnAmount)
+ err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.NotBondedPoolName, delegatorAddress, sdk.Coins{returnCoin})
+ if err != nil {
+ return nil, err
+ }
+
+ // Note: it is needed to get latest validator object to get Keeper.Delegate function work properly
+ validator, found = k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ // convert the share tokens to delegated status
+ // Note: Delegate(substractAccount => true) -> DelegateCoinsFromAccountToModule -> TrackDelegation for vesting account
+ _, err = k.Keeper.Delegate(ctx, delegatorAddress, returnAmount, types.Unbonded, validator, true)
+ if err != nil {
+ return nil, err
+ }
+
+ ctx.EventManager().EmitEvent(
+ sdk.NewEvent(
+ types.EventTypeRedeemShares,
+ sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),
+ sdk.NewAttribute(types.AttributeKeyValidator, validator.OperatorAddress),
+ sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()),
+ ),
+ )
+
+ return &types.MsgRedeemTokensForSharesResponse{
+ Amount: returnCoin,
+ }, nil
+}
+
+func (k msgServer) TransferTokenizeShareRecord(goCtx context.Context, msg *types.MsgTransferTokenizeShareRecord) (*types.MsgTransferTokenizeShareRecordResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ record, err := k.GetTokenizeShareRecord(ctx, msg.TokenizeShareRecordId)
+ if err != nil {
+ return nil, types.ErrTokenizeShareRecordNotExists
+ }
+
+ if record.Owner != msg.Sender {
+ return nil, types.ErrNotTokenizeShareRecordOwner
+ }
+
+ // Remove old account reference
+ oldOwner, err := sdk.AccAddressFromBech32(record.Owner)
+ if err != nil {
+ return nil, sdkerrors.ErrInvalidAddress
+ }
+ k.deleteTokenizeShareRecordWithOwner(ctx, oldOwner, record.Id)
+
+ record.Owner = msg.NewOwner
+ k.setTokenizeShareRecord(ctx, record)
+
+ // Set new account reference
+ newOwner, err := sdk.AccAddressFromBech32(record.Owner)
+ if err != nil {
+ return nil, sdkerrors.ErrInvalidAddress
+ }
+ k.setTokenizeShareRecordWithOwner(ctx, newOwner, record.Id)
+
+ ctx.EventManager().EmitEvent(
+ sdk.NewEvent(
+ types.EventTypeTransferTokenizeShareRecord,
+ sdk.NewAttribute(types.AttributeKeyShareRecordID, fmt.Sprintf("%d", msg.TokenizeShareRecordId)),
+ sdk.NewAttribute(sdk.AttributeKeySender, msg.Sender),
+ sdk.NewAttribute(types.AttributeKeyShareOwner, msg.NewOwner),
+ ),
+ )
+
+ return &types.MsgTransferTokenizeShareRecordResponse{}, nil
+}
+
+// DisableTokenizeShares prevents an address from tokenizing any of their delegations
+func (k msgServer) DisableTokenizeShares(goCtx context.Context, msg *types.MsgDisableTokenizeShares) (*types.MsgDisableTokenizeSharesResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ delegator := sdk.MustAccAddressFromBech32(msg.DelegatorAddress)
+
+ // If tokenized shares is already disabled, alert the user
+ lockStatus, _ := k.GetTokenizeSharesLock(ctx, delegator)
+ if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCKED {
+ return nil, types.ErrTokenizeSharesAlreadyDisabledForAccount
+ }
+
+ // Otherwise, create a new tokenization lock for the user
+ // Note: if there is a lock expiration in progress, this will override the expiration
+ k.AddTokenizeSharesLock(ctx, delegator)
+
+ return &types.MsgDisableTokenizeSharesResponse{}, nil
+}
+
+// EnableTokenizeShares begins the countdown after which tokenizing shares by the
+// sender address is re-allowed, which will complete after the unbonding period
+func (k msgServer) EnableTokenizeShares(goCtx context.Context, msg *types.MsgEnableTokenizeShares) (*types.MsgEnableTokenizeSharesResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ delegator := sdk.MustAccAddressFromBech32(msg.DelegatorAddress)
+
+ // If tokenized shares aren't current disabled, alert the user
+ lockStatus, unlockTime := k.GetTokenizeSharesLock(ctx, delegator)
+ if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED {
+ return nil, types.ErrTokenizeSharesAlreadyEnabledForAccount
+ }
+ if lockStatus == types.TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING {
+ return nil, types.ErrTokenizeSharesAlreadyEnabledForAccount.Wrapf(
+ "tokenize shares re-enablement already in progress, ending at %s", unlockTime)
+ }
+
+ // Otherwise queue the unlock
+ completionTime := k.QueueTokenizeSharesAuthorization(ctx, delegator)
+
+ return &types.MsgEnableTokenizeSharesResponse{CompletionTime: completionTime}, nil
+}
+
+func (k msgServer) ValidatorBond(goCtx context.Context, msg *types.MsgValidatorBond) (*types.MsgValidatorBondResponse, error) {
+ ctx := sdk.UnwrapSDKContext(goCtx)
+
+ delAddr, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ return nil, err
+ }
+
+ valAddr, valErr := sdk.ValAddressFromBech32(msg.ValidatorAddress)
+ if valErr != nil {
+ return nil, valErr
+ }
+
+ validator, found := k.GetValidator(ctx, valAddr)
+ if !found {
+ return nil, types.ErrNoValidatorFound
+ }
+
+ delegation, found := k.GetDelegation(ctx, delAddr, valAddr)
+ if !found {
+ return nil, types.ErrNoDelegation
+ }
+
+ // liquid staking providers should not be able to validator bond
+ if k.AccountIsLiquidStakingProvider(ctx, delAddr) {
+ return nil, types.ErrValidatorBondNotAllowedFromModuleAccount
+ }
+
+ if !delegation.ValidatorBond {
+ delegation.ValidatorBond = true
+ k.SetDelegation(ctx, delegation)
+ validator.TotalValidatorBondShares = validator.TotalValidatorBondShares.Add(delegation.Shares)
+ k.SetValidator(ctx, validator)
+
+ ctx.EventManager().EmitEvent(
+ sdk.NewEvent(
+ types.EventTypeValidatorBondDelegation,
+ sdk.NewAttribute(types.AttributeKeyDelegator, msg.DelegatorAddress),
+ sdk.NewAttribute(types.AttributeKeyValidator, msg.ValidatorAddress),
+ ),
+ )
+ }
+
+ return &types.MsgValidatorBondResponse{}, nil
+}
diff --git a/x/staking/keeper/msg_server_test.go b/x/staking/keeper/msg_server_test.go
new file mode 100644
index 00000000000..7815f3e05bc
--- /dev/null
+++ b/x/staking/keeper/msg_server_test.go
@@ -0,0 +1,909 @@
+package keeper_test
+
+import (
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
+ sdk "github.com/cosmos/cosmos-sdk/types"
+
+ simapp "github.com/cosmos/cosmos-sdk/simapp"
+ authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
+ vesting "github.com/cosmos/cosmos-sdk/x/auth/vesting/exported"
+ vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
+ minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
+ "github.com/cosmos/cosmos-sdk/x/staking/keeper"
+ "github.com/cosmos/cosmos-sdk/x/staking/teststaking"
+ "github.com/cosmos/cosmos-sdk/x/staking/types"
+ sdkstaking "github.com/cosmos/cosmos-sdk/x/staking/types"
+ "github.com/stretchr/testify/require"
+)
+
+func TestTokenizeSharesAndRedeemTokens(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ liquidStakingCapStrict := sdk.ZeroDec()
+ liquidStakingCapConservative := sdk.MustNewDecFromStr("0.8")
+ liquidStakingCapDisabled := sdk.OneDec()
+
+ validatorBondStrict := sdk.OneDec()
+ validatorBondConservative := sdk.NewDec(10)
+ validatorBondDisabled := sdk.NewDec(-1)
+
+ testCases := []struct {
+ name string
+ vestingAmount sdk.Int
+ delegationAmount sdk.Int
+ tokenizeShareAmount sdk.Int
+ redeemAmount sdk.Int
+ targetVestingDelAfterShare sdk.Int
+ targetVestingDelAfterRedeem sdk.Int
+ globalLiquidStakingCap sdk.Dec
+ slashFactor sdk.Dec
+ validatorLiquidStakingCap sdk.Dec
+ validatorBondFactor sdk.Dec
+ validatorBondDelegation bool
+ validatorBondDelegatorIndex int
+ delegatorIsLSTP bool
+ expTokenizeErr bool
+ expRedeemErr bool
+ prevAccountDelegationExists bool
+ recordAccountDelegationExists bool
+ }{
+ {
+ name: "full amount tokenize and redeem",
+ vestingAmount: sdk.NewInt(0),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: false,
+ recordAccountDelegationExists: false,
+ },
+ {
+ name: "full amount tokenize and partial redeem",
+ vestingAmount: sdk.NewInt(0),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: false,
+ recordAccountDelegationExists: true,
+ },
+ {
+ name: "partial amount tokenize and full redeem",
+ vestingAmount: sdk.NewInt(0),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ recordAccountDelegationExists: false,
+ },
+ {
+ name: "tokenize and redeem with slash",
+ vestingAmount: sdk.NewInt(0),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.MustNewDecFromStr("0.1"),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: false,
+ recordAccountDelegationExists: true,
+ },
+ {
+ name: "over tokenize",
+ vestingAmount: sdk.NewInt(0),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 30),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: true,
+ expRedeemErr: false,
+ },
+ {
+ name: "over redeem",
+ vestingAmount: sdk.NewInt(0),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 40),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: false,
+ expRedeemErr: true,
+ },
+ {
+ name: "vesting account tokenize share failure",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: true,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "vesting account tokenize share success",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: false,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "try tokenize share for a validator-bond delegation",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondConservative,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 1,
+ expTokenizeErr: true,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "strict validator-bond - tokenization fails",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondStrict,
+ validatorBondDelegation: false,
+ expTokenizeErr: true,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "conservative validator-bond - successful tokenization",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondConservative,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "strict global liquid staking cap - tokenization fails",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapStrict,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: true,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "conservative global liquid staking cap - successful tokenization",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapConservative,
+ validatorLiquidStakingCap: liquidStakingCapDisabled,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "strict validator liquid staking cap - tokenization fails",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapStrict,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: true,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "conservative validator liquid staking cap - successful tokenization",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapDisabled,
+ validatorLiquidStakingCap: liquidStakingCapConservative,
+ validatorBondFactor: validatorBondDisabled,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "all caps set conservatively - successful tokenize share",
+ vestingAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapConservative,
+ validatorLiquidStakingCap: liquidStakingCapConservative,
+ validatorBondFactor: validatorBondConservative,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ {
+ name: "delegator is a liquid staking provider - accounting should not update",
+ vestingAmount: sdk.ZeroInt(),
+ delegationAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 20),
+ tokenizeShareAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ redeemAmount: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterShare: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ targetVestingDelAfterRedeem: app.StakingKeeper.TokensFromConsensusPower(ctx, 10),
+ slashFactor: sdk.ZeroDec(),
+ globalLiquidStakingCap: liquidStakingCapConservative,
+ validatorLiquidStakingCap: liquidStakingCapConservative,
+ validatorBondFactor: validatorBondConservative,
+ delegatorIsLSTP: true,
+ validatorBondDelegation: true,
+ validatorBondDelegatorIndex: 0,
+ expTokenizeErr: false,
+ expRedeemErr: false,
+ prevAccountDelegationExists: true,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ _, app, ctx = createTestInput()
+ addrs := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
+ addrAcc1, addrAcc2 := addrs[0], addrs[1]
+ addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2)
+
+ // Create ICA module account
+ icaAccountAddress := createICAAccount(app, ctx, "ica-module-account")
+
+ // Fund module account
+ delegationCoin := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), tc.delegationAmount)
+ err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, sdk.NewCoins(delegationCoin))
+ require.NoError(t, err)
+ err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, icaAccountAddress, sdk.NewCoins(delegationCoin))
+ require.NoError(t, err)
+
+ // set the delegator address depending on whether the delegator should be a liquid staking provider
+ delegatorAccount := addrAcc2
+ if tc.delegatorIsLSTP {
+ delegatorAccount = icaAccountAddress
+ }
+
+ // set validator bond factor and global liquid staking cap
+ params := app.StakingKeeper.GetParams(ctx)
+ params.ValidatorBondFactor = tc.validatorBondFactor
+ params.GlobalLiquidStakingCap = tc.globalLiquidStakingCap
+ params.ValidatorLiquidStakingCap = tc.validatorLiquidStakingCap
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // set the total liquid staked tokens
+ app.StakingKeeper.SetTotalLiquidStakedTokens(ctx, sdk.ZeroInt())
+
+ if !tc.vestingAmount.IsZero() {
+ // create vesting account
+ pubkey := secp256k1.GenPrivKey().PubKey()
+ baseAcc := authtypes.NewBaseAccount(addrAcc2, pubkey, 0, 0)
+ initialVesting := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, tc.vestingAmount))
+ baseVestingWithCoins := vestingtypes.NewBaseVestingAccount(baseAcc, initialVesting, ctx.BlockTime().Unix()+86400*365)
+ delayedVestingAccount := vestingtypes.NewDelayedVestingAccountRaw(baseVestingWithCoins)
+ app.AccountKeeper.SetAccount(ctx, delayedVestingAccount)
+ }
+
+ pubKeys := simapp.CreateTestPubKeys(2)
+ pk1, pk2 := pubKeys[0], pubKeys[1]
+
+ // Create Validators and Delegation
+ val1 := teststaking.NewValidator(t, addrVal1, pk1)
+ val1.Status = sdkstaking.Bonded
+ app.StakingKeeper.SetValidator(ctx, val1)
+ app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1)
+ err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val1)
+ require.NoError(t, err)
+
+ val2 := teststaking.NewValidator(t, addrVal2, pk2)
+ val2.Status = sdkstaking.Bonded
+ app.StakingKeeper.SetValidator(ctx, val2)
+ app.StakingKeeper.SetValidatorByPowerIndex(ctx, val2)
+ err = app.StakingKeeper.SetValidatorByConsAddr(ctx, val2)
+ require.NoError(t, err)
+
+ // Delegate from both the main delegator as well as a random account so there is a
+ // non-zero delegation after redemption
+ err = delegateCoinsFromAccount(ctx, app, delegatorAccount, tc.delegationAmount, val1)
+ require.NoError(t, err)
+
+ // apply TM updates
+ applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1)
+
+ _, found := app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1)
+ require.True(t, found, "delegation not found after delegate")
+
+ lastRecordID := app.StakingKeeper.GetLastTokenizeShareRecordID(ctx)
+ oldValidator, found := app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
+ if tc.validatorBondDelegation {
+ err := delegateCoinsFromAccount(ctx, app, addrs[tc.validatorBondDelegatorIndex], tc.delegationAmount, val1)
+ require.NoError(t, err)
+ _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{
+ DelegatorAddress: addrs[tc.validatorBondDelegatorIndex].String(),
+ ValidatorAddress: addrVal1.String(),
+ })
+ require.NoError(t, err)
+ }
+
+ resp, err := msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &types.MsgTokenizeShares{
+ DelegatorAddress: delegatorAccount.String(),
+ ValidatorAddress: addrVal1.String(),
+ Amount: sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), tc.tokenizeShareAmount),
+ TokenizedShareOwner: delegatorAccount.String(),
+ })
+ if tc.expTokenizeErr {
+ require.Error(t, err)
+ return
+ }
+ require.NoError(t, err)
+
+ // check last record id increase
+ require.Equal(t, lastRecordID+1, app.StakingKeeper.GetLastTokenizeShareRecordID(ctx))
+
+ // ensure validator's total tokens is consistent
+ newValidator, found := app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+ require.Equal(t, oldValidator.Tokens, newValidator.Tokens)
+
+ // if the delegator was not a provider, check that the total liquid staked and validator liquid shares increased
+ totalLiquidTokensAfterTokenization := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx)
+ validatorLiquidSharesAfterTokenization := newValidator.TotalLiquidShares
+ if !tc.delegatorIsLSTP {
+ require.Equal(t, tc.tokenizeShareAmount.String(), totalLiquidTokensAfterTokenization.String(), "total liquid tokens after tokenization")
+ require.Equal(t, tc.tokenizeShareAmount.String(), validatorLiquidSharesAfterTokenization.TruncateInt().String(), "validator liquid shares after tokenization")
+ } else {
+ require.True(t, totalLiquidTokensAfterTokenization.IsZero(), "zero liquid tokens after tokenization")
+ require.True(t, validatorLiquidSharesAfterTokenization.IsZero(), "zero liquid validator shares after tokenization")
+ }
+
+ if tc.vestingAmount.IsPositive() {
+ acc := app.AccountKeeper.GetAccount(ctx, addrAcc2)
+ vestingAcc := acc.(vesting.VestingAccount)
+ require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(app.StakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterShare.String())
+ }
+
+ if tc.prevAccountDelegationExists {
+ _, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1)
+ require.True(t, found, "delegation found after partial tokenize share")
+ } else {
+ _, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1)
+ require.False(t, found, "delegation found after full tokenize share")
+ }
+
+ shareToken := app.BankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom)
+ require.Equal(t, resp.Amount, shareToken)
+ _, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found, true, "validator not found")
+
+ records := app.StakingKeeper.GetAllTokenizeShareRecords(ctx)
+ require.Len(t, records, 1)
+ delegation, found := app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1)
+ require.True(t, found, "delegation not found from tokenize share module account after tokenize share")
+
+ // slash before redeem
+ slashedTokens := sdk.ZeroInt()
+ redeemedShares := tc.redeemAmount
+ redeemedTokens := tc.redeemAmount
+ if tc.slashFactor.IsPositive() {
+ consAddr, err := val1.GetConsAddr()
+ require.NoError(t, err)
+ ctx = ctx.WithBlockHeight(100)
+ val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+ power := app.StakingKeeper.TokensToConsensusPower(ctx, val1.Tokens)
+ app.StakingKeeper.Slash(ctx, consAddr, 10, power, tc.slashFactor, 0)
+ slashedTokens = sdk.NewDecFromInt(val1.Tokens).Mul(tc.slashFactor).TruncateInt()
+
+ val1, _ := app.StakingKeeper.GetValidator(ctx, addrVal1)
+ redeemedShares = delegation.Shares.Mul(sdk.NewDecFromInt(tc.redeemAmount)).QuoInt(shareToken.Amount).TruncateInt()
+ redeemedTokens = val1.TokensFromShares(sdk.NewDecFromInt(redeemedShares)).TruncateInt()
+ }
+
+ // get deletagor balance and delegation
+ bondDenomAmountBefore := app.BankKeeper.GetBalance(ctx, delegatorAccount, app.StakingKeeper.BondDenom(ctx))
+ val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+ delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1)
+ if !found {
+ delegation = types.Delegation{Shares: sdk.ZeroDec()}
+ }
+ delAmountBefore := val1.TokensFromShares(delegation.Shares)
+ oldValidator, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+
+ _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &types.MsgRedeemTokensForShares{
+ DelegatorAddress: delegatorAccount.String(),
+ Amount: sdk.NewCoin(resp.Amount.Denom, tc.redeemAmount),
+ })
+ if tc.expRedeemErr {
+ require.Error(t, err)
+ return
+ }
+ require.NoError(t, err)
+
+ // ensure validator's total tokens is consistent
+ newValidator, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+ require.Equal(t, oldValidator.Tokens, newValidator.Tokens)
+
+ // if the delegator was not a liuqid staking provider, check that the total liquid staked
+ // and total liquid shares decreased
+ totalLiquidTokensAfterRedemption := app.StakingKeeper.GetTotalLiquidStakedTokens(ctx)
+ validatorLiquidSharesAfterRedemption := newValidator.TotalLiquidShares
+ expectedLiquidTokens := totalLiquidTokensAfterTokenization.Sub(redeemedTokens).Sub(slashedTokens)
+ expectedLiquidShares := validatorLiquidSharesAfterTokenization.Sub(sdk.NewDecFromInt(redeemedShares))
+ if !tc.delegatorIsLSTP {
+ require.Equal(t, expectedLiquidTokens.String(), totalLiquidTokensAfterRedemption.String(), "total liquid tokens after redemption")
+ require.Equal(t, expectedLiquidShares.String(), validatorLiquidSharesAfterRedemption.String(), "validator liquid shares after tokenization")
+ } else {
+ require.True(t, totalLiquidTokensAfterRedemption.IsZero(), "zero liquid tokens after redemption")
+ require.True(t, validatorLiquidSharesAfterRedemption.IsZero(), "zero liquid validator shares after redemption")
+ }
+
+ if tc.vestingAmount.IsPositive() {
+ acc := app.AccountKeeper.GetAccount(ctx, addrAcc2)
+ vestingAcc := acc.(vesting.VestingAccount)
+ require.Equal(t, vestingAcc.GetDelegatedVesting().AmountOf(app.StakingKeeper.BondDenom(ctx)).String(), tc.targetVestingDelAfterRedeem.String())
+ }
+
+ expectedDelegatedShares := sdk.NewDecFromInt(tc.delegationAmount.Sub(tc.tokenizeShareAmount).Add(tc.redeemAmount))
+ delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1)
+ require.True(t, found, "delegation not found after redeem tokens")
+ require.Equal(t, delegatorAccount.String(), delegation.DelegatorAddress)
+ require.Equal(t, addrVal1.String(), delegation.ValidatorAddress)
+ require.Equal(t, expectedDelegatedShares, delegation.Shares, "delegation shares after redeem")
+
+ // check delegator balance is not changed
+ bondDenomAmountAfter := app.BankKeeper.GetBalance(ctx, delegatorAccount, app.StakingKeeper.BondDenom(ctx))
+ require.Equal(t, bondDenomAmountAfter.Amount.String(), bondDenomAmountBefore.Amount.String())
+
+ // get delegation amount is changed correctly
+ val1, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+ delegation, found = app.StakingKeeper.GetDelegation(ctx, delegatorAccount, addrVal1)
+ if !found {
+ delegation = types.Delegation{Shares: sdk.ZeroDec()}
+ }
+ delAmountAfter := val1.TokensFromShares(delegation.Shares)
+ require.Equal(t, delAmountAfter.String(), delAmountBefore.Add(sdk.NewDecFromInt(tc.redeemAmount).Mul(sdk.OneDec().Sub(tc.slashFactor))).String())
+
+ shareToken = app.BankKeeper.GetBalance(ctx, delegatorAccount, resp.Amount.Denom)
+ require.Equal(t, shareToken.Amount.String(), tc.tokenizeShareAmount.Sub(tc.redeemAmount).String())
+ _, found = app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found, true, "validator not found")
+
+ if tc.recordAccountDelegationExists {
+ _, found = app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1)
+ require.True(t, found, "delegation not found from tokenize share module account after redeem partial amount")
+
+ records = app.StakingKeeper.GetAllTokenizeShareRecords(ctx)
+ require.Len(t, records, 1)
+ } else {
+ _, found = app.StakingKeeper.GetDelegation(ctx, records[0].GetModuleAddress(), addrVal1)
+ require.False(t, found, "delegation found from tokenize share module account after redeem full amount")
+
+ records = app.StakingKeeper.GetAllTokenizeShareRecords(ctx)
+ require.Len(t, records, 0)
+ }
+ })
+ }
+}
+
+func TestTransferTokenizeShareRecord(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ addrs := simapp.AddTestAddrs(app, ctx, 3, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
+ addrAcc1, addrAcc2, valAcc := addrs[0], addrs[1], addrs[2]
+ addrVal := sdk.ValAddress(valAcc)
+
+ pubKeys := simapp.CreateTestPubKeys(1)
+ pk := pubKeys[0]
+
+ val := teststaking.NewValidator(t, addrVal, pk)
+ app.StakingKeeper.SetValidator(ctx, val)
+ app.StakingKeeper.SetValidatorByPowerIndex(ctx, val)
+
+ // apply TM updates
+ applyValidatorSetUpdates(t, ctx, app.StakingKeeper, -1)
+
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
+
+ err := app.StakingKeeper.AddTokenizeShareRecord(ctx, types.TokenizeShareRecord{
+ Id: 1,
+ Owner: addrAcc1.String(),
+ ModuleAccount: "module_account",
+ Validator: val.String(),
+ })
+ require.NoError(t, err)
+
+ _, err = msgServer.TransferTokenizeShareRecord(sdk.WrapSDKContext(ctx), &types.MsgTransferTokenizeShareRecord{
+ TokenizeShareRecordId: 1,
+ Sender: addrAcc1.String(),
+ NewOwner: addrAcc2.String(),
+ })
+ require.NoError(t, err)
+
+ record, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 1)
+ require.NoError(t, err)
+ require.Equal(t, record.Owner, addrAcc2.String())
+
+ records := app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc1)
+ require.Len(t, records, 0)
+ records = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, addrAcc2)
+ require.Len(t, records, 1)
+}
+
+func TestValidatorBond(t *testing.T) {
+ _, app, ctx := createTestInput()
+
+ testCases := []struct {
+ name string
+ createValidator bool
+ createDelegation bool
+ alreadyValidatorBond bool
+ delegatorIsLSTP bool
+ expectedErr error
+ }{
+ {
+ name: "successful validator bond",
+ createValidator: true,
+ createDelegation: true,
+ alreadyValidatorBond: false,
+ delegatorIsLSTP: false,
+ },
+ {
+ name: "successful with existing validator bond",
+ createValidator: true,
+ createDelegation: true,
+ alreadyValidatorBond: true,
+ delegatorIsLSTP: false,
+ },
+ {
+ name: "validator does not not exist",
+ createValidator: false,
+ createDelegation: false,
+ alreadyValidatorBond: false,
+ delegatorIsLSTP: false,
+ expectedErr: sdkstaking.ErrNoValidatorFound,
+ },
+ {
+ name: "delegation not exist case",
+ createValidator: true,
+ createDelegation: false,
+ alreadyValidatorBond: false,
+ delegatorIsLSTP: false,
+ expectedErr: sdkstaking.ErrNoDelegation,
+ },
+ {
+ name: "delegator is a liquid staking provider",
+ createValidator: true,
+ createDelegation: true,
+ alreadyValidatorBond: false,
+ delegatorIsLSTP: true,
+ expectedErr: types.ErrValidatorBondNotAllowedFromModuleAccount,
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ _, app, ctx = createTestInput()
+
+ pubKeys := simapp.CreateTestPubKeys(2)
+ validatorPubKey := pubKeys[0]
+ delegatorPubKey := pubKeys[1]
+
+ delegatorAddress := sdk.AccAddress(delegatorPubKey.Address())
+ validatorAddress := sdk.ValAddress(validatorPubKey.Address())
+ icaAccountAddress := createICAAccount(app, ctx, "ica-module-account")
+
+ // Set the delegator address to either be a user account or an ICA account depending on the test case
+ if tc.delegatorIsLSTP {
+ delegatorAddress = icaAccountAddress
+ }
+
+ // Fund the delegator
+ delegationAmount := app.StakingKeeper.TokensFromConsensusPower(ctx, 20)
+ coins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), delegationAmount))
+
+ err := app.BankKeeper.MintCoins(ctx, minttypes.ModuleName, coins)
+ require.NoError(t, err, "no error expected when minting")
+
+ err = app.BankKeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, delegatorAddress, coins)
+ require.NoError(t, err, "no error expected when funding account")
+
+ // Create Validator and delegation
+ if tc.createValidator {
+ validator := teststaking.NewValidator(t, validatorAddress, validatorPubKey)
+ validator.Status = sdkstaking.Bonded
+ app.StakingKeeper.SetValidator(ctx, validator)
+ app.StakingKeeper.SetValidatorByPowerIndex(ctx, validator)
+ err = app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
+ require.NoError(t, err)
+
+ // Optionally create the delegation, depending on the test case
+ if tc.createDelegation {
+ _, err = app.StakingKeeper.Delegate(ctx, delegatorAddress, delegationAmount, sdkstaking.Unbonded, validator, true)
+ require.NoError(t, err, "no error expected when delegating")
+
+ // Optionally, convert the delegation into a validator bond
+ if tc.alreadyValidatorBond {
+ delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress)
+ require.True(t, found, "delegation should have been found")
+
+ delegation.ValidatorBond = true
+ app.StakingKeeper.SetDelegation(ctx, delegation)
+ }
+ }
+ }
+
+ // Call ValidatorBond
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
+ _, err = msgServer.ValidatorBond(sdk.WrapSDKContext(ctx), &types.MsgValidatorBond{
+ DelegatorAddress: delegatorAddress.String(),
+ ValidatorAddress: validatorAddress.String(),
+ })
+
+ if tc.expectedErr != nil {
+ require.ErrorContains(t, err, tc.expectedErr.Error())
+ } else {
+ require.NoError(t, err, "no error expected from validator bond transaction")
+
+ // check validator bond true
+ delegation, found := app.StakingKeeper.GetDelegation(ctx, delegatorAddress, validatorAddress)
+ require.True(t, found, "delegation should have been found after validator bond")
+ require.True(t, delegation.ValidatorBond, "delegation should be marked as a validator bond")
+
+ // check total validator bond shares
+ validator, found := app.StakingKeeper.GetValidator(ctx, validatorAddress)
+ require.True(t, found, "validator should have been found after validator bond")
+
+ if tc.alreadyValidatorBond {
+ require.True(t, validator.TotalValidatorBondShares.IsZero(), "validator total shares should still be zero")
+ } else {
+ require.Equal(t, delegation.Shares.String(), validator.TotalValidatorBondShares.String(),
+ "validator total shares should have increased")
+ }
+ }
+ })
+ }
+}
+
+func TestEnableDisableTokenizeShares(t *testing.T) {
+ _, app, ctx := createTestInput()
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
+
+ // Create a delegator and validator
+ stakeAmount := sdk.NewInt(1000)
+ stakeToken := sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), stakeAmount)
+
+ addresses := simapp.AddTestAddrs(app, ctx, 2, stakeAmount)
+ delegatorAddress := addresses[0]
+
+ pubKeys := simapp.CreateTestPubKeys(1)
+ validatorAddress := sdk.ValAddress(addresses[1])
+ validator := teststaking.NewValidator(t, validatorAddress, pubKeys[0])
+
+ validator.DelegatorShares = sdk.NewDec(1_000_000)
+ validator.Tokens = sdk.NewInt(1_000_000)
+ validator.Status = types.Bonded
+ app.StakingKeeper.SetValidator(ctx, validator)
+
+ // Fix block time and set unbonding period to 1 day
+ blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC)
+ ctx = ctx.WithBlockTime(blockTime)
+
+ unbondingPeriod := time.Hour * 24
+ params := app.StakingKeeper.GetParams(ctx)
+ params.UnbondingTime = unbondingPeriod
+ app.StakingKeeper.SetParams(ctx, params)
+
+ // Build test messages (some of which will be reused)
+ delegateMsg := types.MsgDelegate{
+ DelegatorAddress: delegatorAddress.String(),
+ ValidatorAddress: validatorAddress.String(),
+ Amount: stakeToken,
+ }
+ tokenizeMsg := types.MsgTokenizeShares{
+ DelegatorAddress: delegatorAddress.String(),
+ ValidatorAddress: validatorAddress.String(),
+ Amount: stakeToken,
+ TokenizedShareOwner: delegatorAddress.String(),
+ }
+ redeemMsg := types.MsgRedeemTokensForShares{
+ DelegatorAddress: delegatorAddress.String(),
+ }
+ disableMsg := types.MsgDisableTokenizeShares{
+ DelegatorAddress: delegatorAddress.String(),
+ }
+ enableMsg := types.MsgEnableTokenizeShares{
+ DelegatorAddress: delegatorAddress.String(),
+ }
+
+ // Delegate normally
+ _, err := msgServer.Delegate(sdk.WrapSDKContext(ctx), &delegateMsg)
+ require.NoError(t, err, "no error expected when delegating")
+
+ // Tokenize shares - it should succeed
+ _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg)
+ require.NoError(t, err, "no error expected when tokenizing shares for the first time")
+
+ liquidToken := app.BankKeeper.GetBalance(ctx, delegatorAddress, validatorAddress.String()+"/1")
+ require.Equal(t, stakeAmount.Int64(), liquidToken.Amount.Int64(), "user received token after tokenizing share")
+
+ // Redeem to remove all tokenized shares
+ redeemMsg.Amount = liquidToken
+ _, err = msgServer.RedeemTokensForShares(sdk.WrapSDKContext(ctx), &redeemMsg)
+ require.NoError(t, err, "no error expected when redeeming")
+
+ // Attempt to enable tokenizing shares when there is no lock in place, it should error
+ _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg)
+ require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyEnabledForAccount)
+
+ // Attempt to disable when no lock is in place, it should succeed
+ _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg)
+ require.NoError(t, err, "no error expected when disabling tokenization")
+
+ // Disabling again while the lock is already in place, should error
+ _, err = msgServer.DisableTokenizeShares(sdk.WrapSDKContext(ctx), &disableMsg)
+ require.ErrorIs(t, err, types.ErrTokenizeSharesAlreadyDisabledForAccount)
+
+ // Attempt to tokenize, it should fail since tokenization is disabled
+ _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg)
+ require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount)
+
+ // Now enable tokenization
+ _, err = msgServer.EnableTokenizeShares(sdk.WrapSDKContext(ctx), &enableMsg)
+ require.NoError(t, err, "no error expected when enabling tokenization")
+
+ // Attempt to tokenize again, it should still fail since the unboning period has
+ // not passed and the lock is still active
+ _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg)
+ require.ErrorIs(t, err, types.ErrTokenizeSharesDisabledForAccount)
+ require.ErrorContains(t, err, fmt.Sprintf("tokenization will be allowed at %s",
+ blockTime.Add(unbondingPeriod)))
+
+ // Increment the block time by the unbonding period and remove the expired locks
+ ctx = ctx.WithBlockTime(ctx.BlockTime().Add(unbondingPeriod))
+ app.StakingKeeper.RemoveExpiredTokenizeShareLocks(ctx, ctx.BlockTime())
+
+ // Attempt to tokenize again, it should succeed this time since the lock has expired
+ _, err = msgServer.TokenizeShares(sdk.WrapSDKContext(ctx), &tokenizeMsg)
+ require.NoError(t, err, "no error expected when tokenizing after lock has expired")
+}
+
+func TestUnbondValidator(t *testing.T) {
+ _, app, ctx := createTestInput()
+ addrs := simapp.AddTestAddrs(app, ctx, 2, app.StakingKeeper.TokensFromConsensusPower(ctx, 10000))
+ addrAcc1 := addrs[0]
+ addrVal1 := sdk.ValAddress(addrAcc1)
+
+ pubKeys := simapp.CreateTestPubKeys(1)
+ pk1 := pubKeys[0]
+
+ // Create Validators and Delegation
+ val1 := teststaking.NewValidator(t, addrVal1, pk1)
+ val1.Status = sdkstaking.Bonded
+ app.StakingKeeper.SetValidator(ctx, val1)
+ app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1)
+ err := app.StakingKeeper.SetValidatorByConsAddr(ctx, val1)
+ require.NoError(t, err)
+
+ // try unbonding not available validator
+ msgServer := keeper.NewMsgServerImpl(app.StakingKeeper)
+ _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{
+ ValidatorAddress: sdk.ValAddress(addrs[1]).String(),
+ })
+ require.Error(t, err)
+
+ // unbond validator
+ _, err = msgServer.UnbondValidator(sdk.WrapSDKContext(ctx), &types.MsgUnbondValidator{
+ ValidatorAddress: addrVal1.String(),
+ })
+ require.NoError(t, err)
+
+ // check if validator is jailed
+ validator, found := app.StakingKeeper.GetValidator(ctx, addrVal1)
+ require.True(t, found)
+ require.True(t, validator.Jailed)
+}
diff --git a/x/staking/keeper/params.go b/x/staking/keeper/params.go
index 10a8b7e8f03..b7706a2b867 100644
--- a/x/staking/keeper/params.go
+++ b/x/staking/keeper/params.go
@@ -47,7 +47,31 @@ func (k Keeper) PowerReduction(ctx sdk.Context) sdk.Int {
return sdk.DefaultPowerReduction
}
-// Get all parameteras as types.Params
+// MinCommissionRate - Minimum validator commission rate
+func (k Keeper) MinCommissionRate(ctx sdk.Context) (res sdk.Dec) {
+ k.paramstore.Get(ctx, types.KeyMinCommissionRate, &res)
+ return
+}
+
+// Validator bond factor for all validators
+func (k Keeper) ValidatorBondFactor(ctx sdk.Context) (res sdk.Dec) {
+ k.paramstore.Get(ctx, types.KeyValidatorBondFactor, &res)
+ return
+}
+
+// Global liquid staking cap across all liquid staking providers
+func (k Keeper) GlobalLiquidStakingCap(ctx sdk.Context) (res sdk.Dec) {
+ k.paramstore.Get(ctx, types.KeyGlobalLiquidStakingCap, &res)
+ return
+}
+
+// Liquid staking cap for each validator
+func (k Keeper) ValidatorLiquidStakingCap(ctx sdk.Context) (res sdk.Dec) {
+ k.paramstore.Get(ctx, types.KeyValidatorLiquidStakingCap, &res)
+ return
+}
+
+// Get all parameters as types.Params
func (k Keeper) GetParams(ctx sdk.Context) types.Params {
return types.NewParams(
k.UnbondingTime(ctx),
@@ -55,6 +79,10 @@ func (k Keeper) GetParams(ctx sdk.Context) types.Params {
k.MaxEntries(ctx),
k.HistoricalEntries(ctx),
k.BondDenom(ctx),
+ k.MinCommissionRate(ctx),
+ k.ValidatorBondFactor(ctx),
+ k.GlobalLiquidStakingCap(ctx),
+ k.ValidatorLiquidStakingCap(ctx),
)
}
diff --git a/x/staking/keeper/querier.go b/x/staking/keeper/querier.go
index 5c276e145ae..3cf28f849c7 100644
--- a/x/staking/keeper/querier.go
+++ b/x/staking/keeper/querier.go
@@ -460,6 +460,7 @@ func DelegationToDelegationResponse(ctx sdk.Context, k Keeper, del types.Delegat
delegatorAddress,
del.GetValidatorAddr(),
del.Shares,
+ del.ValidatorBond,
sdk.NewCoin(k.BondDenom(ctx), val.TokensFromShares(del.Shares).TruncateInt()),
), nil
}
diff --git a/x/staking/keeper/querier_test.go b/x/staking/keeper/querier_test.go
index 6abe7d53cdd..1bbf4b1a206 100644
--- a/x/staking/keeper/querier_test.go
+++ b/x/staking/keeper/querier_test.go
@@ -305,6 +305,9 @@ func TestQueryDelegation(t *testing.T) {
require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegationRes.Balance)
// Query Delegator Delegations
+ bz, errRes = cdc.MarshalJSON(queryParams)
+ require.NoError(t, errRes)
+
query = abci.RequestQuery{
Path: "/custom/staking/delegatorDelegations",
Data: bz,
@@ -483,11 +486,11 @@ func TestQueryValidatorDelegations_Pagination(t *testing.T) {
for _, c := range cases {
// Query Delegator bonded validators
queryParams := types.NewQueryDelegatorParams(addrs[0])
- bz, errRes := cdc.MarshalJSON(queryParams)
+ _, errRes := cdc.MarshalJSON(queryParams)
require.NoError(t, errRes)
// Query valAddress delegations
- bz, errRes = cdc.MarshalJSON(types.NewQueryValidatorParams(valAddress, c.page, c.limit))
+ bz, errRes := cdc.MarshalJSON(types.NewQueryValidatorParams(valAddress, c.page, c.limit))
require.NoError(t, errRes)
query := abci.RequestQuery{
@@ -517,10 +520,10 @@ func TestQueryValidatorDelegations_Pagination(t *testing.T) {
for _, c := range cases {
// Query Unbonding delegations with pagination.
queryParams := types.NewQueryDelegatorParams(addrs[0])
- bz, errRes := cdc.MarshalJSON(queryParams)
+ _, errRes := cdc.MarshalJSON(queryParams)
require.NoError(t, errRes)
- bz, errRes = cdc.MarshalJSON(types.NewQueryValidatorParams(valAddress, c.page, c.limit))
+ bz, errRes := cdc.MarshalJSON(types.NewQueryValidatorParams(valAddress, c.page, c.limit))
require.NoError(t, errRes)
query := abci.RequestQuery{
Data: bz,
diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go
index 9d55fefd8d8..679b87e5918 100644
--- a/x/staking/keeper/slash.go
+++ b/x/staking/keeper/slash.go
@@ -26,9 +26,8 @@ import (
//
// CONTRACT:
//
-// Infraction was committed at the current height or at a past height,
-// not at a height in the future
-// ---
+// Infraction was committed at the current height or at a past height,
+// not at a height in the future
//
// Slash implementation doesn't require the infraction (types.Infraction) to work but the IS one does. It is here to have IS satisfy the Slash signature.
func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeight int64, power int64, slashFactor sdk.Dec, _ types.InfractionType) {
@@ -131,6 +130,11 @@ func (k Keeper) Slash(ctx sdk.Context, consAddr sdk.ConsAddress, infractionHeigh
// Burn the slashed tokens from the pool account and decrease the total supply.
validator = k.RemoveValidatorTokens(ctx, validator, tokensToBurn)
+ // Proportionally deduct any liquid tokens from the global total
+ validatorLiquidRatio := validator.TotalLiquidShares.Quo(validator.DelegatorShares)
+ slashedLiquidTokens := validatorLiquidRatio.Mul(sdk.NewDecFromInt(slashAmount)).TruncateInt()
+ k.DecreaseTotalLiquidStakedTokens(ctx, slashedLiquidTokens)
+
switch validator.GetStatus() {
case types.Bonded:
if err := k.burnBondedTokens(ctx, tokensToBurn); err != nil {
diff --git a/x/staking/keeper/slash_test.go b/x/staking/keeper/slash_test.go
index 66ee7228c76..fab0c55e3e1 100644
--- a/x/staking/keeper/slash_test.go
+++ b/x/staking/keeper/slash_test.go
@@ -123,7 +123,7 @@ func TestSlashRedelegation(t *testing.T) {
// add bonded tokens to pool for (re)delegations
startCoins := sdk.NewCoins(sdk.NewInt64Coin(app.StakingKeeper.BondDenom(ctx), 15))
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
- balances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
+ _ = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
require.NoError(t, simapp.FundModuleAccount(app.BankKeeper, ctx, bondedPool.GetName(), startCoins))
app.AccountKeeper.SetModuleAccount(ctx, bondedPool)
@@ -136,7 +136,7 @@ func TestSlashRedelegation(t *testing.T) {
app.StakingKeeper.SetRedelegation(ctx, rd)
// set the associated delegation
- del := types.NewDelegation(addrDels[0], addrVals[1], sdk.NewDec(10))
+ del := types.NewDelegation(addrDels[0], addrVals[1], sdk.NewDec(10), false)
app.StakingKeeper.SetDelegation(ctx, del)
// started redelegating prior to the current height, stake didn't contribute to infraction
@@ -153,7 +153,7 @@ func TestSlashRedelegation(t *testing.T) {
slashAmount = app.StakingKeeper.SlashRedelegation(ctx, validator, rd, 0, fraction)
require.True(t, slashAmount.Equal(sdk.NewInt(0)))
- balances = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
+ balances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
// test valid slash, before expiration timestamp and to which stake contributed
ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(0, 0)})
@@ -201,12 +201,12 @@ func TestSlashAtNegativeHeight(t *testing.T) {
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
oldBondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
- validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ _, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
app.StakingKeeper.Slash(ctx, consAddr, -2, 10, fraction, 0)
// read updated state
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
// end block
@@ -232,12 +232,12 @@ func TestSlashValidatorAtCurrentHeight(t *testing.T) {
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
oldBondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
- validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ _, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
app.StakingKeeper.Slash(ctx, consAddr, ctx.BlockHeight(), 10, fraction, 0)
// read updated state
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
// end block
@@ -272,7 +272,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) {
bondedPool := app.StakingKeeper.GetBondedPool(ctx)
oldBondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress())
- validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ _, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
app.StakingKeeper.Slash(ctx, consAddr, 10, 10, fraction, 0)
@@ -293,7 +293,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) {
require.Equal(t, app.StakingKeeper.TokensFromConsensusPower(ctx, 3), diffTokens)
// read updated validator
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
// power decreased by 3 - 6 stake originally bonded at the time of infraction
@@ -390,11 +390,11 @@ func TestSlashWithRedelegation(t *testing.T) {
// set a redelegation
rdTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 6)
rd := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11,
- time.Unix(0, 0), rdTokens, rdTokens.ToDec(), 0)
+ time.Unix(0, 0), rdTokens, sdk.NewDecFromInt(rdTokens), 0)
app.StakingKeeper.SetRedelegation(ctx, rd)
// set the associated delegation
- del := types.NewDelegation(addrDels[0], addrVals[1], rdTokens.ToDec())
+ del := types.NewDelegation(addrDels[0], addrVals[1], rdTokens.ToDec(), false)
app.StakingKeeper.SetDelegation(ctx, del)
// update bonded tokens
@@ -411,11 +411,11 @@ func TestSlashWithRedelegation(t *testing.T) {
// slash validator
ctx = ctx.WithBlockHeight(12)
- validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ _, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
require.NotPanics(t, func() { app.StakingKeeper.Slash(ctx, consAddr, 10, 10, fraction, 0) })
- burnAmount := app.StakingKeeper.TokensFromConsensusPower(ctx, 10).ToDec().Mul(fraction).TruncateInt()
+ burnAmount := sdk.NewDecFromInt(app.StakingKeeper.TokensFromConsensusPower(ctx, 10)).Mul(fraction).TruncateInt()
bondedPool = app.StakingKeeper.GetBondedPool(ctx)
notBondedPool = app.StakingKeeper.GetNotBondedPool(ctx)
@@ -433,7 +433,7 @@ func TestSlashWithRedelegation(t *testing.T) {
require.True(t, found)
require.Len(t, rd.Entries, 1)
// read updated validator
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
// power decreased by 2 - 4 stake originally bonded at the time of infraction
// was still bonded at the time of discovery and was slashed by half, 4 stake
@@ -442,7 +442,7 @@ func TestSlashWithRedelegation(t *testing.T) {
require.Equal(t, int64(8), validator.GetConsensusPower(app.StakingKeeper.PowerReduction(ctx)))
// slash the validator again
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ _, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
require.NotPanics(t, func() { app.StakingKeeper.Slash(ctx, consAddr, 10, 10, sdk.OneDec(), 0) })
@@ -476,7 +476,7 @@ func TestSlashWithRedelegation(t *testing.T) {
// slash the validator again, by 100%
ctx = ctx.WithBlockHeight(12)
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
+ _, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, consAddr)
require.True(t, found)
require.NotPanics(t, func() { app.StakingKeeper.Slash(ctx, consAddr, 10, 10, sdk.OneDec(), 0) })
@@ -548,7 +548,7 @@ func TestSlashBoth(t *testing.T) {
app.StakingKeeper.SetRedelegation(ctx, rdA)
// set the associated delegation
- delA := types.NewDelegation(addrDels[0], addrVals[1], rdATokens.ToDec())
+ delA := types.NewDelegation(addrDels[0], addrVals[1], rdATokens.ToDec(), false)
app.StakingKeeper.SetDelegation(ctx, delA)
// set an unbonding delegation with expiration timestamp (beyond which the
@@ -575,7 +575,7 @@ func TestSlashBoth(t *testing.T) {
oldNotBonded := app.BankKeeper.GetBalance(ctx, notBondedPool.GetAddress(), bondDenom).Amount
// slash validator
ctx = ctx.WithBlockHeight(12)
- validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(PKs[0]))
+ _, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(PKs[0]))
require.True(t, found)
consAddr0 := sdk.ConsAddress(PKs[0].Address())
app.StakingKeeper.Slash(ctx, consAddr0, 10, 10, fraction, 0)
@@ -599,7 +599,7 @@ func TestSlashBoth(t *testing.T) {
require.True(t, found)
require.Len(t, rdA.Entries, 1)
// read updated validator
- validator, found = app.StakingKeeper.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(PKs[0]))
+ validator, found := app.StakingKeeper.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(PKs[0]))
require.True(t, found)
// power not decreased, all stake was bonded since
require.Equal(t, int64(10), validator.GetConsensusPower(app.StakingKeeper.PowerReduction(ctx)))
diff --git a/x/staking/keeper/tokenize_share_record.go b/x/staking/keeper/tokenize_share_record.go
new file mode 100644
index 00000000000..ecde86be0c2
--- /dev/null
+++ b/x/staking/keeper/tokenize_share_record.go
@@ -0,0 +1,151 @@
+package keeper
+
+import (
+ "fmt"
+
+ sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
+
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ gogotypes "github.com/gogo/protobuf/types"
+
+ "github.com/cosmos/cosmos-sdk/x/staking/types"
+)
+
+func (k Keeper) GetLastTokenizeShareRecordID(ctx sdk.Context) uint64 {
+ store := ctx.KVStore(k.storeKey)
+ bytes := store.Get(types.LastTokenizeShareRecordIDKey)
+ if bytes == nil {
+ return 0
+ }
+ return sdk.BigEndianToUint64(bytes)
+}
+
+func (k Keeper) SetLastTokenizeShareRecordID(ctx sdk.Context, id uint64) {
+ store := ctx.KVStore(k.storeKey)
+ store.Set(types.LastTokenizeShareRecordIDKey, sdk.Uint64ToBigEndian(id))
+}
+
+func (k Keeper) GetTokenizeShareRecord(ctx sdk.Context, id uint64) (tokenizeShareRecord types.TokenizeShareRecord, err error) {
+ store := ctx.KVStore(k.storeKey)
+
+ bz := store.Get(types.GetTokenizeShareRecordByIndexKey(id))
+ if bz == nil {
+ return tokenizeShareRecord, sdkerrors.Wrap(types.ErrTokenizeShareRecordNotExists, fmt.Sprintf("tokenizeShareRecord %d does not exist", id))
+ }
+
+ k.cdc.MustUnmarshal(bz, &tokenizeShareRecord)
+ return tokenizeShareRecord, nil
+}
+
+func (k Keeper) GetTokenizeShareRecordsByOwner(ctx sdk.Context, owner sdk.AccAddress) (tokenizeShareRecords []types.TokenizeShareRecord) {
+ store := ctx.KVStore(k.storeKey)
+
+ it := sdk.KVStorePrefixIterator(store, types.GetTokenizeShareRecordIdsByOwnerPrefix(owner))
+ defer it.Close()
+
+ for ; it.Valid(); it.Next() {
+ var id gogotypes.UInt64Value
+ k.cdc.MustUnmarshal(it.Value(), &id)
+
+ tokenizeShareRecord, err := k.GetTokenizeShareRecord(ctx, id.Value)
+ if err != nil {
+ continue
+ }
+ tokenizeShareRecords = append(tokenizeShareRecords, tokenizeShareRecord)
+ }
+ return
+}
+
+func (k Keeper) GetTokenizeShareRecordByDenom(ctx sdk.Context, denom string) (types.TokenizeShareRecord, error) {
+ store := ctx.KVStore(k.storeKey)
+ bz := store.Get(types.GetTokenizeShareRecordIDByDenomKey(denom))
+ if bz == nil {
+ return types.TokenizeShareRecord{}, fmt.Errorf("tokenize share record not found from denom: %s", denom)
+ }
+
+ var id gogotypes.UInt64Value
+ k.cdc.MustUnmarshal(bz, &id)
+
+ return k.GetTokenizeShareRecord(ctx, id.Value)
+}
+
+func (k Keeper) GetAllTokenizeShareRecords(ctx sdk.Context) (tokenizeShareRecords []types.TokenizeShareRecord) {
+ store := ctx.KVStore(k.storeKey)
+
+ it := sdk.KVStorePrefixIterator(store, types.TokenizeShareRecordPrefix)
+ defer it.Close()
+
+ for ; it.Valid(); it.Next() {
+ var tokenizeShareRecord types.TokenizeShareRecord
+ k.cdc.MustUnmarshal(it.Value(), &tokenizeShareRecord)
+
+ tokenizeShareRecords = append(tokenizeShareRecords, tokenizeShareRecord)
+ }
+ return
+}
+
+func (k Keeper) AddTokenizeShareRecord(ctx sdk.Context, tokenizeShareRecord types.TokenizeShareRecord) error {
+ if k.hasTokenizeShareRecord(ctx, tokenizeShareRecord.Id) {
+ return sdkerrors.Wrapf(types.ErrTokenizeShareRecordAlreadyExists, "TokenizeShareRecord already exists: %d", tokenizeShareRecord.Id)
+ }
+
+ k.setTokenizeShareRecord(ctx, tokenizeShareRecord)
+
+ owner, err := sdk.AccAddressFromBech32(tokenizeShareRecord.Owner)
+ if err != nil {
+ return err
+ }
+
+ k.setTokenizeShareRecordWithOwner(ctx, owner, tokenizeShareRecord.Id)
+ k.setTokenizeShareRecordWithDenom(ctx, tokenizeShareRecord.GetShareTokenDenom(), tokenizeShareRecord.Id)
+
+ return nil
+}
+
+func (k Keeper) DeleteTokenizeShareRecord(ctx sdk.Context, recordID uint64) error {
+ record, err := k.GetTokenizeShareRecord(ctx, recordID)
+ if err != nil {
+ return err
+ }
+ owner, err := sdk.AccAddressFromBech32(record.Owner)
+ if err != nil {
+ return err
+ }
+
+ store := ctx.KVStore(k.storeKey)
+ store.Delete(types.GetTokenizeShareRecordByIndexKey(recordID))
+ store.Delete(types.GetTokenizeShareRecordIDByOwnerAndIDKey(owner, recordID))
+ store.Delete(types.GetTokenizeShareRecordIDByDenomKey(record.GetShareTokenDenom()))
+ return nil
+}
+
+func (k Keeper) hasTokenizeShareRecord(ctx sdk.Context, id uint64) bool {
+ store := ctx.KVStore(k.storeKey)
+ return store.Has(types.GetTokenizeShareRecordByIndexKey(id))
+}
+
+func (k Keeper) setTokenizeShareRecord(ctx sdk.Context, tokenizeShareRecord types.TokenizeShareRecord) {
+ store := ctx.KVStore(k.storeKey)
+ bz := k.cdc.MustMarshal(&tokenizeShareRecord)
+
+ store.Set(types.GetTokenizeShareRecordByIndexKey(tokenizeShareRecord.Id), bz)
+}
+
+func (k Keeper) setTokenizeShareRecordWithOwner(ctx sdk.Context, owner sdk.AccAddress, id uint64) {
+ store := ctx.KVStore(k.storeKey)
+ bz := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: id})
+
+ store.Set(types.GetTokenizeShareRecordIDByOwnerAndIDKey(owner, id), bz)
+}
+
+func (k Keeper) deleteTokenizeShareRecordWithOwner(ctx sdk.Context, owner sdk.AccAddress, id uint64) {
+ store := ctx.KVStore(k.storeKey)
+ store.Delete(types.GetTokenizeShareRecordIDByOwnerAndIDKey(owner, id))
+}
+
+func (k Keeper) setTokenizeShareRecordWithDenom(ctx sdk.Context, denom string, id uint64) {
+ store := ctx.KVStore(k.storeKey)
+ bz := k.cdc.MustMarshal(&gogotypes.UInt64Value{Value: id})
+
+ store.Set(types.GetTokenizeShareRecordIDByDenomKey(denom), bz)
+}
diff --git a/x/staking/keeper/tokenize_share_record_test.go b/x/staking/keeper/tokenize_share_record_test.go
new file mode 100644
index 00000000000..29bbad2c370
--- /dev/null
+++ b/x/staking/keeper/tokenize_share_record_test.go
@@ -0,0 +1,61 @@
+package keeper_test
+
+import (
+ "github.com/cosmos/cosmos-sdk/x/staking/types"
+)
+
+func (suite *KeeperTestSuite) TestGetLastTokenizeShareRecordId() {
+ app, ctx := suite.app, suite.ctx
+ lastTokenizeShareRecordID := app.StakingKeeper.GetLastTokenizeShareRecordID(ctx)
+ suite.Equal(lastTokenizeShareRecordID, uint64(0))
+ app.StakingKeeper.SetLastTokenizeShareRecordID(ctx, 100)
+ lastTokenizeShareRecordID = app.StakingKeeper.GetLastTokenizeShareRecordID(ctx)
+ suite.Equal(lastTokenizeShareRecordID, uint64(100))
+}
+
+func (suite *KeeperTestSuite) TestGetTokenizeShareRecord() {
+ app, ctx := suite.app, suite.ctx
+ owner1, owner2 := suite.addrs[0], suite.addrs[1]
+
+ tokenizeShareRecord1 := types.TokenizeShareRecord{
+ Id: 0,
+ Owner: owner1.String(),
+ ModuleAccount: "test-module-account-1",
+ Validator: "test-validator",
+ }
+ tokenizeShareRecord2 := types.TokenizeShareRecord{
+ Id: 1,
+ Owner: owner2.String(),
+ ModuleAccount: "test-module-account-2",
+ Validator: "test-validator",
+ }
+ tokenizeShareRecord3 := types.TokenizeShareRecord{
+ Id: 2,
+ Owner: owner1.String(),
+ ModuleAccount: "test-module-account-3",
+ Validator: "test-validator",
+ }
+ err := app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord1)
+ suite.NoError(err)
+ err = app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord2)
+ suite.NoError(err)
+ err = app.StakingKeeper.AddTokenizeShareRecord(ctx, tokenizeShareRecord3)
+ suite.NoError(err)
+
+ tokenizeShareRecord, err := app.StakingKeeper.GetTokenizeShareRecord(ctx, 2)
+ suite.NoError(err)
+ suite.Equal(tokenizeShareRecord, tokenizeShareRecord3)
+
+ tokenizeShareRecord, err = app.StakingKeeper.GetTokenizeShareRecordByDenom(ctx, tokenizeShareRecord2.GetShareTokenDenom())
+ suite.NoError(err)
+ suite.Equal(tokenizeShareRecord, tokenizeShareRecord2)
+
+ tokenizeShareRecords := app.StakingKeeper.GetAllTokenizeShareRecords(ctx)
+ suite.Equal(len(tokenizeShareRecords), 3)
+
+ tokenizeShareRecords = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, owner1)
+ suite.Equal(len(tokenizeShareRecords), 2)
+
+ tokenizeShareRecords = app.StakingKeeper.GetTokenizeShareRecordsByOwner(ctx, owner2)
+ suite.Equal(len(tokenizeShareRecords), 1)
+}
diff --git a/x/staking/keeper/unbonding_test.go b/x/staking/keeper/unbonding_test.go
index 9eff9ec9b53..02e962184a9 100644
--- a/x/staking/keeper/unbonding_test.go
+++ b/x/staking/keeper/unbonding_test.go
@@ -74,7 +74,7 @@ func setup(t *testing.T, hookCalled *bool, ubdeID *uint64) (
require.True(t, validator1.IsBonded())
// Create a delegator
- delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares1)
+ delegation := types.NewDelegation(addrDels[0], addrVals[0], issuedShares1, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
// Create a validator to redelegate to
diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go
index 363ae1b5a09..bd13ccb8212 100644
--- a/x/staking/keeper/val_state_change.go
+++ b/x/staking/keeper/val_state_change.go
@@ -165,7 +165,6 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab
if err != nil {
return nil, err
}
-
oldPowerBytes, found := last[valAddrStr]
newPower := validator.ConsensusPower(powerReduction)
newPowerBytes := k.cdc.MustMarshal(&gogotypes.Int64Value{Value: newPower})
@@ -173,7 +172,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab
// update the validator set if power has changed
if !found || !bytes.Equal(oldPowerBytes, newPowerBytes) {
updates = append(updates, validator.ABCIValidatorUpdate(powerReduction))
- // set the validator update and power
+
k.SetLastValidatorPower(ctx, valAddr, newPower)
}
@@ -194,7 +193,6 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab
if err != nil {
return nil, err
}
-
amtFromBondedToNotBonded = amtFromBondedToNotBonded.Add(validator.GetTokens())
k.DeleteLastValidatorPower(ctx, validator.GetOperator())
update := validator.ABCIValidatorUpdateZero()
diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go
index 52860851c46..37cd56bfea3 100644
--- a/x/staking/keeper/validator.go
+++ b/x/staking/keeper/validator.go
@@ -142,6 +142,10 @@ func (k Keeper) UpdateValidatorCommission(ctx sdk.Context,
return commission, err
}
+ if newRate.LT(k.MinCommissionRate(ctx)) {
+ return commission, fmt.Errorf("cannot set validator commission to less than minimum rate of %s", k.MinCommissionRate(ctx))
+ }
+
commission.Rate = newRate
commission.UpdateTime = blockTime
diff --git a/x/staking/keeper/validator_bench_test.go b/x/staking/keeper/validator_bench_test.go
index ea727b72457..5c8b1b8f992 100644
--- a/x/staking/keeper/validator_bench_test.go
+++ b/x/staking/keeper/validator_bench_test.go
@@ -7,14 +7,14 @@ func BenchmarkGetValidator(b *testing.B) {
// panic: encoding/hex: odd length hex string
powersNumber := 900
- var totalPower int64 = 0
+ totalPower := int64(0)
powers := make([]int64, powersNumber)
for i := range powers {
powers[i] = int64(i)
totalPower += int64(i)
}
- app, ctx, _, valAddrs, vals := initValidators(b, totalPower, len(powers), powers)
+ app, ctx, valAddrs, vals := initValidators(b, totalPower, len(powers), powers)
for _, validator := range vals {
app.StakingKeeper.SetValidator(ctx, validator)
diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go
index a39d9ca799d..8ce22b109b0 100644
--- a/x/staking/keeper/validator_test.go
+++ b/x/staking/keeper/validator_test.go
@@ -41,7 +41,7 @@ func bootstrapValidatorTest(t testing.TB, power int64, numAddrs int) (*simapp.Si
return app, ctx, addrDels, addrVals
}
-func initValidators(t testing.TB, power int64, numAddrs int, powers []int64) (*simapp.SimApp, sdk.Context, []sdk.AccAddress, []sdk.ValAddress, []types.Validator) {
+func initValidators(t testing.TB, power int64, numAddrs int, powers []int64) (*simapp.SimApp, sdk.Context, []sdk.ValAddress, []types.Validator) {
app, ctx, addrs, valAddrs := bootstrapValidatorTest(t, power, numAddrs)
pks := simapp.CreateTestPubKeys(numAddrs)
@@ -51,7 +51,7 @@ func initValidators(t testing.TB, power int64, numAddrs int, powers []int64) (*s
tokens := app.StakingKeeper.TokensFromConsensusPower(ctx, power)
vs[i], _ = vs[i].AddTokensFromDel(tokens)
}
- return app, ctx, addrs, valAddrs, vs
+ return app, ctx, valAddrs, vs
}
func TestSetValidator(t *testing.T) {
@@ -186,7 +186,7 @@ func TestUpdateBondedValidatorsDecreaseCliff(t *testing.T) {
app.StakingKeeper.DeleteValidatorByPowerIndex(ctx, nextCliffVal)
shares := app.StakingKeeper.TokensFromConsensusPower(ctx, 21)
nextCliffVal, _ = nextCliffVal.RemoveDelShares(shares.ToDec())
- nextCliffVal = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, nextCliffVal, true)
+ _ = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, nextCliffVal, true)
expectedValStatus := map[int]types.BondStatus{
9: types.Bonded, 8: types.Bonded, 7: types.Bonded, 5: types.Bonded, 4: types.Bonded,
@@ -224,7 +224,8 @@ func TestSlashToZeroPowerRemoved(t *testing.T) {
validator, _ = validator.AddTokensFromDel(valTokens)
require.Equal(t, types.Unbonded, validator.Status)
require.Equal(t, valTokens, validator.Tokens)
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
+ err := app.StakingKeeper.SetValidatorByConsAddr(ctx, validator)
+ require.NoError(t, err)
validator = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validator, true)
require.Equal(t, valTokens, validator.Tokens, "\nvalidator %v\npool %v", validator, valTokens)
@@ -267,7 +268,8 @@ func TestValidatorBasics(t *testing.T) {
// set and retrieve a record
validators[0] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[0], true)
- app.StakingKeeper.SetValidatorByConsAddr(ctx, validators[0])
+ err := app.StakingKeeper.SetValidatorByConsAddr(ctx, validators[0])
+ require.NoError(t, err)
resVal, found := app.StakingKeeper.GetValidator(ctx, addrVals[0])
require.True(t, found)
assert.True(ValEq(t, validators[0], resVal))
@@ -761,7 +763,7 @@ func TestApplyAndReturnValidatorSetUpdatesSingleValueChange(t *testing.T) {
func TestApplyAndReturnValidatorSetUpdatesMultipleValueChange(t *testing.T) {
powers := []int64{10, 20}
// TODO: use it in other places
- app, ctx, _, _, validators := initValidators(t, 1000, 20, powers)
+ app, ctx, _, validators := initValidators(t, 1000, 20, powers)
validators[0] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[0], false)
validators[1] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[1], false)
@@ -783,7 +785,7 @@ func TestApplyAndReturnValidatorSetUpdatesMultipleValueChange(t *testing.T) {
func TestApplyAndReturnValidatorSetUpdatesInserted(t *testing.T) {
powers := []int64{10, 20, 5, 15, 25}
- app, ctx, _, _, validators := initValidators(t, 1000, 20, powers)
+ app, ctx, _, validators := initValidators(t, 1000, 20, powers)
validators[0] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[0], false)
validators[1] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[1], false)
@@ -1043,6 +1045,11 @@ func TestUpdateValidatorCommission(t *testing.T) {
app, ctx, _, addrVals := bootstrapValidatorTest(t, 1000, 20)
ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Now().UTC()})
+ // Set MinCommissionRate to 0.05
+ params := app.StakingKeeper.GetParams(ctx)
+ params.MinCommissionRate = sdk.NewDecWithPrec(5, 2)
+ app.StakingKeeper.SetParams(ctx, params)
+
commission1 := types.NewCommissionWithTime(
sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(3, 1),
sdk.NewDecWithPrec(1, 1), time.Now().UTC().Add(time.Duration(-1)*time.Hour),
@@ -1067,6 +1074,7 @@ func TestUpdateValidatorCommission(t *testing.T) {
{val2, sdk.NewDecWithPrec(-1, 1), true},
{val2, sdk.NewDecWithPrec(4, 1), true},
{val2, sdk.NewDecWithPrec(3, 1), true},
+ {val2, sdk.NewDecWithPrec(1, 2), true},
{val2, sdk.NewDecWithPrec(2, 1), false},
}
diff --git a/x/staking/simulation/decoder_test.go b/x/staking/simulation/decoder_test.go
index 2a5baf02d98..2592a5ad226 100644
--- a/x/staking/simulation/decoder_test.go
+++ b/x/staking/simulation/decoder_test.go
@@ -38,7 +38,7 @@ func TestDecodeStore(t *testing.T) {
val, err := types.NewValidator(valAddr1, delPk1, types.NewDescription("test", "test", "test", "test", "test"))
require.NoError(t, err)
- del := types.NewDelegation(delAddr1, valAddr1, sdk.OneDec())
+ del := types.NewDelegation(delAddr1, valAddr1, sdk.OneDec(), false)
ubd := types.NewUnbondingDelegation(delAddr1, valAddr1, 15, bondTime, sdk.OneInt(), 1)
red := types.NewRedelegation(delAddr1, valAddr1, valAddr1, 12, bondTime, sdk.OneInt(), sdk.OneDec(), 0)
diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go
index cf4e8e50c44..f8065860a25 100644
--- a/x/staking/simulation/genesis.go
+++ b/x/staking/simulation/genesis.go
@@ -40,9 +40,13 @@ func getHistEntries(r *rand.Rand) uint32 {
func RandomizedGenState(simState *module.SimulationState) {
// params
var (
- unbondTime time.Duration
- maxVals uint32
- histEntries uint32
+ unbondTime time.Duration
+ maxVals uint32
+ histEntries uint32
+ minCommissionRate sdk.Dec
+ validatorBondFactor sdk.Dec
+ globalLiquidStakingCap sdk.Dec
+ validatorLiquidStakingCap sdk.Dec
)
simState.AppParams.GetOrGenerate(
@@ -63,7 +67,17 @@ func RandomizedGenState(simState *module.SimulationState) {
// NOTE: the slashing module need to be defined after the staking module on the
// NewSimulationManager constructor for this to work
simState.UnbondTime = unbondTime
- params := types.NewParams(simState.UnbondTime, maxVals, 7, histEntries, sdk.DefaultBondDenom)
+ params := types.NewParams(
+ simState.UnbondTime,
+ maxVals,
+ 7,
+ histEntries,
+ sdk.DefaultBondDenom,
+ minCommissionRate,
+ validatorBondFactor,
+ globalLiquidStakingCap,
+ validatorLiquidStakingCap,
+ )
// validators & delegations
var (
@@ -92,7 +106,7 @@ func RandomizedGenState(simState *module.SimulationState) {
validator.DelegatorShares = sdk.NewDec(simState.InitialStake)
validator.Commission = commission
- delegation := types.NewDelegation(simState.Accounts[i].Address, valAddr, sdk.NewDec(simState.InitialStake))
+ delegation := types.NewDelegation(simState.Accounts[i].Address, valAddr, sdk.NewDecFromInt(sdk.NewInt((simState.InitialStake))), false)
validators = append(validators, validator)
delegations = append(delegations, delegation)
diff --git a/x/staking/simulation/genesis_test.go b/x/staking/simulation/genesis_test.go
index 464e8a40490..b6a817d7a51 100644
--- a/x/staking/simulation/genesis_test.go
+++ b/x/staking/simulation/genesis_test.go
@@ -63,7 +63,6 @@ func TestRandomizedGenState(t *testing.T) {
require.Equal(t, "0.292059246265731326", stakingGenesis.Validators[2].Commission.CommissionRates.Rate.String())
require.Equal(t, "0.330000000000000000", stakingGenesis.Validators[2].Commission.CommissionRates.MaxRate.String())
require.Equal(t, "0.038337453731274481", stakingGenesis.Validators[2].Commission.CommissionRates.MaxChangeRate.String())
- require.Equal(t, "1", stakingGenesis.Validators[2].MinSelfDelegation.String())
}
// TestRandomizedGenState1 tests abnormal scenarios of applying RandomizedGenState.
diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go
index 2a1c86d635c..6c3827659b6 100644
--- a/x/staking/simulation/operations.go
+++ b/x/staking/simulation/operations.go
@@ -14,13 +14,23 @@ import (
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
+const ()
+
// Simulation operation weights constants
+//
+//nolint:gosec // these are not hard-coded credentials
const (
- OpWeightMsgCreateValidator = "op_weight_msg_create_validator" //nolint:gosec
- OpWeightMsgEditValidator = "op_weight_msg_edit_validator" //nolint:gosec
- OpWeightMsgDelegate = "op_weight_msg_delegate" //nolint:gosec
- OpWeightMsgUndelegate = "op_weight_msg_undelegate" //nolint:gosec
- OpWeightMsgBeginRedelegate = "op_weight_msg_begin_redelegate" //nolint:gosec
+ OpWeightMsgCreateValidator = "op_weight_msg_create_validator" //nolint:gosec
+ OpWeightMsgEditValidator = "op_weight_msg_edit_validator" //nolint:gosec
+ OpWeightMsgDelegate = "op_weight_msg_delegate" //nolint:gosec
+ OpWeightMsgUndelegate = "op_weight_msg_undelegate" //nolint:gosec
+ OpWeightMsgBeginRedelegate = "op_weight_msg_begin_redelegate" //nolint:gosec
+ OpWeightMsgCancelUnbondingDelegation = "op_weight_msg_cancel_unbonding_delegation" //nolint:gosec
+ OpWeightMsgTokenizeShares = "op_weight_msg_tokenize_shares" //nolint:gosec
+ OpWeightMsgRedeemTokensforShares = "op_weight_msg_redeem_tokens_for_shares" //nolint:gosec
+ OpWeightMsgTransferTokenizeShareRecord = "op_weight_msg_transfer_tokenize_share_record" //nolint:gosec
+ OpWeightMsgDisableTokenizeShares = "op_weight_msg_disable_tokenize_shares" //nolint:gosec
+ OpWeightMsgEnableTokenizeShares = "op_weight_msg_enable_tokenize_shares" //nolint:gosec
)
// WeightedOperations returns all the operations from the module with their respective weights
@@ -34,6 +44,12 @@ func WeightedOperations(
weightMsgDelegate int
weightMsgUndelegate int
weightMsgBeginRedelegate int
+ // weightMsgCancelUnbondingDelegation int
+ // weightMsgTokenizeShares int
+ // weightMsgRedeemTokensforShares int
+ // weightMsgTransferTokenizeShareRecord int
+ // weightMsgDisableTokenizeShares int
+ // weightMsgEnableTokenizeShares int
)
appParams.GetOrGenerate(cdc, OpWeightMsgCreateValidator, &weightMsgCreateValidator, nil,
@@ -66,6 +82,42 @@ func WeightedOperations(
},
)
+ // appParams.GetOrGenerate(cdc, OpWeightMsgCancelUnbondingDelegation, &weightMsgCancelUnbondingDelegation, nil,
+ // func(_ *rand.Rand) {
+ // weightMsgCancelUnbondingDelegation = simappparams.DefaultWeightMsgCancelUnbondingDelegation
+ // },
+ // )
+
+ // appParams.GetOrGenerate(cdc, OpWeightMsgTokenizeShares, &weightMsgTokenizeShares, nil,
+ // func(_ *rand.Rand) {
+ // weightMsgTokenizeShares = simappparams.DefaultWeightMsgTokenizeShares
+ // },
+ // )
+
+ // appParams.GetOrGenerate(cdc, OpWeightMsgRedeemTokensforShares, &weightMsgRedeemTokensforShares, nil,
+ // func(_ *rand.Rand) {
+ // weightMsgRedeemTokensforShares = simappparams.DefaultWeightMsgRedeemTokensforShares
+ // },
+ // )
+
+ // appParams.GetOrGenerate(cdc, OpWeightMsgTransferTokenizeShareRecord, &weightMsgTransferTokenizeShareRecord, nil,
+ // func(_ *rand.Rand) {
+ // weightMsgTransferTokenizeShareRecord = simappparams.DefaultWeightMsgTransferTokenizeShareRecord
+ // },
+ // )
+
+ // appParams.GetOrGenerate(cdc, OpWeightMsgDisableTokenizeShares, &weightMsgDisableTokenizeShares, nil,
+ // func(_ *rand.Rand) {
+ // weightMsgDisableTokenizeShares = simappparams.DefaultWeightMsgDisableTokenizeShares
+ // },
+ // )
+
+ // appParams.GetOrGenerate(cdc, OpWeightMsgEnableTokenizeShares, &weightMsgEnableTokenizeShares, nil,
+ // func(_ *rand.Rand) {
+ // weightMsgEnableTokenizeShares = simappparams.DefaultWeightMsgEnableTokenizeShares
+ // },
+ // )
+
return simulation.WeightedOperations{
simulation.NewWeightedOperation(
weightMsgCreateValidator,
@@ -87,6 +139,30 @@ func WeightedOperations(
weightMsgBeginRedelegate,
SimulateMsgBeginRedelegate(ak, bk, k),
),
+ // simulation.NewWeightedOperation(
+ // weightMsgCancelUnbondingDelegation,
+ // SimulateMsgCancelUnbondingDelegate(ak, bk, k),
+ // ),
+ // simulation.NewWeightedOperation(
+ // weightMsgTokenizeShares,
+ // SimulateMsgTokenizeShares(ak, bk, k),
+ // ),
+ // simulation.NewWeightedOperation(
+ // weightMsgRedeemTokensforShares,
+ // SimulateMsgRedeemTokensforShares(ak, bk, k),
+ // ),
+ // simulation.NewWeightedOperation(
+ // weightMsgTransferTokenizeShareRecord,
+ // SimulateMsgTransferTokenizeShareRecord(ak, bk, k),
+ // ),
+ // simulation.NewWeightedOperation(
+ // weightMsgDisableTokenizeShares,
+ // SimulateMsgDisableTokenizeShares(ak, bk, k),
+ // ),
+ // simulation.NewWeightedOperation(
+ // weightMsgEnableTokenizeShares,
+ // SimulateMsgEnableTokenizeShares(ak, bk, k),
+ // ),
}
}
@@ -101,7 +177,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k
// ensure the validator doesn't exist already
_, found := k.GetValidator(ctx, address)
if found {
- return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateValidator, "unable to find validator"), nil, nil
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgCreateValidator, "validator already exists"), nil, nil
}
denom := k.GetParams(ctx).BondDenom
@@ -123,7 +199,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k
var fees sdk.Coins
- coins, hasNeg := spendable.SafeSub(sdk.Coins{selfDelegation})
+ coins, hasNeg := spendable.SafeSub(sdk.NewCoins(selfDelegation))
if !hasNeg {
fees, err = simtypes.RandomFees(r, ctx, coins)
if err != nil {
@@ -146,7 +222,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k
simtypes.RandomDecAmount(r, maxCommission),
)
- msg, err := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission, sdk.OneInt())
+ msg, err := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to create CreateValidator message"), nil, err
}
@@ -207,7 +283,7 @@ func SimulateMsgEditValidator(ak types.AccountKeeper, bk types.BankKeeper, k kee
simtypes.RandStringOfLength(r, 10),
)
- msg := types.NewMsgEditValidator(address, description, &newCommissionRate, nil)
+ msg := types.NewMsgEditValidator(address, description, &newCommissionRate)
txCtx := simulation.OperationInput{
R: r,
@@ -266,7 +342,7 @@ func SimulateMsgDelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.K
var fees sdk.Coins
- coins, hasNeg := spendable.SafeSub(sdk.Coins{bondAmt})
+ coins, hasNeg := spendable.SafeSub(sdk.NewCoins(bondAmt))
if !hasNeg {
fees, err = simtypes.RandomFees(r, ctx, coins)
if err != nil {
@@ -372,6 +448,74 @@ func SimulateMsgUndelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper
}
}
+// SimulateMsgCancelUnbondingDelegate generates a MsgCancelUnbondingDelegate with random values
+func SimulateMsgCancelUnbondingDelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
+ return func(
+ r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
+ ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
+ if len(k.GetAllValidators(ctx)) == 0 {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgDelegate, "number of validators equal zero"), nil, nil
+ }
+ // get random account
+ simAccount, _ := simtypes.RandomAcc(r, accs)
+ // get random validator
+ validator, ok := keeper.RandomValidator(r, k, ctx)
+ if !ok {
+ return simtypes.NoOpMsg(types.ModuleName, "cancel_unbond", "validator is not ok"), nil, nil
+ }
+
+ if validator.IsJailed() || validator.InvalidExRate() {
+ return simtypes.NoOpMsg(types.ModuleName, "cancel_unbond", "validator is jailed"), nil, nil
+ }
+
+ valAddr := validator.GetOperator()
+ unbondingDelegation, found := k.GetUnbondingDelegation(ctx, simAccount.Address, valAddr)
+ if !found {
+ return simtypes.NoOpMsg(types.ModuleName, "cancel_unbond", "account does have any unbonding delegation"), nil, nil
+ }
+
+ // get random unbonding delegation entry at block height
+ unbondingDelegationEntry := unbondingDelegation.Entries[r.Intn(len(unbondingDelegation.Entries))]
+
+ if unbondingDelegationEntry.CompletionTime.Before(ctx.BlockTime()) {
+ return simtypes.NoOpMsg(types.ModuleName, "cancel_unbond", "unbonding delegation is already processed"), nil, nil
+ }
+
+ if !unbondingDelegationEntry.Balance.IsPositive() {
+ return simtypes.NoOpMsg(types.ModuleName, "cancel_unbond", "delegator receiving balance is negative"), nil, nil
+ }
+
+ cancelBondAmt := simtypes.RandomAmount(r, unbondingDelegationEntry.Balance)
+
+ if cancelBondAmt.IsZero() {
+ return simtypes.NoOpMsg(types.ModuleName, "cancel_unbond", "cancelBondAmt amount is zero"), nil, nil
+ }
+
+ msg := types.NewMsgCancelUnbondingDelegation(
+ simAccount.Address, valAddr, ctx.BlockHeight(), sdk.NewCoin(k.BondDenom(ctx), cancelBondAmt),
+ )
+
+ spendable := bk.SpendableCoins(ctx, simAccount.Address)
+
+ txCtx := simulation.OperationInput{
+ R: r,
+ App: app,
+ TxGen: simappparams.MakeTestEncodingConfig().TxConfig,
+ Cdc: nil,
+ Msg: msg,
+ MsgType: msg.Type(),
+ Context: ctx,
+ SimAccount: simAccount,
+ AccountKeeper: ak,
+ Bankkeeper: bk,
+ ModuleName: types.ModuleName,
+ CoinsSpentInMsg: spendable,
+ }
+
+ return simulation.GenAndDeliverTxWithRandFees(txCtx)
+ }
+}
+
// SimulateMsgBeginRedelegate generates a MsgBeginRedelegate with random values
func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
return func(
@@ -473,3 +617,284 @@ func SimulateMsgBeginRedelegate(ak types.AccountKeeper, bk types.BankKeeper, k k
return simulation.GenAndDeliverTxWithRandFees(txCtx)
}
}
+
+// SimulateMsgTokenizeShares generates a MsgTokenizeShares with random values
+func SimulateMsgTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
+ return func(
+ r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
+ ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
+ // get random source validator
+ srcVal, ok := keeper.RandomValidator(r, k, ctx)
+ if !ok {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "unable to pick validator"), nil, nil
+ }
+
+ srcAddr := srcVal.GetOperator()
+ delegations := k.GetValidatorDelegations(ctx, srcAddr)
+ if delegations == nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "keeper does have any delegation entries"), nil, nil
+ }
+
+ // get random delegator from src validator
+ delegation := delegations[r.Intn(len(delegations))]
+ delAddr := delegation.GetDelegatorAddr()
+
+ // get random destination validator
+ totalBond := srcVal.TokensFromShares(delegation.GetShares()).TruncateInt()
+ if !totalBond.IsPositive() {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "total bond is negative"), nil, nil
+ }
+
+ tokenizeShareAmt, err := simtypes.RandPositiveInt(r, totalBond)
+ if err != nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "unable to generate positive amount"), nil, err
+ }
+
+ if tokenizeShareAmt.IsZero() {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "amount is zero"), nil, nil
+ }
+
+ // check if the shares truncate to zero
+ shares, err := srcVal.SharesFromTokens(tokenizeShareAmt)
+ if err != nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "invalid shares"), nil, err
+ }
+
+ if srcVal.TokensFromShares(shares).TruncateInt().IsZero() {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "shares truncate to zero"), nil, nil // skip
+ }
+
+ // need to retrieve the simulation account associated with delegation to retrieve PrivKey
+ var simAccount simtypes.Account
+
+ for _, simAcc := range accs {
+ if simAcc.Address.Equals(delAddr) {
+ simAccount = simAcc
+ break
+ }
+ }
+
+ // if simaccount.PrivKey == nil, delegation address does not exist in accs. Return error
+ if simAccount.PrivKey == nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTokenizeShares, "account private key is nil"), nil, fmt.Errorf("delegation addr: %s does not exist in simulation accounts", delAddr)
+ }
+
+ msg := &types.MsgTokenizeShares{
+ DelegatorAddress: delAddr.String(),
+ ValidatorAddress: srcAddr.String(),
+ Amount: sdk.NewCoin(k.BondDenom(ctx), tokenizeShareAmt),
+ TokenizedShareOwner: delAddr.String(),
+ }
+
+ account := ak.GetAccount(ctx, simAccount.Address)
+ spendable := bk.SpendableCoins(ctx, account.GetAddress())
+
+ txCtx := simulation.OperationInput{
+ R: r,
+ App: app,
+ TxGen: simappparams.MakeTestEncodingConfig().TxConfig,
+ Cdc: nil,
+ Msg: msg,
+ MsgType: msg.Type(),
+ Context: ctx,
+ SimAccount: simAccount,
+ AccountKeeper: ak,
+ Bankkeeper: bk,
+ ModuleName: types.ModuleName,
+ CoinsSpentInMsg: spendable,
+ }
+
+ return simulation.GenAndDeliverTxWithRandFees(txCtx)
+ }
+}
+
+// SimulateMsgRedeemTokensforShares generates a MsgRedeemTokensforShares with random values
+func SimulateMsgRedeemTokensforShares(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
+ return func(
+ r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
+ ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
+ redeemUser := simtypes.Account{}
+ redeemCoin := sdk.Coin{}
+
+ records := k.GetAllTokenizeShareRecords(ctx)
+ if len(records) > 0 {
+ record := records[r.Intn(len(records))]
+ for _, acc := range accs {
+ balance := bk.GetBalance(ctx, acc.Address, record.GetShareTokenDenom())
+ if balance.Amount.IsPositive() {
+ redeemUser = acc
+ redeemAmount, err := simtypes.RandPositiveInt(r, balance.Amount)
+ if err == nil {
+ redeemCoin = sdk.NewCoin(record.GetShareTokenDenom(), redeemAmount)
+ }
+ break
+ }
+ }
+ }
+
+ // if redeemUser.PrivKey == nil, redeem user does not exist in accs
+ if redeemUser.PrivKey == nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "account private key is nil"), nil, nil
+ }
+
+ if redeemCoin.Amount.IsZero() {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgRedeemTokensForShares, "empty balance in tokens"), nil, nil
+ }
+
+ account := ak.GetAccount(ctx, redeemUser.Address)
+ spendable := bk.SpendableCoins(ctx, account.GetAddress())
+
+ msg := &types.MsgRedeemTokensForShares{
+ DelegatorAddress: redeemUser.Address.String(),
+ Amount: redeemCoin,
+ }
+
+ txCtx := simulation.OperationInput{
+ R: r,
+ App: app,
+ TxGen: simappparams.MakeTestEncodingConfig().TxConfig,
+ Cdc: nil,
+ Msg: msg,
+ MsgType: msg.Type(),
+ Context: ctx,
+ SimAccount: redeemUser,
+ AccountKeeper: ak,
+ Bankkeeper: bk,
+ ModuleName: types.ModuleName,
+ CoinsSpentInMsg: spendable,
+ }
+
+ return simulation.GenAndDeliverTxWithRandFees(txCtx)
+ }
+}
+
+// SimulateMsgTransferTokenizeShareRecord generates a MsgTransferTokenizeShareRecord with random values
+func SimulateMsgTransferTokenizeShareRecord(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
+ return func(
+ r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
+ ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
+ simAccount, _ := simtypes.RandomAcc(r, accs)
+ destAccount, _ := simtypes.RandomAcc(r, accs)
+ transferRecord := types.TokenizeShareRecord{}
+
+ records := k.GetAllTokenizeShareRecords(ctx)
+ if len(records) > 0 {
+ record := records[r.Intn(len(records))]
+ for _, acc := range accs {
+ balance := bk.GetBalance(ctx, acc.Address, record.GetShareTokenDenom())
+ if balance.Amount.IsPositive() {
+ simAccount = acc
+ transferRecord = record
+ break
+ }
+ }
+ }
+
+ // if simAccount.PrivKey == nil, record owner does not exist in accs
+ if simAccount.PrivKey == nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTransferTokenizeShareRecord, "account private key is nil"), nil, nil
+ }
+
+ if transferRecord.Id == 0 {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTransferTokenizeShareRecord, "share record not found"), nil, nil
+ }
+
+ account := ak.GetAccount(ctx, simAccount.Address)
+ spendable := bk.SpendableCoins(ctx, account.GetAddress())
+
+ msg := &types.MsgTransferTokenizeShareRecord{
+ TokenizeShareRecordId: transferRecord.Id,
+ Sender: simAccount.Address.String(),
+ NewOwner: destAccount.Address.String(),
+ }
+
+ txCtx := simulation.OperationInput{
+ R: r,
+ App: app,
+ TxGen: simappparams.MakeTestEncodingConfig().TxConfig,
+ Cdc: nil,
+ Msg: msg,
+ MsgType: msg.Type(),
+ Context: ctx,
+ SimAccount: simAccount,
+ AccountKeeper: ak,
+ Bankkeeper: bk,
+ ModuleName: types.ModuleName,
+ CoinsSpentInMsg: spendable,
+ }
+
+ return simulation.GenAndDeliverTxWithRandFees(txCtx)
+ }
+}
+
+func SimulateMsgDisableTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
+ return func(
+ r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
+ ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
+ // TODO
+ simAccount, _ := simtypes.RandomAcc(r, accs)
+
+ account := ak.GetAccount(ctx, simAccount.Address)
+ spendable := bk.SpendableCoins(ctx, account.GetAddress())
+
+ if simAccount.PrivKey == nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTransferTokenizeShareRecord, "account private key is nil"), nil, nil
+ }
+
+ msg := &types.MsgDisableTokenizeShares{
+ DelegatorAddress: simAccount.Address.String(),
+ }
+
+ txCtx := simulation.OperationInput{
+ R: r,
+ App: app,
+ TxGen: simappparams.MakeTestEncodingConfig().TxConfig,
+ Cdc: nil,
+ Msg: msg,
+ MsgType: msg.Type(),
+ Context: ctx,
+ SimAccount: simAccount,
+ AccountKeeper: ak,
+ Bankkeeper: bk,
+ ModuleName: types.ModuleName,
+ CoinsSpentInMsg: spendable,
+ }
+ return simulation.GenAndDeliverTxWithRandFees(txCtx)
+ }
+}
+
+func SimulateMsgEnableTokenizeShares(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper) simtypes.Operation {
+ return func(
+ r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
+ ) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
+ // TODO
+ simAccount, _ := simtypes.RandomAcc(r, accs)
+
+ account := ak.GetAccount(ctx, simAccount.Address)
+ spendable := bk.SpendableCoins(ctx, account.GetAddress())
+
+ if simAccount.PrivKey == nil {
+ return simtypes.NoOpMsg(types.ModuleName, types.TypeMsgTransferTokenizeShareRecord, "account private key is nil"), nil, nil
+ }
+
+ msg := &types.MsgEnableTokenizeShares{
+ DelegatorAddress: simAccount.Address.String(),
+ }
+
+ txCtx := simulation.OperationInput{
+ R: r,
+ App: app,
+ TxGen: simappparams.MakeTestEncodingConfig().TxConfig,
+ Cdc: nil,
+ Msg: msg,
+ MsgType: msg.Type(),
+ Context: ctx,
+ SimAccount: simAccount,
+ AccountKeeper: ak,
+ Bankkeeper: bk,
+ ModuleName: types.ModuleName,
+ CoinsSpentInMsg: spendable,
+ }
+ return simulation.GenAndDeliverTxWithRandFees(txCtx)
+ }
+}
diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go
index 37c01d993c4..f6398812469 100644
--- a/x/staking/simulation/operations_test.go
+++ b/x/staking/simulation/operations_test.go
@@ -47,6 +47,12 @@ func TestWeightedOperations(t *testing.T) {
{simappparams.DefaultWeightMsgDelegate, types.ModuleName, types.TypeMsgDelegate},
{simappparams.DefaultWeightMsgUndelegate, types.ModuleName, types.TypeMsgUndelegate},
{simappparams.DefaultWeightMsgBeginRedelegate, types.ModuleName, types.TypeMsgBeginRedelegate},
+ // {simappparams.DefaultWeightMsgCancelUnbondingDelegation, types.ModuleName, types.TypeMsgCancelUnbondingDelegation},
+ // {simappparams.DefaultWeightMsgTokenizeShares, types.ModuleName, types.TypeMsgTokenizeShares},
+ // {simappparams.DefaultWeightMsgRedeemTokensforShares, types.ModuleName, types.TypeMsgRedeemTokensForShares},
+ // {simappparams.DefaultWeightMsgTransferTokenizeShareRecord, types.ModuleName, types.TypeMsgTransferTokenizeShareRecord},
+ // {simappparams.DefaultWeightMsgDisableTokenizeShares, types.ModuleName, types.TypeMsgDisableTokenizeShares},
+ // {simappparams.DefaultWeightMsgEnableTokenizeShares, types.ModuleName, types.TypeMsgEnableTokenizeShares},
}
for i, w := range weightesOps {
@@ -184,7 +190,7 @@ func TestSimulateMsgUndelegate(t *testing.T) {
delTokens := app.StakingKeeper.TokensFromConsensusPower(ctx, 2)
validator0, issuedShares := validator0.AddTokensFromDel(delTokens)
delegator := accounts[1]
- delegation := types.NewDelegation(delegator.Address, validator0.GetOperator(), issuedShares)
+ delegation := types.NewDelegation(delegator.Address, validator0.GetOperator(), issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
app.DistrKeeper.SetDelegatorStartingInfo(ctx, validator0.GetOperator(), delegator.Address, distrtypes.NewDelegatorStartingInfo(2, sdk.OneDec(), 200))
@@ -231,7 +237,7 @@ func TestSimulateMsgBeginRedelegate(t *testing.T) {
// setup accounts[2] as delegator
delegator := accounts[2]
- delegation := types.NewDelegation(delegator.Address, validator1.GetOperator(), issuedShares)
+ delegation := types.NewDelegation(delegator.Address, validator1.GetOperator(), issuedShares, false)
app.StakingKeeper.SetDelegation(ctx, delegation)
app.DistrKeeper.SetDelegatorStartingInfo(ctx, validator1.GetOperator(), delegator.Address, distrtypes.NewDelegatorStartingInfo(2, sdk.OneDec(), 200))
diff --git a/x/staking/spec/07_events.md b/x/staking/spec/07_events.md
index f219fa2ca4c..3f10e53c913 100644
--- a/x/staking/spec/07_events.md
+++ b/x/staking/spec/07_events.md
@@ -35,7 +35,6 @@ The staking module emits the following events:
| Type | Attribute Key | Attribute Value |
| -------------- | ------------------- | ------------------- |
| edit_validator | commission_rate | {commissionRate} |
-| edit_validator | min_self_delegation | {minSelfDelegation} |
| message | module | staking |
| message | action | edit_validator |
| message | sender | {senderAddress} |
diff --git a/x/staking/spec/09_client.md b/x/staking/spec/09_client.md
index 608705352cf..751476fd0a9 100644
--- a/x/staking/spec/09_client.md
+++ b/x/staking/spec/09_client.md
@@ -753,8 +753,7 @@ Example Output:
"maxChangeRate": "10000000000000000"
},
"updateTime": "2021-10-01T05:52:50.380144238Z"
- },
- "minSelfDelegation": "1"
+ }
}
],
"pagination": {
diff --git a/x/staking/teststaking/helper.go b/x/staking/teststaking/helper.go
index 25b021df07a..52546202449 100644
--- a/x/staking/teststaking/helper.go
+++ b/x/staking/teststaking/helper.go
@@ -49,13 +49,13 @@ func (sh *Helper) CreateValidatorWithValPower(addr sdk.ValAddress, pk cryptotype
// CreateValidatorMsg returns a message used to create validator in this service.
func (sh *Helper) CreateValidatorMsg(addr sdk.ValAddress, pk cryptotypes.PubKey, stakeAmount sdk.Int) *stakingtypes.MsgCreateValidator {
coin := sdk.NewCoin(sh.Denom, stakeAmount)
- msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt())
+ msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission)
require.NoError(sh.t, err)
return msg
}
func (sh *Helper) createValidator(addr sdk.ValAddress, pk cryptotypes.PubKey, coin sdk.Coin, ok bool) {
- msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission, sdk.OneInt())
+ msg, err := stakingtypes.NewMsgCreateValidator(addr, pk, coin, stakingtypes.Description{}, sh.Commission)
require.NoError(sh.t, err)
sh.Handle(msg, ok)
}
@@ -81,6 +81,21 @@ func (sh *Helper) Undelegate(delegator sdk.AccAddress, val sdk.ValAddress, amoun
return sh.Handle(msg, ok)
}
+func (sh *Helper) TokenizeShares(delegator sdk.AccAddress, val sdk.ValAddress, amount sdk.Coin, shareOwner sdk.AccAddress, ok bool) {
+ msg := stakingtypes.NewMsgTokenizeShares(delegator, val, amount, shareOwner)
+ sh.Handle(msg, ok)
+}
+
+func (sh *Helper) RedeemTokensForShares(delegator sdk.AccAddress, amount sdk.Coin, ok bool) {
+ msg := stakingtypes.NewMsgRedeemTokensForShares(delegator, amount)
+ sh.Handle(msg, ok)
+}
+
+func (sh *Helper) TranserTokenizeShareRecord(recordID uint64, owner, newOwner sdk.AccAddress, ok bool) {
+ msg := stakingtypes.NewMsgTransferTokenizeShareRecord(recordID, owner, newOwner)
+ sh.Handle(msg, ok)
+}
+
// Handle calls staking handler on a given message
func (sh *Helper) Handle(msg sdk.Msg, ok bool) *sdk.Result {
res, err := sh.h(sh.Ctx, msg)
diff --git a/x/staking/types/codec.go b/x/staking/types/codec.go
index 485549077bd..48e59506dbe 100644
--- a/x/staking/types/codec.go
+++ b/x/staking/types/codec.go
@@ -4,6 +4,7 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/types"
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
+
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/msgservice"
"github.com/cosmos/cosmos-sdk/x/authz"
@@ -17,6 +18,11 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
cdc.RegisterConcrete(&MsgDelegate{}, "cosmos-sdk/MsgDelegate", nil)
cdc.RegisterConcrete(&MsgUndelegate{}, "cosmos-sdk/MsgUndelegate", nil)
cdc.RegisterConcrete(&MsgBeginRedelegate{}, "cosmos-sdk/MsgBeginRedelegate", nil)
+ cdc.RegisterConcrete(&MsgTokenizeShares{}, "cosmos-sdk/MsgTokenizeShares", nil)
+ cdc.RegisterConcrete(&MsgRedeemTokensForShares{}, "cosmos-sdk/MsgRedeemTokensForShares", nil)
+ cdc.RegisterConcrete(&MsgTransferTokenizeShareRecord{}, "cosmos-sdk/MsgTransferTokenizeShareRecord", nil)
+ cdc.RegisterConcrete(&MsgDisableTokenizeShares{}, "cosmos-sdk/MsgDisableTokenizeShares", nil)
+ cdc.RegisterConcrete(&MsgEnableTokenizeShares{}, "cosmos-sdk/MsgEnableTokenizeShares", nil)
}
// RegisterInterfaces registers the x/staking interfaces types with the interface registry
@@ -27,6 +33,12 @@ func RegisterInterfaces(registry types.InterfaceRegistry) {
&MsgDelegate{},
&MsgUndelegate{},
&MsgBeginRedelegate{},
+ &MsgCancelUnbondingDelegation{},
+ &MsgTokenizeShares{},
+ &MsgRedeemTokensForShares{},
+ &MsgTransferTokenizeShareRecord{},
+ &MsgDisableTokenizeShares{},
+ &MsgEnableTokenizeShares{},
)
registry.RegisterImplementations(
(*authz.Authorization)(nil),
diff --git a/x/staking/types/delegation.go b/x/staking/types/delegation.go
index e1cf042d991..73f441b105c 100644
--- a/x/staking/types/delegation.go
+++ b/x/staking/types/delegation.go
@@ -30,11 +30,12 @@ func (dvv DVVTriplet) String() string {
// NewDelegation creates a new delegation object
//
//nolint:interfacer
-func NewDelegation(delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, shares sdk.Dec) Delegation {
+func NewDelegation(delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, shares sdk.Dec, validatorBond bool) Delegation {
return Delegation{
DelegatorAddress: delegatorAddr.String(),
ValidatorAddress: validatorAddr.String(),
Shares: shares,
+ ValidatorBond: validatorBond,
}
}
@@ -330,10 +331,10 @@ func (d Redelegations) String() (out string) {
// NewDelegationResp creates a new DelegationResponse instance
func NewDelegationResp(
- delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, shares sdk.Dec, balance sdk.Coin,
+ delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, shares sdk.Dec, validatorBond bool, balance sdk.Coin,
) DelegationResponse {
return DelegationResponse{
- Delegation: NewDelegation(delegatorAddr, validatorAddr, shares),
+ Delegation: NewDelegation(delegatorAddr, validatorAddr, shares, validatorBond),
Balance: balance,
}
}
diff --git a/x/staking/types/delegation_test.go b/x/staking/types/delegation_test.go
index ba6fbfe58bf..e1700af3dbf 100644
--- a/x/staking/types/delegation_test.go
+++ b/x/staking/types/delegation_test.go
@@ -13,7 +13,7 @@ import (
)
func TestDelegationEqual(t *testing.T) {
- d1 := types.NewDelegation(sdk.AccAddress(valAddr1), valAddr2, sdk.NewDec(100))
+ d1 := types.NewDelegation(sdk.AccAddress(valAddr1), valAddr2, sdk.NewDec(100), false)
d2 := d1
ok := d1.String() == d2.String()
@@ -27,7 +27,7 @@ func TestDelegationEqual(t *testing.T) {
}
func TestDelegationString(t *testing.T) {
- d := types.NewDelegation(sdk.AccAddress(valAddr1), valAddr2, sdk.NewDec(100))
+ d := types.NewDelegation(sdk.AccAddress(valAddr1), valAddr2, sdk.NewDec(100), false)
require.NotEmpty(t, d.String())
}
@@ -81,9 +81,9 @@ func TestRedelegationString(t *testing.T) {
func TestDelegationResponses(t *testing.T) {
cdc := codec.NewLegacyAmino()
- dr1 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr2, sdk.NewDec(5),
+ dr1 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr2, sdk.NewDec(5), false,
sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(5)))
- dr2 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr3, sdk.NewDec(5),
+ dr2 := types.NewDelegationResp(sdk.AccAddress(valAddr1), valAddr3, sdk.NewDec(5), false,
sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(5)))
drs := types.DelegationResponses{dr1, dr2}
diff --git a/x/staking/types/errors.go b/x/staking/types/errors.go
index 10c16276dd9..5c393997c80 100644
--- a/x/staking/types/errors.go
+++ b/x/staking/types/errors.go
@@ -11,44 +11,60 @@ import (
//
// REF: https://github.com/cosmos/cosmos-sdk/issues/5450
var (
- ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 2, "empty validator address")
- ErrNoValidatorFound = sdkerrors.Register(ModuleName, 3, "validator does not exist")
- ErrValidatorOwnerExists = sdkerrors.Register(ModuleName, 4, "validator already exist for this operator address; must use new validator operator address")
- ErrValidatorPubKeyExists = sdkerrors.Register(ModuleName, 5, "validator already exist for this pubkey; must use new validator pubkey")
- ErrValidatorPubKeyTypeNotSupported = sdkerrors.Register(ModuleName, 6, "validator pubkey type is not supported")
- ErrValidatorJailed = sdkerrors.Register(ModuleName, 7, "validator for this address is currently jailed")
- ErrBadRemoveValidator = sdkerrors.Register(ModuleName, 8, "failed to remove validator")
- ErrCommissionNegative = sdkerrors.Register(ModuleName, 9, "commission must be positive")
- ErrCommissionHuge = sdkerrors.Register(ModuleName, 10, "commission cannot be more than 100%")
- ErrCommissionGTMaxRate = sdkerrors.Register(ModuleName, 11, "commission cannot be more than the max rate")
- ErrCommissionUpdateTime = sdkerrors.Register(ModuleName, 12, "commission cannot be changed more than once in 24h")
- ErrCommissionChangeRateNegative = sdkerrors.Register(ModuleName, 13, "commission change rate must be positive")
- ErrCommissionChangeRateGTMaxRate = sdkerrors.Register(ModuleName, 14, "commission change rate cannot be more than the max rate")
- ErrCommissionGTMaxChangeRate = sdkerrors.Register(ModuleName, 15, "commission cannot be changed more than max change rate")
- ErrSelfDelegationBelowMinimum = sdkerrors.Register(ModuleName, 16, "validator's self delegation must be greater than their minimum self delegation")
- ErrMinSelfDelegationDecreased = sdkerrors.Register(ModuleName, 17, "minimum self delegation cannot be decrease")
- ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 18, "empty delegator address")
- ErrNoDelegation = sdkerrors.Register(ModuleName, 19, "no delegation for (address, validator) tuple")
- ErrBadDelegatorAddr = sdkerrors.Register(ModuleName, 20, "delegator does not exist with address")
- ErrNoDelegatorForAddress = sdkerrors.Register(ModuleName, 21, "delegator does not contain delegation")
- ErrInsufficientShares = sdkerrors.Register(ModuleName, 22, "insufficient delegation shares")
- ErrDelegationValidatorEmpty = sdkerrors.Register(ModuleName, 23, "cannot delegate to an empty validator")
- ErrNotEnoughDelegationShares = sdkerrors.Register(ModuleName, 24, "not enough delegation shares")
- ErrNotMature = sdkerrors.Register(ModuleName, 25, "entry not mature")
- ErrNoUnbondingDelegation = sdkerrors.Register(ModuleName, 26, "no unbonding delegation found")
- ErrMaxUnbondingDelegationEntries = sdkerrors.Register(ModuleName, 27, "too many unbonding delegation entries for (delegator, validator) tuple")
- ErrNoRedelegation = sdkerrors.Register(ModuleName, 28, "no redelegation found")
- ErrSelfRedelegation = sdkerrors.Register(ModuleName, 29, "cannot redelegate to the same validator")
- ErrTinyRedelegationAmount = sdkerrors.Register(ModuleName, 30, "too few tokens to redelegate (truncates to zero tokens)")
- ErrBadRedelegationDst = sdkerrors.Register(ModuleName, 31, "redelegation destination validator not found")
- ErrTransitiveRedelegation = sdkerrors.Register(ModuleName, 32, "redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation")
- ErrMaxRedelegationEntries = sdkerrors.Register(ModuleName, 33, "too many redelegation entries for (delegator, src-validator, dst-validator) tuple")
- ErrDelegatorShareExRateInvalid = sdkerrors.Register(ModuleName, 34, "cannot delegate to validators with invalid (zero) ex-rate")
- ErrBothShareMsgsGiven = sdkerrors.Register(ModuleName, 35, "both shares amount and shares percent provided")
- ErrNeitherShareMsgsGiven = sdkerrors.Register(ModuleName, 36, "neither shares amount nor shares percent provided")
- ErrInvalidHistoricalInfo = sdkerrors.Register(ModuleName, 37, "invalid historical info")
- ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found")
- ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key")
- ErrUnbondingNotFound = sdkerrors.Register(ModuleName, 40, "unbonding operation not found")
- ErrUnbondingOnHoldRefCountNegative = sdkerrors.Register(ModuleName, 41, "cannot un-hold unbonding operation that is not on hold")
+ ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 2, "empty validator address")
+ ErrNoValidatorFound = sdkerrors.Register(ModuleName, 3, "validator does not exist")
+ ErrValidatorOwnerExists = sdkerrors.Register(ModuleName, 4, "validator already exist for this operator address; must use new validator operator address")
+ ErrValidatorPubKeyExists = sdkerrors.Register(ModuleName, 5, "validator already exist for this pubkey; must use new validator pubkey")
+ ErrValidatorPubKeyTypeNotSupported = sdkerrors.Register(ModuleName, 6, "validator pubkey type is not supported")
+ ErrValidatorJailed = sdkerrors.Register(ModuleName, 7, "validator for this address is currently jailed")
+ ErrBadRemoveValidator = sdkerrors.Register(ModuleName, 8, "failed to remove validator")
+ ErrCommissionNegative = sdkerrors.Register(ModuleName, 9, "commission must be positive")
+ ErrCommissionHuge = sdkerrors.Register(ModuleName, 10, "commission cannot be more than 100%")
+ ErrCommissionGTMaxRate = sdkerrors.Register(ModuleName, 11, "commission cannot be more than the max rate")
+ ErrCommissionUpdateTime = sdkerrors.Register(ModuleName, 12, "commission cannot be changed more than once in 24h")
+ ErrCommissionChangeRateNegative = sdkerrors.Register(ModuleName, 13, "commission change rate must be positive")
+ ErrCommissionChangeRateGTMaxRate = sdkerrors.Register(ModuleName, 14, "commission change rate cannot be more than the max rate")
+ ErrCommissionGTMaxChangeRate = sdkerrors.Register(ModuleName, 15, "commission cannot be changed more than max change rate")
+ ErrSelfDelegationBelowMinimum = sdkerrors.Register(ModuleName, 16, "validator's self delegation must be greater than their minimum self delegation")
+ ErrMinSelfDelegationDecreased = sdkerrors.Register(ModuleName, 17, "minimum self delegation cannot be decrease")
+ ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 18, "empty delegator address")
+ ErrNoDelegation = sdkerrors.Register(ModuleName, 19, "no delegation for (address, validator) tuple")
+ ErrBadDelegatorAddr = sdkerrors.Register(ModuleName, 20, "delegator does not exist with address")
+ ErrNoDelegatorForAddress = sdkerrors.Register(ModuleName, 21, "delegator does not contain delegation")
+ ErrInsufficientShares = sdkerrors.Register(ModuleName, 22, "insufficient delegation shares")
+ ErrDelegationValidatorEmpty = sdkerrors.Register(ModuleName, 23, "cannot delegate to an empty validator")
+ ErrNotEnoughDelegationShares = sdkerrors.Register(ModuleName, 24, "not enough delegation shares")
+ ErrNotMature = sdkerrors.Register(ModuleName, 25, "entry not mature")
+ ErrNoUnbondingDelegation = sdkerrors.Register(ModuleName, 26, "no unbonding delegation found")
+ ErrMaxUnbondingDelegationEntries = sdkerrors.Register(ModuleName, 27, "too many unbonding delegation entries for (delegator, validator) tuple")
+ ErrNoRedelegation = sdkerrors.Register(ModuleName, 28, "no redelegation found")
+ ErrSelfRedelegation = sdkerrors.Register(ModuleName, 29, "cannot redelegate to the same validator")
+ ErrTinyRedelegationAmount = sdkerrors.Register(ModuleName, 30, "too few tokens to redelegate (truncates to zero tokens)")
+ ErrBadRedelegationDst = sdkerrors.Register(ModuleName, 31, "redelegation destination validator not found")
+ ErrTransitiveRedelegation = sdkerrors.Register(ModuleName, 32, "redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation")
+ ErrMaxRedelegationEntries = sdkerrors.Register(ModuleName, 33, "too many redelegation entries for (delegator, src-validator, dst-validator) tuple")
+ ErrDelegatorShareExRateInvalid = sdkerrors.Register(ModuleName, 34, "cannot delegate to validators with invalid (zero) ex-rate")
+ ErrBothShareMsgsGiven = sdkerrors.Register(ModuleName, 35, "both shares amount and shares percent provided")
+ ErrNeitherShareMsgsGiven = sdkerrors.Register(ModuleName, 36, "neither shares amount nor shares percent provided")
+ ErrInvalidHistoricalInfo = sdkerrors.Register(ModuleName, 37, "invalid historical info")
+ ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found")
+ ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key")
+ ErrUnbondingNotFound = sdkerrors.Register(ModuleName, 40, "unbonding operation not found")
+ ErrUnbondingOnHoldRefCountNegative = sdkerrors.Register(ModuleName, 41, "cannot un-hold unbonding operation that is not on hold")
+ ErrNotEnoughBalance = sdkerrors.Register(ModuleName, 42, "not enough balance")
+ ErrTokenizeShareRecordNotExists = sdkerrors.Register(ModuleName, 43, "tokenize share record not exists")
+ ErrTokenizeShareRecordAlreadyExists = sdkerrors.Register(ModuleName, 44, "tokenize share record already exists")
+ ErrNotTokenizeShareRecordOwner = sdkerrors.Register(ModuleName, 45, "not tokenize share record owner")
+ ErrExceedingFreeVestingDelegations = sdkerrors.Register(ModuleName, 46, "trying to exceed vested free delegation for vesting account")
+ ErrOnlyBondDenomAllowdForTokenize = sdkerrors.Register(ModuleName, 47, "only bond denom is allowed for tokenize")
+ ErrInsufficientValidatorBondShares = sdkerrors.Register(ModuleName, 48, "insufficient validator bond shares")
+ ErrRedelegationNotAllowedForValidatorBond = sdkerrors.Register(ModuleName, 49, "redelegation is not allowed for validator bond delegation")
+ ErrValidatorBondNotAllowedForTokenizeShare = sdkerrors.Register(ModuleName, 50, "validator bond delegation is not allowed to tokenize share")
+ ErrValidatorBondNotAllowedFromModuleAccount = sdkerrors.Register(ModuleName, 51, "validator bond is not allowed from a module account")
+ ErrGlobalLiquidStakingCapExceeded = sdkerrors.Register(ModuleName, 52, "delegation from liquid staking provider exceeds the global cap")
+ ErrValidatorLiquidStakingCapExceeded = sdkerrors.Register(ModuleName, 53, "delegation from liquid staking provider exceeds the validator cap")
+ ErrTokenizeSharesDisabledForAccount = sdkerrors.Register(ModuleName, 54, "tokenize shares currently disabled for account")
+ ErrUnableToDisableTokenizeShares = sdkerrors.Register(ModuleName, 55, "unable to disable tokenize shares for account")
+ ErrTokenizeSharesAlreadyEnabledForAccount = sdkerrors.Register(ModuleName, 57, "tokenize shares is already enabled for this account")
+ ErrTokenizeSharesAlreadyDisabledForAccount = sdkerrors.Register(ModuleName, 58, "tokenize shares is already disabled for this account")
)
diff --git a/x/staking/types/events.go b/x/staking/types/events.go
index 99a0be1ad62..8bdb3a05a71 100644
--- a/x/staking/types/events.go
+++ b/x/staking/types/events.go
@@ -2,21 +2,27 @@ package types
// staking module event types
const (
- EventTypeCompleteUnbonding = "complete_unbonding"
- EventTypeCompleteRedelegation = "complete_redelegation"
- EventTypeCreateValidator = "create_validator"
- EventTypeEditValidator = "edit_validator"
- EventTypeDelegate = "delegate"
- EventTypeUnbond = "unbond"
- EventTypeRedelegate = "redelegate"
+ EventTypeCompleteUnbonding = "complete_unbonding"
+ EventTypeCompleteRedelegation = "complete_redelegation"
+ EventTypeCreateValidator = "create_validator"
+ EventTypeEditValidator = "edit_validator"
+ EventTypeDelegate = "delegate"
+ EventTypeUnbond = "unbond"
+ EventTypeRedelegate = "redelegate"
+ EventTypeTokenizeShares = "tokenize_shares"
+ EventTypeRedeemShares = "redeem_shares"
+ EventTypeTransferTokenizeShareRecord = "transfer_tokenize_share_record"
+ EventTypeValidatorBondDelegation = "validator_bond_delegation"
- AttributeKeyValidator = "validator"
- AttributeKeyCommissionRate = "commission_rate"
- AttributeKeyMinSelfDelegation = "min_self_delegation"
- AttributeKeySrcValidator = "source_validator"
- AttributeKeyDstValidator = "destination_validator"
- AttributeKeyDelegator = "delegator"
- AttributeKeyCompletionTime = "completion_time"
- AttributeKeyNewShares = "new_shares"
- AttributeValueCategory = ModuleName
+ AttributeKeyValidator = "validator"
+ AttributeKeyCommissionRate = "commission_rate"
+ AttributeKeySrcValidator = "source_validator"
+ AttributeKeyDstValidator = "destination_validator"
+ AttributeKeyDelegator = "delegator"
+ AttributeKeyCompletionTime = "completion_time"
+ AttributeKeyNewShares = "new_shares"
+ AttributeKeyShareOwner = "share_owner"
+ AttributeKeyShareRecordID = "share_record_id"
+ AttributeKeyAmount = "amount"
+ AttributeValueCategory = ModuleName
)
diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go
index 243dd1349ab..6c5d14f9b65 100644
--- a/x/staking/types/expected_keepers.go
+++ b/x/staking/types/expected_keepers.go
@@ -32,10 +32,14 @@ type BankKeeper interface {
GetSupply(ctx sdk.Context, denom string) sdk.Coin
+ SendCoins(ctx sdk.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error
SendCoinsFromModuleToModule(ctx sdk.Context, senderPool, recipientPool string, amt sdk.Coins) error
+ SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
+ SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error
DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error
+ MintCoins(cts sdk.Context, name string, amt sdk.Coins) error
BurnCoins(ctx sdk.Context, name string, amt sdk.Coins) error
}
@@ -92,6 +96,7 @@ type StakingHooks interface {
AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) // Must be called when a validator is created
BeforeValidatorModified(ctx sdk.Context, valAddr sdk.ValAddress) // Must be called when a validator's state changes
AfterValidatorRemoved(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) // Must be called when a validator is deleted
+ BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordID uint64) error // Must be called when tokenize share record is deleted
AfterValidatorBonded(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) // Must be called when a validator is bonded
AfterValidatorBeginUnbonding(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) // Must be called when a validator begins unbonding
diff --git a/x/staking/types/exported.go b/x/staking/types/exported.go
index 9599da100d2..f091d7788e5 100644
--- a/x/staking/types/exported.go
+++ b/x/staking/types/exported.go
@@ -32,6 +32,7 @@ type ValidatorI interface {
GetCommission() sdk.Dec // validator commission rate
GetMinSelfDelegation() sdk.Int // validator minimum self delegation
GetDelegatorShares() sdk.Dec // total outstanding delegator shares
+ GetTotalLiquidShares() sdk.Dec // total shares earmarked from liquid staking
TokensFromShares(sdk.Dec) sdk.Dec // token worth of provided delegator shares
TokensFromSharesTruncated(sdk.Dec) sdk.Dec // token worth of provided delegator shares, truncated
TokensFromSharesRoundUp(sdk.Dec) sdk.Dec // token worth of provided delegator shares, rounded up
diff --git a/x/staking/types/genesis.pb.go b/x/staking/types/genesis.pb.go
index 2ea6f8bf996..eeb29ea4732 100644
--- a/x/staking/types/genesis.pb.go
+++ b/x/staking/types/genesis.pb.go
@@ -43,6 +43,10 @@ type GenesisState struct {
// redelegations defines the redelegations active at genesis.
Redelegations []Redelegation `protobuf:"bytes,7,rep,name=redelegations,proto3" json:"redelegations"`
Exported bool `protobuf:"varint,8,opt,name=exported,proto3" json:"exported,omitempty"`
+ // store tokenize share records to provide reward to record owners
+ TokenizeShareRecords []TokenizeShareRecord `protobuf:"bytes,9,rep,name=tokenize_share_records,json=tokenizeShareRecords,proto3" json:"tokenize_share_records"`
+ // last tokenize share record id, used for next share record id calculation
+ LastTokenizeShareRecordId uint64 `protobuf:"varint,10,opt,name=last_tokenize_share_record_id,json=lastTokenizeShareRecordId,proto3" json:"last_tokenize_share_record_id,omitempty"`
}
func (m *GenesisState) Reset() { *m = GenesisState{} }
@@ -127,6 +131,20 @@ func (m *GenesisState) GetExported() bool {
return false
}
+func (m *GenesisState) GetTokenizeShareRecords() []TokenizeShareRecord {
+ if m != nil {
+ return m.TokenizeShareRecords
+ }
+ return nil
+}
+
+func (m *GenesisState) GetLastTokenizeShareRecordId() uint64 {
+ if m != nil {
+ return m.LastTokenizeShareRecordId
+ }
+ return 0
+}
+
// LastValidatorPower required for validator set update logic.
type LastValidatorPower struct {
// address is the address of the validator.
@@ -178,38 +196,42 @@ func init() {
}
var fileDescriptor_9b3dec8894f2831b = []byte{
- // 493 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x93, 0x3d, 0x6f, 0xd3, 0x40,
- 0x18, 0xc7, 0x7d, 0xa4, 0x49, 0xc3, 0xa5, 0x20, 0x74, 0xa4, 0x60, 0x45, 0xc8, 0x0e, 0x56, 0x84,
- 0x22, 0x5e, 0x6c, 0xb5, 0x6c, 0x15, 0x53, 0x84, 0xa8, 0x8a, 0x10, 0x8a, 0x8e, 0x97, 0x81, 0x25,
- 0xba, 0xd4, 0x27, 0x63, 0xd5, 0xf1, 0x59, 0x7e, 0x2e, 0xa5, 0xdd, 0x11, 0x62, 0xe4, 0x23, 0xf4,
- 0xe3, 0x74, 0xec, 0xc0, 0x80, 0x18, 0x2c, 0x94, 0x2c, 0xcc, 0xfd, 0x04, 0xc8, 0xe7, 0x17, 0x4c,
- 0x52, 0x33, 0x25, 0x77, 0xfa, 0xfd, 0x7f, 0x7f, 0xfb, 0xfc, 0x1c, 0x1e, 0x1c, 0x0a, 0x98, 0x09,
- 0x70, 0x40, 0xb2, 0x23, 0x3f, 0xf4, 0x9c, 0xe3, 0x9d, 0x29, 0x97, 0x6c, 0xc7, 0xf1, 0x78, 0xc8,
- 0xc1, 0x07, 0x3b, 0x8a, 0x85, 0x14, 0xe4, 0x4e, 0x46, 0xd9, 0x39, 0x65, 0xe7, 0x54, 0xaf, 0xeb,
- 0x09, 0x4f, 0x28, 0xc4, 0x49, 0xff, 0x65, 0x74, 0xaf, 0xce, 0x59, 0xa4, 0x15, 0x65, 0x7d, 0x6f,
- 0xe2, 0xad, 0xfd, 0xac, 0xe5, 0x8d, 0x64, 0x92, 0x93, 0x67, 0xb8, 0x15, 0xb1, 0x98, 0xcd, 0x40,
- 0x47, 0x7d, 0x34, 0xec, 0xec, 0x1a, 0xf6, 0xd5, 0xad, 0xf6, 0x58, 0x51, 0xa3, 0x8d, 0xf3, 0xc4,
- 0xd4, 0x68, 0x9e, 0x21, 0x80, 0x6f, 0x05, 0x0c, 0xe4, 0x44, 0x0a, 0xc9, 0x82, 0x49, 0x24, 0x3e,
- 0xf1, 0x58, 0xbf, 0xd6, 0x47, 0xc3, 0xad, 0xd1, 0x41, 0xca, 0xfd, 0x4c, 0xcc, 0x07, 0x9e, 0x2f,
- 0x3f, 0xce, 0xa7, 0xf6, 0xa1, 0x98, 0x39, 0xf9, 0x13, 0x66, 0x3f, 0x4f, 0xc0, 0x3d, 0x72, 0xe4,
- 0x69, 0xc4, 0xc1, 0x3e, 0x08, 0xe5, 0x65, 0x62, 0xde, 0x3d, 0x65, 0xb3, 0x60, 0xcf, 0x5a, 0xf5,
- 0x59, 0xf4, 0x66, 0xba, 0xf5, 0x36, 0xdd, 0x19, 0xa7, 0x1b, 0xe4, 0x33, 0xc2, 0xdb, 0x8a, 0x3a,
- 0x66, 0x81, 0xef, 0x32, 0x29, 0xe2, 0x8c, 0x04, 0xbd, 0xd1, 0x6f, 0x0c, 0x3b, 0xbb, 0x0f, 0xeb,
- 0x5e, 0xe1, 0x15, 0x03, 0xf9, 0xbe, 0xc8, 0x28, 0xd7, 0x68, 0x90, 0x3e, 0xe6, 0x65, 0x62, 0xde,
- 0xab, 0x94, 0xaf, 0x6a, 0x2d, 0x7a, 0x3b, 0x58, 0x4b, 0x02, 0xd9, 0xc7, 0xb8, 0x24, 0x41, 0xdf,
- 0x50, 0xd5, 0xf7, 0xeb, 0xaa, 0xcb, 0x70, 0x7e, 0x80, 0x95, 0x28, 0x79, 0x89, 0x3b, 0x2e, 0x0f,
- 0xb8, 0xc7, 0xa4, 0x2f, 0x42, 0xd0, 0x9b, 0xca, 0x64, 0xd5, 0x99, 0x9e, 0x97, 0x68, 0xae, 0xaa,
- 0x86, 0xc9, 0x17, 0x84, 0xb7, 0xe7, 0xe1, 0x54, 0x84, 0xae, 0x1f, 0x7a, 0x93, 0xaa, 0xb6, 0xa5,
- 0xb4, 0x8f, 0xea, 0xb4, 0xef, 0x8a, 0x50, 0xc5, 0xbf, 0x72, 0x38, 0x57, 0x7a, 0x2d, 0xda, 0x9d,
- 0xaf, 0x47, 0x81, 0x8c, 0xf1, 0x8d, 0x98, 0x57, 0xfb, 0x37, 0x55, 0xff, 0xa0, 0xae, 0x9f, 0x56,
- 0xe0, 0xfc, 0xc5, 0xfe, 0x15, 0x90, 0x1e, 0x6e, 0xf3, 0x93, 0x48, 0xc4, 0x92, 0xbb, 0x7a, 0xbb,
- 0x8f, 0x86, 0x6d, 0x5a, 0xae, 0xad, 0xd7, 0x98, 0xac, 0x7f, 0x5c, 0xa2, 0xe3, 0x4d, 0xe6, 0xba,
- 0x31, 0x87, 0x6c, 0xb8, 0xaf, 0xd3, 0x62, 0x49, 0xba, 0xb8, 0xf9, 0x77, 0x58, 0x1b, 0x34, 0x5b,
- 0xec, 0xb5, 0xbf, 0x9e, 0x99, 0xda, 0xef, 0x33, 0x53, 0x1b, 0xbd, 0x38, 0x5f, 0x18, 0xe8, 0x62,
- 0x61, 0xa0, 0x5f, 0x0b, 0x03, 0x7d, 0x5b, 0x1a, 0xda, 0xc5, 0xd2, 0xd0, 0x7e, 0x2c, 0x0d, 0xed,
- 0xc3, 0xe3, 0xff, 0xce, 0xf3, 0x49, 0x79, 0xfd, 0xd4, 0x64, 0x4f, 0x5b, 0xea, 0xd6, 0x3d, 0xfd,
- 0x13, 0x00, 0x00, 0xff, 0xff, 0xff, 0x85, 0xad, 0xc8, 0xf1, 0x03, 0x00, 0x00,
+ // 555 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0x4f, 0x6f, 0xd3, 0x30,
+ 0x18, 0xc6, 0x13, 0xd6, 0x75, 0x9d, 0x3b, 0x10, 0x32, 0xdd, 0x08, 0x15, 0x24, 0x25, 0xaa, 0x50,
+ 0xc5, 0x9f, 0x44, 0x1b, 0xb7, 0x89, 0x03, 0xaa, 0x10, 0x53, 0x11, 0x42, 0x55, 0x36, 0x38, 0x70,
+ 0x89, 0xdc, 0xc6, 0xca, 0xa2, 0xa6, 0x71, 0x95, 0xd7, 0x1d, 0x1b, 0x67, 0x84, 0x38, 0xf2, 0x11,
+ 0xf6, 0x71, 0x76, 0xdc, 0x11, 0x71, 0xa8, 0x50, 0x7b, 0xe1, 0xbc, 0x2f, 0x00, 0x8a, 0xe3, 0x96,
+ 0xd0, 0x34, 0x3b, 0xb5, 0x76, 0x9e, 0xe7, 0xf7, 0xf8, 0xb5, 0xde, 0xd7, 0xa8, 0xd9, 0x67, 0x30,
+ 0x64, 0x60, 0x03, 0x27, 0x83, 0x20, 0xf2, 0xed, 0x93, 0xdd, 0x1e, 0xe5, 0x64, 0xd7, 0xf6, 0x69,
+ 0x44, 0x21, 0x00, 0x6b, 0x14, 0x33, 0xce, 0xf0, 0x4e, 0xaa, 0xb2, 0xa4, 0xca, 0x92, 0xaa, 0x7a,
+ 0xcd, 0x67, 0x3e, 0x13, 0x12, 0x3b, 0xf9, 0x97, 0xaa, 0xeb, 0x45, 0xcc, 0xb9, 0x5b, 0xa8, 0xcc,
+ 0x3f, 0x65, 0xb4, 0x75, 0x90, 0xa6, 0x1c, 0x72, 0xc2, 0x29, 0x7e, 0x81, 0xca, 0x23, 0x12, 0x93,
+ 0x21, 0x68, 0x6a, 0x43, 0x6d, 0x55, 0xf7, 0x74, 0x6b, 0x75, 0xaa, 0xd5, 0x15, 0xaa, 0x76, 0xe9,
+ 0x62, 0x62, 0x28, 0x8e, 0xf4, 0x60, 0x40, 0xb7, 0x43, 0x02, 0xdc, 0xe5, 0x8c, 0x93, 0xd0, 0x1d,
+ 0xb1, 0x4f, 0x34, 0xd6, 0x6e, 0x34, 0xd4, 0xd6, 0x56, 0xbb, 0x93, 0xe8, 0x7e, 0x4e, 0x8c, 0x47,
+ 0x7e, 0xc0, 0x8f, 0xc7, 0x3d, 0xab, 0xcf, 0x86, 0xb6, 0x3c, 0x61, 0xfa, 0xf3, 0x0c, 0xbc, 0x81,
+ 0xcd, 0xcf, 0x46, 0x14, 0xac, 0x4e, 0xc4, 0xaf, 0x26, 0xc6, 0xdd, 0x33, 0x32, 0x0c, 0xf7, 0xcd,
+ 0x65, 0x9e, 0xe9, 0xdc, 0x4a, 0xb6, 0x8e, 0x92, 0x9d, 0x6e, 0xb2, 0x81, 0xbf, 0xa8, 0x68, 0x5b,
+ 0xa8, 0x4e, 0x48, 0x18, 0x78, 0x84, 0xb3, 0x38, 0x55, 0x82, 0xb6, 0xd6, 0x58, 0x6b, 0x55, 0xf7,
+ 0x1e, 0x17, 0x95, 0xf0, 0x96, 0x00, 0xff, 0x30, 0xf7, 0x08, 0x56, 0xbb, 0x99, 0x1c, 0xf3, 0x6a,
+ 0x62, 0xdc, 0xcf, 0x84, 0x2f, 0x63, 0x4d, 0xe7, 0x4e, 0x98, 0x73, 0x02, 0x3e, 0x40, 0x68, 0xa1,
+ 0x04, 0xad, 0x24, 0xa2, 0x1f, 0x16, 0x45, 0x2f, 0xcc, 0xf2, 0x02, 0x33, 0x56, 0xfc, 0x06, 0x55,
+ 0x3d, 0x1a, 0x52, 0x9f, 0xf0, 0x80, 0x45, 0xa0, 0xad, 0x0b, 0x92, 0x59, 0x44, 0x7a, 0xb5, 0x90,
+ 0x4a, 0x54, 0xd6, 0x8c, 0xbf, 0xaa, 0x68, 0x7b, 0x1c, 0xf5, 0x58, 0xe4, 0x05, 0x91, 0xef, 0x66,
+ 0xb1, 0x65, 0x81, 0x7d, 0x52, 0x84, 0x7d, 0x3f, 0x37, 0x65, 0xf8, 0x4b, 0x97, 0xb3, 0x92, 0x6b,
+ 0x3a, 0xb5, 0x71, 0xde, 0x0a, 0xb8, 0x8b, 0x6e, 0xc6, 0x34, 0x9b, 0xbf, 0x21, 0xf2, 0x9b, 0x45,
+ 0xf9, 0x4e, 0x46, 0x2c, 0x0b, 0xfb, 0x1f, 0x80, 0xeb, 0xa8, 0x42, 0x4f, 0x47, 0x2c, 0xe6, 0xd4,
+ 0xd3, 0x2a, 0x0d, 0xb5, 0x55, 0x71, 0x16, 0x6b, 0xec, 0xa3, 0x1d, 0xce, 0x06, 0x34, 0x0a, 0x3e,
+ 0x53, 0x17, 0x8e, 0x49, 0x4c, 0xdd, 0x98, 0xf6, 0x59, 0xec, 0x81, 0xb6, 0x79, 0x7d, 0xd9, 0x47,
+ 0xd2, 0x75, 0x98, 0x98, 0x1c, 0xe1, 0x91, 0xe9, 0x35, 0x9e, 0xff, 0x04, 0xf8, 0x25, 0x7a, 0x20,
+ 0x1b, 0x74, 0x45, 0x9a, 0x1b, 0x78, 0x1a, 0x6a, 0xa8, 0xad, 0x92, 0x73, 0x2f, 0x6d, 0xd9, 0x1c,
+ 0xa0, 0xe3, 0x99, 0xef, 0x10, 0xce, 0xf7, 0x21, 0xd6, 0xd0, 0x06, 0xf1, 0xbc, 0x98, 0x42, 0x3a,
+ 0x87, 0x9b, 0xce, 0x7c, 0x89, 0x6b, 0x68, 0xfd, 0xdf, 0x5c, 0xad, 0x39, 0xe9, 0x62, 0xbf, 0xf2,
+ 0xed, 0xdc, 0x50, 0x7e, 0x9f, 0x1b, 0x4a, 0xfb, 0xf5, 0xc5, 0x54, 0x57, 0x2f, 0xa7, 0xba, 0xfa,
+ 0x6b, 0xaa, 0xab, 0xdf, 0x67, 0xba, 0x72, 0x39, 0xd3, 0x95, 0x1f, 0x33, 0x5d, 0xf9, 0xf8, 0xf4,
+ 0xda, 0xd1, 0x3b, 0x5d, 0xbc, 0x14, 0x62, 0x08, 0x7b, 0x65, 0xf1, 0x40, 0x3c, 0xff, 0x1b, 0x00,
+ 0x00, 0xff, 0xff, 0x80, 0x34, 0x31, 0x2d, 0x9c, 0x04, 0x00, 0x00,
}
func (m *GenesisState) Marshal() (dAtA []byte, err error) {
@@ -232,6 +254,25 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if m.LastTokenizeShareRecordId != 0 {
+ i = encodeVarintGenesis(dAtA, i, uint64(m.LastTokenizeShareRecordId))
+ i--
+ dAtA[i] = 0x50
+ }
+ if len(m.TokenizeShareRecords) > 0 {
+ for iNdEx := len(m.TokenizeShareRecords) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.TokenizeShareRecords[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintGenesis(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x4a
+ }
+ }
if m.Exported {
i--
if m.Exported {
@@ -424,6 +465,15 @@ func (m *GenesisState) Size() (n int) {
if m.Exported {
n += 2
}
+ if len(m.TokenizeShareRecords) > 0 {
+ for _, e := range m.TokenizeShareRecords {
+ l = e.Size()
+ n += 1 + l + sovGenesis(uint64(l))
+ }
+ }
+ if m.LastTokenizeShareRecordId != 0 {
+ n += 1 + sovGenesis(uint64(m.LastTokenizeShareRecordId))
+ }
return n
}
@@ -734,6 +784,59 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error {
}
}
m.Exported = bool(v != 0)
+ case 9:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareRecords", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenesis
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthGenesis
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthGenesis
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.TokenizeShareRecords = append(m.TokenizeShareRecords, TokenizeShareRecord{})
+ if err := m.TokenizeShareRecords[len(m.TokenizeShareRecords)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 10:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field LastTokenizeShareRecordId", wireType)
+ }
+ m.LastTokenizeShareRecordId = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowGenesis
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.LastTokenizeShareRecordId |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
default:
iNdEx = preIndex
skippy, err := skipGenesis(dAtA[iNdEx:])
diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go
index b9da167888b..dedef7857e4 100644
--- a/x/staking/types/hooks.go
+++ b/x/staking/types/hooks.go
@@ -70,6 +70,7 @@ func (h MultiStakingHooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.V
h[i].BeforeValidatorSlashed(ctx, valAddr, fraction)
}
}
+
func (h MultiStakingHooks) AfterUnbondingInitiated(ctx sdk.Context, id uint64) error {
for i := range h {
if err := h[i].AfterUnbondingInitiated(ctx, id); err != nil {
@@ -78,3 +79,12 @@ func (h MultiStakingHooks) AfterUnbondingInitiated(ctx sdk.Context, id uint64) e
}
return nil
}
+
+func (h MultiStakingHooks) BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordID uint64) error {
+ for i := range h {
+ if err := h[i].BeforeTokenizeShareRecordRemoved(ctx, recordID); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff --git a/x/staking/types/hooks_template.go b/x/staking/types/hooks_template.go
index aafb1a1ae08..d6dcf03f123 100644
--- a/x/staking/types/hooks_template.go
+++ b/x/staking/types/hooks_template.go
@@ -31,3 +31,6 @@ func (h StakingHooksTemplate) BeforeValidatorSlashed(ctx sdk.Context, valAddr sd
func (h StakingHooksTemplate) AfterUnbondingInitiated(ctx sdk.Context, id uint64) error {
return nil
}
+func (h StakingHooksTemplate) BeforeTokenizeShareRecordRemoved(ctx sdk.Context, recordId uint64) error {
+ return nil
+}
diff --git a/x/staking/types/keys.go b/x/staking/types/keys.go
index 63bf7e778f8..69ffab9c213 100644
--- a/x/staking/types/keys.go
+++ b/x/staking/types/keys.go
@@ -24,6 +24,9 @@ const (
// RouterKey is the msg router key for the staking module
RouterKey = ModuleName
+
+ // Prefix for module accounts that custodian tokenized shares
+ TokenizeShareModuleAccountPrefix = "tokenizeshare_"
)
var (
@@ -53,6 +56,14 @@ var (
HistoricalInfoKey = []byte{0x50} // prefix for the historical info
ValidatorUpdatesKey = []byte{0x61} // prefix for the end block validator updates key
+
+ TokenizeShareRecordPrefix = []byte{0x71} // key for tokenizeshare record prefix
+ TokenizeShareRecordIDByOwnerPrefix = []byte{0x72} // key for tokenizeshare record id by owner prefix
+ TokenizeShareRecordIDByDenomPrefix = []byte{0x73} // key for tokenizeshare record id by denom prefix
+ LastTokenizeShareRecordIDKey = []byte{0x74} // key for last tokenize share record id
+ TotalLiquidStakedTokensKey = []byte{0x75} // key for total liquid staked tokens
+ TokenizeSharesLockKey = []byte{0x76} // key for locking tokenize shares
+ TokenizeSharesUnlockQueueKey = []byte{0x77} // key for the queue that unlocks tokenize shares
)
type UnbondingType int
@@ -375,3 +386,34 @@ func GetREDsByDelToValDstIndexKey(delAddr sdk.AccAddress, valDstAddr sdk.ValAddr
func GetHistoricalInfoKey(height int64) []byte {
return append(HistoricalInfoKey, []byte(strconv.FormatInt(height, 10))...)
}
+
+// GetTokenizeShareRecordByIndexKey returns the key of the specified id. Intended for querying the tokenizeShareRecord by the id.
+func GetTokenizeShareRecordByIndexKey(id uint64) []byte {
+ return append(TokenizeShareRecordPrefix, sdk.Uint64ToBigEndian(id)...)
+}
+
+// GetTokenizeShareRecordIdsByOwnerPrefix returns the key of the specified owner. Intended for querying all tokenizeShareRecords of an owner
+func GetTokenizeShareRecordIdsByOwnerPrefix(owner sdk.AccAddress) []byte {
+ return append(TokenizeShareRecordIDByOwnerPrefix, address.MustLengthPrefix(owner)...)
+}
+
+// GetTokenizeShareRecordIdByOwnerAndIdKey returns the key of the specified owner and id. Intended for setting tokenizeShareRecord of an owner
+func GetTokenizeShareRecordIDByOwnerAndIDKey(owner sdk.AccAddress, id uint64) []byte {
+ return append(append(TokenizeShareRecordIDByOwnerPrefix, address.MustLengthPrefix(owner)...), sdk.Uint64ToBigEndian(id)...)
+}
+
+func GetTokenizeShareRecordIDByDenomKey(denom string) []byte {
+ return append(TokenizeShareRecordIDByDenomPrefix, []byte(denom)...)
+}
+
+// GetTokenizeSharesLockKey returns the key for storing a tokenize share lock for a specified account
+func GetTokenizeSharesLockKey(owner sdk.AccAddress) []byte {
+ return append(TokenizeSharesLockKey, address.MustLengthPrefix(owner)...)
+}
+
+// GetTokenizeShareAuthorizationTimeKey returns the prefix key used for getting a set of pending
+// tokenize share unlocks that complete at the given time
+func GetTokenizeShareAuthorizationTimeKey(timestamp time.Time) []byte {
+ bz := sdk.FormatTimeBytes(timestamp)
+ return append(TokenizeSharesUnlockQueueKey, bz...)
+}
diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go
index 7252761acfb..497687eb255 100644
--- a/x/staking/types/msg.go
+++ b/x/staking/types/msg.go
@@ -10,12 +10,22 @@ import (
)
// staking message types
+//
+//nolint:gosec // these are not hard coded credentials
const (
- TypeMsgUndelegate = "begin_unbonding"
- TypeMsgEditValidator = "edit_validator"
- TypeMsgCreateValidator = "create_validator"
- TypeMsgDelegate = "delegate"
- TypeMsgBeginRedelegate = "begin_redelegate"
+ TypeMsgUndelegate = "begin_unbonding"
+ TypeMsgUnbondValidator = "unbond_validator"
+ TypeMsgEditValidator = "edit_validator"
+ TypeMsgCreateValidator = "create_validator"
+ TypeMsgDelegate = "delegate"
+ TypeMsgBeginRedelegate = "begin_redelegate"
+ TypeMsgCancelUnbondingDelegation = "cancel_unbond"
+ TypeMsgTokenizeShares = "tokenize_shares"
+ TypeMsgRedeemTokensForShares = "redeem_tokens_for_shares"
+ TypeMsgTransferTokenizeShareRecord = "transfer_tokenize_share_record"
+ TypeMsgDisableTokenizeShares = "disable_tokenize_shares"
+ TypeMsgEnableTokenizeShares = "enable_tokenize_shares"
+ TypeMsgValidatorBond = "validator_bond"
)
var (
@@ -25,14 +35,22 @@ var (
_ sdk.Msg = &MsgEditValidator{}
_ sdk.Msg = &MsgDelegate{}
_ sdk.Msg = &MsgUndelegate{}
+ _ sdk.Msg = &MsgUnbondValidator{}
_ sdk.Msg = &MsgBeginRedelegate{}
+ _ sdk.Msg = &MsgTokenizeShares{}
+ _ sdk.Msg = &MsgRedeemTokensForShares{}
+ _ sdk.Msg = &MsgTransferTokenizeShareRecord{}
+ _ sdk.Msg = &MsgDisableTokenizeShares{}
+ _ sdk.Msg = &MsgEnableTokenizeShares{}
+ _ sdk.Msg = &MsgCancelUnbondingDelegation{}
+ _ sdk.Msg = &MsgValidatorBond{}
)
// NewMsgCreateValidator creates a new MsgCreateValidator instance.
// Delegator address and validator address are the same.
func NewMsgCreateValidator(
valAddr sdk.ValAddress, pubKey cryptotypes.PubKey, //nolint:interfacer
- selfDelegation sdk.Coin, description Description, commission CommissionRates, minSelfDelegation sdk.Int,
+ selfDelegation sdk.Coin, description Description, commission CommissionRates,
) (*MsgCreateValidator, error) {
var pkAny *codectypes.Any
if pubKey != nil {
@@ -42,13 +60,12 @@ func NewMsgCreateValidator(
}
}
return &MsgCreateValidator{
- Description: description,
- DelegatorAddress: sdk.AccAddress(valAddr).String(),
- ValidatorAddress: valAddr.String(),
- Pubkey: pkAny,
- Value: selfDelegation,
- Commission: commission,
- MinSelfDelegation: minSelfDelegation,
+ Description: description,
+ DelegatorAddress: sdk.AccAddress(valAddr).String(),
+ ValidatorAddress: valAddr.String(),
+ Pubkey: pkAny,
+ Value: selfDelegation,
+ Commission: commission,
}, nil
}
@@ -129,17 +146,6 @@ func (msg MsgCreateValidator) ValidateBasic() error {
return err
}
- if !msg.MinSelfDelegation.IsPositive() {
- return sdkerrors.Wrap(
- sdkerrors.ErrInvalidRequest,
- "minimum self delegation must be a positive integer",
- )
- }
-
- if msg.Value.Amount.LT(msg.MinSelfDelegation) {
- return ErrSelfDelegationBelowMinimum
- }
-
return nil
}
@@ -152,12 +158,11 @@ func (msg MsgCreateValidator) UnpackInterfaces(unpacker codectypes.AnyUnpacker)
// NewMsgEditValidator creates a new MsgEditValidator instance
//
//nolint:interfacer
-func NewMsgEditValidator(valAddr sdk.ValAddress, description Description, newRate *sdk.Dec, newMinSelfDelegation *sdk.Int) *MsgEditValidator {
+func NewMsgEditValidator(valAddr sdk.ValAddress, description Description, newRate *sdk.Dec) *MsgEditValidator {
return &MsgEditValidator{
- Description: description,
- CommissionRate: newRate,
- ValidatorAddress: valAddr.String(),
- MinSelfDelegation: newMinSelfDelegation,
+ Description: description,
+ CommissionRate: newRate,
+ ValidatorAddress: valAddr.String(),
}
}
@@ -192,13 +197,6 @@ func (msg MsgEditValidator) ValidateBasic() error {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "empty description")
}
- if msg.MinSelfDelegation != nil && !msg.MinSelfDelegation.IsPositive() {
- return sdkerrors.Wrap(
- sdkerrors.ErrInvalidRequest,
- "minimum self delegation must be a positive integer",
- )
- }
-
if msg.CommissionRate != nil {
if msg.CommissionRate.GT(sdk.OneDec()) || msg.CommissionRate.IsNegative() {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "commission rate must be between 0 and 1 (inclusive)")
@@ -370,3 +368,364 @@ func (msg MsgUndelegate) ValidateBasic() error {
return nil
}
+
+// NewMsgUnbondValidator creates a new MsgUnbondValidator instance.
+//
+//nolint:interfacer
+func NewMsgUnbondValidator(valAddr sdk.ValAddress) *MsgUnbondValidator {
+ return &MsgUnbondValidator{
+ ValidatorAddress: valAddr.String(),
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgUnbondValidator) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgUnbondValidator) Type() string { return TypeMsgUnbondValidator }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgUnbondValidator) GetSigners() []sdk.AccAddress {
+ valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{valAddr.Bytes()}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgUnbondValidator) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgUnbondValidator) ValidateBasic() error {
+ if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
+ }
+
+ return nil
+}
+
+// NewMsgTokenizeShares creates a new MsgTokenizeShares instance.
+//
+//nolint:interfacer
+func NewMsgTokenizeShares(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amount sdk.Coin, owner sdk.AccAddress) *MsgTokenizeShares {
+ return &MsgTokenizeShares{
+ DelegatorAddress: delAddr.String(),
+ ValidatorAddress: valAddr.String(),
+ Amount: amount,
+ TokenizedShareOwner: owner.String(),
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgTokenizeShares) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgTokenizeShares) Type() string { return TypeMsgTokenizeShares }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgTokenizeShares) GetSigners() []sdk.AccAddress {
+ delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{delegator}
+}
+
+// MsgTokenizeShares implements the sdk.Msg interface.
+func (msg MsgTokenizeShares) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgTokenizeShares) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
+ }
+ if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
+ }
+ if _, err := sdk.AccAddressFromBech32(msg.TokenizedShareOwner); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid tokenize share owner address: %s", err)
+ }
+
+ if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() {
+ return sdkerrors.Wrap(
+ sdkerrors.ErrInvalidRequest,
+ "invalid shares amount",
+ )
+ }
+
+ return nil
+}
+
+// NewMsgRedeemTokensForShares creates a new MsgRedeemTokensForShares instance.
+//
+//nolint:interfacer
+func NewMsgRedeemTokensForShares(delAddr sdk.AccAddress, amount sdk.Coin) *MsgRedeemTokensForShares {
+ return &MsgRedeemTokensForShares{
+ DelegatorAddress: delAddr.String(),
+ Amount: amount,
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgRedeemTokensForShares) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgRedeemTokensForShares) Type() string { return TypeMsgRedeemTokensForShares }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgRedeemTokensForShares) GetSigners() []sdk.AccAddress {
+ delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{delegator}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgRedeemTokensForShares) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgRedeemTokensForShares) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
+ }
+
+ if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() {
+ return sdkerrors.Wrap(
+ sdkerrors.ErrInvalidRequest,
+ "invalid shares amount",
+ )
+ }
+
+ return nil
+}
+
+// NewMsgTransferTokenizeShareRecord creates a new MsgTransferTokenizeShareRecord instance.
+//
+//nolint:interfacer
+func NewMsgTransferTokenizeShareRecord(recordId uint64, sender, newOwner sdk.AccAddress) *MsgTransferTokenizeShareRecord {
+ return &MsgTransferTokenizeShareRecord{
+ TokenizeShareRecordId: recordId,
+ Sender: sender.String(),
+ NewOwner: newOwner.String(),
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgTransferTokenizeShareRecord) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgTransferTokenizeShareRecord) Type() string { return TypeMsgTransferTokenizeShareRecord }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgTransferTokenizeShareRecord) GetSigners() []sdk.AccAddress {
+ sender, err := sdk.AccAddressFromBech32(msg.Sender)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{sender}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgTransferTokenizeShareRecord) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgTransferTokenizeShareRecord) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err)
+ }
+ if _, err := sdk.AccAddressFromBech32(msg.NewOwner); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid new owner address: %s", err)
+ }
+
+ return nil
+}
+
+// NewMsgDisableTokenizeShares creates a new MsgDisableTokenizeShares instance.
+//
+//nolint:interfacer
+func NewMsgDisableTokenizeShares(delAddr sdk.AccAddress) *MsgDisableTokenizeShares {
+ return &MsgDisableTokenizeShares{
+ DelegatorAddress: delAddr.String(),
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgDisableTokenizeShares) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgDisableTokenizeShares) Type() string { return TypeMsgDisableTokenizeShares }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgDisableTokenizeShares) GetSigners() []sdk.AccAddress {
+ sender, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{sender}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgDisableTokenizeShares) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgDisableTokenizeShares) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err)
+ }
+
+ return nil
+}
+
+// NewMsgEnableTokenizeShares creates a new MsgEnableTokenizeShares instance.
+//
+//nolint:interfacer
+func NewMsgEnableTokenizeShares(delAddr sdk.AccAddress) *MsgEnableTokenizeShares {
+ return &MsgEnableTokenizeShares{
+ DelegatorAddress: delAddr.String(),
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgEnableTokenizeShares) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgEnableTokenizeShares) Type() string { return TypeMsgEnableTokenizeShares }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgEnableTokenizeShares) GetSigners() []sdk.AccAddress {
+ sender, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{sender}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgEnableTokenizeShares) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgEnableTokenizeShares) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err)
+ }
+
+ return nil
+}
+
+// NewMsgCancelUnbondingDelegation creates a new MsgCancelUnbondingDelegation instance.
+//
+//nolint:interfacer
+func NewMsgCancelUnbondingDelegation(delAddr sdk.AccAddress, valAddr sdk.ValAddress, creationHeight int64, amount sdk.Coin) *MsgCancelUnbondingDelegation {
+ return &MsgCancelUnbondingDelegation{
+ DelegatorAddress: delAddr.String(),
+ ValidatorAddress: valAddr.String(),
+ Amount: amount,
+ CreationHeight: creationHeight,
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgCancelUnbondingDelegation) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgCancelUnbondingDelegation) Type() string { return TypeMsgCancelUnbondingDelegation }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgCancelUnbondingDelegation) GetSigners() []sdk.AccAddress {
+ delegator, _ := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ return []sdk.AccAddress{delegator}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgCancelUnbondingDelegation) GetSignBytes() []byte {
+ return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg))
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgCancelUnbondingDelegation) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
+ }
+ if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
+ }
+
+ if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() {
+ return sdkerrors.Wrap(
+ sdkerrors.ErrInvalidRequest,
+ "invalid amount",
+ )
+ }
+
+ if msg.CreationHeight <= 0 {
+ return sdkerrors.Wrap(
+ sdkerrors.ErrInvalidRequest,
+ "invalid height",
+ )
+ }
+
+ return nil
+}
+
+// NewMsgValidatorBond creates a new MsgValidatorBond instance.
+//
+//nolint:interfacer
+func NewMsgValidatorBond(delAddr sdk.AccAddress, valAddr sdk.ValAddress) *MsgValidatorBond {
+ return &MsgValidatorBond{
+ DelegatorAddress: delAddr.String(),
+ ValidatorAddress: valAddr.String(),
+ }
+}
+
+// Route implements the sdk.Msg interface.
+func (msg MsgValidatorBond) Route() string { return RouterKey }
+
+// Type implements the sdk.Msg interface.
+func (msg MsgValidatorBond) Type() string { return TypeMsgValidatorBond }
+
+// GetSigners implements the sdk.Msg interface.
+func (msg MsgValidatorBond) GetSigners() []sdk.AccAddress {
+ delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress)
+ if err != nil {
+ panic(err)
+ }
+ return []sdk.AccAddress{delegator}
+}
+
+// GetSignBytes implements the sdk.Msg interface.
+func (msg MsgValidatorBond) GetSignBytes() []byte {
+ bz := ModuleCdc.MustMarshalJSON(&msg)
+ return sdk.MustSortJSON(bz)
+}
+
+// ValidateBasic implements the sdk.Msg interface.
+func (msg MsgValidatorBond) ValidateBasic() error {
+ if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err)
+ }
+ if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil {
+ return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err)
+ }
+
+ return nil
+}
diff --git a/x/staking/types/msg_test.go b/x/staking/types/msg_test.go
index f1ba552d911..bb179725b2c 100644
--- a/x/staking/types/msg_test.go
+++ b/x/staking/types/msg_test.go
@@ -37,7 +37,7 @@ func TestMsgDecode(t *testing.T) {
// now let's try to serialize the whole message
commission1 := types.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec())
- msg, err := types.NewMsgCreateValidator(valAddr1, pk1, coinPos, types.Description{}, commission1, sdk.OneInt())
+ msg, err := types.NewMsgCreateValidator(valAddr1, pk1, coinPos, types.Description{}, commission1)
require.NoError(t, err)
msgSerialized, err := cdc.MarshalInterface(msg)
require.NoError(t, err)
@@ -59,27 +59,23 @@ func TestMsgCreateValidator(t *testing.T) {
tests := []struct {
name, moniker, identity, website, securityContact, details string
CommissionRates types.CommissionRates
- minSelfDelegation sdk.Int
validatorAddr sdk.ValAddress
pubkey cryptotypes.PubKey
bond sdk.Coin
expectPass bool
}{
- {"basic good", "a", "b", "c", "d", "e", commission1, sdk.OneInt(), valAddr1, pk1, coinPos, true},
- {"partial description", "", "", "c", "", "", commission1, sdk.OneInt(), valAddr1, pk1, coinPos, true},
- {"empty description", "", "", "", "", "", commission2, sdk.OneInt(), valAddr1, pk1, coinPos, false},
- {"empty address", "a", "b", "c", "d", "e", commission2, sdk.OneInt(), emptyAddr, pk1, coinPos, false},
- {"empty pubkey", "a", "b", "c", "d", "e", commission1, sdk.OneInt(), valAddr1, emptyPubkey, coinPos, false},
- {"empty bond", "a", "b", "c", "d", "e", commission2, sdk.OneInt(), valAddr1, pk1, coinZero, false},
- {"nil bond", "a", "b", "c", "d", "e", commission2, sdk.OneInt(), valAddr1, pk1, sdk.Coin{}, false},
- {"zero min self delegation", "a", "b", "c", "d", "e", commission1, sdk.ZeroInt(), valAddr1, pk1, coinPos, false},
- {"negative min self delegation", "a", "b", "c", "d", "e", commission1, sdk.NewInt(-1), valAddr1, pk1, coinPos, false},
- {"delegation less than min self delegation", "a", "b", "c", "d", "e", commission1, coinPos.Amount.Add(sdk.OneInt()), valAddr1, pk1, coinPos, false},
+ {"basic good", "a", "b", "c", "d", "e", commission1, valAddr1, pk1, coinPos, true},
+ {"partial description", "", "", "c", "", "", commission1, valAddr1, pk1, coinPos, true},
+ {"empty description", "", "", "", "", "", commission2, valAddr1, pk1, coinPos, false},
+ {"empty address", "a", "b", "c", "d", "e", commission2, emptyAddr, pk1, coinPos, false},
+ {"empty pubkey", "a", "b", "c", "d", "e", commission1, valAddr1, emptyPubkey, coinPos, false},
+ {"empty bond", "a", "b", "c", "d", "e", commission2, valAddr1, pk1, coinZero, false},
+ {"nil bond", "a", "b", "c", "d", "e", commission2, valAddr1, pk1, sdk.Coin{}, false},
}
for _, tc := range tests {
description := types.NewDescription(tc.moniker, tc.identity, tc.website, tc.securityContact, tc.details)
- msg, err := types.NewMsgCreateValidator(tc.validatorAddr, tc.pubkey, tc.bond, description, tc.CommissionRates, tc.minSelfDelegation)
+ msg, err := types.NewMsgCreateValidator(tc.validatorAddr, tc.pubkey, tc.bond, description, tc.CommissionRates)
require.NoError(t, err)
if tc.expectPass {
require.Nil(t, msg.ValidateBasic(), "test: %v", tc.name)
@@ -95,20 +91,18 @@ func TestMsgEditValidator(t *testing.T) {
name, moniker, identity, website, securityContact, details string
validatorAddr sdk.ValAddress
expectPass bool
- minSelfDelegation sdk.Int
}{
- {"basic good", "a", "b", "c", "d", "e", valAddr1, true, sdk.OneInt()},
- {"partial description", "", "", "c", "", "", valAddr1, true, sdk.OneInt()},
- {"empty description", "", "", "", "", "", valAddr1, false, sdk.OneInt()},
- {"empty address", "a", "b", "c", "d", "e", emptyAddr, false, sdk.OneInt()},
- {"nil int", "a", "b", "c", "d", "e", emptyAddr, false, sdk.Int{}},
+ {"basic good", "a", "b", "c", "d", "e", valAddr1, true},
+ {"partial description", "", "", "c", "", "", valAddr1, true},
+ {"empty description", "", "", "", "", "", valAddr1, false},
+ {"empty address", "a", "b", "c", "d", "e", emptyAddr, false},
}
for _, tc := range tests {
description := types.NewDescription(tc.moniker, tc.identity, tc.website, tc.securityContact, tc.details)
newRate := sdk.ZeroDec()
- msg := types.NewMsgEditValidator(tc.validatorAddr, description, &newRate, &tc.minSelfDelegation)
+ msg := types.NewMsgEditValidator(tc.validatorAddr, description, &newRate)
if tc.expectPass {
require.Nil(t, msg.ValidateBasic(), "test: %v", tc.name)
} else {
diff --git a/x/staking/types/params.go b/x/staking/types/params.go
index 8ccae6b5650..af99b4a1350 100644
--- a/x/staking/types/params.go
+++ b/x/staking/types/params.go
@@ -33,12 +33,27 @@ const (
)
var (
- KeyUnbondingTime = []byte("UnbondingTime")
- KeyMaxValidators = []byte("MaxValidators")
- KeyMaxEntries = []byte("MaxEntries")
- KeyBondDenom = []byte("BondDenom")
- KeyHistoricalEntries = []byte("HistoricalEntries")
- KeyPowerReduction = []byte("PowerReduction")
+ // DefaultMinCommissionRate is set to 0%
+ DefaultMinCommissionRate = sdk.ZeroDec()
+ // DefaultValidatorBondFactor is set to -1 (disabled)
+ DefaultValidatorBondFactor = sdk.NewDecFromInt(sdk.NewInt(-1))
+ // DefaultGlobalLiquidStakingCap is set to 100%
+ DefaultGlobalLiquidStakingCap = sdk.OneDec()
+ // DefaultValidatorLiquidStakingCap is set to 100%
+ DefaultValidatorLiquidStakingCap = sdk.OneDec()
+)
+
+var (
+ KeyUnbondingTime = []byte("UnbondingTime")
+ KeyMaxValidators = []byte("MaxValidators")
+ KeyMaxEntries = []byte("MaxEntries")
+ KeyBondDenom = []byte("BondDenom")
+ KeyHistoricalEntries = []byte("HistoricalEntries")
+ KeyPowerReduction = []byte("PowerReduction")
+ KeyMinCommissionRate = []byte("MinCommissionRate")
+ KeyValidatorBondFactor = []byte("ValidatorBondFactor")
+ KeyGlobalLiquidStakingCap = []byte("GlobalLiquidStakingCap")
+ KeyValidatorLiquidStakingCap = []byte("ValidatorLiquidStakingCap")
)
var _ paramtypes.ParamSet = (*Params)(nil)
@@ -49,13 +64,27 @@ func ParamKeyTable() paramtypes.KeyTable {
}
// NewParams creates a new Params instance
-func NewParams(unbondingTime time.Duration, maxValidators, maxEntries, historicalEntries uint32, bondDenom string) Params {
+func NewParams(
+ unbondingTime time.Duration,
+ maxValidators uint32,
+ maxEntries uint32,
+ historicalEntries uint32,
+ bondDenom string,
+ minCommissionRate sdk.Dec,
+ validatorBondFactor sdk.Dec,
+ globalLiquidStakingCap sdk.Dec,
+ validatorLiquidStakingCap sdk.Dec,
+) Params {
return Params{
- UnbondingTime: unbondingTime,
- MaxValidators: maxValidators,
- MaxEntries: maxEntries,
- HistoricalEntries: historicalEntries,
- BondDenom: bondDenom,
+ UnbondingTime: unbondingTime,
+ MaxValidators: maxValidators,
+ MaxEntries: maxEntries,
+ HistoricalEntries: historicalEntries,
+ BondDenom: bondDenom,
+ MinCommissionRate: minCommissionRate,
+ ValidatorBondFactor: validatorBondFactor,
+ GlobalLiquidStakingCap: globalLiquidStakingCap,
+ ValidatorLiquidStakingCap: validatorLiquidStakingCap,
}
}
@@ -67,6 +96,10 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
paramtypes.NewParamSetPair(KeyMaxEntries, &p.MaxEntries, validateMaxEntries),
paramtypes.NewParamSetPair(KeyHistoricalEntries, &p.HistoricalEntries, validateHistoricalEntries),
paramtypes.NewParamSetPair(KeyBondDenom, &p.BondDenom, validateBondDenom),
+ paramtypes.NewParamSetPair(KeyMinCommissionRate, &p.MinCommissionRate, validateMinCommissionRate),
+ paramtypes.NewParamSetPair(KeyValidatorBondFactor, &p.ValidatorBondFactor, validateValidatorBondFactor),
+ paramtypes.NewParamSetPair(KeyGlobalLiquidStakingCap, &p.GlobalLiquidStakingCap, validateGlobalLiquidStakingCap),
+ paramtypes.NewParamSetPair(KeyValidatorLiquidStakingCap, &p.ValidatorLiquidStakingCap, validateValidatorLiquidStakingCap),
}
}
@@ -78,6 +111,10 @@ func DefaultParams() Params {
DefaultMaxEntries,
DefaultHistoricalEntries,
sdk.DefaultBondDenom,
+ DefaultMinCommissionRate,
+ DefaultValidatorBondFactor,
+ DefaultGlobalLiquidStakingCap,
+ DefaultValidatorLiquidStakingCap,
)
}
@@ -125,6 +162,22 @@ func (p Params) Validate() error {
return err
}
+ if err := validateMinCommissionRate(p.MinCommissionRate); err != nil {
+ return err
+ }
+
+ if err := validateValidatorBondFactor(p.ValidatorBondFactor); err != nil {
+ return err
+ }
+
+ if err := validateGlobalLiquidStakingCap(p.GlobalLiquidStakingCap); err != nil {
+ return err
+ }
+
+ if err := validateValidatorLiquidStakingCap(p.ValidatorLiquidStakingCap); err != nil {
+ return err
+ }
+
return nil
}
@@ -205,3 +258,64 @@ func ValidatePowerReduction(i interface{}) error {
return nil
}
+
+func validateMinCommissionRate(i interface{}) error {
+ v, ok := i.(sdk.Dec)
+ if !ok {
+ return fmt.Errorf("invalid parameter type: %T", i)
+ }
+
+ if v.IsNegative() {
+ return fmt.Errorf("minimum commission rate cannot be negative: %s", v)
+ }
+ if v.GT(sdk.OneDec()) {
+ return fmt.Errorf("minimum commission rate cannot be greater than 100%%: %s", v)
+ }
+
+ return nil
+}
+
+func validateValidatorBondFactor(i interface{}) error {
+ v, ok := i.(sdk.Dec)
+ if !ok {
+ return fmt.Errorf("invalid parameter type: %T", i)
+ }
+
+ if v.IsNegative() && !v.Equal(sdk.NewDec(-1)) {
+ return fmt.Errorf("invalid validator bond factor: %s", v)
+ }
+
+ return nil
+}
+
+func validateGlobalLiquidStakingCap(i interface{}) error {
+ v, ok := i.(sdk.Dec)
+ if !ok {
+ return fmt.Errorf("invalid parameter type: %T", i)
+ }
+
+ if v.IsNegative() {
+ return fmt.Errorf("global liquid staking cap cannot be negative: %s", v)
+ }
+ if v.GT(sdk.OneDec()) {
+ return fmt.Errorf("global liquid staking cap cannot be greater than 100%%: %s", v)
+ }
+
+ return nil
+}
+
+func validateValidatorLiquidStakingCap(i interface{}) error {
+ v, ok := i.(sdk.Dec)
+ if !ok {
+ return fmt.Errorf("invalid parameter type: %T", i)
+ }
+
+ if v.IsNegative() {
+ return fmt.Errorf("validator liquid staking cap cannot be negative: %s", v)
+ }
+ if v.GT(sdk.OneDec()) {
+ return fmt.Errorf("validator liquid staking cap cannot be greater than 100%%: %s", v)
+ }
+
+ return nil
+}
diff --git a/x/staking/types/params_test.go b/x/staking/types/params_test.go
index 6218091e0ff..ead0266759b 100644
--- a/x/staking/types/params_test.go
+++ b/x/staking/types/params_test.go
@@ -5,6 +5,7 @@ import (
"github.com/stretchr/testify/require"
+ sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
@@ -21,3 +22,17 @@ func TestParamsEqual(t *testing.T) {
ok = p1.Equal(p2)
require.False(t, ok)
}
+
+func Test_validateParams(t *testing.T) {
+ params := types.DefaultParams()
+
+ // default params have no error
+ require.NoError(t, params.Validate())
+
+ // validate mincommision
+ params.MinCommissionRate = sdk.NewDec(-1)
+ require.Error(t, params.Validate())
+
+ params.MinCommissionRate = sdk.NewDec(2)
+ require.Error(t, params.Validate())
+}
diff --git a/x/staking/types/query.pb.go b/x/staking/types/query.pb.go
index 29f84adc27a..03506b3f90e 100644
--- a/x/staking/types/query.pb.go
+++ b/x/staking/types/query.pb.go
@@ -6,6 +6,8 @@ package types
import (
context "context"
fmt "fmt"
+ github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types"
+ types "github.com/cosmos/cosmos-sdk/types"
query "github.com/cosmos/cosmos-sdk/types/query"
_ "github.com/gogo/protobuf/gogoproto"
grpc1 "github.com/gogo/protobuf/grpc"
@@ -188,7 +190,7 @@ func (m *QueryValidatorRequest) GetValidatorAddr() string {
// QueryValidatorResponse is response type for the Query/Validator RPC method
type QueryValidatorResponse struct {
- // validator defines the the validator info.
+ // validator defines the validator info.
Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"`
}
@@ -987,7 +989,7 @@ var xxx_messageInfo_QueryDelegatorValidatorsRequest proto.InternalMessageInfo
// QueryDelegatorValidatorsResponse is response type for the
// Query/DelegatorValidators RPC method.
type QueryDelegatorValidatorsResponse struct {
- // validators defines the the validators' info of a delegator.
+ // validators defines the validators' info of a delegator.
Validators []Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators"`
// pagination defines the pagination in the response.
Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"`
@@ -1085,7 +1087,7 @@ var xxx_messageInfo_QueryDelegatorValidatorRequest proto.InternalMessageInfo
// QueryDelegatorValidatorResponse response type for the
// Query/DelegatorValidator RPC method.
type QueryDelegatorValidatorResponse struct {
- // validator defines the the validator info.
+ // validator defines the validator info.
Validator Validator `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator"`
}
@@ -1389,1638 +1391,1778 @@ func (m *QueryParamsResponse) GetParams() Params {
return Params{}
}
-func init() {
- proto.RegisterType((*QueryValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorsRequest")
- proto.RegisterType((*QueryValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorsResponse")
- proto.RegisterType((*QueryValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorRequest")
- proto.RegisterType((*QueryValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorResponse")
- proto.RegisterType((*QueryValidatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsRequest")
- proto.RegisterType((*QueryValidatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsResponse")
- proto.RegisterType((*QueryValidatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest")
- proto.RegisterType((*QueryValidatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse")
- proto.RegisterType((*QueryDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryDelegationRequest")
- proto.RegisterType((*QueryDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryDelegationResponse")
- proto.RegisterType((*QueryUnbondingDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationRequest")
- proto.RegisterType((*QueryUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationResponse")
- proto.RegisterType((*QueryDelegatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest")
- proto.RegisterType((*QueryDelegatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse")
- proto.RegisterType((*QueryDelegatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest")
- proto.RegisterType((*QueryDelegatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse")
- proto.RegisterType((*QueryRedelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryRedelegationsRequest")
- proto.RegisterType((*QueryRedelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryRedelegationsResponse")
- proto.RegisterType((*QueryDelegatorValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest")
- proto.RegisterType((*QueryDelegatorValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse")
- proto.RegisterType((*QueryDelegatorValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorRequest")
- proto.RegisterType((*QueryDelegatorValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorResponse")
- proto.RegisterType((*QueryHistoricalInfoRequest)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoRequest")
- proto.RegisterType((*QueryHistoricalInfoResponse)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoResponse")
- proto.RegisterType((*QueryPoolRequest)(nil), "cosmos.staking.v1beta1.QueryPoolRequest")
- proto.RegisterType((*QueryPoolResponse)(nil), "cosmos.staking.v1beta1.QueryPoolResponse")
- proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.staking.v1beta1.QueryParamsRequest")
- proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.staking.v1beta1.QueryParamsResponse")
+// QueryTokenizeShareRecordByIdRequest is request type for the
+// Query/QueryTokenizeShareRecordById RPC method.
+type QueryTokenizeShareRecordByIdRequest struct {
+ Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
}
-func init() {
- proto.RegisterFile("cosmos/staking/v1beta1/query.proto", fileDescriptor_f270127f442bbcd8)
+func (m *QueryTokenizeShareRecordByIdRequest) Reset() { *m = QueryTokenizeShareRecordByIdRequest{} }
+func (m *QueryTokenizeShareRecordByIdRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareRecordByIdRequest) ProtoMessage() {}
+func (*QueryTokenizeShareRecordByIdRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{28}
}
-
-var fileDescriptor_f270127f442bbcd8 = []byte{
- // 1303 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcf, 0x4f, 0x1c, 0x75,
- 0x14, 0xdf, 0x2f, 0x20, 0x91, 0xd7, 0xb4, 0xa9, 0xdf, 0x05, 0xc4, 0x29, 0xee, 0xd2, 0x09, 0x22,
- 0xa5, 0x74, 0x46, 0xa0, 0x52, 0xac, 0x4d, 0x15, 0xac, 0x54, 0xd2, 0x83, 0xb0, 0x46, 0xfc, 0x75,
- 0x20, 0xb3, 0x3b, 0xd3, 0xd9, 0x49, 0x97, 0x99, 0xed, 0xcc, 0x40, 0x40, 0xc2, 0x41, 0x4f, 0x7a,
- 0xd3, 0x78, 0x52, 0x2f, 0x3d, 0x98, 0x98, 0xe8, 0x51, 0xff, 0x01, 0x4f, 0xd6, 0x1b, 0x46, 0x0f,
- 0x7a, 0xa9, 0x06, 0x3c, 0x34, 0x9e, 0xbc, 0x19, 0x6f, 0x66, 0xbf, 0xf3, 0x66, 0x76, 0x86, 0xf9,
- 0xb9, 0xcb, 0x12, 0xd2, 0x13, 0xbb, 0xdf, 0x7d, 0x3f, 0x3e, 0x9f, 0xf7, 0xbe, 0xef, 0x7d, 0xdf,
- 0x0b, 0xc0, 0x57, 0x0c, 0x6b, 0xdd, 0xb0, 0x44, 0xcb, 0x96, 0xee, 0x68, 0xba, 0x2a, 0x6e, 0x4e,
- 0x95, 0x15, 0x5b, 0x9a, 0x12, 0xef, 0x6e, 0x28, 0xe6, 0xb6, 0x50, 0x37, 0x0d, 0xdb, 0xa0, 0x83,
- 0x8e, 0x8c, 0x80, 0x32, 0x02, 0xca, 0x70, 0x13, 0xa8, 0x5b, 0x96, 0x2c, 0xc5, 0x51, 0xf0, 0xd4,
- 0xeb, 0x92, 0xaa, 0xe9, 0x92, 0xad, 0x19, 0xba, 0x63, 0x83, 0xeb, 0x57, 0x0d, 0xd5, 0x60, 0x1f,
- 0xc5, 0xc6, 0x27, 0x3c, 0x1d, 0x56, 0x0d, 0x43, 0xad, 0x29, 0xa2, 0x54, 0xd7, 0x44, 0x49, 0xd7,
- 0x0d, 0x9b, 0xa9, 0x58, 0xf8, 0xeb, 0x68, 0x0c, 0x36, 0x17, 0x07, 0x93, 0xe2, 0xb7, 0x60, 0x70,
- 0xa5, 0xe1, 0x7b, 0x55, 0xaa, 0x69, 0xb2, 0x64, 0x1b, 0xa6, 0x55, 0x52, 0xee, 0x6e, 0x28, 0x96,
- 0x4d, 0x07, 0xa1, 0xd7, 0xb2, 0x25, 0x7b, 0xc3, 0x1a, 0x22, 0x23, 0x64, 0xbc, 0xaf, 0x84, 0xdf,
- 0xe8, 0x22, 0x40, 0x13, 0xdf, 0x50, 0xd7, 0x08, 0x19, 0x3f, 0x35, 0x3d, 0x26, 0x20, 0xc9, 0x06,
- 0x19, 0xc1, 0x61, 0x8f, 0xfe, 0x84, 0x65, 0x49, 0x55, 0xd0, 0x66, 0xc9, 0xa7, 0xc9, 0x7f, 0x4b,
- 0xe0, 0xc9, 0x90, 0x6b, 0xab, 0x6e, 0xe8, 0x96, 0x42, 0x6f, 0x02, 0x6c, 0x7a, 0xa7, 0x43, 0x64,
- 0xa4, 0x7b, 0xfc, 0xd4, 0xf4, 0x79, 0x21, 0x3a, 0x90, 0x82, 0xa7, 0xbf, 0xd0, 0x73, 0xff, 0x41,
- 0x31, 0x57, 0xf2, 0xa9, 0x36, 0x0c, 0x85, 0xc0, 0x3e, 0x9b, 0x0a, 0xd6, 0x41, 0x11, 0x40, 0x7b,
- 0x1d, 0x06, 0x82, 0x60, 0xdd, 0x30, 0x3d, 0x03, 0x67, 0x3c, 0x7f, 0x6b, 0x92, 0x2c, 0x9b, 0x18,
- 0xae, 0xd3, 0xde, 0xe9, 0xbc, 0x2c, 0x9b, 0xfc, 0xda, 0xe1, 0x38, 0x7b, 0x5c, 0x5f, 0x85, 0x3e,
- 0x4f, 0x94, 0xe9, 0xb6, 0x40, 0xb5, 0xa9, 0xc9, 0x7f, 0x4a, 0x60, 0x24, 0xe8, 0xe1, 0x86, 0x52,
- 0x53, 0x54, 0xe7, 0x4a, 0xb4, 0x06, 0xb6, 0x63, 0x29, 0x7e, 0x48, 0xe0, 0x7c, 0x02, 0x26, 0x0c,
- 0xc0, 0xfb, 0xd0, 0x2f, 0x7b, 0xc7, 0x6b, 0x26, 0x1e, 0xbb, 0x69, 0x9f, 0x88, 0x8b, 0x45, 0xd3,
- 0x94, 0x6b, 0x69, 0xe1, 0x5c, 0x23, 0x28, 0xdf, 0xfc, 0x51, 0xcc, 0x87, 0x7f, 0xb3, 0x4a, 0x79,
- 0x39, 0x7c, 0xd8, 0xb9, 0xfb, 0xf1, 0x05, 0x81, 0x0b, 0x41, 0xaa, 0x6f, 0xea, 0x65, 0x43, 0x97,
- 0x35, 0x5d, 0x3d, 0xf9, 0x3c, 0xfc, 0x4e, 0x60, 0x22, 0x0b, 0x38, 0x4c, 0x48, 0x19, 0xf2, 0x1b,
- 0xee, 0xef, 0xa1, 0x7c, 0x5c, 0x8c, 0xcb, 0x47, 0x84, 0x49, 0xbc, 0xa5, 0xd4, 0xb3, 0x76, 0x0c,
- 0x81, 0xaf, 0x63, 0x61, 0xf9, 0x53, 0xee, 0x05, 0x19, 0x53, 0x7e, 0x28, 0xc8, 0xde, 0x29, 0x0b,
- 0x72, 0x38, 0x17, 0x5d, 0x11, 0xb9, 0xb8, 0xfa, 0xf8, 0x47, 0xf7, 0x8a, 0xb9, 0x87, 0xf7, 0x8a,
- 0x39, 0x7e, 0x13, 0xfb, 0x56, 0xf8, 0x92, 0xd1, 0xf7, 0x20, 0x1f, 0x71, 0x95, 0xb1, 0xaa, 0x5b,
- 0xb8, 0xc9, 0x25, 0x1a, 0xbe, 0xac, 0xfc, 0x36, 0x14, 0x99, 0xdf, 0x88, 0x40, 0x1f, 0x37, 0xe5,
- 0x75, 0xec, 0x2d, 0x91, 0xae, 0x91, 0xfb, 0x12, 0xf4, 0x3a, 0x79, 0x46, 0xba, 0x6d, 0x5c, 0x14,
- 0x34, 0xc0, 0x7f, 0xe9, 0xf6, 0xb2, 0x1b, 0x2e, 0xec, 0xe8, 0x1a, 0xca, 0xc2, 0xb5, 0x43, 0x35,
- 0xe4, 0x0b, 0xc6, 0xcf, 0x6e, 0x57, 0x8b, 0x46, 0x87, 0xe1, 0xa8, 0x74, 0xac, 0xab, 0x39, 0xb1,
- 0x39, 0xde, 0xf6, 0xf5, 0x95, 0xdb, 0xbe, 0x3c, 0x4e, 0x29, 0xed, 0xeb, 0x64, 0x42, 0xef, 0x35,
- 0xb2, 0x14, 0x98, 0x8f, 0x62, 0x23, 0xfb, 0x87, 0xc0, 0x53, 0x8c, 0x5b, 0x49, 0x91, 0xdb, 0x0e,
- 0xf9, 0x24, 0x50, 0xcb, 0xac, 0xac, 0x45, 0x56, 0xf7, 0x59, 0xcb, 0xac, 0xac, 0x06, 0xde, 0x97,
- 0x49, 0xa0, 0xb2, 0x65, 0x1f, 0x96, 0xee, 0x76, 0xa4, 0x65, 0xcb, 0x5e, 0x4d, 0x78, 0x8d, 0x7a,
- 0x3a, 0x90, 0xce, 0x3d, 0x02, 0x5c, 0x14, 0x65, 0x4c, 0x9f, 0x06, 0x83, 0xa6, 0x92, 0x50, 0x44,
- 0x93, 0x71, 0x19, 0xf4, 0x9b, 0x3b, 0x54, 0x46, 0x03, 0xa6, 0x72, 0xdc, 0x73, 0x40, 0x31, 0x78,
- 0x43, 0xc3, 0x93, 0xf5, 0x89, 0x95, 0xcf, 0xf7, 0xa1, 0xbe, 0xfa, 0x48, 0xcc, 0xde, 0x5b, 0x50,
- 0x88, 0x41, 0x7d, 0xdc, 0xef, 0x5e, 0x35, 0x36, 0x99, 0x9d, 0x1e, 0xdf, 0x2f, 0x63, 0x25, 0xbc,
- 0xa6, 0x59, 0xb6, 0x61, 0x6a, 0x15, 0xa9, 0xb6, 0xa4, 0xdf, 0x36, 0x7c, 0xbb, 0x58, 0x55, 0xd1,
- 0xd4, 0xaa, 0xcd, 0x3c, 0x74, 0x97, 0xf0, 0x1b, 0xff, 0x0e, 0x9c, 0x8b, 0xd4, 0x42, 0x6c, 0x57,
- 0xa1, 0xa7, 0xaa, 0x59, 0x36, 0xc2, 0x1a, 0x8b, 0x83, 0x75, 0x48, 0x9b, 0xe9, 0xf0, 0x14, 0xce,
- 0x32, 0xd3, 0xcb, 0x86, 0x51, 0x43, 0x18, 0xfc, 0x2d, 0x78, 0xc2, 0x77, 0x86, 0x4e, 0x66, 0xa1,
- 0xa7, 0x6e, 0x18, 0x35, 0x74, 0x32, 0x1c, 0xe7, 0xa4, 0xa1, 0x83, 0xb4, 0x99, 0x3c, 0xdf, 0x0f,
- 0xd4, 0x31, 0x26, 0x99, 0xd2, 0xba, 0x5b, 0x1b, 0xfc, 0x1b, 0x90, 0x0f, 0x9c, 0xa2, 0x93, 0x6b,
- 0xd0, 0x5b, 0x67, 0x27, 0xe8, 0xa6, 0x10, 0xeb, 0x86, 0x49, 0xb9, 0xf3, 0x84, 0xa3, 0x33, 0xfd,
- 0xf7, 0x00, 0x3c, 0xc6, 0xac, 0xd2, 0xcf, 0x09, 0x40, 0xf3, 0xce, 0x53, 0x21, 0xce, 0x4c, 0xf4,
- 0x4e, 0xcc, 0x89, 0x99, 0xe5, 0x71, 0x66, 0x9b, 0xf8, 0xf0, 0x97, 0xbf, 0x3e, 0xeb, 0x1a, 0xa5,
- 0xbc, 0x18, 0xb3, 0x8d, 0xfb, 0xea, 0xe5, 0x6b, 0x02, 0x7d, 0x9e, 0x09, 0x7a, 0x29, 0x9b, 0x2b,
- 0x17, 0x99, 0x90, 0x55, 0x1c, 0x81, 0xbd, 0xc8, 0x80, 0x3d, 0x4f, 0x67, 0xd2, 0x81, 0x89, 0x3b,
- 0xc1, 0xa2, 0xd9, 0xa5, 0xbf, 0x12, 0xe8, 0x8f, 0x5a, 0xe9, 0xe8, 0x5c, 0x36, 0x14, 0xe1, 0x91,
- 0x82, 0x7b, 0xa1, 0x0d, 0x4d, 0xa4, 0x72, 0x93, 0x51, 0x99, 0xa7, 0x2f, 0xb5, 0x41, 0x45, 0xf4,
- 0xbd, 0x3b, 0xf4, 0x3f, 0x02, 0x4f, 0x27, 0x6e, 0x48, 0x74, 0x3e, 0x1b, 0xca, 0x84, 0xd9, 0x89,
- 0x5b, 0x38, 0x8a, 0x09, 0x64, 0xbc, 0xc2, 0x18, 0xdf, 0xa2, 0x4b, 0xed, 0x30, 0x6e, 0x4e, 0x44,
- 0x7e, 0xee, 0x3f, 0x12, 0x80, 0xa6, 0xab, 0x94, 0xc2, 0x08, 0x2d, 0x1e, 0x29, 0x85, 0x11, 0x1e,
- 0x6a, 0xf9, 0xb7, 0x19, 0x85, 0x12, 0x5d, 0x3e, 0x62, 0xd2, 0xc4, 0x9d, 0x60, 0xe3, 0xdf, 0xa5,
- 0xff, 0x12, 0xc8, 0x47, 0x44, 0x8f, 0x5e, 0x49, 0x84, 0x18, 0xbf, 0x54, 0x71, 0x73, 0xad, 0x2b,
- 0x22, 0xc9, 0x75, 0x46, 0x52, 0xa5, 0x4a, 0xa7, 0x49, 0x46, 0x26, 0x91, 0xfe, 0x44, 0xa0, 0x3f,
- 0x6a, 0x27, 0x49, 0x29, 0xcb, 0x84, 0x25, 0x2b, 0xa5, 0x2c, 0x93, 0x16, 0x20, 0xfe, 0x1a, 0x23,
- 0x3f, 0x4b, 0x2f, 0xc7, 0x91, 0x4f, 0xcc, 0x62, 0xa3, 0x16, 0x13, 0x87, 0xfc, 0x94, 0x5a, 0xcc,
- 0xb2, 0xc7, 0xa4, 0xd4, 0x62, 0xa6, 0x1d, 0x23, 0xbd, 0x16, 0x3d, 0x66, 0x19, 0xd3, 0x68, 0xd1,
- 0x1f, 0x08, 0x9c, 0x0e, 0x4c, 0xc4, 0x74, 0x2a, 0x11, 0x68, 0xd4, 0xc2, 0xc0, 0x4d, 0xb7, 0xa2,
- 0x82, 0x5c, 0x96, 0x18, 0x97, 0x57, 0xe8, 0x7c, 0x3b, 0x5c, 0xcc, 0x00, 0xe2, 0x3d, 0x02, 0xf9,
- 0x88, 0x29, 0x33, 0xa5, 0x0a, 0xe3, 0x87, 0x66, 0x6e, 0xae, 0x75, 0x45, 0x64, 0xb5, 0xc8, 0x58,
- 0xbd, 0x4c, 0xaf, 0xb7, 0xc3, 0xca, 0xf7, 0x3e, 0x3f, 0x20, 0x40, 0xc3, 0x7e, 0xe8, 0x6c, 0x8b,
- 0xc0, 0x5c, 0x42, 0x57, 0x5a, 0xd6, 0x43, 0x3e, 0x6f, 0x31, 0x3e, 0x2b, 0xf4, 0xf5, 0xa3, 0xf1,
- 0x09, 0x3f, 0xeb, 0xdf, 0x11, 0x38, 0x13, 0x9c, 0x05, 0x69, 0xf2, 0x2d, 0x8a, 0x1c, 0x56, 0xb9,
- 0x99, 0x96, 0x74, 0x90, 0xd4, 0x1c, 0x23, 0x35, 0x4d, 0x9f, 0x8b, 0x23, 0x55, 0xf5, 0xf4, 0xd6,
- 0x34, 0xfd, 0xb6, 0x21, 0xee, 0x38, 0x23, 0xf0, 0x2e, 0xfd, 0x80, 0x40, 0x4f, 0x63, 0xb8, 0xa4,
- 0xe3, 0x89, 0x7e, 0x7d, 0x73, 0x2c, 0x77, 0x21, 0x83, 0x24, 0xe2, 0x1a, 0x65, 0xb8, 0x0a, 0x74,
- 0x38, 0x0e, 0x57, 0x63, 0x96, 0xa5, 0x1f, 0x13, 0xe8, 0x75, 0x26, 0x4f, 0x3a, 0x91, 0x6c, 0xdb,
- 0x3f, 0xec, 0x72, 0x17, 0x33, 0xc9, 0x22, 0x92, 0x31, 0x86, 0x64, 0x84, 0x16, 0x62, 0x91, 0x38,
- 0xa3, 0xef, 0xe2, 0xfd, 0xfd, 0x02, 0xd9, 0xdb, 0x2f, 0x90, 0x3f, 0xf7, 0x0b, 0xe4, 0x93, 0x83,
- 0x42, 0x6e, 0xef, 0xa0, 0x90, 0xfb, 0xed, 0xa0, 0x90, 0x7b, 0x77, 0x52, 0xd5, 0xec, 0xea, 0x46,
- 0x59, 0xa8, 0x18, 0xeb, 0xae, 0x0d, 0xe7, 0xcf, 0x25, 0x4b, 0xbe, 0x23, 0x6e, 0x79, 0x06, 0xed,
- 0xed, 0xba, 0x62, 0x95, 0x7b, 0xd9, 0x3f, 0x88, 0x66, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x4b,
- 0x6e, 0xeb, 0x7f, 0xe4, 0x1a, 0x00, 0x00,
+func (m *QueryTokenizeShareRecordByIdRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareRecordByIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareRecordByIdRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *QueryTokenizeShareRecordByIdRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareRecordByIdRequest.Merge(m, src)
+}
+func (m *QueryTokenizeShareRecordByIdRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareRecordByIdRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareRecordByIdRequest.DiscardUnknown(m)
}
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
+var xxx_messageInfo_QueryTokenizeShareRecordByIdRequest proto.InternalMessageInfo
-// QueryClient is the client API for Query service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type QueryClient interface {
- // Validators queries all validators that match the given status.
- Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error)
- // Validator queries validator info for given validator address.
- Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error)
- // ValidatorDelegations queries delegate info for given validator.
- ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error)
- // ValidatorUnbondingDelegations queries unbonding delegations of a validator.
- ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error)
- // Delegation queries delegate info for given validator delegator pair.
- Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error)
- // UnbondingDelegation queries unbonding info for given validator delegator
- // pair.
- UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error)
- // DelegatorDelegations queries all delegations of a given delegator address.
- DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error)
- // DelegatorUnbondingDelegations queries all unbonding delegations of a given
- // delegator address.
- DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error)
- // Redelegations queries redelegations of given address.
- Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error)
- // DelegatorValidators queries all validators info for given delegator
- // address.
- DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error)
- // DelegatorValidator queries validator info for given delegator validator
- // pair.
- DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error)
- // HistoricalInfo queries the historical info for given height.
- HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error)
- // Pool queries the pool info.
- Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error)
- // Parameters queries the staking parameters.
- Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
+func (m *QueryTokenizeShareRecordByIdRequest) GetId() uint64 {
+ if m != nil {
+ return m.Id
+ }
+ return 0
}
-type queryClient struct {
- cc grpc1.ClientConn
+// QueryTokenizeShareRecordByIdRequest is response type for the
+// Query/QueryTokenizeShareRecordById RPC method.
+type QueryTokenizeShareRecordByIdResponse struct {
+ Record TokenizeShareRecord `protobuf:"bytes,1,opt,name=record,proto3" json:"record"`
}
-func NewQueryClient(cc grpc1.ClientConn) QueryClient {
- return &queryClient{cc}
+func (m *QueryTokenizeShareRecordByIdResponse) Reset() { *m = QueryTokenizeShareRecordByIdResponse{} }
+func (m *QueryTokenizeShareRecordByIdResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareRecordByIdResponse) ProtoMessage() {}
+func (*QueryTokenizeShareRecordByIdResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{29}
}
-
-func (c *queryClient) Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error) {
- out := new(QueryValidatorsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validators", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
+func (m *QueryTokenizeShareRecordByIdResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
}
-
-func (c *queryClient) Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error) {
- out := new(QueryValidatorResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validator", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *QueryTokenizeShareRecordByIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareRecordByIdResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return out, nil
+}
+func (m *QueryTokenizeShareRecordByIdResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareRecordByIdResponse.Merge(m, src)
+}
+func (m *QueryTokenizeShareRecordByIdResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareRecordByIdResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareRecordByIdResponse.DiscardUnknown(m)
}
-func (c *queryClient) ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error) {
- out := new(QueryValidatorDelegationsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorDelegations", in, out, opts...)
- if err != nil {
- return nil, err
+var xxx_messageInfo_QueryTokenizeShareRecordByIdResponse proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareRecordByIdResponse) GetRecord() TokenizeShareRecord {
+ if m != nil {
+ return m.Record
}
- return out, nil
+ return TokenizeShareRecord{}
}
-func (c *queryClient) ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error) {
- out := new(QueryValidatorUnbondingDelegationsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
+// QueryTokenizeShareRecordByDenomRequest is request type for the
+// Query/QueryTokenizeShareRecordByDenom RPC method.
+type QueryTokenizeShareRecordByDenomRequest struct {
+ Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"`
}
-func (c *queryClient) Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error) {
- out := new(QueryDelegationResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Delegation", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *QueryTokenizeShareRecordByDenomRequest) Reset() {
+ *m = QueryTokenizeShareRecordByDenomRequest{}
+}
+func (m *QueryTokenizeShareRecordByDenomRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareRecordByDenomRequest) ProtoMessage() {}
+func (*QueryTokenizeShareRecordByDenomRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{30}
+}
+func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return out, nil
+}
+func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest.Merge(m, src)
+}
+func (m *QueryTokenizeShareRecordByDenomRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareRecordByDenomRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest.DiscardUnknown(m)
}
-func (c *queryClient) UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error) {
- out := new(QueryUnbondingDelegationResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/UnbondingDelegation", in, out, opts...)
- if err != nil {
- return nil, err
+var xxx_messageInfo_QueryTokenizeShareRecordByDenomRequest proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareRecordByDenomRequest) GetDenom() string {
+ if m != nil {
+ return m.Denom
}
- return out, nil
+ return ""
}
-func (c *queryClient) DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error) {
- out := new(QueryDelegatorDelegationsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorDelegations", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
+// QueryTokenizeShareRecordByDenomResponse is response type for the
+// Query/QueryTokenizeShareRecordByDenom RPC method.
+type QueryTokenizeShareRecordByDenomResponse struct {
+ Record TokenizeShareRecord `protobuf:"bytes,1,opt,name=record,proto3" json:"record"`
}
-func (c *queryClient) DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error) {
- out := new(QueryDelegatorUnbondingDelegationsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *QueryTokenizeShareRecordByDenomResponse) Reset() {
+ *m = QueryTokenizeShareRecordByDenomResponse{}
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareRecordByDenomResponse) ProtoMessage() {}
+func (*QueryTokenizeShareRecordByDenomResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{31}
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return out, nil
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse.Merge(m, src)
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse.DiscardUnknown(m)
}
-func (c *queryClient) Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error) {
- out := new(QueryRedelegationsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Redelegations", in, out, opts...)
- if err != nil {
- return nil, err
+var xxx_messageInfo_QueryTokenizeShareRecordByDenomResponse proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareRecordByDenomResponse) GetRecord() TokenizeShareRecord {
+ if m != nil {
+ return m.Record
}
- return out, nil
+ return TokenizeShareRecord{}
}
-func (c *queryClient) DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error) {
- out := new(QueryDelegatorValidatorsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidators", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
+// QueryTokenizeShareRecordsOwnedRequest is request type for the
+// Query/QueryTokenizeShareRecordsOwned RPC method.
+type QueryTokenizeShareRecordsOwnedRequest struct {
+ Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"`
}
-func (c *queryClient) DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) {
- out := new(QueryDelegatorValidatorResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidator", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *QueryTokenizeShareRecordsOwnedRequest) Reset() { *m = QueryTokenizeShareRecordsOwnedRequest{} }
+func (m *QueryTokenizeShareRecordsOwnedRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareRecordsOwnedRequest) ProtoMessage() {}
+func (*QueryTokenizeShareRecordsOwnedRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{32}
+}
+func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return out, nil
+}
+func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest.Merge(m, src)
+}
+func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareRecordsOwnedRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest.DiscardUnknown(m)
}
-func (c *queryClient) HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) {
- out := new(QueryHistoricalInfoResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/HistoricalInfo", in, out, opts...)
- if err != nil {
- return nil, err
+var xxx_messageInfo_QueryTokenizeShareRecordsOwnedRequest proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareRecordsOwnedRequest) GetOwner() string {
+ if m != nil {
+ return m.Owner
}
- return out, nil
+ return ""
}
-func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) {
- out := new(QueryPoolResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Pool", in, out, opts...)
- if err != nil {
- return nil, err
- }
- return out, nil
+// QueryTokenizeShareRecordsOwnedResponse is response type for the
+// Query/QueryTokenizeShareRecordsOwned RPC method.
+type QueryTokenizeShareRecordsOwnedResponse struct {
+ Records []TokenizeShareRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records"`
}
-func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {
- out := new(QueryParamsResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Params", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *QueryTokenizeShareRecordsOwnedResponse) Reset() {
+ *m = QueryTokenizeShareRecordsOwnedResponse{}
+}
+func (m *QueryTokenizeShareRecordsOwnedResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareRecordsOwnedResponse) ProtoMessage() {}
+func (*QueryTokenizeShareRecordsOwnedResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{33}
+}
+func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return out, nil
}
-
-// QueryServer is the server API for Query service.
-type QueryServer interface {
- // Validators queries all validators that match the given status.
- Validators(context.Context, *QueryValidatorsRequest) (*QueryValidatorsResponse, error)
- // Validator queries validator info for given validator address.
- Validator(context.Context, *QueryValidatorRequest) (*QueryValidatorResponse, error)
- // ValidatorDelegations queries delegate info for given validator.
- ValidatorDelegations(context.Context, *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error)
- // ValidatorUnbondingDelegations queries unbonding delegations of a validator.
- ValidatorUnbondingDelegations(context.Context, *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error)
- // Delegation queries delegate info for given validator delegator pair.
- Delegation(context.Context, *QueryDelegationRequest) (*QueryDelegationResponse, error)
- // UnbondingDelegation queries unbonding info for given validator delegator
- // pair.
- UnbondingDelegation(context.Context, *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error)
- // DelegatorDelegations queries all delegations of a given delegator address.
- DelegatorDelegations(context.Context, *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error)
- // DelegatorUnbondingDelegations queries all unbonding delegations of a given
- // delegator address.
- DelegatorUnbondingDelegations(context.Context, *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error)
- // Redelegations queries redelegations of given address.
- Redelegations(context.Context, *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error)
- // DelegatorValidators queries all validators info for given delegator
- // address.
- DelegatorValidators(context.Context, *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error)
- // DelegatorValidator queries validator info for given delegator validator
- // pair.
- DelegatorValidator(context.Context, *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error)
- // HistoricalInfo queries the historical info for given height.
- HistoricalInfo(context.Context, *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error)
- // Pool queries the pool info.
- Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error)
- // Parameters queries the staking parameters.
- Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
+func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse.Merge(m, src)
+}
+func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareRecordsOwnedResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse.DiscardUnknown(m)
}
-// UnimplementedQueryServer can be embedded to have forward compatible implementations.
-type UnimplementedQueryServer struct {
+var xxx_messageInfo_QueryTokenizeShareRecordsOwnedResponse proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareRecordsOwnedResponse) GetRecords() []TokenizeShareRecord {
+ if m != nil {
+ return m.Records
+ }
+ return nil
}
-func (*UnimplementedQueryServer) Validators(ctx context.Context, req *QueryValidatorsRequest) (*QueryValidatorsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Validators not implemented")
+// QueryAllTokenizeShareRecordsRequest is request type for the
+// Query/QueryAllTokenizeShareRecords RPC method.
+type QueryAllTokenizeShareRecordsRequest struct {
}
-func (*UnimplementedQueryServer) Validator(ctx context.Context, req *QueryValidatorRequest) (*QueryValidatorResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Validator not implemented")
+
+func (m *QueryAllTokenizeShareRecordsRequest) Reset() { *m = QueryAllTokenizeShareRecordsRequest{} }
+func (m *QueryAllTokenizeShareRecordsRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryAllTokenizeShareRecordsRequest) ProtoMessage() {}
+func (*QueryAllTokenizeShareRecordsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{34}
}
-func (*UnimplementedQueryServer) ValidatorDelegations(ctx context.Context, req *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method ValidatorDelegations not implemented")
+func (m *QueryAllTokenizeShareRecordsRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
}
-func (*UnimplementedQueryServer) ValidatorUnbondingDelegations(ctx context.Context, req *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method ValidatorUnbondingDelegations not implemented")
+func (m *QueryAllTokenizeShareRecordsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryAllTokenizeShareRecordsRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
}
-func (*UnimplementedQueryServer) Delegation(ctx context.Context, req *QueryDelegationRequest) (*QueryDelegationResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Delegation not implemented")
+func (m *QueryAllTokenizeShareRecordsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryAllTokenizeShareRecordsRequest.Merge(m, src)
}
-func (*UnimplementedQueryServer) UnbondingDelegation(ctx context.Context, req *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UnbondingDelegation not implemented")
+func (m *QueryAllTokenizeShareRecordsRequest) XXX_Size() int {
+ return m.Size()
}
-func (*UnimplementedQueryServer) DelegatorDelegations(ctx context.Context, req *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DelegatorDelegations not implemented")
+func (m *QueryAllTokenizeShareRecordsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryAllTokenizeShareRecordsRequest.DiscardUnknown(m)
}
-func (*UnimplementedQueryServer) DelegatorUnbondingDelegations(ctx context.Context, req *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DelegatorUnbondingDelegations not implemented")
+
+var xxx_messageInfo_QueryAllTokenizeShareRecordsRequest proto.InternalMessageInfo
+
+// QueryAllTokenizeShareRecordsResponse is response type for the
+// Query/QueryAllTokenizeShareRecords RPC method.
+type QueryAllTokenizeShareRecordsResponse struct {
+ Records []TokenizeShareRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records"`
}
-func (*UnimplementedQueryServer) Redelegations(ctx context.Context, req *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Redelegations not implemented")
+
+func (m *QueryAllTokenizeShareRecordsResponse) Reset() { *m = QueryAllTokenizeShareRecordsResponse{} }
+func (m *QueryAllTokenizeShareRecordsResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryAllTokenizeShareRecordsResponse) ProtoMessage() {}
+func (*QueryAllTokenizeShareRecordsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{35}
}
-func (*UnimplementedQueryServer) DelegatorValidators(ctx context.Context, req *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidators not implemented")
+func (m *QueryAllTokenizeShareRecordsResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
}
-func (*UnimplementedQueryServer) DelegatorValidator(ctx context.Context, req *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidator not implemented")
+func (m *QueryAllTokenizeShareRecordsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryAllTokenizeShareRecordsResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
}
-func (*UnimplementedQueryServer) HistoricalInfo(ctx context.Context, req *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method HistoricalInfo not implemented")
+func (m *QueryAllTokenizeShareRecordsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryAllTokenizeShareRecordsResponse.Merge(m, src)
}
-func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented")
+func (m *QueryAllTokenizeShareRecordsResponse) XXX_Size() int {
+ return m.Size()
}
-func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
+func (m *QueryAllTokenizeShareRecordsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryAllTokenizeShareRecordsResponse.DiscardUnknown(m)
}
-func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
- s.RegisterService(&_Query_serviceDesc, srv)
-}
+var xxx_messageInfo_QueryAllTokenizeShareRecordsResponse proto.InternalMessageInfo
-func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryValidatorsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).Validators(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/Validators",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).Validators(ctx, req.(*QueryValidatorsRequest))
+func (m *QueryAllTokenizeShareRecordsResponse) GetRecords() []TokenizeShareRecord {
+ if m != nil {
+ return m.Records
}
- return interceptor(ctx, in, info, handler)
+ return nil
}
-func _Query_Validator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryValidatorRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).Validator(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/Validator",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).Validator(ctx, req.(*QueryValidatorRequest))
- }
- return interceptor(ctx, in, info, handler)
+// QueryLastTokenizeShareRecordIdRequest is request type for the
+// Query/QueryLastTokenizeShareRecordId RPC method.
+type QueryLastTokenizeShareRecordIdRequest struct {
}
-func _Query_ValidatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryValidatorDelegationsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).ValidatorDelegations(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorDelegations",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).ValidatorDelegations(ctx, req.(*QueryValidatorDelegationsRequest))
+func (m *QueryLastTokenizeShareRecordIdRequest) Reset() { *m = QueryLastTokenizeShareRecordIdRequest{} }
+func (m *QueryLastTokenizeShareRecordIdRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryLastTokenizeShareRecordIdRequest) ProtoMessage() {}
+func (*QueryLastTokenizeShareRecordIdRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{36}
+}
+func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
+}
+func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest.Merge(m, src)
+}
+func (m *QueryLastTokenizeShareRecordIdRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryLastTokenizeShareRecordIdRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest.DiscardUnknown(m)
}
-func _Query_ValidatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryValidatorUnbondingDelegationsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, req.(*QueryValidatorUnbondingDelegationsRequest))
- }
- return interceptor(ctx, in, info, handler)
+var xxx_messageInfo_QueryLastTokenizeShareRecordIdRequest proto.InternalMessageInfo
+
+// QueryLastTokenizeShareRecordIdResponse is response type for the
+// Query/QueryLastTokenizeShareRecordId RPC method.
+type QueryLastTokenizeShareRecordIdResponse struct {
+ Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
}
-func _Query_Delegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryDelegationRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).Delegation(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/Delegation",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).Delegation(ctx, req.(*QueryDelegationRequest))
+func (m *QueryLastTokenizeShareRecordIdResponse) Reset() {
+ *m = QueryLastTokenizeShareRecordIdResponse{}
+}
+func (m *QueryLastTokenizeShareRecordIdResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryLastTokenizeShareRecordIdResponse) ProtoMessage() {}
+func (*QueryLastTokenizeShareRecordIdResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{37}
+}
+func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
+}
+func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse.Merge(m, src)
+}
+func (m *QueryLastTokenizeShareRecordIdResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryLastTokenizeShareRecordIdResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse.DiscardUnknown(m)
}
-func _Query_UnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryUnbondingDelegationRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).UnbondingDelegation(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/UnbondingDelegation",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).UnbondingDelegation(ctx, req.(*QueryUnbondingDelegationRequest))
+var xxx_messageInfo_QueryLastTokenizeShareRecordIdResponse proto.InternalMessageInfo
+
+func (m *QueryLastTokenizeShareRecordIdResponse) GetId() uint64 {
+ if m != nil {
+ return m.Id
}
- return interceptor(ctx, in, info, handler)
+ return 0
}
-func _Query_DelegatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryDelegatorDelegationsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).DelegatorDelegations(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorDelegations",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).DelegatorDelegations(ctx, req.(*QueryDelegatorDelegationsRequest))
- }
- return interceptor(ctx, in, info, handler)
+// QueryTotalTokenizeSharedAssetsRequest is request type for the
+// Query/QueryTotalTokenizeSharedAssets RPC method.
+type QueryTotalTokenizeSharedAssetsRequest struct {
}
-func _Query_DelegatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryDelegatorUnbondingDelegationsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, req.(*QueryDelegatorUnbondingDelegationsRequest))
- }
- return interceptor(ctx, in, info, handler)
+func (m *QueryTotalTokenizeSharedAssetsRequest) Reset() { *m = QueryTotalTokenizeSharedAssetsRequest{} }
+func (m *QueryTotalTokenizeSharedAssetsRequest) String() string { return proto.CompactTextString(m) }
+func (*QueryTotalTokenizeSharedAssetsRequest) ProtoMessage() {}
+func (*QueryTotalTokenizeSharedAssetsRequest) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{38}
}
-
-func _Query_Redelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryRedelegationsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).Redelegations(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/Redelegations",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).Redelegations(ctx, req.(*QueryRedelegationsRequest))
+func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
+}
+func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest.Merge(m, src)
+}
+func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTotalTokenizeSharedAssetsRequest) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest.DiscardUnknown(m)
}
-func _Query_DelegatorValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryDelegatorValidatorsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).DelegatorValidators(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidators",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).DelegatorValidators(ctx, req.(*QueryDelegatorValidatorsRequest))
- }
- return interceptor(ctx, in, info, handler)
+var xxx_messageInfo_QueryTotalTokenizeSharedAssetsRequest proto.InternalMessageInfo
+
+// QueryTotalTokenizeSharedAssetsResponse is response type for the
+// Query/QueryTotalTokenizeSharedAssets RPC method.
+type QueryTotalTokenizeSharedAssetsResponse struct {
+ Value types.Coin `protobuf:"bytes,1,opt,name=value,proto3" json:"value"`
}
-func _Query_DelegatorValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryDelegatorValidatorRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).DelegatorValidator(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidator",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).DelegatorValidator(ctx, req.(*QueryDelegatorValidatorRequest))
+func (m *QueryTotalTokenizeSharedAssetsResponse) Reset() {
+ *m = QueryTotalTokenizeSharedAssetsResponse{}
+}
+func (m *QueryTotalTokenizeSharedAssetsResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryTotalTokenizeSharedAssetsResponse) ProtoMessage() {}
+func (*QueryTotalTokenizeSharedAssetsResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{39}
+}
+func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
+}
+func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse.Merge(m, src)
+}
+func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTotalTokenizeSharedAssetsResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse.DiscardUnknown(m)
}
-func _Query_HistoricalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryHistoricalInfoRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).HistoricalInfo(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/HistoricalInfo",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).HistoricalInfo(ctx, req.(*QueryHistoricalInfoRequest))
+var xxx_messageInfo_QueryTotalTokenizeSharedAssetsResponse proto.InternalMessageInfo
+
+func (m *QueryTotalTokenizeSharedAssetsResponse) GetValue() types.Coin {
+ if m != nil {
+ return m.Value
}
- return interceptor(ctx, in, info, handler)
+ return types.Coin{}
}
-func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryPoolRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).Pool(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/Pool",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest))
- }
- return interceptor(ctx, in, info, handler)
+// QueryQueryTotalLiquidStakedRequest is request type for the
+// Query/QueryQueryTotalLiquidStaked RPC method.
+type QueryTotalLiquidStaked struct {
}
-func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(QueryParamsRequest)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(QueryServer).Params(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Query/Params",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))
+func (m *QueryTotalLiquidStaked) Reset() { *m = QueryTotalLiquidStaked{} }
+func (m *QueryTotalLiquidStaked) String() string { return proto.CompactTextString(m) }
+func (*QueryTotalLiquidStaked) ProtoMessage() {}
+func (*QueryTotalLiquidStaked) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{40}
+}
+func (m *QueryTotalLiquidStaked) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTotalLiquidStaked) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTotalLiquidStaked.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
+}
+func (m *QueryTotalLiquidStaked) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTotalLiquidStaked.Merge(m, src)
+}
+func (m *QueryTotalLiquidStaked) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTotalLiquidStaked) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTotalLiquidStaked.DiscardUnknown(m)
}
-var _Query_serviceDesc = grpc.ServiceDesc{
- ServiceName: "cosmos.staking.v1beta1.Query",
- HandlerType: (*QueryServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "Validators",
- Handler: _Query_Validators_Handler,
- },
- {
- MethodName: "Validator",
- Handler: _Query_Validator_Handler,
- },
- {
- MethodName: "ValidatorDelegations",
- Handler: _Query_ValidatorDelegations_Handler,
- },
- {
- MethodName: "ValidatorUnbondingDelegations",
- Handler: _Query_ValidatorUnbondingDelegations_Handler,
- },
- {
- MethodName: "Delegation",
- Handler: _Query_Delegation_Handler,
- },
- {
- MethodName: "UnbondingDelegation",
- Handler: _Query_UnbondingDelegation_Handler,
- },
- {
- MethodName: "DelegatorDelegations",
- Handler: _Query_DelegatorDelegations_Handler,
- },
- {
- MethodName: "DelegatorUnbondingDelegations",
- Handler: _Query_DelegatorUnbondingDelegations_Handler,
- },
- {
- MethodName: "Redelegations",
- Handler: _Query_Redelegations_Handler,
- },
- {
- MethodName: "DelegatorValidators",
- Handler: _Query_DelegatorValidators_Handler,
- },
- {
- MethodName: "DelegatorValidator",
- Handler: _Query_DelegatorValidator_Handler,
- },
- {
- MethodName: "HistoricalInfo",
- Handler: _Query_HistoricalInfo_Handler,
- },
- {
- MethodName: "Pool",
- Handler: _Query_Pool_Handler,
- },
- {
- MethodName: "Params",
- Handler: _Query_Params_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "cosmos/staking/v1beta1/query.proto",
+var xxx_messageInfo_QueryTotalLiquidStaked proto.InternalMessageInfo
+
+// QueryQueryTotalLiquidStakedResponse is response type for the
+// Query/QueryQueryTotalLiquidStaked RPC method.
+type QueryTotalLiquidStakedResponse struct {
+ Tokens github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,1,opt,name=tokens,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"tokens" yaml:"tokens"`
}
-func (m *QueryValidatorsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+func (m *QueryTotalLiquidStakedResponse) Reset() { *m = QueryTotalLiquidStakedResponse{} }
+func (m *QueryTotalLiquidStakedResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryTotalLiquidStakedResponse) ProtoMessage() {}
+func (*QueryTotalLiquidStakedResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{41}
+}
+func (m *QueryTotalLiquidStakedResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTotalLiquidStakedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTotalLiquidStakedResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return dAtA[:n], nil
+}
+func (m *QueryTotalLiquidStakedResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTotalLiquidStakedResponse.Merge(m, src)
+}
+func (m *QueryTotalLiquidStakedResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTotalLiquidStakedResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTotalLiquidStakedResponse.DiscardUnknown(m)
}
-func (m *QueryValidatorsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+var xxx_messageInfo_QueryTotalLiquidStakedResponse proto.InternalMessageInfo
+
+// QueryTokenizeShareLockInfo queries the tokenize share lock information
+// associated with given account
+type QueryTokenizeShareLockInfo struct {
+ Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"`
}
-func (m *QueryValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
+func (m *QueryTokenizeShareLockInfo) Reset() { *m = QueryTokenizeShareLockInfo{} }
+func (m *QueryTokenizeShareLockInfo) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareLockInfo) ProtoMessage() {}
+func (*QueryTokenizeShareLockInfo) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{42}
+}
+func (m *QueryTokenizeShareLockInfo) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareLockInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareLockInfo.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
}
- i--
- dAtA[i] = 0x12
- }
- if len(m.Status) > 0 {
- i -= len(m.Status)
- copy(dAtA[i:], m.Status)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.Status)))
- i--
- dAtA[i] = 0xa
+ return b[:n], nil
}
- return len(dAtA) - i, nil
+}
+func (m *QueryTokenizeShareLockInfo) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareLockInfo.Merge(m, src)
+}
+func (m *QueryTokenizeShareLockInfo) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareLockInfo) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareLockInfo.DiscardUnknown(m)
}
-func (m *QueryValidatorsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+var xxx_messageInfo_QueryTokenizeShareLockInfo proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareLockInfo) GetAddress() string {
+ if m != nil {
+ return m.Address
}
- return dAtA[:n], nil
+ return ""
}
-func (m *QueryValidatorsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+// QueryTokenizeShareLockInfoResponse is the response from the
+// QueryTokenizeShareLockInfo query
+type QueryTokenizeShareLockInfoResponse struct {
+ Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+ ExpirationTime string `protobuf:"bytes,2,opt,name=expiration_time,json=expirationTime,proto3" json:"expiration_time,omitempty"`
}
-func (m *QueryValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
+func (m *QueryTokenizeShareLockInfoResponse) Reset() { *m = QueryTokenizeShareLockInfoResponse{} }
+func (m *QueryTokenizeShareLockInfoResponse) String() string { return proto.CompactTextString(m) }
+func (*QueryTokenizeShareLockInfoResponse) ProtoMessage() {}
+func (*QueryTokenizeShareLockInfoResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_f270127f442bbcd8, []int{43}
+}
+func (m *QueryTokenizeShareLockInfoResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *QueryTokenizeShareLockInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_QueryTokenizeShareLockInfoResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
}
- i--
- dAtA[i] = 0x12
+ return b[:n], nil
}
- if len(m.Validators) > 0 {
- for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+}
+func (m *QueryTokenizeShareLockInfoResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_QueryTokenizeShareLockInfoResponse.Merge(m, src)
+}
+func (m *QueryTokenizeShareLockInfoResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *QueryTokenizeShareLockInfoResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_QueryTokenizeShareLockInfoResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_QueryTokenizeShareLockInfoResponse proto.InternalMessageInfo
+
+func (m *QueryTokenizeShareLockInfoResponse) GetStatus() string {
+ if m != nil {
+ return m.Status
}
- return len(dAtA) - i, nil
+ return ""
}
-func (m *QueryValidatorRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+func (m *QueryTokenizeShareLockInfoResponse) GetExpirationTime() string {
+ if m != nil {
+ return m.ExpirationTime
}
- return dAtA[:n], nil
+ return ""
}
-func (m *QueryValidatorRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func init() {
+ proto.RegisterType((*QueryValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorsRequest")
+ proto.RegisterType((*QueryValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorsResponse")
+ proto.RegisterType((*QueryValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorRequest")
+ proto.RegisterType((*QueryValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorResponse")
+ proto.RegisterType((*QueryValidatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsRequest")
+ proto.RegisterType((*QueryValidatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorDelegationsResponse")
+ proto.RegisterType((*QueryValidatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest")
+ proto.RegisterType((*QueryValidatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse")
+ proto.RegisterType((*QueryDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryDelegationRequest")
+ proto.RegisterType((*QueryDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryDelegationResponse")
+ proto.RegisterType((*QueryUnbondingDelegationRequest)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationRequest")
+ proto.RegisterType((*QueryUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.QueryUnbondingDelegationResponse")
+ proto.RegisterType((*QueryDelegatorDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest")
+ proto.RegisterType((*QueryDelegatorDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse")
+ proto.RegisterType((*QueryDelegatorUnbondingDelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest")
+ proto.RegisterType((*QueryDelegatorUnbondingDelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse")
+ proto.RegisterType((*QueryRedelegationsRequest)(nil), "cosmos.staking.v1beta1.QueryRedelegationsRequest")
+ proto.RegisterType((*QueryRedelegationsResponse)(nil), "cosmos.staking.v1beta1.QueryRedelegationsResponse")
+ proto.RegisterType((*QueryDelegatorValidatorsRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest")
+ proto.RegisterType((*QueryDelegatorValidatorsResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse")
+ proto.RegisterType((*QueryDelegatorValidatorRequest)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorRequest")
+ proto.RegisterType((*QueryDelegatorValidatorResponse)(nil), "cosmos.staking.v1beta1.QueryDelegatorValidatorResponse")
+ proto.RegisterType((*QueryHistoricalInfoRequest)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoRequest")
+ proto.RegisterType((*QueryHistoricalInfoResponse)(nil), "cosmos.staking.v1beta1.QueryHistoricalInfoResponse")
+ proto.RegisterType((*QueryPoolRequest)(nil), "cosmos.staking.v1beta1.QueryPoolRequest")
+ proto.RegisterType((*QueryPoolResponse)(nil), "cosmos.staking.v1beta1.QueryPoolResponse")
+ proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.staking.v1beta1.QueryParamsRequest")
+ proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.staking.v1beta1.QueryParamsResponse")
+ proto.RegisterType((*QueryTokenizeShareRecordByIdRequest)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdRequest")
+ proto.RegisterType((*QueryTokenizeShareRecordByIdResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByIdResponse")
+ proto.RegisterType((*QueryTokenizeShareRecordByDenomRequest)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomRequest")
+ proto.RegisterType((*QueryTokenizeShareRecordByDenomResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordByDenomResponse")
+ proto.RegisterType((*QueryTokenizeShareRecordsOwnedRequest)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedRequest")
+ proto.RegisterType((*QueryTokenizeShareRecordsOwnedResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareRecordsOwnedResponse")
+ proto.RegisterType((*QueryAllTokenizeShareRecordsRequest)(nil), "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsRequest")
+ proto.RegisterType((*QueryAllTokenizeShareRecordsResponse)(nil), "cosmos.staking.v1beta1.QueryAllTokenizeShareRecordsResponse")
+ proto.RegisterType((*QueryLastTokenizeShareRecordIdRequest)(nil), "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdRequest")
+ proto.RegisterType((*QueryLastTokenizeShareRecordIdResponse)(nil), "cosmos.staking.v1beta1.QueryLastTokenizeShareRecordIdResponse")
+ proto.RegisterType((*QueryTotalTokenizeSharedAssetsRequest)(nil), "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsRequest")
+ proto.RegisterType((*QueryTotalTokenizeSharedAssetsResponse)(nil), "cosmos.staking.v1beta1.QueryTotalTokenizeSharedAssetsResponse")
+ proto.RegisterType((*QueryTotalLiquidStaked)(nil), "cosmos.staking.v1beta1.QueryTotalLiquidStaked")
+ proto.RegisterType((*QueryTotalLiquidStakedResponse)(nil), "cosmos.staking.v1beta1.QueryTotalLiquidStakedResponse")
+ proto.RegisterType((*QueryTokenizeShareLockInfo)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareLockInfo")
+ proto.RegisterType((*QueryTokenizeShareLockInfoResponse)(nil), "cosmos.staking.v1beta1.QueryTokenizeShareLockInfoResponse")
}
-func (m *QueryValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if len(m.ValidatorAddr) > 0 {
- i -= len(m.ValidatorAddr)
- copy(dAtA[i:], m.ValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
+func init() {
+ proto.RegisterFile("cosmos/staking/v1beta1/query.proto", fileDescriptor_f270127f442bbcd8)
}
-func (m *QueryValidatorResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
+var fileDescriptor_f270127f442bbcd8 = []byte{
+ // 1793 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xcd, 0x6f, 0xd4, 0xd6,
+ 0x16, 0x9f, 0x1b, 0x42, 0x78, 0x1c, 0x44, 0x1e, 0xdc, 0x84, 0x10, 0x0c, 0x6f, 0x26, 0xdc, 0x17,
+ 0x92, 0x10, 0xc2, 0xcc, 0x23, 0x40, 0xc8, 0x0b, 0x10, 0x5e, 0x02, 0x0f, 0x1a, 0x81, 0x04, 0x0c,
+ 0x14, 0xfa, 0xb1, 0x88, 0x9c, 0xb1, 0x99, 0x58, 0x99, 0xb1, 0x27, 0xb6, 0x27, 0x24, 0xa0, 0x2c,
+ 0xda, 0x55, 0xd9, 0xb5, 0xaa, 0x54, 0xa9, 0x1f, 0x52, 0x59, 0x54, 0xad, 0xd4, 0x2e, 0xdb, 0x7f,
+ 0xa0, 0xab, 0xd2, 0x5d, 0xaa, 0x76, 0xd1, 0x76, 0x91, 0x56, 0xd0, 0x05, 0xcb, 0xaa, 0x9b, 0xaa,
+ 0xbb, 0xca, 0xf6, 0xb1, 0xc7, 0x8e, 0x7d, 0xed, 0x99, 0x61, 0x22, 0xc4, 0x8a, 0xf8, 0xce, 0xf9,
+ 0xf8, 0xfd, 0xce, 0xb9, 0xe7, 0xde, 0x7b, 0x8e, 0x00, 0x56, 0xd0, 0x8c, 0xb2, 0x66, 0xe4, 0x0c,
+ 0x53, 0x5c, 0x50, 0xd4, 0x62, 0x6e, 0xe9, 0xd8, 0x9c, 0x6c, 0x8a, 0xc7, 0x72, 0x8b, 0x55, 0x59,
+ 0x5f, 0xc9, 0x56, 0x74, 0xcd, 0xd4, 0x68, 0x8f, 0x23, 0x93, 0x45, 0x99, 0x2c, 0xca, 0x08, 0xc3,
+ 0xa8, 0x3b, 0x27, 0x1a, 0xb2, 0xa3, 0xe0, 0xa9, 0x57, 0xc4, 0xa2, 0xa2, 0x8a, 0xa6, 0xa2, 0xa9,
+ 0x8e, 0x0d, 0xa1, 0xbb, 0xa8, 0x15, 0x35, 0xfb, 0xcf, 0x9c, 0xf5, 0x17, 0xae, 0x1e, 0x28, 0x6a,
+ 0x5a, 0xb1, 0x24, 0xe7, 0xc4, 0x8a, 0x92, 0x13, 0x55, 0x55, 0x33, 0x6d, 0x15, 0x03, 0x7f, 0xed,
+ 0xe7, 0x60, 0x73, 0x71, 0x38, 0x52, 0x69, 0x3f, 0x0a, 0x57, 0xa4, 0xa0, 0x29, 0xe8, 0x99, 0x2d,
+ 0x43, 0xcf, 0x75, 0x0b, 0xdb, 0x2d, 0xb1, 0xa4, 0x48, 0xa2, 0xa9, 0xe9, 0x46, 0x5e, 0x5e, 0xac,
+ 0xca, 0x86, 0x49, 0x7b, 0xa0, 0xc3, 0x30, 0x45, 0xb3, 0x6a, 0xf4, 0x92, 0x3e, 0x32, 0xb4, 0x3d,
+ 0x8f, 0x5f, 0xf4, 0x22, 0x40, 0x0d, 0x7f, 0x6f, 0x5b, 0x1f, 0x19, 0xda, 0x31, 0x3a, 0x90, 0xc5,
+ 0x20, 0x58, 0x6e, 0xb2, 0x4e, 0x74, 0xd0, 0x59, 0xf6, 0x9a, 0x58, 0x94, 0xd1, 0x66, 0xde, 0xa7,
+ 0xc9, 0xbe, 0x20, 0xb0, 0x37, 0xe4, 0xda, 0xa8, 0x68, 0xaa, 0x21, 0xd3, 0x4b, 0x00, 0x4b, 0xde,
+ 0x6a, 0x2f, 0xe9, 0xdb, 0x32, 0xb4, 0x63, 0xf4, 0x60, 0x36, 0x3a, 0xd0, 0x59, 0x4f, 0x7f, 0xba,
+ 0xfd, 0xd1, 0x7a, 0x26, 0x95, 0xf7, 0xa9, 0x5a, 0x86, 0x42, 0x60, 0x07, 0x13, 0xc1, 0x3a, 0x28,
+ 0x02, 0x68, 0x27, 0x61, 0x4f, 0x10, 0xac, 0x1b, 0xa6, 0x43, 0xd0, 0xe9, 0xf9, 0x9b, 0x15, 0x25,
+ 0x49, 0xc7, 0x70, 0xed, 0xf4, 0x56, 0xa7, 0x24, 0x49, 0x67, 0xb3, 0x1b, 0xe3, 0xec, 0x71, 0xfd,
+ 0x3f, 0x6c, 0xf7, 0x44, 0x6d, 0xdd, 0x06, 0xa8, 0xd6, 0x34, 0xd9, 0x3b, 0x04, 0xfa, 0x82, 0x1e,
+ 0x2e, 0xc8, 0x25, 0xb9, 0xe8, 0x6c, 0x99, 0xc6, 0xc0, 0xb6, 0x2c, 0xc5, 0x4f, 0x09, 0x1c, 0x8c,
+ 0xc1, 0x84, 0x01, 0xb8, 0x07, 0xdd, 0x92, 0xb7, 0x3c, 0xab, 0xe3, 0xb2, 0x9b, 0xf6, 0x61, 0x5e,
+ 0x2c, 0x6a, 0xa6, 0x5c, 0x4b, 0xd3, 0xfb, 0xad, 0xa0, 0x7c, 0xfe, 0x4b, 0xa6, 0x2b, 0xfc, 0x9b,
+ 0x91, 0xef, 0x92, 0xc2, 0x8b, 0xad, 0xdb, 0x1f, 0x1f, 0x10, 0x38, 0x1c, 0xa4, 0xfa, 0xb2, 0x3a,
+ 0xa7, 0xa9, 0x92, 0xa2, 0x16, 0x9f, 0x7f, 0x1e, 0x7e, 0x22, 0x30, 0x5c, 0x0f, 0x38, 0x4c, 0xc8,
+ 0x1c, 0x74, 0x55, 0xdd, 0xdf, 0x43, 0xf9, 0x38, 0xc2, 0xcb, 0x47, 0x84, 0x49, 0xdc, 0xa5, 0xd4,
+ 0xb3, 0xb6, 0x09, 0x81, 0xaf, 0x60, 0x61, 0xf9, 0x53, 0xee, 0x05, 0x19, 0x53, 0xbe, 0x21, 0xc8,
+ 0xde, 0xaa, 0x1d, 0xe4, 0x70, 0x2e, 0xda, 0x22, 0x72, 0x31, 0xf1, 0x8f, 0xb7, 0x1e, 0x66, 0x52,
+ 0x4f, 0x1f, 0x66, 0x52, 0x6c, 0x09, 0xcf, 0xad, 0xf0, 0x26, 0xa3, 0xaf, 0x43, 0x57, 0xc4, 0x56,
+ 0xc6, 0xaa, 0x6e, 0x60, 0x27, 0xe7, 0x69, 0x78, 0xb3, 0xb2, 0x15, 0xc8, 0xd8, 0x7e, 0x23, 0x02,
+ 0xbd, 0xd9, 0x94, 0xcb, 0x78, 0xb6, 0x44, 0xba, 0x46, 0xee, 0x33, 0xd0, 0xe1, 0xe4, 0x19, 0xe9,
+ 0x36, 0xb1, 0x51, 0xd0, 0x00, 0xfb, 0xd0, 0x3d, 0xcb, 0x2e, 0xb8, 0xb0, 0xa3, 0x6b, 0xa8, 0x1e,
+ 0xae, 0x2d, 0xaa, 0x21, 0x5f, 0x30, 0xbe, 0x73, 0x4f, 0xb5, 0x68, 0x74, 0x18, 0x8e, 0x42, 0xcb,
+ 0x4e, 0x35, 0x27, 0x36, 0x9b, 0x7b, 0x7c, 0x7d, 0xe2, 0x1e, 0x5f, 0x1e, 0xa7, 0x84, 0xe3, 0xeb,
+ 0xf9, 0x84, 0xde, 0x3b, 0xc8, 0x12, 0x60, 0xbe, 0x88, 0x07, 0xd9, 0xef, 0x04, 0xf6, 0xd9, 0xdc,
+ 0xf2, 0xb2, 0xd4, 0x74, 0xc8, 0x47, 0x80, 0x1a, 0x7a, 0x61, 0x36, 0xb2, 0xba, 0x77, 0x19, 0x7a,
+ 0xe1, 0x56, 0xe0, 0x7e, 0x19, 0x01, 0x2a, 0x19, 0xe6, 0x46, 0xe9, 0x2d, 0x8e, 0xb4, 0x64, 0x98,
+ 0xb7, 0x62, 0x6e, 0xa3, 0xf6, 0x16, 0xa4, 0x73, 0x8d, 0x80, 0x10, 0x45, 0x19, 0xd3, 0xa7, 0x40,
+ 0x8f, 0x2e, 0xc7, 0x14, 0xd1, 0x08, 0x2f, 0x83, 0x7e, 0x73, 0x1b, 0xca, 0x68, 0x8f, 0x2e, 0x6f,
+ 0xf6, 0x3b, 0x20, 0x13, 0xdc, 0xa1, 0xe1, 0x97, 0xf5, 0x73, 0x2b, 0x9f, 0xaf, 0x42, 0xe7, 0xea,
+ 0x0b, 0xf1, 0xf6, 0x5e, 0x86, 0x34, 0x07, 0xf5, 0x66, 0xdf, 0x7b, 0xf3, 0xdc, 0x64, 0xb6, 0xfa,
+ 0xf9, 0x7e, 0x02, 0x2b, 0xe1, 0x25, 0xc5, 0x30, 0x35, 0x5d, 0x29, 0x88, 0xa5, 0x19, 0xf5, 0x8e,
+ 0xe6, 0xeb, 0xc5, 0xe6, 0x65, 0xa5, 0x38, 0x6f, 0xda, 0x1e, 0xb6, 0xe4, 0xf1, 0x8b, 0xbd, 0x0a,
+ 0xfb, 0x23, 0xb5, 0x10, 0xdb, 0x04, 0xb4, 0xcf, 0x2b, 0x86, 0x89, 0xb0, 0x06, 0x78, 0xb0, 0x36,
+ 0x68, 0xdb, 0x3a, 0x8c, 0xc2, 0x2e, 0xdb, 0xf4, 0x35, 0x4d, 0x2b, 0x21, 0x0c, 0x76, 0x19, 0x76,
+ 0xfb, 0xd6, 0xd0, 0xc9, 0x18, 0xb4, 0x57, 0x34, 0xad, 0x84, 0x4e, 0x0e, 0xf0, 0x9c, 0x58, 0x3a,
+ 0x48, 0xdb, 0x96, 0x67, 0xdd, 0x40, 0x1d, 0x63, 0xa2, 0x2e, 0x96, 0xdd, 0xda, 0x60, 0x37, 0xa0,
+ 0x2b, 0xb0, 0x8a, 0x4e, 0xce, 0x40, 0x47, 0xc5, 0x5e, 0x41, 0x37, 0x69, 0xae, 0x1b, 0x5b, 0xca,
+ 0x7d, 0x4f, 0x38, 0x3a, 0xec, 0x24, 0xfc, 0xdb, 0x36, 0x7a, 0x53, 0x5b, 0x90, 0x55, 0xe5, 0x9e,
+ 0x7c, 0x63, 0x5e, 0xd4, 0xe5, 0xbc, 0x5c, 0xd0, 0x74, 0x69, 0x7a, 0x65, 0x46, 0x72, 0xa3, 0xdc,
+ 0x09, 0x6d, 0x8a, 0xf3, 0x7a, 0x69, 0xcf, 0xb7, 0x29, 0x12, 0x5b, 0x84, 0xfe, 0x78, 0xb5, 0xda,
+ 0xcb, 0x47, 0xb7, 0x57, 0x93, 0x5e, 0x3e, 0x51, 0x86, 0x10, 0xa9, 0x63, 0x80, 0x4d, 0xc2, 0x00,
+ 0xdf, 0xe5, 0x05, 0x59, 0xd5, 0xca, 0x2e, 0xd8, 0x6e, 0xd8, 0x2a, 0x59, 0xdf, 0xb8, 0xd3, 0x9d,
+ 0x0f, 0x66, 0xc2, 0x60, 0xa2, 0x7e, 0xeb, 0x51, 0x9f, 0x85, 0x43, 0x3c, 0xaf, 0xc6, 0xd5, 0xbb,
+ 0xaa, 0x2c, 0xf9, 0x40, 0x6b, 0x77, 0x55, 0xd9, 0x2d, 0x4f, 0xe7, 0x83, 0x55, 0xf9, 0xa4, 0x5d,
+ 0x75, 0xc4, 0x7c, 0x19, 0xb6, 0x39, 0x2e, 0x13, 0x2f, 0x71, 0x3e, 0x68, 0xd7, 0x02, 0x3b, 0x84,
+ 0xbb, 0x62, 0xaa, 0x54, 0x8a, 0xf2, 0xec, 0xee, 0x48, 0x03, 0x77, 0x01, 0x57, 0x6c, 0x33, 0xb0,
+ 0x0d, 0x62, 0x44, 0xaf, 0x88, 0x86, 0x19, 0x21, 0xee, 0xed, 0x59, 0x36, 0x8e, 0xb1, 0x8b, 0x11,
+ 0x44, 0x7c, 0x1b, 0x77, 0xf7, 0xa0, 0x97, 0x34, 0x53, 0x0c, 0x32, 0x93, 0xa6, 0x0c, 0x43, 0x36,
+ 0xbd, 0x00, 0xcc, 0x7a, 0xe9, 0xe1, 0x0a, 0xa2, 0x8b, 0x93, 0xb0, 0x75, 0x49, 0x2c, 0x55, 0xdd,
+ 0x86, 0x67, 0x5f, 0xe0, 0xb0, 0x77, 0xd9, 0x9f, 0xd7, 0x14, 0xf7, 0x3d, 0xe5, 0x48, 0xb3, 0x5e,
+ 0x6c, 0xe1, 0x6c, 0x07, 0x57, 0x94, 0xc5, 0xaa, 0x22, 0xdd, 0x30, 0xc5, 0x05, 0x59, 0x62, 0x2b,
+ 0x78, 0xf2, 0x87, 0x7e, 0xf1, 0x5c, 0xde, 0x86, 0x0e, 0xd3, 0x82, 0x84, 0x53, 0xaa, 0xe9, 0x73,
+ 0x96, 0xe1, 0x9f, 0xd7, 0x33, 0x03, 0x45, 0xc5, 0x9c, 0xaf, 0xce, 0x65, 0x0b, 0x5a, 0x39, 0x87,
+ 0x23, 0x30, 0xe7, 0x9f, 0xa3, 0x86, 0xb4, 0x90, 0x33, 0x57, 0x2a, 0xb2, 0x91, 0x9d, 0x51, 0xcd,
+ 0x3f, 0xd6, 0x33, 0x3b, 0x57, 0xc4, 0x72, 0x69, 0x82, 0x39, 0x56, 0x58, 0x1e, 0xcd, 0xb1, 0x31,
+ 0x3c, 0x90, 0x03, 0x84, 0xaf, 0x68, 0x85, 0x05, 0xeb, 0x8c, 0xa4, 0xbd, 0xb0, 0xcd, 0xba, 0x3f,
+ 0x64, 0xc3, 0x9d, 0x8e, 0xb9, 0x9f, 0x4c, 0x06, 0xc6, 0xd7, 0xf3, 0x60, 0xf3, 0x86, 0x6b, 0x83,
+ 0xf0, 0x4f, 0x79, 0xb9, 0xa2, 0xe8, 0xce, 0x83, 0xc7, 0x54, 0xca, 0x32, 0x5e, 0x51, 0x9d, 0xb5,
+ 0xe5, 0x9b, 0x4a, 0x59, 0x1e, 0xfd, 0x34, 0x03, 0x5b, 0x6d, 0x3f, 0xf4, 0x7d, 0x02, 0x50, 0xbb,
+ 0xc6, 0x69, 0x96, 0xb7, 0xeb, 0xa2, 0xc7, 0x7c, 0x42, 0xae, 0x6e, 0x79, 0x6c, 0x43, 0x87, 0xdf,
+ 0xfc, 0xfe, 0xb7, 0x77, 0xdb, 0xfa, 0x29, 0xcb, 0x71, 0x06, 0x90, 0xbe, 0x27, 0xc0, 0x67, 0x04,
+ 0xb6, 0x7b, 0x26, 0xe8, 0xd1, 0xfa, 0x5c, 0xb9, 0xc8, 0xb2, 0xf5, 0x8a, 0x23, 0xb0, 0xd3, 0x36,
+ 0xb0, 0x93, 0xf4, 0x78, 0x32, 0xb0, 0xdc, 0xfd, 0xe0, 0x3b, 0x60, 0x95, 0xfe, 0x40, 0xa0, 0x3b,
+ 0x6a, 0x4a, 0x45, 0xc7, 0xeb, 0x43, 0x11, 0xee, 0x92, 0x84, 0xff, 0x36, 0xa1, 0x89, 0x54, 0x2e,
+ 0xd9, 0x54, 0xa6, 0xe8, 0xb9, 0x26, 0xa8, 0xe4, 0x7c, 0x4f, 0x69, 0xfa, 0x17, 0x81, 0x7f, 0xc5,
+ 0x0e, 0x7d, 0xe8, 0x54, 0x7d, 0x28, 0x63, 0xda, 0x41, 0x61, 0xfa, 0x59, 0x4c, 0x20, 0xe3, 0xeb,
+ 0x36, 0xe3, 0xcb, 0x74, 0xa6, 0x19, 0xc6, 0xb5, 0x26, 0xcf, 0xcf, 0xfd, 0x1b, 0x02, 0x50, 0x73,
+ 0x95, 0x50, 0x18, 0xa1, 0x59, 0x4a, 0x42, 0x61, 0x84, 0xfb, 0x74, 0xf6, 0x8a, 0x4d, 0x21, 0x4f,
+ 0xaf, 0x3d, 0x63, 0xd2, 0x72, 0xf7, 0x83, 0x6f, 0xd9, 0x55, 0xfa, 0x27, 0x81, 0xae, 0x88, 0xe8,
+ 0xd1, 0x53, 0xb1, 0x10, 0xf9, 0x73, 0x22, 0x61, 0xbc, 0x71, 0x45, 0x24, 0x59, 0xb6, 0x49, 0x16,
+ 0xa9, 0xdc, 0x6a, 0x92, 0x91, 0x49, 0xa4, 0xdf, 0x12, 0xe8, 0x8e, 0x1a, 0xb3, 0x24, 0x94, 0x65,
+ 0xcc, 0xdc, 0x28, 0xa1, 0x2c, 0xe3, 0x66, 0x3a, 0xec, 0x8c, 0x4d, 0x7e, 0x8c, 0x9e, 0xe0, 0x91,
+ 0x8f, 0xcd, 0xa2, 0x55, 0x8b, 0xb1, 0x73, 0x8b, 0x84, 0x5a, 0xac, 0x67, 0x34, 0x93, 0x50, 0x8b,
+ 0x75, 0x8d, 0x4d, 0x92, 0x6b, 0xd1, 0x63, 0x56, 0x67, 0x1a, 0x0d, 0xfa, 0x35, 0x81, 0x9d, 0x81,
+ 0x26, 0x9f, 0x1e, 0x8b, 0x05, 0x1a, 0x35, 0x03, 0x11, 0x46, 0x1b, 0x51, 0x41, 0x2e, 0x33, 0x36,
+ 0x97, 0xf3, 0x74, 0xaa, 0x19, 0x2e, 0x7a, 0x00, 0xf1, 0x1a, 0x81, 0xae, 0x88, 0xc6, 0x39, 0xa1,
+ 0x0a, 0xf9, 0x73, 0x00, 0x61, 0xbc, 0x71, 0x45, 0x64, 0x75, 0xd1, 0x66, 0xf5, 0x3f, 0x3a, 0xd9,
+ 0x0c, 0x2b, 0xdf, 0xfd, 0xbc, 0x4e, 0x80, 0x86, 0xfd, 0xd0, 0xb1, 0x06, 0x81, 0xb9, 0x84, 0x4e,
+ 0x35, 0xac, 0x87, 0x7c, 0x6e, 0xdb, 0x7c, 0xae, 0xd3, 0xab, 0xcf, 0xc6, 0x27, 0x7c, 0xad, 0x7f,
+ 0x49, 0xa0, 0x33, 0xd8, 0xde, 0xd2, 0xf8, 0x5d, 0x14, 0xd9, 0x7f, 0x0b, 0xc7, 0x1b, 0xd2, 0x41,
+ 0x52, 0xe3, 0x36, 0xa9, 0x51, 0xfa, 0x1f, 0x1e, 0xa9, 0x79, 0x4f, 0x6f, 0x56, 0x51, 0xef, 0x68,
+ 0xb9, 0xfb, 0x4e, 0x57, 0xbf, 0x4a, 0xdf, 0x20, 0xd0, 0x6e, 0xf5, 0xcb, 0x74, 0x28, 0xd6, 0xaf,
+ 0xaf, 0x35, 0x17, 0x0e, 0xd7, 0x21, 0x89, 0xb8, 0xfa, 0x6d, 0x5c, 0x69, 0x7a, 0x80, 0x87, 0xcb,
+ 0x6a, 0xcf, 0xe9, 0x03, 0x02, 0x1d, 0x4e, 0x33, 0x4d, 0x87, 0xe3, 0x6d, 0xfb, 0xfb, 0x77, 0xe1,
+ 0x48, 0x5d, 0xb2, 0x88, 0x64, 0xc0, 0x46, 0xd2, 0x47, 0xd3, 0x5c, 0x24, 0x0e, 0x80, 0xf7, 0x08,
+ 0xec, 0xe5, 0x34, 0xe1, 0xf4, 0x74, 0xac, 0xc3, 0xf8, 0x8e, 0x5f, 0x38, 0xd3, 0x9c, 0x32, 0xc2,
+ 0x4f, 0xd1, 0x8f, 0x09, 0x08, 0xfc, 0x56, 0x9b, 0x4e, 0x36, 0x6e, 0xde, 0xdf, 0xe3, 0x0b, 0xe7,
+ 0x9a, 0xd6, 0xf7, 0x10, 0x7e, 0x44, 0x60, 0x1f, 0xb7, 0xaf, 0xa6, 0x67, 0x1b, 0x75, 0x10, 0x68,
+ 0xe7, 0x85, 0xc9, 0x66, 0xd5, 0x3d, 0x78, 0x56, 0x66, 0x39, 0x8d, 0x75, 0x42, 0x66, 0xe3, 0xbb,
+ 0xf6, 0x84, 0xcc, 0x26, 0xf4, 0xf2, 0x18, 0x37, 0x6e, 0x4f, 0x9d, 0x10, 0xb7, 0xa4, 0xa6, 0x3d,
+ 0x21, 0x6e, 0x89, 0xad, 0xbc, 0x97, 0x56, 0x4e, 0x3f, 0x9e, 0x98, 0xd6, 0xf8, 0x86, 0x3f, 0x31,
+ 0xad, 0x09, 0x63, 0x00, 0x96, 0xa2, 0xab, 0xb0, 0x3b, 0xd4, 0xb2, 0x27, 0x3c, 0xc0, 0x43, 0xf2,
+ 0xc2, 0x58, 0x63, 0xf2, 0x3e, 0xf7, 0x0f, 0x08, 0xec, 0x89, 0xee, 0xdb, 0x47, 0xeb, 0xdf, 0xb1,
+ 0xae, 0x8e, 0x30, 0xd1, 0xb8, 0x4e, 0x0d, 0xcb, 0xf4, 0xc5, 0x47, 0x8f, 0xd3, 0x64, 0xed, 0x71,
+ 0x9a, 0xfc, 0xfa, 0x38, 0x4d, 0xde, 0x7e, 0x92, 0x4e, 0xad, 0x3d, 0x49, 0xa7, 0x7e, 0x7c, 0x92,
+ 0x4e, 0xbd, 0x36, 0x12, 0x3b, 0xa2, 0x58, 0xf6, 0x0e, 0x43, 0x7b, 0x58, 0x31, 0xd7, 0x61, 0xff,
+ 0x7f, 0x9d, 0xe3, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0xa1, 0x13, 0x3c, 0xb6, 0x93, 0x24, 0x00,
+ 0x00,
}
-func (m *QueryValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// QueryClient is the client API for Query service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type QueryClient interface {
+ // Validators queries all validators that match the given status.
+ Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error)
+ // Validator queries validator info for given validator address.
+ Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error)
+ // ValidatorDelegations queries delegate info for given validator.
+ ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error)
+ // ValidatorUnbondingDelegations queries unbonding delegations of a validator.
+ ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error)
+ // Delegation queries delegate info for given validator delegator pair.
+ Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error)
+ // UnbondingDelegation queries unbonding info for given validator delegator
+ // pair.
+ UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error)
+ // DelegatorDelegations queries all delegations of a given delegator address.
+ DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error)
+ // DelegatorUnbondingDelegations queries all unbonding delegations of a given
+ // delegator address.
+ DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error)
+ // Redelegations queries redelegations of given address.
+ Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error)
+ // DelegatorValidators queries all validators info for given delegator
+ // address.
+ DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error)
+ // DelegatorValidator queries validator info for given delegator validator
+ // pair.
+ DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error)
+ // HistoricalInfo queries the historical info for given height.
+ HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error)
+ // Pool queries the pool info.
+ Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error)
+ // Parameters queries the staking parameters.
+ Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
+ // Query for individual tokenize share record information by share by id
+ TokenizeShareRecordById(ctx context.Context, in *QueryTokenizeShareRecordByIdRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByIdResponse, error)
+ // Query for individual tokenize share record information by share denom
+ TokenizeShareRecordByDenom(ctx context.Context, in *QueryTokenizeShareRecordByDenomRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByDenomResponse, error)
+ // Query tokenize share records by address
+ TokenizeShareRecordsOwned(ctx context.Context, in *QueryTokenizeShareRecordsOwnedRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordsOwnedResponse, error)
+ // Query for all tokenize share records
+ AllTokenizeShareRecords(ctx context.Context, in *QueryAllTokenizeShareRecordsRequest, opts ...grpc.CallOption) (*QueryAllTokenizeShareRecordsResponse, error)
+ // Query for last tokenize share record id
+ LastTokenizeShareRecordId(ctx context.Context, in *QueryLastTokenizeShareRecordIdRequest, opts ...grpc.CallOption) (*QueryLastTokenizeShareRecordIdResponse, error)
+ // Query for total tokenized staked assets
+ TotalTokenizeSharedAssets(ctx context.Context, in *QueryTotalTokenizeSharedAssetsRequest, opts ...grpc.CallOption) (*QueryTotalTokenizeSharedAssetsResponse, error)
+ // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider)
+ TotalLiquidStaked(ctx context.Context, in *QueryTotalLiquidStaked, opts ...grpc.CallOption) (*QueryTotalLiquidStakedResponse, error)
+ // Query tokenize share locks
+ TokenizeShareLockInfo(ctx context.Context, in *QueryTokenizeShareLockInfo, opts ...grpc.CallOption) (*QueryTokenizeShareLockInfoResponse, error)
}
-func (m *QueryValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
+type queryClient struct {
+ cc grpc1.ClientConn
+}
+
+func NewQueryClient(cc grpc1.ClientConn) QueryClient {
+ return &queryClient{cc}
+}
+
+func (c *queryClient) Validators(ctx context.Context, in *QueryValidatorsRequest, opts ...grpc.CallOption) (*QueryValidatorsResponse, error) {
+ out := new(QueryValidatorsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validators", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *QueryValidatorDelegationsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) Validator(ctx context.Context, in *QueryValidatorRequest, opts ...grpc.CallOption) (*QueryValidatorResponse, error) {
+ out := new(QueryValidatorResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Validator", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryValidatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) ValidatorDelegations(ctx context.Context, in *QueryValidatorDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorDelegationsResponse, error) {
+ out := new(QueryValidatorDelegationsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorDelegations", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *QueryValidatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if len(m.ValidatorAddr) > 0 {
- i -= len(m.ValidatorAddr)
- copy(dAtA[i:], m.ValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
- i--
- dAtA[i] = 0xa
+func (c *queryClient) ValidatorUnbondingDelegations(ctx context.Context, in *QueryValidatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryValidatorUnbondingDelegationsResponse, error) {
+ out := new(QueryValidatorUnbondingDelegationsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *QueryValidatorDelegationsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) Delegation(ctx context.Context, in *QueryDelegationRequest, opts ...grpc.CallOption) (*QueryDelegationResponse, error) {
+ out := new(QueryDelegationResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Delegation", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryValidatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) UnbondingDelegation(ctx context.Context, in *QueryUnbondingDelegationRequest, opts ...grpc.CallOption) (*QueryUnbondingDelegationResponse, error) {
+ out := new(QueryUnbondingDelegationResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/UnbondingDelegation", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *QueryValidatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
- }
- if len(m.DelegationResponses) > 0 {
- for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+func (c *queryClient) DelegatorDelegations(ctx context.Context, in *QueryDelegatorDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorDelegationsResponse, error) {
+ out := new(QueryDelegatorDelegationsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorDelegations", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *QueryValidatorUnbondingDelegationsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) DelegatorUnbondingDelegations(ctx context.Context, in *QueryDelegatorUnbondingDelegationsRequest, opts ...grpc.CallOption) (*QueryDelegatorUnbondingDelegationsResponse, error) {
+ out := new(QueryDelegatorUnbondingDelegationsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryValidatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) Redelegations(ctx context.Context, in *QueryRedelegationsRequest, opts ...grpc.CallOption) (*QueryRedelegationsResponse, error) {
+ out := new(QueryRedelegationsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Redelegations", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *QueryValidatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func (c *queryClient) DelegatorValidators(ctx context.Context, in *QueryDelegatorValidatorsRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorsResponse, error) {
+ out := new(QueryDelegatorValidatorsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidators", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- if len(m.ValidatorAddr) > 0 {
- i -= len(m.ValidatorAddr)
- copy(dAtA[i:], m.ValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
- i--
- dAtA[i] = 0xa
+ return out, nil
+}
+
+func (c *queryClient) DelegatorValidator(ctx context.Context, in *QueryDelegatorValidatorRequest, opts ...grpc.CallOption) (*QueryDelegatorValidatorResponse, error) {
+ out := new(QueryDelegatorValidatorResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/DelegatorValidator", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *QueryValidatorUnbondingDelegationsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) HistoricalInfo(ctx context.Context, in *QueryHistoricalInfoRequest, opts ...grpc.CallOption) (*QueryHistoricalInfoResponse, error) {
+ out := new(QueryHistoricalInfoResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/HistoricalInfo", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryValidatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) Pool(ctx context.Context, in *QueryPoolRequest, opts ...grpc.CallOption) (*QueryPoolResponse, error) {
+ out := new(QueryPoolResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Pool", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *QueryValidatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) {
+ out := new(QueryParamsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/Params", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- if len(m.UnbondingResponses) > 0 {
- for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+ return out, nil
+}
+
+func (c *queryClient) TokenizeShareRecordById(ctx context.Context, in *QueryTokenizeShareRecordByIdRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByIdResponse, error) {
+ out := new(QueryTokenizeShareRecordByIdResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareRecordById", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *QueryDelegationRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) TokenizeShareRecordByDenom(ctx context.Context, in *QueryTokenizeShareRecordByDenomRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordByDenomResponse, error) {
+ out := new(QueryTokenizeShareRecordByDenomResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareRecordByDenom", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryDelegationRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) TokenizeShareRecordsOwned(ctx context.Context, in *QueryTokenizeShareRecordsOwnedRequest, opts ...grpc.CallOption) (*QueryTokenizeShareRecordsOwnedResponse, error) {
+ out := new(QueryTokenizeShareRecordsOwnedResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareRecordsOwned", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *QueryDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if len(m.ValidatorAddr) > 0 {
- i -= len(m.ValidatorAddr)
- copy(dAtA[i:], m.ValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
- i--
- dAtA[i] = 0x12
+func (c *queryClient) AllTokenizeShareRecords(ctx context.Context, in *QueryAllTokenizeShareRecordsRequest, opts ...grpc.CallOption) (*QueryAllTokenizeShareRecordsResponse, error) {
+ out := new(QueryAllTokenizeShareRecordsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/AllTokenizeShareRecords", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
+ return out, nil
+}
+
+func (c *queryClient) LastTokenizeShareRecordId(ctx context.Context, in *QueryLastTokenizeShareRecordIdRequest, opts ...grpc.CallOption) (*QueryLastTokenizeShareRecordIdResponse, error) {
+ out := new(QueryLastTokenizeShareRecordIdResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/LastTokenizeShareRecordId", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *QueryDelegationResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) TotalTokenizeSharedAssets(ctx context.Context, in *QueryTotalTokenizeSharedAssetsRequest, opts ...grpc.CallOption) (*QueryTotalTokenizeSharedAssetsResponse, error) {
+ out := new(QueryTotalTokenizeSharedAssetsResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TotalTokenizeSharedAssets", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryDelegationResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) TotalLiquidStaked(ctx context.Context, in *QueryTotalLiquidStaked, opts ...grpc.CallOption) (*QueryTotalLiquidStakedResponse, error) {
+ out := new(QueryTotalLiquidStakedResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TotalLiquidStaked", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *QueryDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.DelegationResponse != nil {
- {
- size, err := m.DelegationResponse.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
-}
-
-func (m *QueryUnbondingDelegationRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *queryClient) TokenizeShareLockInfo(ctx context.Context, in *QueryTokenizeShareLockInfo, opts ...grpc.CallOption) (*QueryTokenizeShareLockInfoResponse, error) {
+ out := new(QueryTokenizeShareLockInfoResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Query/TokenizeShareLockInfo", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *QueryUnbondingDelegationRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+// QueryServer is the server API for Query service.
+type QueryServer interface {
+ // Validators queries all validators that match the given status.
+ Validators(context.Context, *QueryValidatorsRequest) (*QueryValidatorsResponse, error)
+ // Validator queries validator info for given validator address.
+ Validator(context.Context, *QueryValidatorRequest) (*QueryValidatorResponse, error)
+ // ValidatorDelegations queries delegate info for given validator.
+ ValidatorDelegations(context.Context, *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error)
+ // ValidatorUnbondingDelegations queries unbonding delegations of a validator.
+ ValidatorUnbondingDelegations(context.Context, *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error)
+ // Delegation queries delegate info for given validator delegator pair.
+ Delegation(context.Context, *QueryDelegationRequest) (*QueryDelegationResponse, error)
+ // UnbondingDelegation queries unbonding info for given validator delegator
+ // pair.
+ UnbondingDelegation(context.Context, *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error)
+ // DelegatorDelegations queries all delegations of a given delegator address.
+ DelegatorDelegations(context.Context, *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error)
+ // DelegatorUnbondingDelegations queries all unbonding delegations of a given
+ // delegator address.
+ DelegatorUnbondingDelegations(context.Context, *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error)
+ // Redelegations queries redelegations of given address.
+ Redelegations(context.Context, *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error)
+ // DelegatorValidators queries all validators info for given delegator
+ // address.
+ DelegatorValidators(context.Context, *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error)
+ // DelegatorValidator queries validator info for given delegator validator
+ // pair.
+ DelegatorValidator(context.Context, *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error)
+ // HistoricalInfo queries the historical info for given height.
+ HistoricalInfo(context.Context, *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error)
+ // Pool queries the pool info.
+ Pool(context.Context, *QueryPoolRequest) (*QueryPoolResponse, error)
+ // Parameters queries the staking parameters.
+ Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
+ // Query for individual tokenize share record information by share by id
+ TokenizeShareRecordById(context.Context, *QueryTokenizeShareRecordByIdRequest) (*QueryTokenizeShareRecordByIdResponse, error)
+ // Query for individual tokenize share record information by share denom
+ TokenizeShareRecordByDenom(context.Context, *QueryTokenizeShareRecordByDenomRequest) (*QueryTokenizeShareRecordByDenomResponse, error)
+ // Query tokenize share records by address
+ TokenizeShareRecordsOwned(context.Context, *QueryTokenizeShareRecordsOwnedRequest) (*QueryTokenizeShareRecordsOwnedResponse, error)
+ // Query for all tokenize share records
+ AllTokenizeShareRecords(context.Context, *QueryAllTokenizeShareRecordsRequest) (*QueryAllTokenizeShareRecordsResponse, error)
+ // Query for last tokenize share record id
+ LastTokenizeShareRecordId(context.Context, *QueryLastTokenizeShareRecordIdRequest) (*QueryLastTokenizeShareRecordIdResponse, error)
+ // Query for total tokenized staked assets
+ TotalTokenizeSharedAssets(context.Context, *QueryTotalTokenizeSharedAssetsRequest) (*QueryTotalTokenizeSharedAssetsResponse, error)
+ // Query for total liquid staked (including tokenized shares or owned by an liquid staking provider)
+ TotalLiquidStaked(context.Context, *QueryTotalLiquidStaked) (*QueryTotalLiquidStakedResponse, error)
+ // Query tokenize share locks
+ TokenizeShareLockInfo(context.Context, *QueryTokenizeShareLockInfo) (*QueryTokenizeShareLockInfoResponse, error)
}
-func (m *QueryUnbondingDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if len(m.ValidatorAddr) > 0 {
- i -= len(m.ValidatorAddr)
- copy(dAtA[i:], m.ValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
- }
- return len(dAtA) - i, nil
+// UnimplementedQueryServer can be embedded to have forward compatible implementations.
+type UnimplementedQueryServer struct {
}
-func (m *QueryUnbondingDelegationResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
+func (*UnimplementedQueryServer) Validators(ctx context.Context, req *QueryValidatorsRequest) (*QueryValidatorsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Validators not implemented")
}
-
-func (m *QueryUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (*UnimplementedQueryServer) Validator(ctx context.Context, req *QueryValidatorRequest) (*QueryValidatorResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Validator not implemented")
+}
+func (*UnimplementedQueryServer) ValidatorDelegations(ctx context.Context, req *QueryValidatorDelegationsRequest) (*QueryValidatorDelegationsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ValidatorDelegations not implemented")
+}
+func (*UnimplementedQueryServer) ValidatorUnbondingDelegations(ctx context.Context, req *QueryValidatorUnbondingDelegationsRequest) (*QueryValidatorUnbondingDelegationsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ValidatorUnbondingDelegations not implemented")
+}
+func (*UnimplementedQueryServer) Delegation(ctx context.Context, req *QueryDelegationRequest) (*QueryDelegationResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delegation not implemented")
+}
+func (*UnimplementedQueryServer) UnbondingDelegation(ctx context.Context, req *QueryUnbondingDelegationRequest) (*QueryUnbondingDelegationResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method UnbondingDelegation not implemented")
+}
+func (*UnimplementedQueryServer) DelegatorDelegations(ctx context.Context, req *QueryDelegatorDelegationsRequest) (*QueryDelegatorDelegationsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DelegatorDelegations not implemented")
+}
+func (*UnimplementedQueryServer) DelegatorUnbondingDelegations(ctx context.Context, req *QueryDelegatorUnbondingDelegationsRequest) (*QueryDelegatorUnbondingDelegationsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DelegatorUnbondingDelegations not implemented")
+}
+func (*UnimplementedQueryServer) Redelegations(ctx context.Context, req *QueryRedelegationsRequest) (*QueryRedelegationsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Redelegations not implemented")
+}
+func (*UnimplementedQueryServer) DelegatorValidators(ctx context.Context, req *QueryDelegatorValidatorsRequest) (*QueryDelegatorValidatorsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidators not implemented")
+}
+func (*UnimplementedQueryServer) DelegatorValidator(ctx context.Context, req *QueryDelegatorValidatorRequest) (*QueryDelegatorValidatorResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DelegatorValidator not implemented")
+}
+func (*UnimplementedQueryServer) HistoricalInfo(ctx context.Context, req *QueryHistoricalInfoRequest) (*QueryHistoricalInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method HistoricalInfo not implemented")
+}
+func (*UnimplementedQueryServer) Pool(ctx context.Context, req *QueryPoolRequest) (*QueryPoolResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Pool not implemented")
+}
+func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
+}
+func (*UnimplementedQueryServer) TokenizeShareRecordById(ctx context.Context, req *QueryTokenizeShareRecordByIdRequest) (*QueryTokenizeShareRecordByIdResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordById not implemented")
+}
+func (*UnimplementedQueryServer) TokenizeShareRecordByDenom(ctx context.Context, req *QueryTokenizeShareRecordByDenomRequest) (*QueryTokenizeShareRecordByDenomResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordByDenom not implemented")
+}
+func (*UnimplementedQueryServer) TokenizeShareRecordsOwned(ctx context.Context, req *QueryTokenizeShareRecordsOwnedRequest) (*QueryTokenizeShareRecordsOwnedResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareRecordsOwned not implemented")
+}
+func (*UnimplementedQueryServer) AllTokenizeShareRecords(ctx context.Context, req *QueryAllTokenizeShareRecordsRequest) (*QueryAllTokenizeShareRecordsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method AllTokenizeShareRecords not implemented")
+}
+func (*UnimplementedQueryServer) LastTokenizeShareRecordId(ctx context.Context, req *QueryLastTokenizeShareRecordIdRequest) (*QueryLastTokenizeShareRecordIdResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method LastTokenizeShareRecordId not implemented")
+}
+func (*UnimplementedQueryServer) TotalTokenizeSharedAssets(ctx context.Context, req *QueryTotalTokenizeSharedAssetsRequest) (*QueryTotalTokenizeSharedAssetsResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TotalTokenizeSharedAssets not implemented")
+}
+func (*UnimplementedQueryServer) TotalLiquidStaked(ctx context.Context, req *QueryTotalLiquidStaked) (*QueryTotalLiquidStakedResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TotalLiquidStaked not implemented")
+}
+func (*UnimplementedQueryServer) TokenizeShareLockInfo(ctx context.Context, req *QueryTokenizeShareLockInfo) (*QueryTokenizeShareLockInfoResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TokenizeShareLockInfo not implemented")
}
-func (m *QueryUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Unbond.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
+func RegisterQueryServer(s grpc1.Server, srv QueryServer) {
+ s.RegisterService(&_Query_serviceDesc, srv)
}
-func (m *QueryDelegatorDelegationsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryValidatorsRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
+ if interceptor == nil {
+ return srv.(QueryServer).Validators(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/Validators",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).Validators(ctx, req.(*QueryValidatorsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func _Query_Validator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryValidatorRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(QueryServer).Validator(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/Validator",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).Validator(ctx, req.(*QueryValidatorRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func _Query_ValidatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryValidatorDelegationsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
+ if interceptor == nil {
+ return srv.(QueryServer).ValidatorDelegations(ctx, in)
}
- return len(dAtA) - i, nil
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorDelegations",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).ValidatorDelegations(ctx, req.(*QueryValidatorDelegationsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorDelegationsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_ValidatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryValidatorUnbondingDelegationsRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
+ if interceptor == nil {
+ return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/ValidatorUnbondingDelegations",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).ValidatorUnbondingDelegations(ctx, req.(*QueryValidatorUnbondingDelegationsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *QueryDelegatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func _Query_Delegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryDelegationRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.DelegationResponses) > 0 {
- for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+ if interceptor == nil {
+ return srv.(QueryServer).Delegation(ctx, in)
}
- return len(dAtA) - i, nil
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/Delegation",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).Delegation(ctx, req.(*QueryDelegationRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorUnbondingDelegationsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_UnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryUnbondingDelegationRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
-}
-
-func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+ if interceptor == nil {
+ return srv.(QueryServer).UnbondingDelegation(ctx, in)
}
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/UnbondingDelegation",
}
- return len(dAtA) - i, nil
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).UnbondingDelegation(ctx, req.(*QueryUnbondingDelegationRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorUnbondingDelegationsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_DelegatorDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryDelegatorDelegationsRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
-}
-
-func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+ if interceptor == nil {
+ return srv.(QueryServer).DelegatorDelegations(ctx, in)
}
- if len(m.UnbondingResponses) > 0 {
- for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorDelegations",
}
- return len(dAtA) - i, nil
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).DelegatorDelegations(ctx, req.(*QueryDelegatorDelegationsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryRedelegationsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_DelegatorUnbondingDelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryDelegatorUnbondingDelegationsRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
-}
-
-func (m *QueryRedelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+ if interceptor == nil {
+ return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorUnbondingDelegations",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).DelegatorUnbondingDelegations(ctx, req.(*QueryDelegatorUnbondingDelegationsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryRedelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
+func _Query_Redelegations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryRedelegationsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.DstValidatorAddr) > 0 {
- i -= len(m.DstValidatorAddr)
- copy(dAtA[i:], m.DstValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DstValidatorAddr)))
- i--
- dAtA[i] = 0x1a
+ if interceptor == nil {
+ return srv.(QueryServer).Redelegations(ctx, in)
}
- if len(m.SrcValidatorAddr) > 0 {
- i -= len(m.SrcValidatorAddr)
- copy(dAtA[i:], m.SrcValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.SrcValidatorAddr)))
- i--
- dAtA[i] = 0x12
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/Redelegations",
}
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).Redelegations(ctx, req.(*QueryRedelegationsRequest))
}
- return len(dAtA) - i, nil
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryRedelegationsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_DelegatorValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryDelegatorValidatorsRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
-}
-
-func (m *QueryRedelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+ if interceptor == nil {
+ return srv.(QueryServer).DelegatorValidators(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidators",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).DelegatorValidators(ctx, req.(*QueryDelegatorValidatorsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryRedelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func _Query_DelegatorValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryDelegatorValidatorRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.RedelegationResponses) > 0 {
- for iNdEx := len(m.RedelegationResponses) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.RedelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+ if interceptor == nil {
+ return srv.(QueryServer).DelegatorValidator(ctx, in)
}
- return len(dAtA) - i, nil
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/DelegatorValidator",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).DelegatorValidator(ctx, req.(*QueryDelegatorValidatorRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorsRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_HistoricalInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryHistoricalInfoRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
+ if interceptor == nil {
+ return srv.(QueryServer).HistoricalInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/HistoricalInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).HistoricalInfo(ctx, req.(*QueryHistoricalInfoRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorsRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func _Query_Pool_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryPoolRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(QueryServer).Pool(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/Pool",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).Pool(ctx, req.(*QueryPoolRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryParamsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
+ if interceptor == nil {
+ return srv.(QueryServer).Params(ctx, in)
}
- return len(dAtA) - i, nil
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/Params",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorsResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_TokenizeShareRecordById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryTokenizeShareRecordByIdRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
+ if interceptor == nil {
+ return srv.(QueryServer).TokenizeShareRecordById(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareRecordById",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).TokenizeShareRecordById(ctx, req.(*QueryTokenizeShareRecordByIdRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorsResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func _Query_TokenizeShareRecordByDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryTokenizeShareRecordByDenomRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(QueryServer).TokenizeShareRecordByDenom(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareRecordByDenom",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).TokenizeShareRecordByDenom(ctx, req.(*QueryTokenizeShareRecordByDenomRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.Pagination != nil {
- {
- size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x12
+func _Query_TokenizeShareRecordsOwned_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryTokenizeShareRecordsOwnedRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.Validators) > 0 {
- for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0xa
- }
+ if interceptor == nil {
+ return srv.(QueryServer).TokenizeShareRecordsOwned(ctx, in)
}
- return len(dAtA) - i, nil
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareRecordsOwned",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).TokenizeShareRecordsOwned(ctx, req.(*QueryTokenizeShareRecordsOwnedRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorRequest) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_AllTokenizeShareRecords_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryAllTokenizeShareRecordsRequest)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
+ if interceptor == nil {
+ return srv.(QueryServer).AllTokenizeShareRecords(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/AllTokenizeShareRecords",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).AllTokenizeShareRecords(ctx, req.(*QueryAllTokenizeShareRecordsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorRequest) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func _Query_LastTokenizeShareRecordId_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryLastTokenizeShareRecordIdRequest)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(QueryServer).LastTokenizeShareRecordId(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/LastTokenizeShareRecordId",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).LastTokenizeShareRecordId(ctx, req.(*QueryLastTokenizeShareRecordIdRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if len(m.ValidatorAddr) > 0 {
- i -= len(m.ValidatorAddr)
- copy(dAtA[i:], m.ValidatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
- i--
- dAtA[i] = 0x12
+func _Query_TotalTokenizeSharedAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryTotalTokenizeSharedAssetsRequest)
+ if err := dec(in); err != nil {
+ return nil, err
}
- if len(m.DelegatorAddr) > 0 {
- i -= len(m.DelegatorAddr)
- copy(dAtA[i:], m.DelegatorAddr)
- i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
- i--
- dAtA[i] = 0xa
+ if interceptor == nil {
+ return srv.(QueryServer).TotalTokenizeSharedAssets(ctx, in)
}
- return len(dAtA) - i, nil
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/TotalTokenizeSharedAssets",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).TotalTokenizeSharedAssets(ctx, req.(*QueryTotalTokenizeSharedAssetsRequest))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
+func _Query_TotalLiquidStaked_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryTotalLiquidStaked)
+ if err := dec(in); err != nil {
return nil, err
}
- return dAtA[:n], nil
+ if interceptor == nil {
+ return srv.(QueryServer).TotalLiquidStaked(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/TotalLiquidStaked",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).TotalLiquidStaked(ctx, req.(*QueryTotalLiquidStaked))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryDelegatorValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
-}
-
-func (m *QueryDelegatorValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
+func _Query_TokenizeShareLockInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(QueryTokenizeShareLockInfo)
+ if err := dec(in); err != nil {
+ return nil, err
}
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
+ if interceptor == nil {
+ return srv.(QueryServer).TokenizeShareLockInfo(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Query/TokenizeShareLockInfo",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(QueryServer).TokenizeShareLockInfo(ctx, req.(*QueryTokenizeShareLockInfo))
+ }
+ return interceptor(ctx, in, info, handler)
}
-func (m *QueryHistoricalInfoRequest) Marshal() (dAtA []byte, err error) {
+var _Query_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "cosmos.staking.v1beta1.Query",
+ HandlerType: (*QueryServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "Validators",
+ Handler: _Query_Validators_Handler,
+ },
+ {
+ MethodName: "Validator",
+ Handler: _Query_Validator_Handler,
+ },
+ {
+ MethodName: "ValidatorDelegations",
+ Handler: _Query_ValidatorDelegations_Handler,
+ },
+ {
+ MethodName: "ValidatorUnbondingDelegations",
+ Handler: _Query_ValidatorUnbondingDelegations_Handler,
+ },
+ {
+ MethodName: "Delegation",
+ Handler: _Query_Delegation_Handler,
+ },
+ {
+ MethodName: "UnbondingDelegation",
+ Handler: _Query_UnbondingDelegation_Handler,
+ },
+ {
+ MethodName: "DelegatorDelegations",
+ Handler: _Query_DelegatorDelegations_Handler,
+ },
+ {
+ MethodName: "DelegatorUnbondingDelegations",
+ Handler: _Query_DelegatorUnbondingDelegations_Handler,
+ },
+ {
+ MethodName: "Redelegations",
+ Handler: _Query_Redelegations_Handler,
+ },
+ {
+ MethodName: "DelegatorValidators",
+ Handler: _Query_DelegatorValidators_Handler,
+ },
+ {
+ MethodName: "DelegatorValidator",
+ Handler: _Query_DelegatorValidator_Handler,
+ },
+ {
+ MethodName: "HistoricalInfo",
+ Handler: _Query_HistoricalInfo_Handler,
+ },
+ {
+ MethodName: "Pool",
+ Handler: _Query_Pool_Handler,
+ },
+ {
+ MethodName: "Params",
+ Handler: _Query_Params_Handler,
+ },
+ {
+ MethodName: "TokenizeShareRecordById",
+ Handler: _Query_TokenizeShareRecordById_Handler,
+ },
+ {
+ MethodName: "TokenizeShareRecordByDenom",
+ Handler: _Query_TokenizeShareRecordByDenom_Handler,
+ },
+ {
+ MethodName: "TokenizeShareRecordsOwned",
+ Handler: _Query_TokenizeShareRecordsOwned_Handler,
+ },
+ {
+ MethodName: "AllTokenizeShareRecords",
+ Handler: _Query_AllTokenizeShareRecords_Handler,
+ },
+ {
+ MethodName: "LastTokenizeShareRecordId",
+ Handler: _Query_LastTokenizeShareRecordId_Handler,
+ },
+ {
+ MethodName: "TotalTokenizeSharedAssets",
+ Handler: _Query_TotalTokenizeSharedAssets_Handler,
+ },
+ {
+ MethodName: "TotalLiquidStaked",
+ Handler: _Query_TotalLiquidStaked_Handler,
+ },
+ {
+ MethodName: "TokenizeShareLockInfo",
+ Handler: _Query_TokenizeShareLockInfo_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "cosmos/staking/v1beta1/query.proto",
+}
+
+func (m *QueryValidatorsRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -3030,25 +3172,39 @@ func (m *QueryHistoricalInfoRequest) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *QueryHistoricalInfoRequest) MarshalTo(dAtA []byte) (int, error) {
+func (m *QueryValidatorsRequest) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryHistoricalInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *QueryValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
- if m.Height != 0 {
- i = encodeVarintQuery(dAtA, i, uint64(m.Height))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
i--
- dAtA[i] = 0x8
+ dAtA[i] = 0x12
+ }
+ if len(m.Status) > 0 {
+ i -= len(m.Status)
+ copy(dAtA[i:], m.Status)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.Status)))
+ i--
+ dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
-func (m *QueryHistoricalInfoResponse) Marshal() (dAtA []byte, err error) {
+func (m *QueryValidatorsResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -3058,19 +3214,19 @@ func (m *QueryHistoricalInfoResponse) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *QueryHistoricalInfoResponse) MarshalTo(dAtA []byte) (int, error) {
+func (m *QueryValidatorsResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryHistoricalInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *QueryValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
- if m.Hist != nil {
+ if m.Pagination != nil {
{
- size, err := m.Hist.MarshalToSizedBuffer(dAtA[:i])
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
@@ -3078,12 +3234,26 @@ func (m *QueryHistoricalInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, er
i = encodeVarintQuery(dAtA, i, uint64(size))
}
i--
- dAtA[i] = 0xa
+ dAtA[i] = 0x12
+ }
+ if len(m.Validators) > 0 {
+ for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
}
return len(dAtA) - i, nil
}
-func (m *QueryPoolRequest) Marshal() (dAtA []byte, err error) {
+func (m *QueryValidatorRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -3093,20 +3263,27 @@ func (m *QueryPoolRequest) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) {
+func (m *QueryValidatorRequest) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *QueryValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
+ if len(m.ValidatorAddr) > 0 {
+ i -= len(m.ValidatorAddr)
+ copy(dAtA[i:], m.ValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
+ i--
+ dAtA[i] = 0xa
+ }
return len(dAtA) - i, nil
}
-func (m *QueryPoolResponse) Marshal() (dAtA []byte, err error) {
+func (m *QueryValidatorResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -3116,18 +3293,18 @@ func (m *QueryPoolResponse) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) {
+func (m *QueryValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *QueryValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
{
- size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i])
+ size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
@@ -3139,7 +3316,7 @@ func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
-func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {
+func (m *QueryValidatorDelegationsRequest) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -3149,20 +3326,39 @@ func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {
+func (m *QueryValidatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *QueryValidatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.ValidatorAddr) > 0 {
+ i -= len(m.ValidatorAddr)
+ copy(dAtA[i:], m.ValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
+ i--
+ dAtA[i] = 0xa
+ }
return len(dAtA) - i, nil
}
-func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {
+func (m *QueryValidatorDelegationsResponse) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
n, err := m.MarshalToSizedBuffer(dAtA[:size])
@@ -3172,482 +3368,3301 @@ func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {
return dAtA[:n], nil
}
-func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {
+func (m *QueryValidatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
size := m.Size()
return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+func (m *QueryValidatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i := len(dAtA)
_ = i
var l int
_ = l
- {
- size, err := m.Params.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegationResponses) > 0 {
+ for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
}
- i -= size
- i = encodeVarintQuery(dAtA, i, uint64(size))
}
- i--
- dAtA[i] = 0xa
return len(dAtA) - i, nil
}
-func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
- offset -= sovQuery(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
+func (m *QueryValidatorUnbondingDelegationsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- dAtA[offset] = uint8(v)
- return base
+ return dAtA[:n], nil
}
-func (m *QueryValidatorsRequest) Size() (n int) {
- if m == nil {
- return 0
- }
+
+func (m *QueryValidatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryValidatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- l = len(m.Status)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
}
- return n
+ if len(m.ValidatorAddr) > 0 {
+ i -= len(m.ValidatorAddr)
+ copy(dAtA[i:], m.ValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
}
-func (m *QueryValidatorsResponse) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryValidatorUnbondingDelegationsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
+ return dAtA[:n], nil
+}
+
+func (m *QueryValidatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryValidatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.Validators) > 0 {
- for _, e := range m.Validators {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.UnbondingResponses) > 0 {
+ for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryValidatorRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.ValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
+func (m *QueryDelegationRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- return n
+ return dAtA[:n], nil
}
-func (m *QueryValidatorResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = m.Validator.Size()
- n += 1 + l + sovQuery(uint64(l))
- return n
+func (m *QueryDelegationRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryValidatorDelegationsRequest) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- l = len(m.ValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.ValidatorAddr) > 0 {
+ i -= len(m.ValidatorAddr)
+ copy(dAtA[i:], m.ValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryValidatorDelegationsResponse) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryDelegationResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
+ return dAtA[:n], nil
+}
+
+func (m *QueryDelegationResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.DelegationResponses) > 0 {
- for _, e := range m.DelegationResponses {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.DelegationResponse != nil {
+ {
+ size, err := m.DelegationResponse.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
+ i--
+ dAtA[i] = 0xa
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
- }
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryValidatorUnbondingDelegationsRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.ValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+func (m *QueryUnbondingDelegationRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- return n
+ return dAtA[:n], nil
}
-func (m *QueryValidatorUnbondingDelegationsResponse) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryUnbondingDelegationRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryUnbondingDelegationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.UnbondingResponses) > 0 {
- for _, e := range m.UnbondingResponses {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
- }
+ if len(m.ValidatorAddr) > 0 {
+ i -= len(m.ValidatorAddr)
+ copy(dAtA[i:], m.ValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryDelegationRequest) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryUnbondingDelegationResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- var l int
- _ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- l = len(m.ValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- return n
+ return dAtA[:n], nil
}
-func (m *QueryDelegationResponse) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- if m.DelegationResponse != nil {
- l = m.DelegationResponse.Size()
- n += 1 + l + sovQuery(uint64(l))
- }
- return n
+func (m *QueryUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryUnbondingDelegationRequest) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- l = len(m.ValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
+ {
+ size, err := m.Unbond.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
- return n
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
}
-func (m *QueryUnbondingDelegationResponse) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryDelegatorDelegationsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- var l int
- _ = l
- l = m.Unbond.Size()
- n += 1 + l + sovQuery(uint64(l))
- return n
+ return dAtA[:n], nil
}
-func (m *QueryDelegatorDelegationsRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
- }
- return n
+func (m *QueryDelegatorDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
}
-func (m *QueryDelegatorDelegationsResponse) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryDelegatorDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.DelegationResponses) > 0 {
- for _, e := range m.DelegationResponses {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryDelegatorUnbondingDelegationsRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+func (m *QueryDelegatorDelegationsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- return n
+ return dAtA[:n], nil
}
-func (m *QueryDelegatorUnbondingDelegationsResponse) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryDelegatorDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.UnbondingResponses) > 0 {
- for _, e := range m.UnbondingResponses {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.DelegationResponses) > 0 {
+ for iNdEx := len(m.DelegationResponses) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.DelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryRedelegationsRequest) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- l = len(m.SrcValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- l = len(m.DstValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+func (m *QueryDelegatorUnbondingDelegationsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- return n
+ return dAtA[:n], nil
}
-func (m *QueryRedelegationsResponse) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorUnbondingDelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.RedelegationResponses) > 0 {
- for _, e := range m.RedelegationResponses {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryDelegatorValidatorsRequest) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryDelegatorUnbondingDelegationsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
- var l int
- _ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
- }
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
- }
- return n
+ return dAtA[:n], nil
}
-func (m *QueryDelegatorValidatorsResponse) Size() (n int) {
- if m == nil {
- return 0
- }
+func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorUnbondingDelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if len(m.Validators) > 0 {
- for _, e := range m.Validators {
- l = e.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
}
+ i--
+ dAtA[i] = 0x12
}
- if m.Pagination != nil {
- l = m.Pagination.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.UnbondingResponses) > 0 {
+ for iNdEx := len(m.UnbondingResponses) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.UnbondingResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
}
- return n
+ return len(dAtA) - i, nil
}
-func (m *QueryDelegatorValidatorRequest) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryRedelegationsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
+ return dAtA[:n], nil
+}
+
+func (m *QueryRedelegationsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryRedelegationsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- l = len(m.DelegatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
}
- l = len(m.ValidatorAddr)
- if l > 0 {
- n += 1 + l + sovQuery(uint64(l))
+ if len(m.DstValidatorAddr) > 0 {
+ i -= len(m.DstValidatorAddr)
+ copy(dAtA[i:], m.DstValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DstValidatorAddr)))
+ i--
+ dAtA[i] = 0x1a
}
- return n
+ if len(m.SrcValidatorAddr) > 0 {
+ i -= len(m.SrcValidatorAddr)
+ copy(dAtA[i:], m.SrcValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.SrcValidatorAddr)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
}
-func (m *QueryDelegatorValidatorResponse) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryRedelegationsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
+ return dAtA[:n], nil
+}
+
+func (m *QueryRedelegationsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryRedelegationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- l = m.Validator.Size()
- n += 1 + l + sovQuery(uint64(l))
- return n
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.RedelegationResponses) > 0 {
+ for iNdEx := len(m.RedelegationResponses) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.RedelegationResponses[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
}
-func (m *QueryHistoricalInfoRequest) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryDelegatorValidatorsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
+ return dAtA[:n], nil
+}
+
+func (m *QueryDelegatorValidatorsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if m.Height != 0 {
- n += 1 + sovQuery(uint64(m.Height))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
}
- return n
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
}
-func (m *QueryHistoricalInfoResponse) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryDelegatorValidatorsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
}
+ return dAtA[:n], nil
+}
+
+func (m *QueryDelegatorValidatorsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
var l int
_ = l
- if m.Hist != nil {
- l = m.Hist.Size()
- n += 1 + l + sovQuery(uint64(l))
+ if m.Pagination != nil {
+ {
+ size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
}
- return n
+ if len(m.Validators) > 0 {
+ for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
}
-func (m *QueryPoolRequest) Size() (n int) {
- if m == nil {
+func (m *QueryDelegatorValidatorRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryDelegatorValidatorRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorValidatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ValidatorAddr) > 0 {
+ i -= len(m.ValidatorAddr)
+ copy(dAtA[i:], m.ValidatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddr)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddr) > 0 {
+ i -= len(m.DelegatorAddr)
+ copy(dAtA[i:], m.DelegatorAddr)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.DelegatorAddr)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryDelegatorValidatorResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryDelegatorValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryDelegatorValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryHistoricalInfoRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryHistoricalInfoRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryHistoricalInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Height != 0 {
+ i = encodeVarintQuery(dAtA, i, uint64(m.Height))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryHistoricalInfoResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryHistoricalInfoResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryHistoricalInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Hist != nil {
+ {
+ size, err := m.Hist.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryPoolRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryPoolRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryPoolRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryPoolResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryPoolResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryPoolResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Pool.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Params.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareRecordByIdRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareRecordByIdRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareRecordByIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Id != 0 {
+ i = encodeVarintQuery(dAtA, i, uint64(m.Id))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareRecordByIdResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareRecordByIdResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareRecordByIdResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Record.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareRecordByDenomRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareRecordByDenomRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareRecordByDenomRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Denom) > 0 {
+ i -= len(m.Denom)
+ copy(dAtA[i:], m.Denom)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareRecordByDenomResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareRecordByDenomResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareRecordByDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Record.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareRecordsOwnedRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareRecordsOwnedRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareRecordsOwnedRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Owner) > 0 {
+ i -= len(m.Owner)
+ copy(dAtA[i:], m.Owner)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareRecordsOwnedResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareRecordsOwnedResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareRecordsOwnedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Records) > 0 {
+ for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryAllTokenizeShareRecordsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryAllTokenizeShareRecordsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryAllTokenizeShareRecordsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryAllTokenizeShareRecordsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryAllTokenizeShareRecordsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryAllTokenizeShareRecordsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Records) > 0 {
+ for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- {
+ {
+ size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryLastTokenizeShareRecordIdRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryLastTokenizeShareRecordIdRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryLastTokenizeShareRecordIdRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryLastTokenizeShareRecordIdResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryLastTokenizeShareRecordIdResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryLastTokenizeShareRecordIdResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.Id != 0 {
+ i = encodeVarintQuery(dAtA, i, uint64(m.Id))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTotalTokenizeSharedAssetsRequest) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTotalTokenizeSharedAssetsRequest) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTotalTokenizeSharedAssetsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTotalTokenizeSharedAssetsResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTotalTokenizeSharedAssetsResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTotalTokenizeSharedAssetsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Value.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTotalLiquidStaked) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTotalLiquidStaked) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTotalLiquidStaked) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTotalLiquidStakedResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTotalLiquidStakedResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTotalLiquidStakedResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size := m.Tokens.Size()
+ i -= size
+ if _, err := m.Tokens.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintQuery(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareLockInfo) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareLockInfo) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareLockInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Address) > 0 {
+ i -= len(m.Address)
+ copy(dAtA[i:], m.Address)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.Address)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *QueryTokenizeShareLockInfoResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *QueryTokenizeShareLockInfoResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *QueryTokenizeShareLockInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ExpirationTime) > 0 {
+ i -= len(m.ExpirationTime)
+ copy(dAtA[i:], m.ExpirationTime)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.ExpirationTime)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.Status) > 0 {
+ i -= len(m.Status)
+ copy(dAtA[i:], m.Status)
+ i = encodeVarintQuery(dAtA, i, uint64(len(m.Status)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func encodeVarintQuery(dAtA []byte, offset int, v uint64) int {
+ offset -= sovQuery(v)
+ base := offset
+ for v >= 1<<7 {
+ dAtA[offset] = uint8(v&0x7f | 0x80)
+ v >>= 7
+ offset++
+ }
+ dAtA[offset] = uint8(v)
+ return base
+}
+func (m *QueryValidatorsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Status)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryValidatorsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Validators) > 0 {
+ for _, e := range m.Validators {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryValidatorRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryValidatorResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Validator.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryValidatorDelegationsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryValidatorDelegationsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.DelegationResponses) > 0 {
+ for _, e := range m.DelegationResponses {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryValidatorUnbondingDelegationsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryValidatorUnbondingDelegationsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.UnbondingResponses) > 0 {
+ for _, e := range m.UnbondingResponses {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegationRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ l = len(m.ValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegationResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.DelegationResponse != nil {
+ l = m.DelegationResponse.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryUnbondingDelegationRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ l = len(m.ValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryUnbondingDelegationResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Unbond.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryDelegatorDelegationsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorDelegationsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.DelegationResponses) > 0 {
+ for _, e := range m.DelegationResponses {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorUnbondingDelegationsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorUnbondingDelegationsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.UnbondingResponses) > 0 {
+ for _, e := range m.UnbondingResponses {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryRedelegationsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ l = len(m.SrcValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ l = len(m.DstValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryRedelegationsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.RedelegationResponses) > 0 {
+ for _, e := range m.RedelegationResponses {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorValidatorsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorValidatorsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Validators) > 0 {
+ for _, e := range m.Validators {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ if m.Pagination != nil {
+ l = m.Pagination.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorValidatorRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ l = len(m.ValidatorAddr)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryDelegatorValidatorResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Validator.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryHistoricalInfoRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Height != 0 {
+ n += 1 + sovQuery(uint64(m.Height))
+ }
+ return n
+}
+
+func (m *QueryHistoricalInfoResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Hist != nil {
+ l = m.Hist.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryPoolRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *QueryPoolResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Pool.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryParamsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *QueryParamsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Params.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryTokenizeShareRecordByIdRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Id != 0 {
+ n += 1 + sovQuery(uint64(m.Id))
+ }
+ return n
+}
+
+func (m *QueryTokenizeShareRecordByIdResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Record.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryTokenizeShareRecordByDenomRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Denom)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryTokenizeShareRecordByDenomResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Record.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryTokenizeShareRecordsOwnedRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Owner)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryTokenizeShareRecordsOwnedResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Records) > 0 {
+ for _, e := range m.Records {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *QueryAllTokenizeShareRecordsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *QueryAllTokenizeShareRecordsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Records) > 0 {
+ for _, e := range m.Records {
+ l = e.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ }
+ return n
+}
+
+func (m *QueryLastTokenizeShareRecordIdRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *QueryLastTokenizeShareRecordIdResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Id != 0 {
+ n += 1 + sovQuery(uint64(m.Id))
+ }
+ return n
+}
+
+func (m *QueryTotalTokenizeSharedAssetsRequest) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *QueryTotalTokenizeSharedAssetsResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Value.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryTotalLiquidStaked) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *QueryTotalLiquidStakedResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Tokens.Size()
+ n += 1 + l + sovQuery(uint64(l))
+ return n
+}
+
+func (m *QueryTokenizeShareLockInfo) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.Address)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func (m *QueryTokenizeShareLockInfoResponse) Size() (n int) {
+ if m == nil {
return 0
}
- var l int
- _ = l
- return n
-}
+ var l int
+ _ = l
+ l = len(m.Status)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ l = len(m.ExpirationTime)
+ if l > 0 {
+ n += 1 + l + sovQuery(uint64(l))
+ }
+ return n
+}
+
+func sovQuery(x uint64) (n int) {
+ return (math_bits.Len64(x|1) + 6) / 7
+}
+func sozQuery(x uint64) (n int) {
+ return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Status = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageRequest{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Validators = append(m.Validators, Validator{})
+ if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageResponse{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorDelegationsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageRequest{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorDelegationsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{})
+ if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageResponse{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageRequest{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{})
+ if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageResponse{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryDelegationRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryDelegationResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponse", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.DelegationResponse == nil {
+ m.DelegationResponse = &DelegationResponse{}
+ }
+ if err := m.DelegationResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryUnbondingDelegationRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryUnbondingDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
-func (m *QueryPoolResponse) Size() (n int) {
- if m == nil {
- return 0
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
}
- var l int
- _ = l
- l = m.Pool.Size()
- n += 1 + l + sovQuery(uint64(l))
- return n
+ return nil
}
-
-func (m *QueryParamsRequest) Size() (n int) {
- if m == nil {
- return 0
+func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryUnbondingDelegationResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryUnbondingDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Unbond", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Unbond.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
}
- var l int
- _ = l
- return n
-}
-func (m *QueryParamsResponse) Size() (n int) {
- if m == nil {
- return 0
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
}
- var l int
- _ = l
- l = m.Params.Size()
- n += 1 + l + sovQuery(uint64(l))
- return n
-}
-
-func sovQuery(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozQuery(x uint64) (n int) {
- return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+ return nil
}
-func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -3670,15 +6685,15 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -3706,7 +6721,7 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Status = string(dAtA[iNdEx:postIndex])
+ m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@@ -3765,7 +6780,7 @@ func (m *QueryValidatorsRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -3788,15 +6803,15 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -3823,8 +6838,8 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.Validators = append(m.Validators, Validator{})
- if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{})
+ if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -3885,7 +6900,7 @@ func (m *QueryValidatorsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -3908,15 +6923,15 @@ func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -3944,7 +6959,43 @@ func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pagination == nil {
+ m.Pagination = &query.PageRequest{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -3967,7 +7018,7 @@ func (m *QueryValidatorRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -3990,15 +7041,49 @@ func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{})
+ if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -4025,7 +7110,10 @@ func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if m.Pagination == nil {
+ m.Pagination = &query.PageResponse{}
+ }
+ if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -4050,7 +7138,7 @@ func (m *QueryValidatorResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4073,15 +7161,15 @@ func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorDelegationsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryRedelegationsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryRedelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -4109,9 +7197,73 @@ func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field SrcValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.SrcValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DstValidatorAddr", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DstValidatorAddr = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
}
@@ -4168,7 +7320,7 @@ func (m *QueryValidatorDelegationsRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4191,15 +7343,15 @@ func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorDelegationsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryRedelegationsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryRedelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field RedelegationResponses", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -4226,8 +7378,8 @@ func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{})
- if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ m.RedelegationResponses = append(m.RedelegationResponses, RedelegationResponse{})
+ if err := m.RedelegationResponses[len(m.RedelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -4288,7 +7440,7 @@ func (m *QueryValidatorDelegationsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4311,15 +7463,15 @@ func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -4347,7 +7499,7 @@ func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
+ m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@@ -4406,7 +7558,7 @@ func (m *QueryValidatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error
}
return nil
}
-func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4429,15 +7581,15 @@ func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryValidatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -4464,8 +7616,8 @@ func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{})
- if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ m.Validators = append(m.Validators, Validator{})
+ if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -4526,7 +7678,7 @@ func (m *QueryValidatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro
}
return nil
}
-func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4549,10 +7701,10 @@ func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorValidatorRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -4640,7 +7792,7 @@ func (m *QueryDelegationRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4663,15 +7815,15 @@ func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegationResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryDelegatorValidatorResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryDelegatorValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponse", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -4698,10 +7850,7 @@ func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.DelegationResponse == nil {
- m.DelegationResponse = &DelegationResponse{}
- }
- if err := m.DelegationResponse.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -4726,7 +7875,7 @@ func (m *QueryDelegationResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4749,17 +7898,17 @@ func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryUnbondingDelegationRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryHistoricalInfoRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryUnbondingDelegationRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryHistoricalInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType)
}
- var stringLen uint64
+ m.Height = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -4769,29 +7918,66 @@ func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ m.Height |= int64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
- if postIndex > l {
+ if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
- m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryHistoricalInfoResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryHistoricalInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Hist", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -4801,24 +7987,78 @@ func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return ErrInvalidLengthQuery
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
- if postIndex > l {
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Hist == nil {
+ m.Hist = &HistoricalInfo{}
+ }
+ if err := m.Hist.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
return io.ErrUnexpectedEOF
}
- m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryPoolRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -4840,7 +8080,7 @@ func (m *QueryUnbondingDelegationRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4863,15 +8103,15 @@ func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryUnbondingDelegationResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryPoolResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryUnbondingDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Unbond", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -4898,7 +8138,7 @@ func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Unbond.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -4923,7 +8163,7 @@ func (m *QueryUnbondingDelegationResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -4946,80 +8186,12 @@ func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Pagination == nil {
- m.Pagination = &query.PageRequest{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -5041,7 +8213,7 @@ func (m *QueryDelegatorDelegationsRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5064,49 +8236,15 @@ func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegationResponses", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.DelegationResponses = append(m.DelegationResponses, DelegationResponse{})
- if err := m.DelegationResponses[len(m.DelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -5133,10 +8271,7 @@ func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Pagination == nil {
- m.Pagination = &query.PageResponse{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -5161,7 +8296,7 @@ func (m *QueryDelegatorDelegationsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareRecordByIdRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5184,49 +8319,17 @@ func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByIdRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByIdRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
}
- var msglen int
+ m.Id = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -5236,28 +8339,11 @@ func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ m.Id |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.Pagination == nil {
- m.Pagination = &query.PageRequest{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -5279,7 +8365,7 @@ func (m *QueryDelegatorUnbondingDelegationsRequest) Unmarshal(dAtA []byte) error
}
return nil
}
-func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareRecordByIdResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5302,49 +8388,15 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: wiretype end group for non-group")
- }
- if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorUnbondingDelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
- }
- switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field UnbondingResponses", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.UnbondingResponses = append(m.UnbondingResponses, UnbondingDelegation{})
- if err := m.UnbondingResponses[len(m.UnbondingResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByIdResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByIdResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Record", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -5371,10 +8423,7 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Pagination == nil {
- m.Pagination = &query.PageResponse{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Record.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -5399,7 +8448,7 @@ func (m *QueryDelegatorUnbondingDelegationsResponse) Unmarshal(dAtA []byte) erro
}
return nil
}
-func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareRecordByDenomRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5422,15 +8471,15 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryRedelegationsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryRedelegationsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -5458,75 +8507,61 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
+ m.Denom = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field SrcValidatorAddr", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
- if postIndex > l {
+ if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
- m.SrcValidatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DstValidatorAddr", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryTokenizeShareRecordByDenomResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
}
- if postIndex > l {
+ if iNdEx >= l {
return io.ErrUnexpectedEOF
}
- m.DstValidatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryTokenizeShareRecordByDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Record", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -5553,10 +8588,7 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Pagination == nil {
- m.Pagination = &query.PageRequest{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Record.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -5581,7 +8613,7 @@ func (m *QueryRedelegationsRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareRecordsOwnedRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5604,51 +8636,17 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryRedelegationsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryRedelegationsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field RedelegationResponses", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.RedelegationResponses = append(m.RedelegationResponses, RedelegationResponse{})
- if err := m.RedelegationResponses[len(m.RedelegationResponses)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -5658,27 +8656,23 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return ErrInvalidLengthQuery
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Pagination == nil {
- m.Pagination = &query.PageResponse{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.Owner = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -5701,7 +8695,7 @@ func (m *QueryRedelegationsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareRecordsOwnedResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5724,17 +8718,17 @@ func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTokenizeShareRecordsOwnedResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -5744,60 +8738,76 @@ func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return ErrInvalidLengthQuery
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
+ m.Records = append(m.Records, TokenizeShareRecord{})
+ if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
}
- if msglen < 0 {
- return ErrInvalidLengthQuery
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipQuery(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- postIndex := iNdEx + msglen
- if postIndex < 0 {
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
return ErrInvalidLengthQuery
}
- if postIndex > l {
+ if (iNdEx + skippy) > l {
return io.ErrUnexpectedEOF
}
- if m.Pagination == nil {
- m.Pagination = &query.PageRequest{}
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *QueryAllTokenizeShareRecordsRequest) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
}
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
}
- iNdEx = postIndex
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: QueryAllTokenizeShareRecordsRequest: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: QueryAllTokenizeShareRecordsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -5819,7 +8829,7 @@ func (m *QueryDelegatorValidatorsRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryAllTokenizeShareRecordsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5842,49 +8852,15 @@ func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryAllTokenizeShareRecordsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryAllTokenizeShareRecordsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.Validators = append(m.Validators, Validator{})
- if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -5911,10 +8887,8 @@ func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Pagination == nil {
- m.Pagination = &query.PageResponse{}
- }
- if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ m.Records = append(m.Records, TokenizeShareRecord{})
+ if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -5939,7 +8913,7 @@ func (m *QueryDelegatorValidatorsResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryLastTokenizeShareRecordIdRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -5962,76 +8936,12 @@ func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorValidatorRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorValidatorRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddr", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.DelegatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddr", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorAddr = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -6053,7 +8963,7 @@ func (m *QueryDelegatorValidatorRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryLastTokenizeShareRecordIdResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6076,17 +8986,17 @@ func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryDelegatorValidatorResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryDelegatorValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryLastTokenizeShareRecordIdResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType)
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
}
- var msglen int
+ m.Id = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -6096,25 +9006,11 @@ func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ m.Id |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
- return ErrInvalidLengthQuery
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthQuery
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -6136,7 +9032,7 @@ func (m *QueryDelegatorValidatorResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryTotalTokenizeSharedAssetsRequest) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6159,31 +9055,12 @@ func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryHistoricalInfoRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsRequest: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryHistoricalInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 0 {
- return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType)
- }
- m.Height = 0
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowQuery
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- m.Height |= int64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -6205,7 +9082,7 @@ func (m *QueryHistoricalInfoRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryTotalTokenizeSharedAssetsResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6228,15 +9105,15 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryHistoricalInfoResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryHistoricalInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTotalTokenizeSharedAssetsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Hist", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -6263,10 +9140,7 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Hist == nil {
- m.Hist = &HistoricalInfo{}
- }
- if err := m.Hist.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -6291,7 +9165,7 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryTotalLiquidStaked) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6314,10 +9188,10 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryPoolRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTotalLiquidStaked: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryPoolRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTotalLiquidStaked: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
@@ -6341,7 +9215,7 @@ func (m *QueryPoolRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryTotalLiquidStakedResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6364,17 +9238,17 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryPoolResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTotalLiquidStakedResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryPoolResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTotalLiquidStakedResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pool", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Tokens", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -6384,22 +9258,23 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return ErrInvalidLengthQuery
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Pool.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Tokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -6424,7 +9299,7 @@ func (m *QueryPoolResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareLockInfo) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6447,12 +9322,44 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTokenizeShareLockInfo: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTokenizeShareLockInfo: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Address = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])
@@ -6474,7 +9381,7 @@ func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
+func (m *QueryTokenizeShareLockInfoResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -6497,17 +9404,17 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: QueryTokenizeShareLockInfoResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: QueryTokenizeShareLockInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
@@ -6517,24 +9424,55 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return ErrInvalidLengthQuery
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
+ m.Status = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ExpirationTime", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowQuery
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthQuery
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthQuery
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
}
+ m.ExpirationTime = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go
index 5165724ac96..ea71b3ba8fd 100644
--- a/x/staking/types/staking.pb.go
+++ b/x/staking/types/staking.pb.go
@@ -109,6 +109,43 @@ func (InfractionType) EnumDescriptor() ([]byte, []int) {
return fileDescriptor_64c30c6cf92913c9, []int{1}
}
+// TokenizeShareLockStatus indicates whether the address is able to tokenize shares
+type TokenizeShareLockStatus int32
+
+const (
+ // UNSPECIFIED defines an empty tokenize share lock status
+ TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED TokenizeShareLockStatus = 0
+ // LOCKED indicates the account is locked and cannot tokenize shares
+ TOKENIZE_SHARE_LOCK_STATUS_LOCKED TokenizeShareLockStatus = 1
+ // UNLOCKED indicates the account is unlocked and can tokenize shares
+ TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED TokenizeShareLockStatus = 2
+ // LOCK_EXPIRING indicates the account is unable to tokenize shares, but
+ // will be able to tokenize shortly (after 1 unbonding period)
+ TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING TokenizeShareLockStatus = 3
+)
+
+var TokenizeShareLockStatus_name = map[int32]string{
+ 0: "TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED",
+ 1: "TOKENIZE_SHARE_LOCK_STATUS_LOCKED",
+ 2: "TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED",
+ 3: "TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING",
+}
+
+var TokenizeShareLockStatus_value = map[string]int32{
+ "TOKENIZE_SHARE_LOCK_STATUS_UNSPECIFIED": 0,
+ "TOKENIZE_SHARE_LOCK_STATUS_LOCKED": 1,
+ "TOKENIZE_SHARE_LOCK_STATUS_UNLOCKED": 2,
+ "TOKENIZE_SHARE_LOCK_STATUS_LOCK_EXPIRING": 3,
+}
+
+func (x TokenizeShareLockStatus) String() string {
+ return proto.EnumName(TokenizeShareLockStatus_name, int32(x))
+}
+
+func (TokenizeShareLockStatus) EnumDescriptor() ([]byte, []int) {
+ return fileDescriptor_64c30c6cf92913c9, []int{2}
+}
+
// HistoricalInfo contains header and validator information for a given block.
// It is stored as part of staking module's state, which persists the `n` most
// recent HistoricalInfo
@@ -365,12 +402,14 @@ type Validator struct {
UnbondingTime time.Time `protobuf:"bytes,9,opt,name=unbonding_time,json=unbondingTime,proto3,stdtime" json:"unbonding_time" yaml:"unbonding_time"`
// commission defines the commission parameters.
Commission Commission `protobuf:"bytes,10,opt,name=commission,proto3" json:"commission"`
- // min_self_delegation is the validator's self declared minimum self delegation.
- MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,11,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation" yaml:"min_self_delegation"`
// strictly positive if this validator's unbonding has been stopped by external modules
UnbondingOnHoldRefCount int64 `protobuf:"varint,12,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"`
// list of unbonding ids, each uniquely identifing an unbonding of this validator
UnbondingIds []uint64 `protobuf:"varint,13,rep,packed,name=unbonding_ids,json=unbondingIds,proto3" json:"unbonding_ids,omitempty"`
+ // Number of shares self bonded from the validator
+ TotalValidatorBondShares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,14,opt,name=total_validator_bond_shares,json=totalValidatorBondShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"total_validator_bond_shares" yaml:"total_validator_bond_shares"`
+ // Total number of shares either tokenized or owned by a liquid staking provider
+ TotalLiquidShares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,15,opt,name=total_liquid_shares,json=totalLiquidShares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"total_liquid_shares" yaml:"total_liquid_shares"`
}
func (m *Validator) Reset() { *m = Validator{} }
@@ -631,6 +670,8 @@ type Delegation struct {
ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"`
// shares define the delegation shares received.
Shares github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=shares,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"shares"`
+ // has this delegation been marked as a validator self bond.
+ ValidatorBond bool `protobuf:"varint,4,opt,name=validator_bond,json=validatorBond,proto3" json:"validator_bond,omitempty"`
}
func (m *Delegation) Reset() { *m = Delegation{} }
@@ -917,6 +958,17 @@ type Params struct {
HistoricalEntries uint32 `protobuf:"varint,4,opt,name=historical_entries,json=historicalEntries,proto3" json:"historical_entries,omitempty" yaml:"historical_entries"`
// bond_denom defines the bondable coin denomination.
BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty" yaml:"bond_denom"`
+ // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators
+ MinCommissionRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=min_commission_rate,json=minCommissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_commission_rate" yaml:"min_commission_rate"`
+ // validator_bond_factor is required as a safety check for tokenizing shares and
+ // delegations from liquid staking providers
+ ValidatorBondFactor github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,7,opt,name=validator_bond_factor,json=validatorBondFactor,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"validator_bond_factor" yaml:"validator_bond_factor"`
+ // global_liquid_staking_cap represents a cap on the portion of stake that
+ // comes from liquid staking providers
+ GlobalLiquidStakingCap github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,8,opt,name=global_liquid_staking_cap,json=globalLiquidStakingCap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"global_liquid_staking_cap" yaml:"global_liquid_staking_cap"`
+ // validator_liquid_staking_cap represents a cap on the portion of stake that
+ // comes from liquid staking providers for a specific validator
+ ValidatorLiquidStakingCap github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,9,opt,name=validator_liquid_staking_cap,json=validatorLiquidStakingCap,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"validator_liquid_staking_cap" yaml:"validator_liquid_staking_cap"`
}
func (m *Params) Reset() { *m = Params{} }
@@ -1227,9 +1279,125 @@ func (m *ValidatorUpdates) GetUpdates() []types3.ValidatorUpdate {
return nil
}
+// TokenizeShareRecord represents a tokenized delegation
+type TokenizeShareRecord struct {
+ Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
+ Owner string `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"`
+ ModuleAccount string `protobuf:"bytes,3,opt,name=module_account,json=moduleAccount,proto3" json:"module_account,omitempty"`
+ Validator string `protobuf:"bytes,4,opt,name=validator,proto3" json:"validator,omitempty"`
+}
+
+func (m *TokenizeShareRecord) Reset() { *m = TokenizeShareRecord{} }
+func (m *TokenizeShareRecord) String() string { return proto.CompactTextString(m) }
+func (*TokenizeShareRecord) ProtoMessage() {}
+func (*TokenizeShareRecord) Descriptor() ([]byte, []int) {
+ return fileDescriptor_64c30c6cf92913c9, []int{21}
+}
+func (m *TokenizeShareRecord) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *TokenizeShareRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_TokenizeShareRecord.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *TokenizeShareRecord) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_TokenizeShareRecord.Merge(m, src)
+}
+func (m *TokenizeShareRecord) XXX_Size() int {
+ return m.Size()
+}
+func (m *TokenizeShareRecord) XXX_DiscardUnknown() {
+ xxx_messageInfo_TokenizeShareRecord.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TokenizeShareRecord proto.InternalMessageInfo
+
+func (m *TokenizeShareRecord) GetId() uint64 {
+ if m != nil {
+ return m.Id
+ }
+ return 0
+}
+
+func (m *TokenizeShareRecord) GetOwner() string {
+ if m != nil {
+ return m.Owner
+ }
+ return ""
+}
+
+func (m *TokenizeShareRecord) GetModuleAccount() string {
+ if m != nil {
+ return m.ModuleAccount
+ }
+ return ""
+}
+
+func (m *TokenizeShareRecord) GetValidator() string {
+ if m != nil {
+ return m.Validator
+ }
+ return ""
+}
+
+// PendingTokenizeShareAuthorizations stores a list of addresses that have their
+// tokenize share enablement in progress
+type PendingTokenizeShareAuthorizations struct {
+ Addresses []string `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"`
+}
+
+func (m *PendingTokenizeShareAuthorizations) Reset() { *m = PendingTokenizeShareAuthorizations{} }
+func (m *PendingTokenizeShareAuthorizations) String() string { return proto.CompactTextString(m) }
+func (*PendingTokenizeShareAuthorizations) ProtoMessage() {}
+func (*PendingTokenizeShareAuthorizations) Descriptor() ([]byte, []int) {
+ return fileDescriptor_64c30c6cf92913c9, []int{22}
+}
+func (m *PendingTokenizeShareAuthorizations) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *PendingTokenizeShareAuthorizations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_PendingTokenizeShareAuthorizations.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *PendingTokenizeShareAuthorizations) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_PendingTokenizeShareAuthorizations.Merge(m, src)
+}
+func (m *PendingTokenizeShareAuthorizations) XXX_Size() int {
+ return m.Size()
+}
+func (m *PendingTokenizeShareAuthorizations) XXX_DiscardUnknown() {
+ xxx_messageInfo_PendingTokenizeShareAuthorizations.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PendingTokenizeShareAuthorizations proto.InternalMessageInfo
+
+func (m *PendingTokenizeShareAuthorizations) GetAddresses() []string {
+ if m != nil {
+ return m.Addresses
+ }
+ return nil
+}
+
func init() {
proto.RegisterEnum("cosmos.staking.v1beta1.BondStatus", BondStatus_name, BondStatus_value)
proto.RegisterEnum("cosmos.staking.v1beta1.InfractionType", InfractionType_name, InfractionType_value)
+ proto.RegisterEnum("cosmos.staking.v1beta1.TokenizeShareLockStatus", TokenizeShareLockStatus_name, TokenizeShareLockStatus_value)
proto.RegisterType((*HistoricalInfo)(nil), "cosmos.staking.v1beta1.HistoricalInfo")
proto.RegisterType((*CommissionRates)(nil), "cosmos.staking.v1beta1.CommissionRates")
proto.RegisterType((*Commission)(nil), "cosmos.staking.v1beta1.Commission")
@@ -1251,6 +1419,8 @@ func init() {
proto.RegisterType((*RedelegationResponse)(nil), "cosmos.staking.v1beta1.RedelegationResponse")
proto.RegisterType((*Pool)(nil), "cosmos.staking.v1beta1.Pool")
proto.RegisterType((*ValidatorUpdates)(nil), "cosmos.staking.v1beta1.ValidatorUpdates")
+ proto.RegisterType((*TokenizeShareRecord)(nil), "cosmos.staking.v1beta1.TokenizeShareRecord")
+ proto.RegisterType((*PendingTokenizeShareAuthorizations)(nil), "cosmos.staking.v1beta1.PendingTokenizeShareAuthorizations")
}
func init() {
@@ -1258,927 +1428,1024 @@ func init() {
}
var fileDescriptor_64c30c6cf92913c9 = []byte{
- // 2021 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x4f, 0x6c, 0x23, 0x57,
- 0x19, 0xf7, 0xd8, 0xae, 0xe3, 0x7c, 0x4e, 0xe2, 0xe4, 0x6d, 0x76, 0xd7, 0xf1, 0x2e, 0xb6, 0x77,
- 0x5a, 0x95, 0xb0, 0x6a, 0x1d, 0x36, 0xad, 0x8a, 0x88, 0x90, 0x68, 0x1c, 0x3b, 0x8d, 0xd5, 0x6d,
- 0x36, 0x8c, 0x9d, 0x54, 0x40, 0xc5, 0x68, 0x3c, 0xf3, 0xe2, 0x0c, 0xb1, 0x67, 0xcc, 0xbc, 0xe7,
- 0x6d, 0x2c, 0xf5, 0xc0, 0xb1, 0x84, 0x03, 0xe5, 0xd6, 0x4b, 0xa4, 0x95, 0x7a, 0x42, 0x42, 0xe2,
- 0x82, 0xb8, 0x72, 0x2d, 0x70, 0x59, 0x6e, 0x08, 0x21, 0x83, 0x76, 0x2f, 0x88, 0x03, 0xaa, 0x72,
- 0x40, 0xdc, 0x40, 0xef, 0xcf, 0xfc, 0xc9, 0x38, 0xd9, 0xdd, 0xac, 0x2a, 0x54, 0x89, 0x5e, 0x76,
- 0xfd, 0xbe, 0xf7, 0x7d, 0xbf, 0xef, 0x7d, 0xff, 0xdf, 0x9b, 0xc0, 0x4b, 0xa6, 0x4b, 0xfa, 0x2e,
- 0x59, 0x21, 0xd4, 0x38, 0xb4, 0x9d, 0xee, 0xca, 0xfd, 0x3b, 0x1d, 0x4c, 0x8d, 0x3b, 0xfe, 0xba,
- 0x3a, 0xf0, 0x5c, 0xea, 0xa2, 0x6b, 0x82, 0xab, 0xea, 0x53, 0x25, 0x57, 0x71, 0xb1, 0xeb, 0x76,
- 0x5d, 0xce, 0xb2, 0xc2, 0x7e, 0x09, 0xee, 0xe2, 0x52, 0xd7, 0x75, 0xbb, 0x3d, 0xbc, 0xc2, 0x57,
- 0x9d, 0xe1, 0xfe, 0x8a, 0xe1, 0x8c, 0xe4, 0x56, 0x29, 0xbe, 0x65, 0x0d, 0x3d, 0x83, 0xda, 0xae,
- 0x23, 0xf7, 0xcb, 0xf1, 0x7d, 0x6a, 0xf7, 0x31, 0xa1, 0x46, 0x7f, 0xe0, 0x63, 0x8b, 0x93, 0xe8,
- 0x42, 0xa9, 0x3c, 0x96, 0xc4, 0x96, 0xa6, 0x74, 0x0c, 0x82, 0x03, 0x3b, 0x4c, 0xd7, 0xf6, 0xb1,
- 0x6f, 0x52, 0xec, 0x58, 0xd8, 0xeb, 0xdb, 0x0e, 0x5d, 0xa1, 0xa3, 0x01, 0x26, 0xe2, 0x5f, 0xb9,
- 0x7b, 0x23, 0xb2, 0x6b, 0x74, 0x4c, 0x3b, 0xba, 0xa9, 0xfe, 0x44, 0x81, 0xb9, 0x2d, 0x9b, 0x50,
- 0xd7, 0xb3, 0x4d, 0xa3, 0xd7, 0x74, 0xf6, 0x5d, 0xf4, 0x06, 0x64, 0x0e, 0xb0, 0x61, 0x61, 0xaf,
- 0xa0, 0x54, 0x94, 0xe5, 0xdc, 0x6a, 0xa1, 0x1a, 0x02, 0x54, 0x85, 0xec, 0x16, 0xdf, 0xaf, 0xa5,
- 0x3f, 0x1d, 0x97, 0x13, 0x9a, 0xe4, 0x46, 0xdf, 0x86, 0xcc, 0x7d, 0xa3, 0x47, 0x30, 0x2d, 0x24,
- 0x2b, 0xa9, 0xe5, 0xdc, 0xea, 0xad, 0xea, 0xf9, 0xbe, 0xad, 0xee, 0x19, 0x3d, 0xdb, 0x32, 0xa8,
- 0x1b, 0x00, 0x08, 0x31, 0xf5, 0x57, 0x49, 0xc8, 0x6f, 0xb8, 0xfd, 0xbe, 0x4d, 0x88, 0xed, 0x3a,
- 0x9a, 0x41, 0x31, 0x41, 0x35, 0x48, 0x7b, 0x06, 0xc5, 0xfc, 0x28, 0xd3, 0xb5, 0x2a, 0xe3, 0xff,
- 0xf3, 0xb8, 0xfc, 0x72, 0xd7, 0xa6, 0x07, 0xc3, 0x4e, 0xd5, 0x74, 0xfb, 0xd2, 0x53, 0xf2, 0xbf,
- 0x57, 0x89, 0x75, 0x28, 0xed, 0xab, 0x63, 0x53, 0xe3, 0xb2, 0xe8, 0x3d, 0xc8, 0xf6, 0x8d, 0x23,
- 0x9d, 0xe3, 0x24, 0x39, 0xce, 0xfa, 0xe5, 0x70, 0x4e, 0xc7, 0xe5, 0xfc, 0xc8, 0xe8, 0xf7, 0xd6,
- 0x54, 0x1f, 0x47, 0xd5, 0xa6, 0xfa, 0xc6, 0x11, 0x3b, 0x22, 0x1a, 0x40, 0x9e, 0x51, 0xcd, 0x03,
- 0xc3, 0xe9, 0x62, 0xa1, 0x24, 0xc5, 0x95, 0x6c, 0x5d, 0x5a, 0xc9, 0xb5, 0x50, 0x49, 0x04, 0x4e,
- 0xd5, 0x66, 0xfb, 0xc6, 0xd1, 0x06, 0x27, 0x30, 0x8d, 0x6b, 0xd9, 0x8f, 0x1f, 0x94, 0x13, 0x7f,
- 0x7f, 0x50, 0x56, 0xd4, 0x3f, 0x2a, 0x00, 0xa1, 0xc7, 0xd0, 0x7b, 0x30, 0x6f, 0x06, 0x2b, 0x2e,
- 0x4b, 0x64, 0x0c, 0xbf, 0x7a, 0x51, 0x2c, 0x62, 0xfe, 0xae, 0x65, 0xd9, 0xa1, 0x1f, 0x8e, 0xcb,
- 0x8a, 0x96, 0x37, 0x63, 0xa1, 0xf8, 0x3e, 0xe4, 0x86, 0x03, 0xcb, 0xa0, 0x58, 0x67, 0xa9, 0xcb,
- 0x3d, 0x99, 0x5b, 0x2d, 0x56, 0x45, 0x5e, 0x57, 0xfd, 0xbc, 0xae, 0xb6, 0xfd, 0xbc, 0xae, 0x95,
- 0x18, 0xd6, 0xe9, 0xb8, 0x8c, 0x84, 0x59, 0x11, 0x61, 0xf5, 0xa3, 0xbf, 0x96, 0x15, 0x0d, 0x04,
- 0x85, 0x09, 0x44, 0x6c, 0xfa, 0x9d, 0x02, 0xb9, 0x3a, 0x26, 0xa6, 0x67, 0x0f, 0x58, 0xf9, 0xa0,
- 0x02, 0x4c, 0xf5, 0x5d, 0xc7, 0x3e, 0x94, 0xf9, 0x38, 0xad, 0xf9, 0x4b, 0x54, 0x84, 0xac, 0x6d,
- 0x61, 0x87, 0xda, 0x74, 0x24, 0xe2, 0xaa, 0x05, 0x6b, 0x26, 0xf5, 0x3e, 0xee, 0x10, 0xdb, 0x8f,
- 0x86, 0xe6, 0x2f, 0xd1, 0x26, 0xcc, 0x13, 0x6c, 0x0e, 0x3d, 0x9b, 0x8e, 0x74, 0xd3, 0x75, 0xa8,
- 0x61, 0xd2, 0x42, 0x9a, 0x07, 0xec, 0xc6, 0xe9, 0xb8, 0x7c, 0x5d, 0x9c, 0x35, 0xce, 0xa1, 0x6a,
- 0x79, 0x9f, 0xb4, 0x21, 0x28, 0x4c, 0x83, 0x85, 0xa9, 0x61, 0xf7, 0x48, 0xe1, 0x05, 0xa1, 0x41,
- 0x2e, 0x23, 0xb6, 0xfc, 0x2c, 0x0b, 0xd3, 0x41, 0xb6, 0x33, 0xcd, 0xee, 0x00, 0x7b, 0xec, 0xb7,
- 0x6e, 0x58, 0x96, 0x87, 0x09, 0x91, 0x79, 0x1d, 0xd1, 0x1c, 0xe7, 0x50, 0xb5, 0xbc, 0x4f, 0x5a,
- 0x17, 0x14, 0x44, 0x59, 0x98, 0x1d, 0x82, 0x1d, 0x32, 0x24, 0xfa, 0x60, 0xd8, 0x39, 0xc4, 0x23,
- 0x19, 0x8d, 0xc5, 0x89, 0x68, 0xac, 0x3b, 0xa3, 0xda, 0x6b, 0x21, 0x7a, 0x5c, 0x4e, 0xfd, 0xfd,
- 0xaf, 0x5f, 0x5d, 0x94, 0xa9, 0x61, 0x7a, 0xa3, 0x01, 0x75, 0xab, 0x3b, 0xc3, 0xce, 0xdb, 0x78,
- 0xc4, 0xc2, 0x2f, 0x59, 0x77, 0x38, 0x27, 0xba, 0x06, 0x99, 0x1f, 0x1a, 0x76, 0x0f, 0x5b, 0xdc,
- 0xa1, 0x59, 0x4d, 0xae, 0xd0, 0x1a, 0x64, 0x08, 0x35, 0xe8, 0x90, 0x70, 0x2f, 0xce, 0xad, 0xaa,
- 0x17, 0xa5, 0x5a, 0xcd, 0x75, 0xac, 0x16, 0xe7, 0xd4, 0xa4, 0x04, 0xda, 0x84, 0x0c, 0x75, 0x0f,
- 0xb1, 0x23, 0x5d, 0x78, 0xa9, 0xfa, 0x6e, 0x3a, 0x54, 0x93, 0xd2, 0xcc, 0x23, 0x16, 0xee, 0xe1,
- 0x2e, 0x77, 0x1c, 0x39, 0x30, 0x3c, 0x4c, 0x0a, 0x19, 0x8e, 0xd8, 0xbc, 0x74, 0x11, 0x4a, 0x4f,
- 0xc5, 0xf1, 0x54, 0x2d, 0x1f, 0x90, 0x5a, 0x9c, 0x82, 0xde, 0x86, 0x9c, 0x15, 0x26, 0x6a, 0x61,
- 0x8a, 0x87, 0xe0, 0xc5, 0x8b, 0xcc, 0x8f, 0xe4, 0xb4, 0xec, 0x7b, 0x51, 0x69, 0x96, 0x1c, 0x43,
- 0xa7, 0xe3, 0x3a, 0x96, 0xed, 0x74, 0xf5, 0x03, 0x6c, 0x77, 0x0f, 0x68, 0x21, 0x5b, 0x51, 0x96,
- 0x53, 0xd1, 0xe4, 0x88, 0x73, 0xa8, 0x5a, 0x3e, 0x20, 0x6d, 0x71, 0x0a, 0xb2, 0x60, 0x2e, 0xe4,
- 0xe2, 0x85, 0x3a, 0xfd, 0xd4, 0x42, 0xbd, 0x25, 0x0b, 0xf5, 0x6a, 0x5c, 0x4b, 0x58, 0xab, 0xb3,
- 0x01, 0x91, 0x89, 0xa1, 0x2d, 0x80, 0xb0, 0x3d, 0x14, 0x80, 0x6b, 0x50, 0x9f, 0xde, 0x63, 0xa4,
- 0xe1, 0x11, 0x59, 0xf4, 0x01, 0x5c, 0xe9, 0xdb, 0x8e, 0x4e, 0x70, 0x6f, 0x5f, 0x97, 0x0e, 0x66,
- 0x90, 0x39, 0x1e, 0xbd, 0xbb, 0x97, 0xcb, 0x87, 0xd3, 0x71, 0xb9, 0x28, 0x5b, 0xe8, 0x24, 0xa4,
- 0xaa, 0x2d, 0xf4, 0x6d, 0xa7, 0x85, 0x7b, 0xfb, 0xf5, 0x80, 0x86, 0xbe, 0x05, 0x37, 0x42, 0x6b,
- 0x5d, 0x47, 0x3f, 0x70, 0x7b, 0x96, 0xee, 0xe1, 0x7d, 0xdd, 0x74, 0x87, 0x0e, 0x2d, 0xcc, 0xb0,
- 0x00, 0x68, 0xd7, 0x03, 0x96, 0x7b, 0xce, 0x96, 0xdb, 0xb3, 0x34, 0xbc, 0xbf, 0xc1, 0xb6, 0xd1,
- 0x8b, 0x10, 0xba, 0x45, 0xb7, 0x2d, 0x52, 0x98, 0xad, 0xa4, 0x96, 0xd3, 0xda, 0x4c, 0x40, 0x6c,
- 0x5a, 0x64, 0x6d, 0xe6, 0xc3, 0x07, 0xe5, 0x84, 0xec, 0x08, 0x09, 0xf5, 0x0d, 0x98, 0xd9, 0x33,
- 0x7a, 0xb2, 0x92, 0x31, 0x41, 0x37, 0x61, 0xda, 0xf0, 0x17, 0x05, 0xa5, 0x92, 0x5a, 0x9e, 0xd6,
- 0x42, 0x82, 0xe8, 0x24, 0x3f, 0xfe, 0x4b, 0x45, 0x51, 0x7f, 0xa9, 0x40, 0xa6, 0xbe, 0xb7, 0x63,
- 0xd8, 0x1e, 0x6a, 0xc2, 0x42, 0x98, 0x9c, 0x67, 0xfb, 0xc8, 0xcd, 0xd3, 0x71, 0xb9, 0x10, 0xcf,
- 0xdf, 0xa0, 0x91, 0x84, 0x35, 0xe2, 0x77, 0x92, 0x26, 0x2c, 0xdc, 0xf7, 0xdb, 0x53, 0x00, 0x95,
- 0x8c, 0x43, 0x4d, 0xb0, 0xa8, 0xda, 0x7c, 0x40, 0x93, 0x50, 0x31, 0x33, 0x1b, 0x30, 0x25, 0x4e,
- 0x4b, 0xd0, 0x1a, 0xbc, 0x30, 0x60, 0x3f, 0xb8, 0x75, 0xb9, 0xd5, 0xd2, 0x85, 0xf5, 0xc1, 0xf9,
- 0x65, 0x86, 0x08, 0x11, 0xf5, 0xe7, 0x49, 0x80, 0xfa, 0xde, 0x5e, 0xdb, 0xb3, 0x07, 0x3d, 0x4c,
- 0x3f, 0x4f, 0xcb, 0xdb, 0x70, 0x35, 0x34, 0x8b, 0x78, 0x66, 0xcc, 0xfa, 0xca, 0xe9, 0xb8, 0x7c,
- 0x33, 0x6e, 0x7d, 0x84, 0x4d, 0xd5, 0xae, 0x04, 0xf4, 0x96, 0x67, 0x9e, 0x8b, 0x6a, 0x11, 0x1a,
- 0xa0, 0xa6, 0x2e, 0x46, 0x8d, 0xb0, 0x45, 0x51, 0xeb, 0x84, 0x9e, 0xef, 0xda, 0x16, 0xe4, 0x42,
- 0x97, 0x10, 0x54, 0x87, 0x2c, 0x95, 0xbf, 0xa5, 0x87, 0xd5, 0x8b, 0x3d, 0xec, 0x8b, 0x49, 0x2f,
- 0x07, 0x92, 0xea, 0xbf, 0x15, 0x80, 0x48, 0x59, 0x7c, 0x21, 0x53, 0x8c, 0x4d, 0x0b, 0xd9, 0xdb,
- 0x53, 0xcf, 0x75, 0x1b, 0x94, 0xd2, 0x31, 0x7f, 0xfe, 0x34, 0x09, 0x57, 0x76, 0xfd, 0x82, 0xfd,
- 0xc2, 0xfb, 0x60, 0x07, 0xa6, 0xb0, 0x43, 0x3d, 0x9b, 0x3b, 0x81, 0x45, 0xfb, 0xeb, 0x17, 0x45,
- 0xfb, 0x1c, 0x9b, 0x1a, 0x0e, 0xf5, 0x46, 0x32, 0xf6, 0x3e, 0x4c, 0xcc, 0x1b, 0x9f, 0xa5, 0xa0,
- 0x70, 0x91, 0x24, 0xda, 0x80, 0xbc, 0xe9, 0x61, 0x4e, 0xf0, 0x47, 0x94, 0xc2, 0x47, 0x54, 0x31,
- 0xbc, 0xbc, 0xc6, 0x18, 0x54, 0x6d, 0xce, 0xa7, 0xc8, 0x01, 0xd5, 0x05, 0x76, 0xb3, 0x64, 0x69,
- 0xc7, 0xb8, 0x9e, 0xf1, 0x2a, 0xa9, 0xca, 0x09, 0xe5, 0x2b, 0x39, 0x0b, 0x20, 0x46, 0xd4, 0x5c,
- 0x48, 0xe5, 0x33, 0xea, 0x47, 0x90, 0xb7, 0x1d, 0x9b, 0xda, 0x46, 0x4f, 0xef, 0x18, 0x3d, 0xc3,
- 0x31, 0x9f, 0xe7, 0x62, 0x2e, 0xa6, 0x8a, 0x54, 0x1b, 0x83, 0x53, 0xb5, 0x39, 0x49, 0xa9, 0x09,
- 0x02, 0xda, 0x82, 0x29, 0x5f, 0x55, 0xfa, 0xb9, 0x2e, 0x34, 0xbe, 0x38, 0xba, 0x05, 0x33, 0xd1,
- 0xd1, 0xc2, 0xef, 0x47, 0x69, 0x2d, 0x17, 0x99, 0x2c, 0x4f, 0x9b, 0x5d, 0x99, 0x27, 0xce, 0xae,
- 0xc8, 0x25, 0xf5, 0x9f, 0x29, 0x58, 0xd0, 0xb0, 0xf5, 0x65, 0xac, 0x2f, 0x17, 0xeb, 0x77, 0x00,
- 0x44, 0x3f, 0x61, 0x1d, 0xfc, 0x39, 0xc2, 0xcd, 0x3a, 0xd2, 0xb4, 0x40, 0xa8, 0x13, 0xfa, 0xbf,
- 0x0c, 0xf8, 0x38, 0x09, 0x33, 0xd1, 0x80, 0xff, 0x9f, 0xce, 0x55, 0xd4, 0x0c, 0x7b, 0x69, 0x9a,
- 0xf7, 0xd2, 0xaf, 0x5d, 0xd4, 0x4b, 0x27, 0xca, 0xe3, 0xc9, 0x4d, 0xf4, 0x5f, 0x49, 0xc8, 0xec,
- 0x18, 0x9e, 0xd1, 0x27, 0xc8, 0x9c, 0xb8, 0x8e, 0x8b, 0x07, 0xf9, 0xd2, 0x44, 0x01, 0xd4, 0xe5,
- 0xf7, 0xa2, 0xa7, 0xdc, 0xc6, 0x3f, 0x3e, 0xe7, 0x36, 0xfe, 0x26, 0xcc, 0xf5, 0x8d, 0x23, 0x3d,
- 0xb0, 0x51, 0x78, 0x7b, 0xb6, 0xb6, 0x14, 0xa2, 0x9c, 0xdd, 0x17, 0x9f, 0x14, 0x82, 0x97, 0x29,
- 0x41, 0xdf, 0x80, 0x1c, 0xe3, 0x08, 0x47, 0x0b, 0x13, 0xbf, 0x16, 0xbe, 0xdd, 0x23, 0x9b, 0xaa,
- 0x06, 0x7d, 0xe3, 0xa8, 0x21, 0x16, 0xe8, 0x2e, 0xa0, 0x83, 0xe0, 0xf3, 0x91, 0x1e, 0xba, 0x93,
- 0xc9, 0x7f, 0xe5, 0x74, 0x5c, 0x5e, 0x12, 0xf2, 0x93, 0x3c, 0xaa, 0xb6, 0x10, 0x12, 0x7d, 0xb4,
- 0xd7, 0x01, 0x98, 0x5d, 0xba, 0x85, 0x1d, 0xb7, 0x2f, 0xdf, 0x84, 0x57, 0x4f, 0xc7, 0xe5, 0x05,
- 0x81, 0x12, 0xee, 0xa9, 0xda, 0x34, 0x5b, 0xd4, 0xd9, 0xef, 0x48, 0x66, 0x7f, 0xa2, 0x00, 0x0a,
- 0x87, 0x96, 0x86, 0xc9, 0x80, 0x3d, 0x62, 0xd9, 0x6b, 0x25, 0xf2, 0xb4, 0x50, 0x9e, 0xfc, 0x5a,
- 0x09, 0xe5, 0xfd, 0xd7, 0x4a, 0xa4, 0x52, 0xbe, 0x19, 0x36, 0xf8, 0xa4, 0x8c, 0xa3, 0x84, 0xe9,
- 0x18, 0x04, 0x47, 0x5e, 0x3c, 0xb6, 0x2f, 0xed, 0xf3, 0x07, 0xa7, 0x4c, 0xa8, 0x7f, 0x50, 0x60,
- 0x69, 0x22, 0xa3, 0x82, 0xc3, 0xfe, 0x00, 0x90, 0x17, 0xd9, 0xe4, 0xfe, 0x1a, 0xc9, 0x43, 0x5f,
- 0x3a, 0x41, 0x17, 0xbc, 0x89, 0xc6, 0xfe, 0xb9, 0xcd, 0xa8, 0xb5, 0x34, 0xf7, 0xf9, 0x6f, 0x15,
- 0x58, 0x8c, 0xaa, 0x0f, 0x0c, 0xd9, 0x86, 0x99, 0xa8, 0x76, 0x69, 0xc2, 0x4b, 0xcf, 0x62, 0x82,
- 0x3c, 0xfd, 0x19, 0x79, 0xf4, 0x9d, 0xb0, 0x5c, 0xc5, 0x07, 0xc6, 0x3b, 0xcf, 0xec, 0x0d, 0xff,
- 0x4c, 0xf1, 0xb2, 0x4d, 0xf3, 0x78, 0xfc, 0x47, 0x81, 0xf4, 0x8e, 0xeb, 0xf6, 0x90, 0x0b, 0x0b,
- 0x8e, 0x4b, 0x75, 0x96, 0x59, 0xd8, 0xd2, 0xe5, 0x97, 0x09, 0xd1, 0x07, 0x37, 0x2e, 0xe7, 0xa4,
- 0x7f, 0x8c, 0xcb, 0x93, 0x50, 0x5a, 0xde, 0x71, 0x69, 0x8d, 0x53, 0xda, 0xe2, 0xbb, 0xc5, 0x07,
- 0x30, 0x7b, 0x56, 0x99, 0xe8, 0x92, 0xef, 0x5e, 0x5a, 0xd9, 0x59, 0x98, 0xd3, 0x71, 0x79, 0x31,
- 0xac, 0x98, 0x80, 0xac, 0x6a, 0x33, 0x9d, 0x88, 0xf6, 0xb5, 0x2c, 0x8b, 0xdf, 0x67, 0x2c, 0x86,
- 0x6d, 0x98, 0x0f, 0x9a, 0xc1, 0x2e, 0xff, 0x28, 0x47, 0xd0, 0x9b, 0x30, 0x25, 0xbe, 0xcf, 0xf9,
- 0xef, 0x8a, 0x4a, 0xf4, 0x3b, 0xb0, 0xd1, 0x31, 0xed, 0x6a, 0x4c, 0xc6, 0xf7, 0xae, 0x14, 0xbb,
- 0xfd, 0x1b, 0x05, 0x20, 0xfc, 0xe8, 0x83, 0x5e, 0x81, 0xeb, 0xb5, 0x7b, 0xdb, 0x75, 0xbd, 0xd5,
- 0x5e, 0x6f, 0xef, 0xb6, 0xf4, 0xdd, 0xed, 0xd6, 0x4e, 0x63, 0xa3, 0xb9, 0xd9, 0x6c, 0xd4, 0xe7,
- 0x13, 0xc5, 0xfc, 0xf1, 0x49, 0x25, 0xb7, 0xeb, 0x90, 0x01, 0x36, 0xed, 0x7d, 0x1b, 0x5b, 0xe8,
- 0x65, 0x58, 0x3c, 0xcb, 0xcd, 0x56, 0x8d, 0xfa, 0xbc, 0x52, 0x9c, 0x39, 0x3e, 0xa9, 0x64, 0xc5,
- 0x1d, 0x15, 0x5b, 0x68, 0x19, 0xae, 0x4e, 0xf2, 0x35, 0xb7, 0xdf, 0x9a, 0x4f, 0x16, 0x67, 0x8f,
- 0x4f, 0x2a, 0xd3, 0xc1, 0x65, 0x16, 0xa9, 0x80, 0xa2, 0x9c, 0x12, 0x2f, 0x55, 0x84, 0xe3, 0x93,
- 0x4a, 0x46, 0x84, 0xa5, 0x98, 0xfe, 0xf0, 0x93, 0x52, 0xe2, 0xf6, 0x2f, 0x14, 0x98, 0x6b, 0x3a,
- 0xfb, 0x9e, 0x61, 0xf2, 0x0b, 0xc6, 0x68, 0x80, 0xd1, 0xeb, 0x70, 0xa3, 0xb9, 0xbd, 0xa9, 0xad,
- 0x6f, 0xb4, 0x9b, 0xf7, 0xb6, 0xf5, 0xf6, 0x77, 0x77, 0x1a, 0x31, 0x03, 0xae, 0x1c, 0x9f, 0x54,
- 0xf2, 0xa1, 0x50, 0xa3, 0x3f, 0xa0, 0x23, 0xb4, 0x32, 0x29, 0x55, 0xbf, 0xb7, 0x5b, 0xbb, 0xdb,
- 0xd0, 0x5b, 0xcd, 0xb7, 0xb6, 0xe7, 0x95, 0xe2, 0xdc, 0xf1, 0x49, 0x05, 0xea, 0xee, 0xb0, 0xd3,
- 0xc3, 0x2d, 0xbb, 0xeb, 0xa0, 0xdb, 0x50, 0x98, 0x14, 0x78, 0x77, 0xbb, 0xdd, 0x7c, 0xa7, 0x31,
- 0x9f, 0x14, 0x96, 0xd7, 0xdd, 0xf7, 0x1d, 0x36, 0x09, 0xc4, 0x59, 0x6b, 0x9b, 0x9f, 0x3e, 0x2a,
- 0x29, 0x0f, 0x1f, 0x95, 0x94, 0xbf, 0x3d, 0x2a, 0x29, 0x1f, 0x3d, 0x2e, 0x25, 0x1e, 0x3e, 0x2e,
- 0x25, 0xfe, 0xf4, 0xb8, 0x94, 0xf8, 0xde, 0x2b, 0x4f, 0xcc, 0x9e, 0xa3, 0xe0, 0x0f, 0x23, 0x3c,
- 0x8f, 0x3a, 0x19, 0x3e, 0x88, 0x5e, 0xfb, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0xe2, 0xd3,
- 0xf7, 0x37, 0x19, 0x00, 0x00,
+ // 2359 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x39, 0xdb, 0x6f, 0x23, 0x57,
+ 0xf9, 0x19, 0xc7, 0x4d, 0xec, 0xcf, 0x89, 0x9d, 0x9c, 0xcd, 0xee, 0x3a, 0xde, 0xfc, 0x62, 0xef,
+ 0x6c, 0x2f, 0xf9, 0xad, 0xb6, 0x0e, 0xbb, 0xad, 0x8a, 0x88, 0x90, 0x68, 0x1c, 0x3b, 0x8d, 0xd9,
+ 0x34, 0x09, 0x13, 0x67, 0x0b, 0xa5, 0x62, 0x34, 0x9e, 0x39, 0x71, 0x86, 0xd8, 0x33, 0xee, 0xcc,
+ 0xf1, 0x6e, 0x5c, 0xf5, 0x01, 0xf1, 0x54, 0x82, 0x90, 0x8a, 0x90, 0x50, 0x5f, 0x22, 0x56, 0xf4,
+ 0x09, 0x81, 0xc4, 0x0b, 0xe2, 0x95, 0xd7, 0x16, 0x5e, 0x96, 0x37, 0x84, 0x90, 0x41, 0xbb, 0x2f,
+ 0x88, 0x07, 0x54, 0xe5, 0x1f, 0x00, 0x9d, 0xcb, 0x5c, 0x3c, 0x8e, 0x93, 0xf5, 0xaa, 0x42, 0x95,
+ 0xe0, 0x25, 0x99, 0xf3, 0x9d, 0xef, 0x7e, 0x3b, 0xe7, 0x3b, 0x86, 0xe7, 0x75, 0xdb, 0x6d, 0xd9,
+ 0xee, 0xb2, 0x4b, 0xb4, 0x43, 0xd3, 0x6a, 0x2c, 0xdf, 0xbf, 0x5d, 0xc7, 0x44, 0xbb, 0xed, 0xad,
+ 0x8b, 0x6d, 0xc7, 0x26, 0x36, 0xba, 0xc2, 0xb1, 0x8a, 0x1e, 0x54, 0x60, 0xe5, 0xe6, 0x1a, 0x76,
+ 0xc3, 0x66, 0x28, 0xcb, 0xf4, 0x8b, 0x63, 0xe7, 0xe6, 0x1b, 0xb6, 0xdd, 0x68, 0xe2, 0x65, 0xb6,
+ 0xaa, 0x77, 0xf6, 0x97, 0x35, 0xab, 0x2b, 0xb6, 0x16, 0xa3, 0x5b, 0x46, 0xc7, 0xd1, 0x88, 0x69,
+ 0x5b, 0x62, 0x3f, 0x1f, 0xdd, 0x27, 0x66, 0x0b, 0xbb, 0x44, 0x6b, 0xb5, 0x3d, 0xde, 0x5c, 0x13,
+ 0x95, 0x0b, 0x15, 0x6a, 0x09, 0xde, 0xc2, 0x94, 0xba, 0xe6, 0x62, 0xdf, 0x0e, 0xdd, 0x36, 0x3d,
+ 0xde, 0x0b, 0x04, 0x5b, 0x06, 0x76, 0x5a, 0xa6, 0x45, 0x96, 0x49, 0xb7, 0x8d, 0x5d, 0xfe, 0x57,
+ 0xec, 0x5e, 0x0b, 0xed, 0x6a, 0x75, 0xdd, 0x0c, 0x6f, 0xca, 0x3f, 0x90, 0x20, 0xbd, 0x61, 0xba,
+ 0xc4, 0x76, 0x4c, 0x5d, 0x6b, 0x56, 0xad, 0x7d, 0x1b, 0xbd, 0x06, 0x13, 0x07, 0x58, 0x33, 0xb0,
+ 0x93, 0x95, 0x0a, 0xd2, 0x52, 0xea, 0x4e, 0xb6, 0x18, 0x30, 0x28, 0x72, 0xda, 0x0d, 0xb6, 0x5f,
+ 0x8a, 0x7f, 0xd2, 0xcb, 0x8f, 0x29, 0x02, 0x1b, 0x7d, 0x0d, 0x26, 0xee, 0x6b, 0x4d, 0x17, 0x93,
+ 0x6c, 0xac, 0x30, 0xbe, 0x94, 0xba, 0x73, 0xbd, 0x78, 0xb6, 0x6f, 0x8b, 0xf7, 0xb4, 0xa6, 0x69,
+ 0x68, 0xc4, 0xf6, 0x19, 0x70, 0x32, 0xf9, 0xd7, 0x31, 0xc8, 0xac, 0xd9, 0xad, 0x96, 0xe9, 0xba,
+ 0xa6, 0x6d, 0x29, 0x1a, 0xc1, 0x2e, 0x2a, 0x41, 0xdc, 0xd1, 0x08, 0x66, 0xaa, 0x24, 0x4b, 0x45,
+ 0x8a, 0xff, 0xe7, 0x5e, 0xfe, 0xc5, 0x86, 0x49, 0x0e, 0x3a, 0xf5, 0xa2, 0x6e, 0xb7, 0x84, 0xa7,
+ 0xc4, 0xbf, 0x97, 0x5d, 0xe3, 0x50, 0xd8, 0x57, 0xc6, 0xba, 0xc2, 0x68, 0xd1, 0x3b, 0x90, 0x68,
+ 0x69, 0x47, 0x2a, 0xe3, 0x13, 0x63, 0x7c, 0x56, 0x47, 0xe3, 0x73, 0xda, 0xcb, 0x67, 0xba, 0x5a,
+ 0xab, 0xb9, 0x22, 0x7b, 0x7c, 0x64, 0x65, 0xb2, 0xa5, 0x1d, 0x51, 0x15, 0x51, 0x1b, 0x32, 0x14,
+ 0xaa, 0x1f, 0x68, 0x56, 0x03, 0x73, 0x21, 0xe3, 0x4c, 0xc8, 0xc6, 0xc8, 0x42, 0xae, 0x04, 0x42,
+ 0x42, 0xec, 0x64, 0x65, 0xba, 0xa5, 0x1d, 0xad, 0x31, 0x00, 0x95, 0xb8, 0x92, 0xf8, 0xe8, 0x61,
+ 0x7e, 0xec, 0xef, 0x0f, 0xf3, 0x92, 0xfc, 0x47, 0x09, 0x20, 0xf0, 0x18, 0x7a, 0x07, 0x66, 0x74,
+ 0x7f, 0xc5, 0x68, 0x5d, 0x11, 0xc3, 0x97, 0x86, 0xc5, 0x22, 0xe2, 0xef, 0x52, 0x82, 0x2a, 0xfd,
+ 0xa8, 0x97, 0x97, 0x94, 0x8c, 0x1e, 0x09, 0xc5, 0xb7, 0x21, 0xd5, 0x69, 0x1b, 0x1a, 0xc1, 0x2a,
+ 0x4d, 0x5d, 0xe6, 0xc9, 0xd4, 0x9d, 0x5c, 0x91, 0xe7, 0x75, 0xd1, 0xcb, 0xeb, 0x62, 0xcd, 0xcb,
+ 0xeb, 0xd2, 0x22, 0xe5, 0x75, 0xda, 0xcb, 0x23, 0x6e, 0x56, 0x88, 0x58, 0xfe, 0xf0, 0xaf, 0x79,
+ 0x49, 0x01, 0x0e, 0xa1, 0x04, 0x21, 0x9b, 0x3e, 0x95, 0x20, 0x55, 0xc6, 0xae, 0xee, 0x98, 0x6d,
+ 0x5a, 0x3e, 0x28, 0x0b, 0x93, 0x2d, 0xdb, 0x32, 0x0f, 0x45, 0x3e, 0x26, 0x15, 0x6f, 0x89, 0x72,
+ 0x90, 0x30, 0x0d, 0x6c, 0x11, 0x93, 0x74, 0x79, 0x5c, 0x15, 0x7f, 0x4d, 0xa9, 0x1e, 0xe0, 0xba,
+ 0x6b, 0x7a, 0xd1, 0x50, 0xbc, 0x25, 0x5a, 0x87, 0x19, 0x17, 0xeb, 0x1d, 0xc7, 0x24, 0x5d, 0x55,
+ 0xb7, 0x2d, 0xa2, 0xe9, 0x24, 0x1b, 0x67, 0x01, 0xbb, 0x76, 0xda, 0xcb, 0x5f, 0xe5, 0xba, 0x46,
+ 0x31, 0x64, 0x25, 0xe3, 0x81, 0xd6, 0x38, 0x84, 0x4a, 0x30, 0x30, 0xd1, 0xcc, 0xa6, 0x9b, 0x7d,
+ 0x8e, 0x4b, 0x10, 0xcb, 0x90, 0x2d, 0xbf, 0x4c, 0x42, 0xd2, 0xcf, 0x76, 0x2a, 0xd9, 0x6e, 0x63,
+ 0x87, 0x7e, 0xab, 0x9a, 0x61, 0x38, 0xd8, 0x75, 0x45, 0x5e, 0x87, 0x24, 0x47, 0x31, 0x64, 0x25,
+ 0xe3, 0x81, 0x56, 0x39, 0x04, 0x11, 0x1a, 0x66, 0xcb, 0xc5, 0x96, 0xdb, 0x71, 0xd5, 0x76, 0xa7,
+ 0x7e, 0x88, 0xbb, 0x22, 0x1a, 0x73, 0x03, 0xd1, 0x58, 0xb5, 0xba, 0xa5, 0x57, 0x02, 0xee, 0x51,
+ 0x3a, 0xf9, 0xf7, 0xbf, 0x79, 0x79, 0x4e, 0xa4, 0x86, 0xee, 0x74, 0xdb, 0xc4, 0x2e, 0xee, 0x74,
+ 0xea, 0x77, 0x71, 0x97, 0x86, 0x5f, 0xa0, 0xee, 0x30, 0x4c, 0x74, 0x05, 0x26, 0xbe, 0xab, 0x99,
+ 0x4d, 0x6c, 0x30, 0x87, 0x26, 0x14, 0xb1, 0x42, 0x2b, 0x30, 0xe1, 0x12, 0x8d, 0x74, 0x5c, 0xe6,
+ 0xc5, 0xf4, 0x1d, 0x79, 0x58, 0xaa, 0x95, 0x6c, 0xcb, 0xd8, 0x65, 0x98, 0x8a, 0xa0, 0x40, 0xeb,
+ 0x30, 0x41, 0xec, 0x43, 0x6c, 0x09, 0x17, 0x8e, 0x54, 0xdf, 0x55, 0x8b, 0x28, 0x82, 0x9a, 0x7a,
+ 0xc4, 0xc0, 0x4d, 0xdc, 0x60, 0x8e, 0x73, 0x0f, 0x34, 0x07, 0xbb, 0xd9, 0x09, 0xc6, 0xb1, 0x3a,
+ 0x72, 0x11, 0x0a, 0x4f, 0x45, 0xf9, 0xc9, 0x4a, 0xc6, 0x07, 0xed, 0x32, 0x08, 0xba, 0x0b, 0x29,
+ 0x23, 0x48, 0xd4, 0xec, 0x24, 0x0b, 0xc1, 0x8d, 0x61, 0xe6, 0x87, 0x72, 0x5a, 0xf4, 0xbd, 0x30,
+ 0x35, 0x4d, 0x8e, 0x8e, 0x55, 0xb7, 0x2d, 0xc3, 0xb4, 0x1a, 0xea, 0x01, 0x36, 0x1b, 0x07, 0x24,
+ 0x9b, 0x28, 0x48, 0x4b, 0xe3, 0xe1, 0xe4, 0x88, 0x62, 0xc8, 0x4a, 0xc6, 0x07, 0x6d, 0x30, 0x08,
+ 0x32, 0x20, 0x1d, 0x60, 0xb1, 0x42, 0x4d, 0x5e, 0x58, 0xa8, 0xd7, 0x45, 0xa1, 0x5e, 0x8e, 0x4a,
+ 0x09, 0x6a, 0x75, 0xda, 0x07, 0x52, 0x32, 0xb4, 0x01, 0x10, 0xb4, 0x87, 0x2c, 0x30, 0x09, 0xf2,
+ 0xc5, 0x3d, 0x46, 0x18, 0x1e, 0xa2, 0x45, 0x5f, 0x85, 0x6b, 0x81, 0x3c, 0xdb, 0x52, 0x0f, 0xec,
+ 0xa6, 0xa1, 0x3a, 0x78, 0x5f, 0xd5, 0xed, 0x8e, 0x45, 0xb2, 0x53, 0xd4, 0x05, 0xca, 0x55, 0x1f,
+ 0x65, 0xdb, 0xda, 0xb0, 0x9b, 0x86, 0x82, 0xf7, 0xd7, 0xe8, 0x36, 0xba, 0x01, 0x81, 0x62, 0xaa,
+ 0x69, 0xb8, 0xd9, 0xe9, 0xc2, 0xf8, 0x52, 0x5c, 0x99, 0xf2, 0x81, 0x55, 0xc3, 0x45, 0x3f, 0x91,
+ 0xe0, 0x1a, 0xb1, 0x89, 0xd6, 0x54, 0xef, 0x7b, 0xb5, 0xa8, 0xd2, 0x6d, 0x2f, 0x53, 0xd2, 0x2c,
+ 0x53, 0x6a, 0x23, 0x67, 0x8a, 0xcc, 0xdd, 0x75, 0x0e, 0x6b, 0x59, 0xc9, 0xb2, 0xdd, 0xe0, 0xc4,
+ 0xa3, 0x35, 0xc0, 0xb3, 0xe7, 0x7d, 0xb8, 0xc4, 0x29, 0x9b, 0xe6, 0xbb, 0x1d, 0xd3, 0x57, 0x26,
+ 0xc3, 0x94, 0xd9, 0x1c, 0x59, 0x99, 0x5c, 0x58, 0x99, 0x3e, 0x96, 0xb2, 0x32, 0xcb, 0xa0, 0x9b,
+ 0x0c, 0xc8, 0xa5, 0xaf, 0x4c, 0x7d, 0xf0, 0x30, 0x3f, 0x26, 0xfa, 0xd4, 0xd8, 0xd7, 0xe3, 0x89,
+ 0xd4, 0xcc, 0x94, 0xfc, 0x1a, 0x4c, 0xdd, 0xd3, 0x9a, 0xa2, 0xcb, 0x60, 0x17, 0x2d, 0x40, 0x52,
+ 0xf3, 0x16, 0x59, 0xa9, 0x30, 0xbe, 0x94, 0x54, 0x02, 0x00, 0xef, 0x72, 0xdf, 0xfb, 0x4b, 0x41,
+ 0x92, 0x7f, 0x25, 0xc1, 0x44, 0xf9, 0xde, 0x8e, 0x66, 0x3a, 0xa8, 0x0a, 0xb3, 0x41, 0xe1, 0xf4,
+ 0xf7, 0xb8, 0x85, 0xd3, 0x5e, 0x3e, 0x1b, 0xad, 0x2d, 0xbf, 0xc9, 0x05, 0xf5, 0xeb, 0x75, 0xb9,
+ 0x2a, 0xcc, 0x06, 0x3e, 0xf5, 0x58, 0xc5, 0xa2, 0xac, 0x06, 0x50, 0x64, 0x65, 0xc6, 0x87, 0x09,
+ 0x56, 0xfd, 0xc6, 0xca, 0x15, 0x98, 0xe4, 0xda, 0xba, 0x68, 0x05, 0x9e, 0x6b, 0xd3, 0x0f, 0x66,
+ 0x5d, 0xea, 0xce, 0xe2, 0xd0, 0xda, 0x65, 0xf8, 0x22, 0x7b, 0x39, 0x89, 0xfc, 0xe3, 0x18, 0x40,
+ 0xf9, 0xde, 0xbd, 0x9a, 0x63, 0xb6, 0x9b, 0x98, 0x7c, 0x9e, 0x96, 0xd7, 0xe0, 0x72, 0x60, 0x96,
+ 0xeb, 0xe8, 0x11, 0xeb, 0x0b, 0xa7, 0xbd, 0xfc, 0x42, 0xd4, 0xfa, 0x10, 0x9a, 0xac, 0x5c, 0xf2,
+ 0xe1, 0xbb, 0x8e, 0x7e, 0x26, 0x57, 0xc3, 0x25, 0x3e, 0xd7, 0xf1, 0xe1, 0x5c, 0x43, 0x68, 0x61,
+ 0xae, 0x65, 0x97, 0x9c, 0xed, 0xda, 0x5d, 0x48, 0x05, 0x2e, 0x71, 0x51, 0x19, 0x12, 0x44, 0x7c,
+ 0x0b, 0x0f, 0xcb, 0xc3, 0x3d, 0xec, 0x91, 0x09, 0x2f, 0xfb, 0x94, 0xf2, 0xcf, 0xa8, 0xa3, 0xb9,
+ 0x8f, 0x68, 0xc3, 0xf8, 0x42, 0xa6, 0x18, 0x3d, 0xc9, 0x44, 0x01, 0x8f, 0x3f, 0xd3, 0x4d, 0x55,
+ 0x50, 0xa3, 0x17, 0x20, 0xdd, 0xdf, 0x49, 0xd8, 0xa9, 0x9a, 0x50, 0xa6, 0xef, 0x87, 0x5b, 0x48,
+ 0xc4, 0xed, 0x3f, 0x8c, 0xc1, 0xa5, 0x3d, 0xaf, 0xe3, 0x7d, 0xe1, 0x5d, 0xb5, 0x03, 0x93, 0xd8,
+ 0x22, 0x8e, 0xc9, 0x7c, 0x45, 0x93, 0xe2, 0x4b, 0xc3, 0x92, 0xe2, 0x0c, 0x9b, 0x2a, 0x16, 0x71,
+ 0xba, 0x22, 0x45, 0x3c, 0x36, 0x11, 0x6f, 0x7c, 0x36, 0x0e, 0xd9, 0x61, 0x94, 0x68, 0x0d, 0x32,
+ 0xba, 0x83, 0x19, 0xc0, 0x3b, 0x65, 0x25, 0x76, 0xca, 0xe6, 0x82, 0xfb, 0x77, 0x04, 0x41, 0x56,
+ 0xd2, 0x1e, 0x44, 0x9c, 0xb1, 0x0d, 0xa0, 0x97, 0x63, 0x9a, 0x9d, 0x14, 0xeb, 0x29, 0x6f, 0xc3,
+ 0xb2, 0x38, 0x64, 0x3d, 0x21, 0xfd, 0x0c, 0xf8, 0x29, 0x9b, 0x0e, 0xa0, 0xec, 0x98, 0x7d, 0x17,
+ 0x32, 0xa6, 0x65, 0x12, 0x53, 0x6b, 0xaa, 0x75, 0xad, 0xa9, 0x59, 0xfa, 0xb3, 0xcc, 0x16, 0x55,
+ 0x8b, 0x04, 0x62, 0x23, 0xec, 0x64, 0x25, 0x2d, 0x20, 0x25, 0x0e, 0x40, 0x1b, 0x30, 0xe9, 0x89,
+ 0x8a, 0x3f, 0xd3, 0x9d, 0xcc, 0x23, 0x47, 0xd7, 0x61, 0x2a, 0x7c, 0x36, 0xb3, 0x2b, 0x5e, 0x5c,
+ 0x49, 0x85, 0x8e, 0xe6, 0x8b, 0x0e, 0xff, 0x89, 0x73, 0x0f, 0xff, 0xd0, 0x3d, 0xfb, 0x9f, 0xe3,
+ 0x30, 0xab, 0x60, 0xe3, 0x7f, 0xb1, 0x1e, 0x2d, 0xd6, 0x6f, 0x02, 0xf0, 0xb6, 0x43, 0x1b, 0xfd,
+ 0x33, 0x84, 0x9b, 0x36, 0xae, 0x24, 0xe7, 0x50, 0x76, 0xc9, 0x7f, 0x32, 0xe0, 0xbd, 0x18, 0x4c,
+ 0x85, 0x03, 0xfe, 0x5f, 0x7a, 0xfc, 0xa2, 0x6a, 0xd0, 0x4b, 0xe3, 0xac, 0x97, 0xfe, 0xff, 0xb0,
+ 0x5e, 0x3a, 0x50, 0x1e, 0xe7, 0x37, 0xd1, 0x9f, 0x4f, 0xc2, 0xc4, 0x8e, 0xe6, 0x68, 0x2d, 0x17,
+ 0xe9, 0x03, 0x13, 0x05, 0x7f, 0x53, 0x98, 0x1f, 0x28, 0x80, 0xb2, 0x78, 0xf2, 0xba, 0x60, 0xa0,
+ 0xf8, 0xe8, 0x8c, 0x81, 0xe2, 0x75, 0x48, 0xb7, 0xb4, 0xa3, 0xe0, 0x16, 0xcd, 0xbd, 0x3d, 0x5d,
+ 0x9a, 0x0f, 0xb8, 0xf4, 0xef, 0xf3, 0x57, 0x11, 0xff, 0x62, 0xed, 0xa2, 0x2f, 0x43, 0x8a, 0x62,
+ 0x04, 0x47, 0x0b, 0x25, 0xbf, 0x12, 0x3c, 0x3f, 0x84, 0x36, 0x65, 0x05, 0x5a, 0xda, 0x51, 0x85,
+ 0x2f, 0xd0, 0x26, 0xa0, 0x03, 0xff, 0x05, 0x4c, 0x0d, 0xdc, 0x49, 0xe9, 0xff, 0xef, 0xb4, 0x97,
+ 0x9f, 0xe7, 0xf4, 0x83, 0x38, 0xb2, 0x32, 0x1b, 0x00, 0x3d, 0x6e, 0xaf, 0x02, 0xb0, 0x01, 0xc0,
+ 0xc0, 0x96, 0xdd, 0x12, 0x63, 0xed, 0xe5, 0xd3, 0x5e, 0x7e, 0x96, 0x73, 0x09, 0xf6, 0x64, 0x25,
+ 0x49, 0x17, 0x65, 0xfa, 0x4d, 0x87, 0x81, 0x96, 0x69, 0xa9, 0x91, 0xd7, 0x1b, 0x31, 0xc3, 0x3e,
+ 0xf3, 0x30, 0x70, 0x06, 0x4b, 0x59, 0x99, 0x6d, 0x99, 0x56, 0xff, 0xab, 0x0f, 0xfa, 0xbe, 0x14,
+ 0x4e, 0x4e, 0xa6, 0xe2, 0xbe, 0xa6, 0x13, 0xdb, 0x61, 0x33, 0x6d, 0xb2, 0xb4, 0x35, 0xb2, 0x02,
+ 0x03, 0xa9, 0x1c, 0x62, 0x1a, 0x4e, 0x65, 0x7a, 0x99, 0x59, 0x67, 0x50, 0xf4, 0x23, 0x09, 0xe6,
+ 0x1b, 0x4d, 0xbb, 0x1e, 0x1a, 0x5f, 0x78, 0x0a, 0xab, 0xba, 0xd6, 0x66, 0xa3, 0x70, 0xb2, 0xa4,
+ 0x8c, 0xac, 0x48, 0x81, 0x2b, 0x32, 0x94, 0xb1, 0xac, 0x5c, 0xe1, 0x7b, 0x62, 0x3a, 0xe2, 0x3b,
+ 0x6b, 0x5a, 0x1b, 0xfd, 0x54, 0x82, 0x85, 0x40, 0xff, 0x33, 0x54, 0x4a, 0x32, 0x95, 0xf6, 0x46,
+ 0x56, 0xe9, 0x46, 0xd4, 0x37, 0x67, 0x69, 0x35, 0xef, 0x6f, 0x47, 0x15, 0x0b, 0x75, 0xc1, 0x8f,
+ 0x25, 0x40, 0xc1, 0x05, 0x47, 0xc1, 0x6e, 0xdb, 0xb6, 0x5c, 0x36, 0x9c, 0x07, 0xb5, 0x2e, 0x8a,
+ 0x75, 0xf8, 0xc5, 0xdb, 0xc7, 0xf4, 0x86, 0xf3, 0x50, 0x57, 0xfd, 0x4a, 0x70, 0x19, 0x88, 0x89,
+ 0x9a, 0x17, 0x6c, 0xea, 0x9a, 0x8b, 0x43, 0x03, 0xbe, 0xe9, 0x51, 0x7b, 0xf8, 0xbe, 0x96, 0x63,
+ 0xf2, 0x1f, 0x24, 0x98, 0x1f, 0xe8, 0x3e, 0xbe, 0xb2, 0xdf, 0x01, 0xe4, 0x84, 0x36, 0x59, 0x6d,
+ 0x75, 0x85, 0xd2, 0x23, 0x37, 0xb3, 0x59, 0x67, 0xe0, 0x12, 0xf0, 0xb9, 0xdd, 0x67, 0x56, 0xe2,
+ 0xcc, 0xe7, 0xbf, 0x93, 0x60, 0x2e, 0x2c, 0xde, 0x37, 0x64, 0x0b, 0xa6, 0xc2, 0xd2, 0x85, 0x09,
+ 0xcf, 0x3f, 0x8d, 0x09, 0x42, 0xfb, 0x3e, 0x7a, 0xf4, 0x8d, 0xa0, 0xb5, 0xf3, 0xf7, 0xf4, 0xdb,
+ 0x4f, 0xed, 0x0d, 0x4f, 0xa7, 0x68, 0x8b, 0x8f, 0xb3, 0x78, 0xfc, 0x4b, 0x82, 0xf8, 0x8e, 0x6d,
+ 0x37, 0x91, 0x0d, 0xb3, 0x96, 0x4d, 0x58, 0x69, 0x62, 0x43, 0x15, 0x0f, 0x71, 0xfc, 0xcc, 0x5c,
+ 0x1b, 0xcd, 0x49, 0xff, 0xe8, 0xe5, 0x07, 0x59, 0x29, 0x19, 0xcb, 0x26, 0x25, 0x06, 0xa9, 0xf1,
+ 0x67, 0xba, 0xf7, 0x61, 0xba, 0x5f, 0x18, 0x3f, 0x51, 0xdf, 0x1a, 0x59, 0x58, 0x3f, 0x9b, 0xd3,
+ 0x5e, 0x7e, 0x2e, 0xe8, 0xae, 0x3e, 0x58, 0x56, 0xa6, 0xea, 0x21, 0xe9, 0x2b, 0x09, 0x1a, 0xbf,
+ 0xcf, 0x68, 0x0c, 0x6b, 0x30, 0xe3, 0x1f, 0x1c, 0x7b, 0xec, 0x0d, 0xda, 0x45, 0xaf, 0xc3, 0x24,
+ 0x7f, 0x8e, 0xf6, 0x46, 0xd5, 0x42, 0xf8, 0x67, 0x0f, 0xad, 0xae, 0x9b, 0xc5, 0x08, 0x8d, 0xe7,
+ 0x5d, 0x41, 0x26, 0x1f, 0x4b, 0x70, 0x89, 0x89, 0x32, 0xdf, 0xc3, 0xec, 0x95, 0x45, 0xc1, 0xba,
+ 0xed, 0x18, 0x28, 0x0d, 0x31, 0xd3, 0x60, 0x7e, 0x8d, 0x2b, 0x31, 0xd3, 0x40, 0x73, 0xf0, 0x9c,
+ 0xfd, 0xc0, 0xc2, 0x8e, 0x78, 0xb3, 0xe6, 0x0b, 0x3a, 0xf8, 0xb5, 0x6c, 0xa3, 0xd3, 0xc4, 0xaa,
+ 0xa6, 0xf3, 0xcb, 0x10, 0x7f, 0xb7, 0x9e, 0xe6, 0xd0, 0x55, 0x0e, 0x44, 0x0b, 0x90, 0xf4, 0x3b,
+ 0x03, 0x4f, 0x68, 0x25, 0x00, 0x84, 0x4c, 0x2c, 0x81, 0xbc, 0x83, 0xf9, 0xf1, 0x1a, 0x56, 0x69,
+ 0xb5, 0x43, 0x0e, 0x6c, 0xc7, 0x7c, 0x8f, 0xe5, 0xca, 0x05, 0x2f, 0x3c, 0x37, 0x7f, 0x2b, 0x01,
+ 0x04, 0x8f, 0xb6, 0xe8, 0x16, 0x5c, 0x2d, 0x6d, 0x6f, 0x95, 0xd5, 0xdd, 0xda, 0x6a, 0x6d, 0x6f,
+ 0x57, 0xdd, 0xdb, 0xda, 0xdd, 0xa9, 0xac, 0x55, 0xd7, 0xab, 0x95, 0xf2, 0xcc, 0x58, 0x2e, 0x73,
+ 0x7c, 0x52, 0x48, 0xed, 0x59, 0x6e, 0x1b, 0xeb, 0xe6, 0xbe, 0x89, 0x0d, 0xf4, 0x22, 0xcc, 0xf5,
+ 0x63, 0xd3, 0x55, 0xa5, 0x3c, 0x23, 0xe5, 0xa6, 0x8e, 0x4f, 0x0a, 0x09, 0x3e, 0xa0, 0x61, 0x03,
+ 0x2d, 0xc1, 0xe5, 0x41, 0xbc, 0xea, 0xd6, 0x1b, 0x33, 0xb1, 0xdc, 0xf4, 0xf1, 0x49, 0x21, 0xe9,
+ 0x4f, 0x72, 0x48, 0x06, 0x14, 0xc6, 0x14, 0xfc, 0xc6, 0x73, 0x70, 0x7c, 0x52, 0x98, 0xe0, 0x79,
+ 0x96, 0x8b, 0x7f, 0xf0, 0xf1, 0xe2, 0xd8, 0xcd, 0x5f, 0x48, 0x90, 0xae, 0x5a, 0xfb, 0x8e, 0xa6,
+ 0xb3, 0xdb, 0x75, 0xb7, 0x8d, 0xd1, 0xab, 0x70, 0xad, 0xba, 0xb5, 0xae, 0xac, 0xae, 0xd5, 0xaa,
+ 0xdb, 0x5b, 0x6a, 0xed, 0x5b, 0x3b, 0x95, 0x88, 0x01, 0x97, 0x8e, 0x4f, 0x0a, 0x99, 0x80, 0xa8,
+ 0xd2, 0x6a, 0x93, 0x2e, 0x5a, 0x1e, 0xa4, 0x2a, 0x6f, 0xef, 0x95, 0x36, 0x2b, 0xea, 0x6e, 0xf5,
+ 0x8d, 0xad, 0x19, 0x29, 0x97, 0x3e, 0x3e, 0x29, 0x40, 0xd9, 0xee, 0xd4, 0x9b, 0x78, 0xd7, 0x6c,
+ 0x58, 0xe8, 0x26, 0x64, 0x07, 0x09, 0xde, 0xda, 0xaa, 0x55, 0xdf, 0xac, 0xcc, 0xc4, 0xb8, 0xe5,
+ 0x65, 0xfb, 0x81, 0x45, 0xaf, 0x41, 0x42, 0xd7, 0x4f, 0x25, 0xb8, 0xda, 0x17, 0xa2, 0x4d, 0x5b,
+ 0x3f, 0x14, 0x1e, 0xbf, 0x09, 0x2f, 0xd6, 0xb6, 0xef, 0x56, 0xb6, 0xaa, 0x6f, 0x57, 0xd4, 0xdd,
+ 0x8d, 0x55, 0xa5, 0xa2, 0x6e, 0x6e, 0xaf, 0xdd, 0x3d, 0x33, 0x00, 0xe8, 0x05, 0xb8, 0x7e, 0x0e,
+ 0x2e, 0xfd, 0xa6, 0xce, 0x47, 0x2f, 0xc1, 0x8d, 0x73, 0x59, 0x0a, 0xc4, 0x18, 0xba, 0x05, 0x4b,
+ 0x17, 0xf0, 0x53, 0x2b, 0xdf, 0xdc, 0xa9, 0x2a, 0x34, 0x54, 0xe3, 0xdc, 0x96, 0xd2, 0xfa, 0x27,
+ 0x8f, 0x17, 0xa5, 0x47, 0x8f, 0x17, 0xa5, 0xbf, 0x3d, 0x5e, 0x94, 0x3e, 0x7c, 0xb2, 0x38, 0xf6,
+ 0xe8, 0xc9, 0xe2, 0xd8, 0x9f, 0x9e, 0x2c, 0x8e, 0xbd, 0x7d, 0xeb, 0xdc, 0xd2, 0x3e, 0xf2, 0x7f,
+ 0xa4, 0x65, 0x45, 0x5e, 0x9f, 0x60, 0x37, 0xca, 0x57, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x6d,
+ 0x61, 0xa9, 0x17, 0xc3, 0x1d, 0x00, 0x00,
}
func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) {
return StakingDescription()
}
+func (this *TokenizeShareRecord) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) {
+ return StakingDescription()
+}
func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) {
d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{}
var gzipped = []byte{
- // 12543 bytes of a gzipped FileDescriptorSet
+ // 13705 bytes of a gzipped FileDescriptorSet
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x74, 0x1c, 0xd7,
- 0x75, 0x18, 0x66, 0x3f, 0x80, 0xdd, 0x8b, 0x05, 0xb0, 0x78, 0x00, 0x49, 0x70, 0x49, 0x01, 0xd0,
- 0xe8, 0x8b, 0xa2, 0x24, 0x50, 0xa2, 0x44, 0x4a, 0x04, 0x6d, 0xcb, 0xbb, 0xc0, 0x12, 0x80, 0x84,
- 0x2f, 0x0d, 0x40, 0x4a, 0x96, 0x3f, 0x26, 0x83, 0xdd, 0x87, 0xc5, 0x88, 0xbb, 0x33, 0xe3, 0x9d,
- 0x59, 0x12, 0x50, 0x92, 0x1e, 0xc5, 0x76, 0x52, 0x9b, 0x39, 0x6d, 0xe2, 0xba, 0xa7, 0x51, 0x9c,
- 0xd0, 0x95, 0xe3, 0xb4, 0x4e, 0x9c, 0xb4, 0xf9, 0x72, 0xf3, 0xd1, 0xf6, 0xb4, 0x4e, 0x7b, 0xd2,
- 0x24, 0x4e, 0xd3, 0x63, 0xb7, 0x39, 0x6d, 0x9a, 0x93, 0xd2, 0xa9, 0xec, 0xb6, 0xae, 0xeb, 0x26,
- 0x8e, 0xea, 0x36, 0xe9, 0xf1, 0x49, 0xd3, 0xf3, 0xbe, 0xe6, 0x6b, 0x77, 0x76, 0x76, 0x21, 0xd2,
- 0x4e, 0xea, 0xfe, 0x02, 0xde, 0x9d, 0x7b, 0xef, 0x7b, 0xef, 0xbe, 0xfb, 0xee, 0xbd, 0xef, 0xbe,
- 0x8f, 0x85, 0x9f, 0xbb, 0x08, 0xb3, 0x35, 0xd3, 0xac, 0xd5, 0xf1, 0x19, 0xab, 0x69, 0x3a, 0xe6,
- 0x4e, 0x6b, 0xf7, 0x4c, 0x15, 0xdb, 0x95, 0xa6, 0x6e, 0x39, 0x66, 0x73, 0x8e, 0xc2, 0xd0, 0x18,
- 0xc3, 0x98, 0x13, 0x18, 0xf2, 0x1a, 0x8c, 0x5f, 0xd2, 0xeb, 0x78, 0xd1, 0x45, 0xdc, 0xc2, 0x0e,
- 0x7a, 0x0a, 0x52, 0xbb, 0x7a, 0x1d, 0x4f, 0x49, 0xb3, 0xc9, 0x53, 0xc3, 0x67, 0xef, 0x9d, 0x0b,
- 0x11, 0xcd, 0x05, 0x29, 0x36, 0x09, 0x58, 0xa1, 0x14, 0xf2, 0x97, 0x52, 0x30, 0xd1, 0xe1, 0x2b,
- 0x42, 0x90, 0x32, 0xb4, 0x06, 0xe1, 0x28, 0x9d, 0xca, 0x2a, 0xf4, 0x7f, 0x34, 0x05, 0x43, 0x96,
- 0x56, 0xb9, 0xaa, 0xd5, 0xf0, 0x54, 0x82, 0x82, 0x45, 0x11, 0x4d, 0x03, 0x54, 0xb1, 0x85, 0x8d,
- 0x2a, 0x36, 0x2a, 0x07, 0x53, 0xc9, 0xd9, 0xe4, 0xa9, 0xac, 0xe2, 0x83, 0xa0, 0x87, 0x60, 0xdc,
- 0x6a, 0xed, 0xd4, 0xf5, 0x8a, 0xea, 0x43, 0x83, 0xd9, 0xe4, 0xa9, 0xb4, 0x92, 0x67, 0x1f, 0x16,
- 0x3d, 0xe4, 0x07, 0x60, 0xec, 0x3a, 0xd6, 0xae, 0xfa, 0x51, 0x87, 0x29, 0xea, 0x28, 0x01, 0xfb,
- 0x10, 0x17, 0x20, 0xd7, 0xc0, 0xb6, 0xad, 0xd5, 0xb0, 0xea, 0x1c, 0x58, 0x78, 0x2a, 0x45, 0x7b,
- 0x3f, 0xdb, 0xd6, 0xfb, 0x70, 0xcf, 0x87, 0x39, 0xd5, 0xf6, 0x81, 0x85, 0x51, 0x11, 0xb2, 0xd8,
- 0x68, 0x35, 0x18, 0x87, 0x74, 0x84, 0xfc, 0xca, 0x46, 0xab, 0x11, 0xe6, 0x92, 0x21, 0x64, 0x9c,
- 0xc5, 0x90, 0x8d, 0x9b, 0xd7, 0xf4, 0x0a, 0x9e, 0x1a, 0xa4, 0x0c, 0x1e, 0x68, 0x63, 0xb0, 0xc5,
- 0xbe, 0x87, 0x79, 0x08, 0x3a, 0xb4, 0x00, 0x59, 0xbc, 0xef, 0x60, 0xc3, 0xd6, 0x4d, 0x63, 0x6a,
- 0x88, 0x32, 0xb9, 0xaf, 0xc3, 0x28, 0xe2, 0x7a, 0x35, 0xcc, 0xc2, 0xa3, 0x43, 0xe7, 0x61, 0xc8,
- 0xb4, 0x1c, 0xdd, 0x34, 0xec, 0xa9, 0xcc, 0xac, 0x74, 0x6a, 0xf8, 0xec, 0xc9, 0x8e, 0x8a, 0xb0,
- 0xc1, 0x70, 0x14, 0x81, 0x8c, 0x56, 0x20, 0x6f, 0x9b, 0xad, 0x66, 0x05, 0xab, 0x15, 0xb3, 0x8a,
- 0x55, 0xdd, 0xd8, 0x35, 0xa7, 0xb2, 0x94, 0xc1, 0x4c, 0x7b, 0x47, 0x28, 0xe2, 0x82, 0x59, 0xc5,
- 0x2b, 0xc6, 0xae, 0xa9, 0x8c, 0xda, 0x81, 0x32, 0x3a, 0x0a, 0x83, 0xf6, 0x81, 0xe1, 0x68, 0xfb,
- 0x53, 0x39, 0xaa, 0x21, 0xbc, 0x24, 0xff, 0xca, 0x20, 0x8c, 0xf5, 0xa2, 0x62, 0x17, 0x21, 0xbd,
- 0x4b, 0x7a, 0x39, 0x95, 0xe8, 0x47, 0x06, 0x8c, 0x26, 0x28, 0xc4, 0xc1, 0x43, 0x0a, 0xb1, 0x08,
- 0xc3, 0x06, 0xb6, 0x1d, 0x5c, 0x65, 0x1a, 0x91, 0xec, 0x51, 0xa7, 0x80, 0x11, 0xb5, 0xab, 0x54,
- 0xea, 0x50, 0x2a, 0xf5, 0x02, 0x8c, 0xb9, 0x4d, 0x52, 0x9b, 0x9a, 0x51, 0x13, 0xba, 0x79, 0x26,
- 0xae, 0x25, 0x73, 0x65, 0x41, 0xa7, 0x10, 0x32, 0x65, 0x14, 0x07, 0xca, 0x68, 0x11, 0xc0, 0x34,
- 0xb0, 0xb9, 0xab, 0x56, 0x71, 0xa5, 0x3e, 0x95, 0x89, 0x90, 0xd2, 0x06, 0x41, 0x69, 0x93, 0x92,
- 0xc9, 0xa0, 0x95, 0x3a, 0xba, 0xe0, 0xa9, 0xda, 0x50, 0x84, 0xa6, 0xac, 0xb1, 0x49, 0xd6, 0xa6,
- 0x6d, 0x97, 0x61, 0xb4, 0x89, 0x89, 0xde, 0xe3, 0x2a, 0xef, 0x59, 0x96, 0x36, 0x62, 0x2e, 0xb6,
- 0x67, 0x0a, 0x27, 0x63, 0x1d, 0x1b, 0x69, 0xfa, 0x8b, 0xe8, 0x1e, 0x70, 0x01, 0x2a, 0x55, 0x2b,
- 0xa0, 0x56, 0x28, 0x27, 0x80, 0xeb, 0x5a, 0x03, 0x17, 0x5e, 0x86, 0xd1, 0xa0, 0x78, 0xd0, 0x24,
- 0xa4, 0x6d, 0x47, 0x6b, 0x3a, 0x54, 0x0b, 0xd3, 0x0a, 0x2b, 0xa0, 0x3c, 0x24, 0xb1, 0x51, 0xa5,
- 0x56, 0x2e, 0xad, 0x90, 0x7f, 0xd1, 0xdb, 0xbd, 0x0e, 0x27, 0x69, 0x87, 0xef, 0x6f, 0x1f, 0xd1,
- 0x00, 0xe7, 0x70, 0xbf, 0x0b, 0x4f, 0xc2, 0x48, 0xa0, 0x03, 0xbd, 0x56, 0x2d, 0x7f, 0x17, 0x1c,
- 0xe9, 0xc8, 0x1a, 0xbd, 0x00, 0x93, 0x2d, 0x43, 0x37, 0x1c, 0xdc, 0xb4, 0x9a, 0x98, 0x68, 0x2c,
- 0xab, 0x6a, 0xea, 0xbf, 0x0c, 0x45, 0xe8, 0xdc, 0x65, 0x3f, 0x36, 0xe3, 0xa2, 0x4c, 0xb4, 0xda,
- 0x81, 0xa7, 0xb3, 0x99, 0x2f, 0x0f, 0xe5, 0x5f, 0x79, 0xe5, 0x95, 0x57, 0x12, 0xf2, 0xaf, 0x0e,
- 0xc2, 0x64, 0xa7, 0x39, 0xd3, 0x71, 0xfa, 0x1e, 0x85, 0x41, 0xa3, 0xd5, 0xd8, 0xc1, 0x4d, 0x2a,
- 0xa4, 0xb4, 0xc2, 0x4b, 0xa8, 0x08, 0xe9, 0xba, 0xb6, 0x83, 0xeb, 0x53, 0xa9, 0x59, 0xe9, 0xd4,
- 0xe8, 0xd9, 0x87, 0x7a, 0x9a, 0x95, 0x73, 0xab, 0x84, 0x44, 0x61, 0x94, 0xe8, 0x6d, 0x90, 0xe2,
- 0x26, 0x9a, 0x70, 0x38, 0xdd, 0x1b, 0x07, 0x32, 0x97, 0x14, 0x4a, 0x87, 0x4e, 0x40, 0x96, 0xfc,
- 0x65, 0xba, 0x31, 0x48, 0xdb, 0x9c, 0x21, 0x00, 0xa2, 0x17, 0xa8, 0x00, 0x19, 0x3a, 0x4d, 0xaa,
- 0x58, 0xb8, 0x36, 0xb7, 0x4c, 0x14, 0xab, 0x8a, 0x77, 0xb5, 0x56, 0xdd, 0x51, 0xaf, 0x69, 0xf5,
- 0x16, 0xa6, 0x0a, 0x9f, 0x55, 0x72, 0x1c, 0x78, 0x85, 0xc0, 0xd0, 0x0c, 0x0c, 0xb3, 0x59, 0xa5,
- 0x1b, 0x55, 0xbc, 0x4f, 0xad, 0x67, 0x5a, 0x61, 0x13, 0x6d, 0x85, 0x40, 0x48, 0xf5, 0x2f, 0xd9,
- 0xa6, 0x21, 0x54, 0x93, 0x56, 0x41, 0x00, 0xb4, 0xfa, 0x27, 0xc3, 0x86, 0xfb, 0xae, 0xce, 0xdd,
- 0x6b, 0x9b, 0x4b, 0x0f, 0xc0, 0x18, 0xc5, 0x78, 0x9c, 0x0f, 0xbd, 0x56, 0x9f, 0x1a, 0x9f, 0x95,
- 0x4e, 0x65, 0x94, 0x51, 0x06, 0xde, 0xe0, 0x50, 0xf9, 0x17, 0x13, 0x90, 0xa2, 0x86, 0x65, 0x0c,
- 0x86, 0xb7, 0xdf, 0xb1, 0x59, 0x56, 0x17, 0x37, 0x2e, 0x97, 0x56, 0xcb, 0x79, 0x09, 0x8d, 0x02,
- 0x50, 0xc0, 0xa5, 0xd5, 0x8d, 0xe2, 0x76, 0x3e, 0xe1, 0x96, 0x57, 0xd6, 0xb7, 0xcf, 0x3f, 0x91,
- 0x4f, 0xba, 0x04, 0x97, 0x19, 0x20, 0xe5, 0x47, 0x78, 0xfc, 0x6c, 0x3e, 0x8d, 0xf2, 0x90, 0x63,
- 0x0c, 0x56, 0x5e, 0x28, 0x2f, 0x9e, 0x7f, 0x22, 0x3f, 0x18, 0x84, 0x3c, 0x7e, 0x36, 0x3f, 0x84,
- 0x46, 0x20, 0x4b, 0x21, 0xa5, 0x8d, 0x8d, 0xd5, 0x7c, 0xc6, 0xe5, 0xb9, 0xb5, 0xad, 0xac, 0xac,
- 0x2f, 0xe5, 0xb3, 0x2e, 0xcf, 0x25, 0x65, 0xe3, 0xf2, 0x66, 0x1e, 0x5c, 0x0e, 0x6b, 0xe5, 0xad,
- 0xad, 0xe2, 0x52, 0x39, 0x3f, 0xec, 0x62, 0x94, 0xde, 0xb1, 0x5d, 0xde, 0xca, 0xe7, 0x02, 0xcd,
- 0x7a, 0xfc, 0x6c, 0x7e, 0xc4, 0xad, 0xa2, 0xbc, 0x7e, 0x79, 0x2d, 0x3f, 0x8a, 0xc6, 0x61, 0x84,
- 0x55, 0x21, 0x1a, 0x31, 0x16, 0x02, 0x9d, 0x7f, 0x22, 0x9f, 0xf7, 0x1a, 0xc2, 0xb8, 0x8c, 0x07,
- 0x00, 0xe7, 0x9f, 0xc8, 0x23, 0x79, 0x01, 0xd2, 0x54, 0x0d, 0x11, 0x82, 0xd1, 0xd5, 0x62, 0xa9,
- 0xbc, 0xaa, 0x6e, 0x6c, 0x6e, 0xaf, 0x6c, 0xac, 0x17, 0x57, 0xf3, 0x92, 0x07, 0x53, 0xca, 0xcf,
- 0x5d, 0x5e, 0x51, 0xca, 0x8b, 0xf9, 0x84, 0x1f, 0xb6, 0x59, 0x2e, 0x6e, 0x97, 0x17, 0xf3, 0x49,
- 0xb9, 0x02, 0x93, 0x9d, 0x0c, 0x6a, 0xc7, 0x29, 0xe4, 0xd3, 0x85, 0x44, 0x84, 0x2e, 0x50, 0x5e,
- 0x61, 0x5d, 0x90, 0xbf, 0x98, 0x80, 0x89, 0x0e, 0x4e, 0xa5, 0x63, 0x25, 0x4f, 0x43, 0x9a, 0xe9,
- 0x32, 0x73, 0xb3, 0x0f, 0x76, 0xf4, 0x4e, 0x54, 0xb3, 0xdb, 0x5c, 0x2d, 0xa5, 0xf3, 0x87, 0x1a,
- 0xc9, 0x88, 0x50, 0x83, 0xb0, 0x68, 0x53, 0xd8, 0x77, 0xb7, 0x19, 0x7f, 0xe6, 0x1f, 0xcf, 0xf7,
- 0xe2, 0x1f, 0x29, 0xac, 0x3f, 0x27, 0x90, 0xee, 0xe0, 0x04, 0x2e, 0xc2, 0x78, 0x1b, 0xa3, 0x9e,
- 0x8d, 0xf1, 0xfb, 0x25, 0x98, 0x8a, 0x12, 0x4e, 0x8c, 0x49, 0x4c, 0x04, 0x4c, 0xe2, 0xc5, 0xb0,
- 0x04, 0xef, 0x8e, 0x1e, 0x84, 0xb6, 0xb1, 0xfe, 0xa4, 0x04, 0x47, 0x3b, 0x87, 0x94, 0x1d, 0xdb,
- 0xf0, 0x36, 0x18, 0x6c, 0x60, 0x67, 0xcf, 0x14, 0x61, 0xd5, 0xfd, 0x1d, 0x9c, 0x35, 0xf9, 0x1c,
- 0x1e, 0x6c, 0x4e, 0xe5, 0xf7, 0xf6, 0xc9, 0xa8, 0xb8, 0x90, 0xb5, 0xa6, 0xad, 0xa5, 0x1f, 0x4a,
- 0xc0, 0x91, 0x8e, 0xcc, 0x3b, 0x36, 0xf4, 0x2e, 0x00, 0xdd, 0xb0, 0x5a, 0x0e, 0x0b, 0x9d, 0x98,
- 0x25, 0xce, 0x52, 0x08, 0x35, 0x5e, 0xc4, 0xca, 0xb6, 0x1c, 0xf7, 0x7b, 0x92, 0x7e, 0x07, 0x06,
- 0xa2, 0x08, 0x4f, 0x79, 0x0d, 0x4d, 0xd1, 0x86, 0x4e, 0x47, 0xf4, 0xb4, 0x4d, 0x31, 0x1f, 0x85,
- 0x7c, 0xa5, 0xae, 0x63, 0xc3, 0x51, 0x6d, 0xa7, 0x89, 0xb5, 0x86, 0x6e, 0xd4, 0xa8, 0xab, 0xc9,
- 0xcc, 0xa7, 0x77, 0xb5, 0xba, 0x8d, 0x95, 0x31, 0xf6, 0x79, 0x4b, 0x7c, 0x25, 0x14, 0x54, 0x81,
- 0x9a, 0x3e, 0x8a, 0xc1, 0x00, 0x05, 0xfb, 0xec, 0x52, 0xc8, 0x1f, 0xce, 0xc2, 0xb0, 0x2f, 0x00,
- 0x47, 0x77, 0x43, 0xee, 0x25, 0xed, 0x9a, 0xa6, 0x8a, 0x45, 0x15, 0x93, 0xc4, 0x30, 0x81, 0x6d,
- 0xf2, 0x85, 0xd5, 0xa3, 0x30, 0x49, 0x51, 0xcc, 0x96, 0x83, 0x9b, 0x6a, 0xa5, 0xae, 0xd9, 0x36,
- 0x15, 0x5a, 0x86, 0xa2, 0x22, 0xf2, 0x6d, 0x83, 0x7c, 0x5a, 0x10, 0x5f, 0xd0, 0x39, 0x98, 0xa0,
- 0x14, 0x8d, 0x56, 0xdd, 0xd1, 0xad, 0x3a, 0x56, 0xc9, 0x32, 0xcf, 0xa6, 0x2e, 0xc7, 0x6d, 0xd9,
- 0x38, 0xc1, 0x58, 0xe3, 0x08, 0xa4, 0x45, 0x36, 0x5a, 0x84, 0xbb, 0x28, 0x59, 0x0d, 0x1b, 0xb8,
- 0xa9, 0x39, 0x58, 0xc5, 0xef, 0x6d, 0x69, 0x75, 0x5b, 0xd5, 0x8c, 0xaa, 0xba, 0xa7, 0xd9, 0x7b,
- 0x53, 0x93, 0x84, 0x41, 0x29, 0x31, 0x25, 0x29, 0xc7, 0x09, 0xe2, 0x12, 0xc7, 0x2b, 0x53, 0xb4,
- 0xa2, 0x51, 0x5d, 0xd6, 0xec, 0x3d, 0x34, 0x0f, 0x47, 0x29, 0x17, 0xdb, 0x69, 0xea, 0x46, 0x4d,
- 0xad, 0xec, 0xe1, 0xca, 0x55, 0xb5, 0xe5, 0xec, 0x3e, 0x35, 0x75, 0xc2, 0x5f, 0x3f, 0x6d, 0xe1,
- 0x16, 0xc5, 0x59, 0x20, 0x28, 0x97, 0x9d, 0xdd, 0xa7, 0xd0, 0x16, 0xe4, 0xc8, 0x60, 0x34, 0xf4,
- 0x97, 0xb1, 0xba, 0x6b, 0x36, 0xa9, 0x0f, 0x1d, 0xed, 0x60, 0x9a, 0x7c, 0x12, 0x9c, 0xdb, 0xe0,
- 0x04, 0x6b, 0x66, 0x15, 0xcf, 0xa7, 0xb7, 0x36, 0xcb, 0xe5, 0x45, 0x65, 0x58, 0x70, 0xb9, 0x64,
- 0x36, 0x89, 0x42, 0xd5, 0x4c, 0x57, 0xc0, 0xc3, 0x4c, 0xa1, 0x6a, 0xa6, 0x10, 0xef, 0x39, 0x98,
- 0xa8, 0x54, 0x58, 0x9f, 0xf5, 0x8a, 0xca, 0x17, 0x63, 0xf6, 0x54, 0x3e, 0x20, 0xac, 0x4a, 0x65,
- 0x89, 0x21, 0x70, 0x1d, 0xb7, 0xd1, 0x05, 0x38, 0xe2, 0x09, 0xcb, 0x4f, 0x38, 0xde, 0xd6, 0xcb,
- 0x30, 0xe9, 0x39, 0x98, 0xb0, 0x0e, 0xda, 0x09, 0x51, 0xa0, 0x46, 0xeb, 0x20, 0x4c, 0xf6, 0x24,
- 0x4c, 0x5a, 0x7b, 0x56, 0x3b, 0xdd, 0x69, 0x3f, 0x1d, 0xb2, 0xf6, 0xac, 0x30, 0xe1, 0x7d, 0x74,
- 0x65, 0xde, 0xc4, 0x15, 0xcd, 0xc1, 0xd5, 0xa9, 0x63, 0x7e, 0x74, 0xdf, 0x07, 0x34, 0x07, 0xf9,
- 0x4a, 0x45, 0xc5, 0x86, 0xb6, 0x53, 0xc7, 0xaa, 0xd6, 0xc4, 0x86, 0x66, 0x4f, 0xcd, 0x50, 0xe4,
- 0x94, 0xd3, 0x6c, 0x61, 0x65, 0xb4, 0x52, 0x29, 0xd3, 0x8f, 0x45, 0xfa, 0x0d, 0x9d, 0x86, 0x71,
- 0x73, 0xe7, 0xa5, 0x0a, 0xd3, 0x48, 0xd5, 0x6a, 0xe2, 0x5d, 0x7d, 0x7f, 0xea, 0x5e, 0x2a, 0xde,
- 0x31, 0xf2, 0x81, 0xea, 0xe3, 0x26, 0x05, 0xa3, 0x07, 0x21, 0x5f, 0xb1, 0xf7, 0xb4, 0xa6, 0x45,
- 0x4d, 0xb2, 0x6d, 0x69, 0x15, 0x3c, 0x75, 0x1f, 0x43, 0x65, 0xf0, 0x75, 0x01, 0x26, 0x33, 0xc2,
- 0xbe, 0xae, 0xef, 0x3a, 0x82, 0xe3, 0x03, 0x6c, 0x46, 0x50, 0x18, 0xe7, 0x76, 0x0a, 0xf2, 0x44,
- 0x12, 0x81, 0x8a, 0x4f, 0x51, 0xb4, 0x51, 0x6b, 0xcf, 0xf2, 0xd7, 0x7b, 0x0f, 0x8c, 0x10, 0x4c,
- 0xaf, 0xd2, 0x07, 0x59, 0xe0, 0x66, 0xed, 0xf9, 0x6a, 0x7c, 0x02, 0x8e, 0x12, 0xa4, 0x06, 0x76,
- 0xb4, 0xaa, 0xe6, 0x68, 0x3e, 0xec, 0x87, 0x29, 0x36, 0x11, 0xfb, 0x1a, 0xff, 0x18, 0x68, 0x67,
- 0xb3, 0xb5, 0x73, 0xe0, 0x2a, 0xd6, 0x23, 0xac, 0x9d, 0x04, 0x26, 0x54, 0xeb, 0x8e, 0x05, 0xe7,
- 0xf2, 0x3c, 0xe4, 0xfc, 0x7a, 0x8f, 0xb2, 0xc0, 0x34, 0x3f, 0x2f, 0x91, 0x20, 0x68, 0x61, 0x63,
- 0x91, 0x84, 0x2f, 0x2f, 0x96, 0xf3, 0x09, 0x12, 0x46, 0xad, 0xae, 0x6c, 0x97, 0x55, 0xe5, 0xf2,
- 0xfa, 0xf6, 0xca, 0x5a, 0x39, 0x9f, 0xf4, 0x05, 0xf6, 0xcf, 0xa4, 0x32, 0xf7, 0xe7, 0x1f, 0x90,
- 0x3f, 0x9f, 0x80, 0xd1, 0xe0, 0x4a, 0x0d, 0xbd, 0x05, 0x8e, 0x89, 0xb4, 0x8a, 0x8d, 0x1d, 0xf5,
- 0xba, 0xde, 0xa4, 0x13, 0xb2, 0xa1, 0x31, 0xe7, 0xe8, 0xea, 0xcf, 0x24, 0xc7, 0xda, 0xc2, 0xce,
- 0xf3, 0x7a, 0x93, 0x4c, 0xb7, 0x86, 0xe6, 0xa0, 0x55, 0x98, 0x31, 0x4c, 0xd5, 0x76, 0x34, 0xa3,
- 0xaa, 0x35, 0xab, 0xaa, 0x97, 0xd0, 0x52, 0xb5, 0x4a, 0x05, 0xdb, 0xb6, 0xc9, 0x1c, 0xa1, 0xcb,
- 0xe5, 0xa4, 0x61, 0x6e, 0x71, 0x64, 0xcf, 0x43, 0x14, 0x39, 0x6a, 0x48, 0x7d, 0x93, 0x51, 0xea,
- 0x7b, 0x02, 0xb2, 0x0d, 0xcd, 0x52, 0xb1, 0xe1, 0x34, 0x0f, 0x68, 0x7c, 0x9e, 0x51, 0x32, 0x0d,
- 0xcd, 0x2a, 0x93, 0xf2, 0x37, 0x65, 0x99, 0xf4, 0x4c, 0x2a, 0x93, 0xc9, 0x67, 0x9f, 0x49, 0x65,
- 0xb2, 0x79, 0x90, 0x5f, 0x4f, 0x42, 0xce, 0x1f, 0xaf, 0x93, 0xe5, 0x4f, 0x85, 0x7a, 0x2c, 0x89,
- 0xda, 0xb4, 0x7b, 0xba, 0x46, 0xf7, 0x73, 0x0b, 0xc4, 0x95, 0xcd, 0x0f, 0xb2, 0xe0, 0x58, 0x61,
- 0x94, 0x24, 0x8c, 0x20, 0xca, 0x86, 0x59, 0x30, 0x92, 0x51, 0x78, 0x09, 0x2d, 0xc1, 0xe0, 0x4b,
- 0x36, 0xe5, 0x3d, 0x48, 0x79, 0xdf, 0xdb, 0x9d, 0xf7, 0x33, 0x5b, 0x94, 0x79, 0xf6, 0x99, 0x2d,
- 0x75, 0x7d, 0x43, 0x59, 0x2b, 0xae, 0x2a, 0x9c, 0x1c, 0x1d, 0x87, 0x54, 0x5d, 0x7b, 0xf9, 0x20,
- 0xe8, 0xf4, 0x28, 0xa8, 0xd7, 0x41, 0x38, 0x0e, 0xa9, 0xeb, 0x58, 0xbb, 0x1a, 0x74, 0x35, 0x14,
- 0x74, 0x07, 0x27, 0xc3, 0x19, 0x48, 0x53, 0x79, 0x21, 0x00, 0x2e, 0xb1, 0xfc, 0x00, 0xca, 0x40,
- 0x6a, 0x61, 0x43, 0x21, 0x13, 0x22, 0x0f, 0x39, 0x06, 0x55, 0x37, 0x57, 0xca, 0x0b, 0xe5, 0x7c,
- 0x42, 0x3e, 0x07, 0x83, 0x4c, 0x08, 0x64, 0xb2, 0xb8, 0x62, 0xc8, 0x0f, 0xf0, 0x22, 0xe7, 0x21,
- 0x89, 0xaf, 0x97, 0xd7, 0x4a, 0x65, 0x25, 0x9f, 0x08, 0x0e, 0x75, 0x2a, 0x9f, 0x96, 0x6d, 0xc8,
- 0xf9, 0xe3, 0xf0, 0x6f, 0xce, 0x62, 0xfc, 0x33, 0x12, 0x0c, 0xfb, 0xe2, 0x6a, 0x12, 0x10, 0x69,
- 0xf5, 0xba, 0x79, 0x5d, 0xd5, 0xea, 0xba, 0x66, 0x73, 0xd5, 0x00, 0x0a, 0x2a, 0x12, 0x48, 0xaf,
- 0x43, 0xf7, 0x4d, 0x9a, 0x22, 0xe9, 0xfc, 0xa0, 0xfc, 0x31, 0x09, 0xf2, 0xe1, 0xc0, 0x36, 0xd4,
- 0x4c, 0xe9, 0x5b, 0xd9, 0x4c, 0xf9, 0x47, 0x25, 0x18, 0x0d, 0x46, 0xb3, 0xa1, 0xe6, 0xdd, 0xfd,
- 0x2d, 0x6d, 0xde, 0x1f, 0x24, 0x60, 0x24, 0x10, 0xc3, 0xf6, 0xda, 0xba, 0xf7, 0xc2, 0xb8, 0x5e,
- 0xc5, 0x0d, 0xcb, 0x74, 0xb0, 0x51, 0x39, 0x50, 0xeb, 0xf8, 0x1a, 0xae, 0x4f, 0xc9, 0xd4, 0x68,
- 0x9c, 0xe9, 0x1e, 0x25, 0xcf, 0xad, 0x78, 0x74, 0xab, 0x84, 0x6c, 0x7e, 0x62, 0x65, 0xb1, 0xbc,
- 0xb6, 0xb9, 0xb1, 0x5d, 0x5e, 0x5f, 0x78, 0x87, 0x7a, 0x79, 0xfd, 0xd9, 0xf5, 0x8d, 0xe7, 0xd7,
- 0x95, 0xbc, 0x1e, 0x42, 0xbb, 0x83, 0xd3, 0x7e, 0x13, 0xf2, 0xe1, 0x46, 0xa1, 0x63, 0xd0, 0xa9,
- 0x59, 0xf9, 0x01, 0x34, 0x01, 0x63, 0xeb, 0x1b, 0xea, 0xd6, 0xca, 0x62, 0x59, 0x2d, 0x5f, 0xba,
- 0x54, 0x5e, 0xd8, 0xde, 0x62, 0x79, 0x0f, 0x17, 0x7b, 0x3b, 0x30, 0xc1, 0xe5, 0x8f, 0x26, 0x61,
- 0xa2, 0x43, 0x4b, 0x50, 0x91, 0xaf, 0x58, 0xd8, 0x22, 0xea, 0x91, 0x5e, 0x5a, 0x3f, 0x47, 0x62,
- 0x86, 0x4d, 0xad, 0xe9, 0xf0, 0x05, 0xce, 0x83, 0x40, 0xa4, 0x64, 0x38, 0xfa, 0xae, 0x8e, 0x9b,
- 0x3c, 0x9f, 0xc4, 0x96, 0x31, 0x63, 0x1e, 0x9c, 0xa5, 0x94, 0x1e, 0x06, 0x64, 0x99, 0xb6, 0xee,
- 0xe8, 0xd7, 0xb0, 0xaa, 0x1b, 0x22, 0xf9, 0x44, 0x96, 0x35, 0x29, 0x25, 0x2f, 0xbe, 0xac, 0x18,
- 0x8e, 0x8b, 0x6d, 0xe0, 0x9a, 0x16, 0xc2, 0x26, 0xc6, 0x3c, 0xa9, 0xe4, 0xc5, 0x17, 0x17, 0xfb,
- 0x6e, 0xc8, 0x55, 0xcd, 0x16, 0x89, 0xf5, 0x18, 0x1e, 0xf1, 0x1d, 0x92, 0x32, 0xcc, 0x60, 0x2e,
- 0x0a, 0x8f, 0xe2, 0xbd, 0xac, 0x57, 0x4e, 0x19, 0x66, 0x30, 0x86, 0xf2, 0x00, 0x8c, 0x69, 0xb5,
- 0x5a, 0x93, 0x30, 0x17, 0x8c, 0xd8, 0xba, 0x64, 0xd4, 0x05, 0x53, 0xc4, 0xc2, 0x33, 0x90, 0x11,
- 0x72, 0x20, 0xae, 0x9a, 0x48, 0x42, 0xb5, 0xd8, 0x62, 0x3b, 0x71, 0x2a, 0xab, 0x64, 0x0c, 0xf1,
- 0xf1, 0x6e, 0xc8, 0xe9, 0xb6, 0xea, 0x25, 0xf1, 0x13, 0xb3, 0x89, 0x53, 0x19, 0x65, 0x58, 0xb7,
- 0xdd, 0x04, 0xa8, 0xfc, 0xc9, 0x04, 0x8c, 0x06, 0x37, 0x21, 0xd0, 0x22, 0x64, 0xea, 0x66, 0x45,
- 0xa3, 0xaa, 0xc5, 0x76, 0xc0, 0x4e, 0xc5, 0xec, 0x5b, 0xcc, 0xad, 0x72, 0x7c, 0xc5, 0xa5, 0x2c,
- 0xfc, 0x2b, 0x09, 0x32, 0x02, 0x8c, 0x8e, 0x42, 0xca, 0xd2, 0x9c, 0x3d, 0xca, 0x2e, 0x5d, 0x4a,
- 0xe4, 0x25, 0x85, 0x96, 0x09, 0xdc, 0xb6, 0x34, 0x83, 0xaa, 0x00, 0x87, 0x93, 0x32, 0x19, 0xd7,
- 0x3a, 0xd6, 0xaa, 0x74, 0xd1, 0x63, 0x36, 0x1a, 0xd8, 0x70, 0x6c, 0x31, 0xae, 0x1c, 0xbe, 0xc0,
- 0xc1, 0xe8, 0x21, 0x18, 0x77, 0x9a, 0x9a, 0x5e, 0x0f, 0xe0, 0xa6, 0x28, 0x6e, 0x5e, 0x7c, 0x70,
- 0x91, 0xe7, 0xe1, 0xb8, 0xe0, 0x5b, 0xc5, 0x8e, 0x56, 0xd9, 0xc3, 0x55, 0x8f, 0x68, 0x90, 0x26,
- 0x37, 0x8e, 0x71, 0x84, 0x45, 0xfe, 0x5d, 0xd0, 0xca, 0x9f, 0x97, 0x60, 0x5c, 0x2c, 0xd3, 0xaa,
- 0xae, 0xb0, 0xd6, 0x00, 0x34, 0xc3, 0x30, 0x1d, 0xbf, 0xb8, 0xda, 0x55, 0xb9, 0x8d, 0x6e, 0xae,
- 0xe8, 0x12, 0x29, 0x3e, 0x06, 0x85, 0x06, 0x80, 0xf7, 0x25, 0x52, 0x6c, 0x33, 0x30, 0xcc, 0x77,
- 0x98, 0xe8, 0x36, 0x25, 0x5b, 0xd8, 0x03, 0x03, 0x91, 0xf5, 0x1c, 0x9a, 0x84, 0xf4, 0x0e, 0xae,
- 0xe9, 0x06, 0xcf, 0x1b, 0xb3, 0x82, 0x48, 0xbf, 0xa4, 0xdc, 0xf4, 0x4b, 0xe9, 0xaf, 0xc0, 0x44,
- 0xc5, 0x6c, 0x84, 0x9b, 0x5b, 0xca, 0x87, 0x92, 0x0b, 0xf6, 0xb2, 0xf4, 0xe2, 0x23, 0x1c, 0xa9,
- 0x66, 0xd6, 0x35, 0xa3, 0x36, 0x67, 0x36, 0x6b, 0xde, 0x36, 0x2b, 0x89, 0x78, 0x6c, 0xdf, 0x66,
- 0xab, 0xb5, 0xf3, 0xa7, 0x92, 0xf4, 0x63, 0x89, 0xe4, 0xd2, 0x66, 0xe9, 0x53, 0x89, 0xc2, 0x12,
- 0x23, 0xdc, 0x14, 0xc2, 0x50, 0xf0, 0x6e, 0x1d, 0x57, 0x48, 0x07, 0xe1, 0x2b, 0x0f, 0xc1, 0x64,
- 0xcd, 0xac, 0x99, 0x94, 0xd3, 0x19, 0xf2, 0x1f, 0xdf, 0xa7, 0xcd, 0xba, 0xd0, 0x42, 0xec, 0xa6,
- 0xee, 0xfc, 0x3a, 0x4c, 0x70, 0x64, 0x95, 0x6e, 0x14, 0xb1, 0x65, 0x0c, 0xea, 0x9a, 0x43, 0x9b,
- 0xfa, 0xb9, 0x2f, 0x51, 0xf7, 0xad, 0x8c, 0x73, 0x52, 0xf2, 0x8d, 0xad, 0x74, 0xe6, 0x15, 0x38,
- 0x12, 0xe0, 0xc7, 0x26, 0x29, 0x6e, 0xc6, 0x70, 0xfc, 0x35, 0xce, 0x71, 0xc2, 0xc7, 0x71, 0x8b,
- 0x93, 0xce, 0x2f, 0xc0, 0x48, 0x3f, 0xbc, 0xfe, 0x05, 0xe7, 0x95, 0xc3, 0x7e, 0x26, 0x4b, 0x30,
- 0x46, 0x99, 0x54, 0x5a, 0xb6, 0x63, 0x36, 0xa8, 0x05, 0xec, 0xce, 0xe6, 0xd7, 0xbf, 0xc4, 0x66,
- 0xcd, 0x28, 0x21, 0x5b, 0x70, 0xa9, 0xe6, 0xe7, 0x81, 0xee, 0x8d, 0x55, 0x71, 0xa5, 0x1e, 0xc3,
- 0xe1, 0x37, 0x78, 0x43, 0x5c, 0xfc, 0xf9, 0x2b, 0x30, 0x49, 0xfe, 0xa7, 0x06, 0xca, 0xdf, 0x92,
- 0xf8, 0x84, 0xdb, 0xd4, 0xe7, 0xdf, 0xcf, 0x26, 0xe6, 0x84, 0xcb, 0xc0, 0xd7, 0x26, 0xdf, 0x28,
- 0xd6, 0xb0, 0xe3, 0xe0, 0xa6, 0xad, 0x6a, 0xf5, 0x4e, 0xcd, 0xf3, 0x65, 0x2c, 0xa6, 0x7e, 0xf8,
- 0xab, 0xc1, 0x51, 0x5c, 0x62, 0x94, 0xc5, 0x7a, 0x7d, 0xfe, 0x32, 0x1c, 0xeb, 0xa0, 0x15, 0x3d,
- 0xf0, 0xfc, 0x28, 0xe7, 0x39, 0xd9, 0xa6, 0x19, 0x84, 0xed, 0x26, 0x08, 0xb8, 0x3b, 0x96, 0x3d,
- 0xf0, 0xfc, 0x11, 0xce, 0x13, 0x71, 0x5a, 0x31, 0xa4, 0x84, 0xe3, 0x33, 0x30, 0x7e, 0x0d, 0x37,
- 0x77, 0x4c, 0x9b, 0x67, 0x89, 0x7a, 0x60, 0xf7, 0xa3, 0x9c, 0xdd, 0x18, 0x27, 0xa4, 0x69, 0x23,
- 0xc2, 0xeb, 0x02, 0x64, 0x76, 0xb5, 0x0a, 0xee, 0x81, 0xc5, 0x4d, 0xce, 0x62, 0x88, 0xe0, 0x13,
- 0xd2, 0x22, 0xe4, 0x6a, 0x26, 0xf7, 0x51, 0xf1, 0xe4, 0x1f, 0xe3, 0xe4, 0xc3, 0x82, 0x86, 0xb3,
- 0xb0, 0x4c, 0xab, 0x55, 0x27, 0x0e, 0x2c, 0x9e, 0xc5, 0xdf, 0x16, 0x2c, 0x04, 0x0d, 0x67, 0xd1,
- 0x87, 0x58, 0x5f, 0x13, 0x2c, 0x6c, 0x9f, 0x3c, 0x9f, 0x86, 0x61, 0xd3, 0xa8, 0x1f, 0x98, 0x46,
- 0x2f, 0x8d, 0xf8, 0x38, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0xb8, 0x08, 0xd9, 0x5e, 0x07, 0xe2, 0xef,
- 0x7c, 0x55, 0x4c, 0x0f, 0x31, 0x02, 0x4b, 0x30, 0x26, 0x0c, 0x94, 0x6e, 0x1a, 0x3d, 0xb0, 0xf8,
- 0xbb, 0x9c, 0xc5, 0xa8, 0x8f, 0x8c, 0x77, 0xc3, 0xc1, 0xb6, 0x53, 0xc3, 0xbd, 0x30, 0xf9, 0xa4,
- 0xe8, 0x06, 0x27, 0xe1, 0xa2, 0xdc, 0xc1, 0x46, 0x65, 0xaf, 0x37, 0x0e, 0x3f, 0x21, 0x44, 0x29,
- 0x68, 0x08, 0x8b, 0x05, 0x18, 0x69, 0x68, 0x4d, 0x7b, 0x4f, 0xab, 0xf7, 0x34, 0x1c, 0x3f, 0xc9,
- 0x79, 0xe4, 0x5c, 0x22, 0x2e, 0x91, 0x96, 0xd1, 0x0f, 0x9b, 0x4f, 0x09, 0x89, 0xf8, 0xc8, 0xf8,
- 0xd4, 0xb3, 0x1d, 0x9a, 0x52, 0xeb, 0x87, 0xdb, 0x4f, 0x89, 0xa9, 0xc7, 0x68, 0xd7, 0xfc, 0x1c,
- 0x2f, 0x42, 0xd6, 0xd6, 0x5f, 0xee, 0x89, 0xcd, 0x4f, 0x8b, 0x91, 0xa6, 0x04, 0x84, 0xf8, 0x1d,
- 0x70, 0xbc, 0xa3, 0x9b, 0xe8, 0x81, 0xd9, 0xdf, 0xe3, 0xcc, 0x8e, 0x76, 0x70, 0x15, 0xdc, 0x24,
- 0xf4, 0xcb, 0xf2, 0xef, 0x0b, 0x93, 0x80, 0x43, 0xbc, 0x36, 0xc9, 0xaa, 0xc1, 0xd6, 0x76, 0xfb,
- 0x93, 0xda, 0xcf, 0x08, 0xa9, 0x31, 0xda, 0x80, 0xd4, 0xb6, 0xe1, 0x28, 0xe7, 0xd8, 0xdf, 0xb8,
- 0xfe, 0xac, 0x30, 0xac, 0x8c, 0xfa, 0x72, 0x70, 0x74, 0xdf, 0x09, 0x05, 0x57, 0x9c, 0x22, 0x3c,
- 0xb5, 0xd5, 0x86, 0x66, 0xf5, 0xc0, 0xf9, 0xe7, 0x38, 0x67, 0x61, 0xf1, 0xdd, 0xf8, 0xd6, 0x5e,
- 0xd3, 0x2c, 0xc2, 0xfc, 0x05, 0x98, 0x12, 0xcc, 0x5b, 0x46, 0x13, 0x57, 0xcc, 0x9a, 0xa1, 0xbf,
- 0x8c, 0xab, 0x3d, 0xb0, 0xfe, 0xf9, 0xd0, 0x50, 0x5d, 0xf6, 0x91, 0x13, 0xce, 0x2b, 0x90, 0x77,
- 0x63, 0x15, 0x55, 0x6f, 0x58, 0x66, 0xd3, 0x89, 0xe1, 0xf8, 0x0b, 0x62, 0xa4, 0x5c, 0xba, 0x15,
- 0x4a, 0x36, 0x5f, 0x06, 0xb6, 0xcf, 0xdc, 0xab, 0x4a, 0x7e, 0x9a, 0x33, 0x1a, 0xf1, 0xa8, 0xb8,
- 0xe1, 0xa8, 0x98, 0x0d, 0x4b, 0x6b, 0xf6, 0x62, 0xff, 0xfe, 0x81, 0x30, 0x1c, 0x9c, 0x84, 0x1b,
- 0x0e, 0x12, 0xd1, 0x11, 0x6f, 0xdf, 0x03, 0x87, 0x5f, 0x14, 0x86, 0x43, 0xd0, 0x70, 0x16, 0x22,
- 0x60, 0xe8, 0x81, 0xc5, 0x2f, 0x09, 0x16, 0x82, 0x86, 0xb0, 0x78, 0xce, 0x73, 0xb4, 0x4d, 0x5c,
- 0xd3, 0x6d, 0xa7, 0xc9, 0x82, 0xe2, 0xee, 0xac, 0x7e, 0xf9, 0xab, 0xc1, 0x20, 0x4c, 0xf1, 0x91,
- 0x12, 0x4b, 0xc4, 0x93, 0xac, 0x74, 0xcd, 0x14, 0xdf, 0xb0, 0x5f, 0x11, 0x96, 0xc8, 0x47, 0x46,
- 0xda, 0xe6, 0x8b, 0x10, 0x89, 0xd8, 0x2b, 0x64, 0xa5, 0xd0, 0x03, 0xbb, 0x7f, 0x18, 0x6a, 0xdc,
- 0x96, 0xa0, 0x25, 0x3c, 0x7d, 0xf1, 0x4f, 0xcb, 0xb8, 0x8a, 0x0f, 0x7a, 0xd2, 0xce, 0x7f, 0x14,
- 0x8a, 0x7f, 0x2e, 0x33, 0x4a, 0x66, 0x43, 0xc6, 0x42, 0xf1, 0x14, 0x8a, 0x3b, 0x55, 0x34, 0xf5,
- 0x3d, 0x5f, 0xe7, 0xfd, 0x0d, 0x86, 0x53, 0xf3, 0xab, 0x44, 0xc9, 0x83, 0x41, 0x4f, 0x3c, 0xb3,
- 0xf7, 0x7f, 0xdd, 0xd5, 0xf3, 0x40, 0xcc, 0x33, 0x7f, 0x09, 0x46, 0x02, 0x01, 0x4f, 0x3c, 0xab,
- 0x0f, 0x70, 0x56, 0x39, 0x7f, 0xbc, 0x33, 0x7f, 0x0e, 0x52, 0x24, 0x78, 0x89, 0x27, 0xff, 0x5e,
- 0x4e, 0x4e, 0xd1, 0xe7, 0xdf, 0x0a, 0x19, 0x11, 0xb4, 0xc4, 0x93, 0x7e, 0x1f, 0x27, 0x75, 0x49,
- 0x08, 0xb9, 0x08, 0x58, 0xe2, 0xc9, 0xff, 0xaa, 0x20, 0x17, 0x24, 0x84, 0xbc, 0x77, 0x11, 0x7e,
- 0xe6, 0xfb, 0x53, 0xdc, 0xe9, 0x08, 0xd9, 0x5d, 0x84, 0x21, 0x1e, 0xa9, 0xc4, 0x53, 0x7f, 0x88,
- 0x57, 0x2e, 0x28, 0xe6, 0x9f, 0x84, 0x74, 0x8f, 0x02, 0xff, 0x6b, 0x9c, 0x94, 0xe1, 0xcf, 0x2f,
- 0xc0, 0xb0, 0x2f, 0x3a, 0x89, 0x27, 0xff, 0xeb, 0x9c, 0xdc, 0x4f, 0x45, 0x9a, 0xce, 0xa3, 0x93,
- 0x78, 0x06, 0x3f, 0x20, 0x9a, 0xce, 0x29, 0x88, 0xd8, 0x44, 0x60, 0x12, 0x4f, 0xfd, 0x83, 0x42,
- 0xea, 0x82, 0x64, 0xfe, 0x69, 0xc8, 0xba, 0xce, 0x26, 0x9e, 0xfe, 0xc3, 0x9c, 0xde, 0xa3, 0x21,
- 0x12, 0xf0, 0x39, 0xbb, 0x78, 0x16, 0x7f, 0x43, 0x48, 0xc0, 0x47, 0x45, 0xa6, 0x51, 0x38, 0x80,
- 0x89, 0xe7, 0xf4, 0x11, 0x31, 0x8d, 0x42, 0xf1, 0x0b, 0x19, 0x4d, 0x6a, 0xf3, 0xe3, 0x59, 0xfc,
- 0x4d, 0x31, 0x9a, 0x14, 0x9f, 0x34, 0x23, 0x1c, 0x11, 0xc4, 0xf3, 0xf8, 0x21, 0xd1, 0x8c, 0x50,
- 0x40, 0x30, 0xbf, 0x09, 0xa8, 0x3d, 0x1a, 0x88, 0xe7, 0xf7, 0x2a, 0xe7, 0x37, 0xde, 0x16, 0x0c,
- 0xcc, 0x3f, 0x0f, 0x47, 0x3b, 0x47, 0x02, 0xf1, 0x5c, 0x7f, 0xf8, 0xeb, 0xa1, 0xb5, 0x9b, 0x3f,
- 0x10, 0x98, 0xdf, 0xf6, 0x5c, 0x8a, 0x3f, 0x0a, 0x88, 0x67, 0xfb, 0xd1, 0xaf, 0x07, 0x0d, 0xb7,
- 0x3f, 0x08, 0x98, 0x2f, 0x02, 0x78, 0x0e, 0x38, 0x9e, 0xd7, 0x8f, 0x72, 0x5e, 0x3e, 0x22, 0x32,
- 0x35, 0xb8, 0xff, 0x8d, 0xa7, 0xbf, 0x29, 0xa6, 0x06, 0xa7, 0x20, 0x53, 0x43, 0xb8, 0xde, 0x78,
- 0xea, 0x8f, 0x89, 0xa9, 0x21, 0x48, 0x88, 0x66, 0xfb, 0xbc, 0x5b, 0x3c, 0x87, 0x8f, 0x0b, 0xcd,
- 0xf6, 0x51, 0xcd, 0xaf, 0xc3, 0x78, 0x9b, 0x43, 0x8c, 0x67, 0xf5, 0x63, 0x9c, 0x55, 0x3e, 0xec,
- 0x0f, 0xfd, 0xce, 0x8b, 0x3b, 0xc3, 0x78, 0x6e, 0x9f, 0x08, 0x39, 0x2f, 0xee, 0x0b, 0xe7, 0x2f,
- 0x42, 0xc6, 0x68, 0xd5, 0xeb, 0x64, 0xf2, 0xa0, 0xee, 0x27, 0x01, 0xa7, 0xfe, 0xeb, 0x37, 0xb8,
- 0x74, 0x04, 0xc1, 0xfc, 0x39, 0x48, 0xe3, 0xc6, 0x0e, 0xae, 0xc6, 0x51, 0x7e, 0xe5, 0x1b, 0xc2,
- 0x60, 0x12, 0xec, 0xf9, 0xa7, 0x01, 0x58, 0x6a, 0x84, 0x6e, 0x06, 0xc6, 0xd0, 0xfe, 0xb7, 0x6f,
- 0xf0, 0xa3, 0x37, 0x1e, 0x89, 0xc7, 0x80, 0x1d, 0xe4, 0xe9, 0xce, 0xe0, 0xab, 0x41, 0x06, 0x74,
- 0x44, 0x2e, 0xc0, 0xd0, 0x4b, 0xb6, 0x69, 0x38, 0x5a, 0x2d, 0x8e, 0xfa, 0xbf, 0x73, 0x6a, 0x81,
- 0x4f, 0x04, 0xd6, 0x30, 0x9b, 0xd8, 0xd1, 0x6a, 0x76, 0x1c, 0xed, 0x1f, 0x72, 0x5a, 0x97, 0x80,
- 0x10, 0x57, 0x34, 0xdb, 0xe9, 0xa5, 0xdf, 0x7f, 0x24, 0x88, 0x05, 0x01, 0x69, 0x34, 0xf9, 0xff,
- 0x2a, 0x3e, 0x88, 0xa3, 0xfd, 0x9a, 0x68, 0x34, 0xc7, 0x9f, 0x7f, 0x2b, 0x64, 0xc9, 0xbf, 0xec,
- 0x3c, 0x5d, 0x0c, 0xf1, 0x1f, 0x73, 0x62, 0x8f, 0x82, 0xd4, 0x6c, 0x3b, 0x55, 0x47, 0x8f, 0x17,
- 0xf6, 0x1b, 0x7c, 0xa4, 0x05, 0xfe, 0x7c, 0x11, 0x86, 0x6d, 0xa7, 0x5a, 0x6d, 0xf1, 0xf8, 0x34,
- 0x86, 0xfc, 0x7f, 0x7c, 0xc3, 0x4d, 0x59, 0xb8, 0x34, 0x64, 0xb4, 0xaf, 0x5f, 0x75, 0x2c, 0x93,
- 0x6e, 0x78, 0xc4, 0x71, 0xf8, 0x3a, 0xe7, 0xe0, 0x23, 0x99, 0x5f, 0x80, 0x1c, 0xe9, 0x4b, 0x13,
- 0x5b, 0x98, 0xee, 0x4e, 0xc5, 0xb0, 0xf8, 0x9f, 0x5c, 0x00, 0x01, 0xa2, 0xd2, 0xbb, 0x7f, 0xe3,
- 0xf5, 0x69, 0xe9, 0x73, 0xaf, 0x4f, 0x4b, 0x7f, 0xf0, 0xfa, 0xb4, 0xf4, 0x83, 0x5f, 0x9c, 0x1e,
- 0xf8, 0xdc, 0x17, 0xa7, 0x07, 0x7e, 0xf7, 0x8b, 0xd3, 0x03, 0x9d, 0xb3, 0xc4, 0xb0, 0x64, 0x2e,
- 0x99, 0x2c, 0x3f, 0xfc, 0xa2, 0x5c, 0xd3, 0x9d, 0xbd, 0xd6, 0xce, 0x5c, 0xc5, 0x6c, 0xd0, 0x34,
- 0xae, 0x97, 0xad, 0x75, 0x17, 0x39, 0xf0, 0xbe, 0x24, 0x1c, 0xaf, 0x98, 0x76, 0xc3, 0xb4, 0x55,
- 0x96, 0xef, 0x65, 0x05, 0x9e, 0xf1, 0xcd, 0xf9, 0x3f, 0xf5, 0x90, 0xf4, 0x5d, 0x86, 0x51, 0xda,
- 0x75, 0x9a, 0xee, 0xa2, 0xda, 0x16, 0x6b, 0x20, 0x7e, 0xf3, 0xdf, 0xa6, 0x69, 0xaf, 0x47, 0x5c,
- 0x42, 0xba, 0x7b, 0xbf, 0x0d, 0x93, 0x7a, 0xc3, 0xaa, 0x63, 0x9a, 0xe6, 0x57, 0xdd, 0x6f, 0xf1,
- 0xfc, 0x3e, 0xcb, 0xf9, 0x4d, 0x78, 0xe4, 0x2b, 0x82, 0x7a, 0x7e, 0x15, 0xc6, 0xb5, 0x4a, 0x05,
- 0x5b, 0x01, 0x96, 0x31, 0xc3, 0x22, 0x1a, 0x98, 0xe7, 0x94, 0x2e, 0xb7, 0xd2, 0xd3, 0x51, 0x43,
- 0xf3, 0xe2, 0x7d, 0x3e, 0xc9, 0x37, 0x71, 0x0d, 0x1b, 0x8f, 0x18, 0xd8, 0xb9, 0x6e, 0x36, 0xaf,
- 0x72, 0xf1, 0x3e, 0xc2, 0xaa, 0x1a, 0x64, 0x27, 0x98, 0xe1, 0x03, 0x49, 0x98, 0x66, 0x1f, 0xce,
- 0xec, 0x68, 0x36, 0x3e, 0x73, 0xed, 0xb1, 0x1d, 0xec, 0x68, 0x8f, 0x9d, 0xa9, 0x98, 0xba, 0xc1,
- 0x47, 0x62, 0x82, 0x8f, 0x0b, 0xf9, 0x3e, 0xc7, 0xbf, 0x17, 0x3a, 0xa6, 0xe9, 0xe5, 0x25, 0x48,
- 0x2d, 0x98, 0xba, 0x81, 0x26, 0x21, 0x5d, 0xc5, 0x86, 0xd9, 0xe0, 0x67, 0xee, 0x58, 0x01, 0xdd,
- 0x03, 0x83, 0x5a, 0xc3, 0x6c, 0x19, 0x0e, 0xdb, 0xa1, 0x28, 0x0d, 0xff, 0xc6, 0xad, 0x99, 0x81,
- 0xdf, 0xbb, 0x35, 0x93, 0x5c, 0x31, 0x1c, 0x85, 0x7f, 0x9a, 0x4f, 0x7d, 0xf9, 0xb5, 0x19, 0x49,
- 0x7e, 0x06, 0x86, 0x16, 0x71, 0xe5, 0x30, 0xbc, 0x16, 0x71, 0x25, 0xc4, 0xeb, 0x41, 0xc8, 0xac,
- 0x18, 0x0e, 0x3b, 0x15, 0x79, 0x17, 0x24, 0x75, 0x83, 0x1d, 0xb4, 0x09, 0xd5, 0x4f, 0xe0, 0x04,
- 0x75, 0x11, 0x57, 0x5c, 0xd4, 0x2a, 0xae, 0x84, 0x51, 0x09, 0x7b, 0x02, 0x2f, 0x2d, 0xfe, 0xee,
- 0x7f, 0x9c, 0x1e, 0x78, 0xe5, 0xf5, 0xe9, 0x81, 0xc8, 0x91, 0xf0, 0xcf, 0x01, 0x2e, 0x62, 0x3e,
- 0x04, 0x76, 0xf5, 0x2a, 0xdb, 0x23, 0x71, 0x87, 0xe1, 0xb7, 0x07, 0x41, 0xe6, 0x38, 0xb6, 0xa3,
- 0x5d, 0xd5, 0x8d, 0x9a, 0x3b, 0x12, 0x5a, 0xcb, 0xd9, 0x7b, 0x99, 0x0f, 0xc5, 0x51, 0x3e, 0x14,
- 0x1c, 0xa7, 0xfb, 0x68, 0x14, 0xa2, 0x67, 0x57, 0x21, 0x66, 0xcc, 0xe5, 0x7f, 0x99, 0x04, 0xb4,
- 0xe5, 0x68, 0x57, 0x71, 0xb1, 0xe5, 0xec, 0x99, 0x4d, 0xfd, 0x65, 0x66, 0xcb, 0x30, 0x40, 0x43,
- 0xdb, 0x57, 0x1d, 0xf3, 0x2a, 0x36, 0x6c, 0x2a, 0x9a, 0xe1, 0xb3, 0xc7, 0xe7, 0x3a, 0xe8, 0xc7,
- 0x1c, 0x19, 0xba, 0xd2, 0x43, 0x9f, 0xfa, 0xc2, 0xcc, 0x03, 0xf1, 0x52, 0xa0, 0xc8, 0x24, 0xb8,
- 0xde, 0xdf, 0xa6, 0x8c, 0xd1, 0x15, 0x60, 0x87, 0x2c, 0xd4, 0xba, 0x6e, 0x3b, 0xfc, 0x9c, 0xf6,
- 0xb9, 0xb9, 0xce, 0x7d, 0x9f, 0x6b, 0x6f, 0xe6, 0xdc, 0x15, 0xad, 0xae, 0x57, 0x35, 0xc7, 0x6c,
- 0xda, 0xcb, 0x03, 0x4a, 0x96, 0xb2, 0x5a, 0xd5, 0x6d, 0x07, 0x6d, 0x43, 0xb6, 0x8a, 0x8d, 0x03,
- 0xc6, 0x36, 0xf9, 0xe6, 0xd8, 0x66, 0x08, 0x27, 0xca, 0xf5, 0x05, 0x40, 0x9a, 0x1f, 0x4f, 0x5c,
- 0x4c, 0x62, 0xe7, 0x2b, 0x23, 0xd8, 0x07, 0x38, 0xd3, 0x7b, 0x14, 0xe3, 0x5a, 0x18, 0x54, 0xb8,
- 0x1f, 0xc0, 0xab, 0x13, 0x4d, 0xc1, 0x90, 0x56, 0xad, 0x36, 0xb1, 0x6d, 0xd3, 0x0d, 0xc0, 0xac,
- 0x22, 0x8a, 0xf3, 0xe3, 0xff, 0xfa, 0xd3, 0x8f, 0x8c, 0x04, 0x38, 0x96, 0x72, 0x00, 0xd7, 0x5c,
- 0xd2, 0xd3, 0x1f, 0x93, 0x60, 0xbc, 0xad, 0x46, 0x24, 0xc3, 0x74, 0xf1, 0xf2, 0xf6, 0xf2, 0x86,
- 0xb2, 0xf2, 0x62, 0x71, 0x7b, 0x65, 0x63, 0x5d, 0x65, 0x47, 0xfe, 0xd7, 0xb7, 0x36, 0xcb, 0x0b,
- 0x2b, 0x97, 0x56, 0xca, 0x8b, 0xf9, 0x01, 0x34, 0x03, 0x27, 0x3a, 0xe0, 0x2c, 0x96, 0x57, 0xcb,
- 0x4b, 0xc5, 0xed, 0x72, 0x5e, 0x42, 0x77, 0xc3, 0x5d, 0x1d, 0x99, 0xb8, 0x28, 0x89, 0x08, 0x14,
- 0xa5, 0xec, 0xa2, 0x24, 0x4b, 0x97, 0x22, 0x67, 0xd1, 0xc3, 0x5d, 0xf5, 0x67, 0xdf, 0x9d, 0x2e,
- 0xc1, 0xf9, 0xf4, 0x3d, 0x09, 0x38, 0x1e, 0x76, 0x19, 0x9a, 0x71, 0x10, 0x71, 0xeb, 0x33, 0xc2,
- 0x9a, 0x2d, 0x43, 0xb2, 0x68, 0x1c, 0xa0, 0xe3, 0x2c, 0x9e, 0x56, 0x5b, 0xcd, 0x3a, 0xb7, 0x41,
- 0x43, 0xa4, 0x7c, 0xb9, 0x59, 0x27, 0xb6, 0x49, 0x1c, 0xf4, 0x97, 0x4e, 0xe5, 0xf8, 0xe9, 0xfd,
- 0xf9, 0xfc, 0xab, 0xaf, 0xcd, 0x0c, 0xfc, 0xec, 0x6b, 0x33, 0x03, 0x5f, 0xfb, 0xf8, 0xcc, 0xc0,
- 0x2b, 0xbf, 0x3f, 0x3b, 0x50, 0xba, 0x1a, 0xee, 0xde, 0x67, 0x62, 0xbd, 0x69, 0xa6, 0x68, 0x1c,
- 0x50, 0x43, 0xb4, 0x29, 0xbd, 0x98, 0xa6, 0x9d, 0x13, 0x1b, 0xa8, 0xd3, 0xe1, 0x0d, 0xd4, 0xe7,
- 0x71, 0xbd, 0xfe, 0xac, 0x61, 0x5e, 0xa7, 0xa3, 0xea, 0xc9, 0xe0, 0x23, 0x09, 0x98, 0x6e, 0x73,
- 0x9b, 0x3c, 0xc2, 0x88, 0xba, 0xfe, 0x3a, 0x0f, 0x99, 0x45, 0x11, 0xb8, 0x4c, 0xc1, 0x90, 0x8d,
- 0x2b, 0xa6, 0x51, 0x65, 0x33, 0x3d, 0xa9, 0x88, 0x22, 0xe9, 0xb6, 0xa1, 0x19, 0xa6, 0xcd, 0xcf,
- 0xdc, 0xb3, 0x42, 0xe9, 0x47, 0xa4, 0xfe, 0xe2, 0x85, 0x11, 0x51, 0x93, 0xe8, 0xe6, 0x63, 0xb1,
- 0x5b, 0xca, 0x57, 0x49, 0x2f, 0xdd, 0x4e, 0x04, 0xb6, 0x95, 0x7b, 0x95, 0xca, 0x0f, 0x25, 0x60,
- 0x26, 0x2c, 0x15, 0x12, 0xb6, 0xd9, 0x8e, 0xd6, 0xb0, 0xa2, 0xc4, 0x72, 0x11, 0xb2, 0xdb, 0x02,
- 0xa7, 0x6f, 0xb9, 0xdc, 0xec, 0x53, 0x2e, 0xa3, 0x6e, 0x55, 0x42, 0x30, 0x67, 0x7b, 0x14, 0x8c,
- 0xdb, 0x8f, 0x43, 0x49, 0xe6, 0x53, 0x29, 0xb8, 0x8b, 0x5e, 0xca, 0x6a, 0x36, 0x74, 0xc3, 0x39,
- 0x53, 0x69, 0x1e, 0x58, 0x0e, 0x0d, 0xdc, 0xcc, 0x5d, 0x2e, 0x97, 0x71, 0xef, 0xf3, 0x1c, 0xfb,
- 0x1c, 0x31, 0x73, 0x76, 0x21, 0xbd, 0x49, 0xe8, 0x88, 0x44, 0x1c, 0xd3, 0xd1, 0xea, 0x5c, 0x52,
- 0xac, 0x40, 0xa0, 0xec, 0x22, 0x57, 0x82, 0x41, 0x75, 0x71, 0x87, 0xab, 0x8e, 0xb5, 0x5d, 0x76,
- 0x1e, 0x3e, 0x49, 0x27, 0x54, 0x86, 0x00, 0xe8, 0xd1, 0xf7, 0x49, 0x48, 0x6b, 0x2d, 0x76, 0x94,
- 0x23, 0x49, 0x66, 0x1a, 0x2d, 0xc8, 0xcf, 0xc2, 0x10, 0xdf, 0x50, 0x46, 0x79, 0x48, 0x5e, 0xc5,
- 0x07, 0xb4, 0x9e, 0x9c, 0x42, 0xfe, 0x45, 0x73, 0x90, 0xa6, 0x8d, 0xe7, 0x0e, 0x64, 0x6a, 0xae,
- 0xad, 0xf5, 0x73, 0xb4, 0x91, 0x0a, 0x43, 0x93, 0x9f, 0x81, 0xcc, 0xa2, 0xd9, 0xd0, 0x0d, 0x33,
- 0xc8, 0x2d, 0xcb, 0xb8, 0xd1, 0x36, 0x5b, 0x2d, 0x1e, 0x6f, 0x28, 0xac, 0x80, 0x8e, 0xc2, 0x20,
- 0xbb, 0x1f, 0xc1, 0x8f, 0xa3, 0xf0, 0x92, 0xbc, 0x00, 0x43, 0x94, 0xf7, 0x86, 0x85, 0x10, 0xbf,
- 0x59, 0xc7, 0x2f, 0x62, 0xd0, 0xd0, 0x94, 0xb3, 0x4f, 0x78, 0x8d, 0x45, 0x90, 0xaa, 0x6a, 0x8e,
- 0xc6, 0xfb, 0x4d, 0xff, 0x97, 0xdf, 0x06, 0x19, 0xce, 0xc4, 0x46, 0x67, 0x21, 0x69, 0x5a, 0x36,
- 0x3f, 0x50, 0x52, 0x88, 0xea, 0xca, 0x86, 0x55, 0x4a, 0x91, 0x48, 0x45, 0x21, 0xc8, 0x25, 0x25,
- 0xd2, 0xa8, 0x3e, 0xe5, 0x33, 0xaa, 0xbe, 0x21, 0xf7, 0xfd, 0xcb, 0x86, 0xb4, 0x4d, 0x1d, 0x5c,
- 0x65, 0xf9, 0x78, 0x02, 0xa6, 0x7d, 0x5f, 0xaf, 0xe1, 0xa6, 0xad, 0x9b, 0x06, 0xf7, 0xe7, 0x4c,
- 0x5b, 0x90, 0xaf, 0x91, 0xfc, 0x7b, 0x84, 0xba, 0xbc, 0x15, 0x92, 0x45, 0xcb, 0x42, 0x05, 0xc8,
- 0xd0, 0x72, 0xc5, 0x64, 0xfa, 0x92, 0x52, 0xdc, 0x32, 0xf9, 0x66, 0x9b, 0xbb, 0xce, 0x75, 0xad,
- 0xe9, 0x5e, 0x21, 0x14, 0x65, 0xf9, 0x02, 0x64, 0x17, 0x4c, 0xc3, 0xc6, 0x86, 0xdd, 0xa2, 0x73,
- 0x70, 0xa7, 0x6e, 0x56, 0xae, 0x72, 0x0e, 0xac, 0x40, 0x04, 0xae, 0x59, 0x16, 0xa5, 0x4c, 0x29,
- 0xe4, 0x5f, 0x16, 0x1b, 0x96, 0xb6, 0x22, 0x45, 0x74, 0xa1, 0x7f, 0x11, 0xf1, 0x4e, 0xba, 0x32,
- 0xfa, 0x33, 0x09, 0x4e, 0xb6, 0x4f, 0xa8, 0xab, 0xf8, 0xc0, 0xee, 0x77, 0x3e, 0xbd, 0x00, 0xd9,
- 0x4d, 0x7a, 0x8f, 0xff, 0x59, 0x7c, 0x80, 0x0a, 0x30, 0x84, 0xab, 0x67, 0xcf, 0x9d, 0x7b, 0xec,
- 0x02, 0xd3, 0xf6, 0xe5, 0x01, 0x45, 0x00, 0xd0, 0x34, 0x64, 0x6d, 0x5c, 0xb1, 0xce, 0x9e, 0x3b,
- 0x7f, 0xf5, 0x31, 0xa6, 0x5e, 0x24, 0x02, 0x72, 0x41, 0xf3, 0x19, 0xd2, 0xeb, 0x2f, 0x7f, 0x7c,
- 0x46, 0x2a, 0xa5, 0x21, 0x69, 0xb7, 0x1a, 0x77, 0x54, 0x47, 0x3e, 0x9a, 0x86, 0x59, 0x3f, 0x25,
- 0xb5, 0x54, 0x6e, 0x54, 0xc2, 0x65, 0x90, 0xf7, 0xc9, 0x80, 0x62, 0x44, 0x04, 0xb3, 0x5d, 0x25,
- 0x29, 0xff, 0xbc, 0x04, 0x39, 0x37, 0x54, 0xda, 0xc2, 0x0e, 0xba, 0xe8, 0x8f, 0x7f, 0xf8, 0xb4,
- 0x39, 0x31, 0x17, 0xae, 0xcb, 0x0b, 0xe9, 0x14, 0x1f, 0x3a, 0x7a, 0x92, 0x2a, 0xa2, 0x65, 0xda,
- 0xfc, 0x5a, 0x59, 0x0c, 0xa9, 0x8b, 0x8c, 0x1e, 0x06, 0x44, 0x2d, 0x9c, 0x7a, 0xcd, 0x74, 0x74,
- 0xa3, 0xa6, 0x5a, 0xe6, 0x75, 0x7e, 0x59, 0x37, 0xa9, 0xe4, 0xe9, 0x97, 0x2b, 0xf4, 0xc3, 0x26,
- 0x81, 0x93, 0x46, 0x67, 0x5d, 0x2e, 0xc1, 0xf0, 0x8e, 0x18, 0x01, 0x51, 0x44, 0x17, 0x61, 0xc8,
- 0x6a, 0xed, 0xa8, 0xc2, 0x62, 0x0c, 0x9f, 0x3d, 0xd9, 0x69, 0xfe, 0x0b, 0xfd, 0xe0, 0x16, 0x60,
- 0xd0, 0x6a, 0xed, 0x10, 0x6d, 0xb9, 0x1b, 0x72, 0x1d, 0x1a, 0x33, 0x7c, 0xcd, 0x6b, 0x07, 0x7d,
- 0x3e, 0x82, 0xf7, 0x40, 0xb5, 0x9a, 0xba, 0xd9, 0xd4, 0x9d, 0x03, 0x1a, 0xbf, 0x26, 0x95, 0xbc,
- 0xf8, 0xb0, 0xc9, 0xe1, 0xf2, 0x55, 0x18, 0xdb, 0xa2, 0xeb, 0x5b, 0xaf, 0xe5, 0xe7, 0xbc, 0xf6,
- 0x49, 0xf1, 0xed, 0x8b, 0x6c, 0x59, 0xa2, 0xad, 0x65, 0xa5, 0xe7, 0x22, 0xb5, 0xf3, 0xc9, 0xfe,
- 0xb5, 0x33, 0x18, 0x21, 0xfe, 0xd1, 0xf1, 0xc0, 0xe4, 0x64, 0xca, 0xe9, 0x37, 0x5f, 0xbd, 0x2a,
- 0x66, 0x5c, 0x34, 0x51, 0xe8, 0xee, 0x54, 0x0b, 0x31, 0x66, 0xb4, 0x10, 0x3b, 0x85, 0xe4, 0x0b,
- 0x30, 0xb2, 0xa9, 0x35, 0x9d, 0x2d, 0xec, 0x2c, 0x63, 0xad, 0x8a, 0x9b, 0x41, 0xaf, 0x3b, 0x22,
- 0xbc, 0x2e, 0x82, 0x14, 0x75, 0xad, 0xcc, 0xeb, 0xd0, 0xff, 0xe5, 0x3d, 0x48, 0xd1, 0x93, 0xa1,
- 0xae, 0x47, 0xe6, 0x14, 0xcc, 0x23, 0x13, 0x5b, 0x7a, 0xe0, 0x60, 0x5b, 0x84, 0xb7, 0xb4, 0x80,
- 0x9e, 0x10, 0x7e, 0x35, 0xd9, 0xdd, 0xaf, 0x72, 0x45, 0xe4, 0xde, 0xb5, 0x0e, 0x43, 0x25, 0x62,
- 0x8a, 0x57, 0x16, 0xdd, 0x86, 0x48, 0x5e, 0x43, 0xd0, 0x1a, 0x8c, 0x59, 0x5a, 0xd3, 0xa1, 0x57,
- 0x62, 0xf6, 0x68, 0x2f, 0xb8, 0xae, 0xcf, 0xb4, 0xcf, 0xbc, 0x40, 0x67, 0x79, 0x2d, 0x23, 0x96,
- 0x1f, 0x28, 0xff, 0xe7, 0x14, 0x0c, 0x72, 0x61, 0xbc, 0x15, 0x86, 0xb8, 0x58, 0xb9, 0x76, 0xde,
- 0x35, 0xd7, 0xee, 0x98, 0xe6, 0x5c, 0x07, 0xc2, 0xf9, 0x09, 0x1a, 0x74, 0x3f, 0x64, 0x2a, 0x7b,
- 0x9a, 0x6e, 0xa8, 0x7a, 0x55, 0xa4, 0x1a, 0x5e, 0xbf, 0x35, 0x33, 0xb4, 0x40, 0x60, 0x2b, 0x8b,
- 0xca, 0x10, 0xfd, 0xb8, 0x52, 0x25, 0x91, 0xc0, 0x1e, 0xd6, 0x6b, 0x7b, 0x0e, 0x9f, 0x61, 0xbc,
- 0x84, 0x9e, 0x82, 0x14, 0x51, 0x08, 0x7e, 0x61, 0xb2, 0xd0, 0x96, 0xf0, 0x71, 0x83, 0xbd, 0x52,
- 0x86, 0x54, 0xfc, 0x83, 0x5f, 0x98, 0x91, 0x14, 0x4a, 0x81, 0x16, 0x60, 0xa4, 0xae, 0xd9, 0x8e,
- 0x4a, 0x3d, 0x18, 0xa9, 0x3e, 0xcd, 0xd7, 0xdb, 0x6d, 0x02, 0xe1, 0x82, 0xe5, 0x4d, 0x1f, 0x26,
- 0x54, 0x0c, 0x54, 0x45, 0xa7, 0x20, 0x4f, 0x99, 0x54, 0xcc, 0x46, 0x43, 0x77, 0x58, 0x6c, 0x35,
- 0x48, 0xe5, 0x3e, 0x4a, 0xe0, 0x0b, 0x14, 0x4c, 0x23, 0xac, 0x13, 0x90, 0xa5, 0x57, 0xb4, 0x28,
- 0x0a, 0x3b, 0x8e, 0x9c, 0x21, 0x00, 0xfa, 0xf1, 0x01, 0x18, 0xf3, 0xec, 0x23, 0x43, 0xc9, 0x30,
- 0x2e, 0x1e, 0x98, 0x22, 0x3e, 0x0a, 0x93, 0x06, 0xde, 0xa7, 0x07, 0xa4, 0x03, 0xd8, 0x59, 0x8a,
- 0x8d, 0xc8, 0xb7, 0x2b, 0x41, 0x8a, 0xfb, 0x60, 0xb4, 0x22, 0x84, 0xcf, 0x70, 0x81, 0xe2, 0x8e,
- 0xb8, 0x50, 0x8a, 0x76, 0x1c, 0x32, 0x9a, 0x65, 0x31, 0x84, 0x61, 0x6e, 0x1f, 0x2d, 0x8b, 0x7e,
- 0x3a, 0x0d, 0xe3, 0xb4, 0x8f, 0x4d, 0x6c, 0xb7, 0xea, 0x0e, 0x67, 0x92, 0xa3, 0x38, 0x63, 0xe4,
- 0x83, 0xc2, 0xe0, 0x14, 0xf7, 0x1e, 0x18, 0xc1, 0xd7, 0xf4, 0x2a, 0x36, 0x2a, 0x98, 0xe1, 0x8d,
- 0x50, 0xbc, 0x9c, 0x00, 0x52, 0xa4, 0x07, 0xc1, 0xb5, 0x7b, 0xaa, 0xb0, 0xc9, 0xa3, 0x8c, 0x9f,
- 0x80, 0x17, 0x19, 0x58, 0x9e, 0x82, 0xd4, 0xa2, 0xe6, 0x68, 0x24, 0xc0, 0x70, 0xf6, 0x99, 0xa3,
- 0xc9, 0x29, 0xe4, 0x5f, 0xf9, 0xcb, 0x09, 0x48, 0x5d, 0x31, 0x1d, 0x8c, 0x1e, 0xf7, 0x05, 0x80,
- 0xa3, 0x9d, 0xf4, 0x79, 0x4b, 0xaf, 0x19, 0xb8, 0xba, 0x66, 0xd7, 0x7c, 0xef, 0x29, 0x78, 0xea,
- 0x94, 0x08, 0xa8, 0xd3, 0x24, 0xa4, 0x9b, 0x66, 0xcb, 0xa8, 0x8a, 0x93, 0xbc, 0xb4, 0x80, 0xca,
- 0x90, 0x71, 0xb5, 0x24, 0x15, 0xa7, 0x25, 0x63, 0x44, 0x4b, 0x88, 0x0e, 0x73, 0x80, 0x32, 0xb4,
- 0xc3, 0x95, 0xa5, 0x04, 0x59, 0xd7, 0x78, 0x71, 0x6d, 0xeb, 0x4d, 0x61, 0x3d, 0x32, 0xe2, 0x4c,
- 0xdc, 0xb1, 0x77, 0x85, 0xc7, 0x34, 0x2e, 0xef, 0x7e, 0xe0, 0xd2, 0x0b, 0xa8, 0x15, 0x7f, 0xdb,
- 0x61, 0x88, 0xf6, 0xcb, 0x53, 0x2b, 0xf6, 0xbe, 0xc3, 0x49, 0xc8, 0xda, 0x7a, 0xcd, 0xd0, 0x9c,
- 0x56, 0x13, 0x73, 0xcd, 0xf3, 0x00, 0xf2, 0x67, 0x24, 0x18, 0x64, 0x9a, 0xec, 0x93, 0x9b, 0xd4,
- 0x59, 0x6e, 0x89, 0x28, 0xb9, 0x25, 0x0f, 0x2f, 0xb7, 0x22, 0x80, 0xdb, 0x18, 0x9b, 0x5f, 0xb9,
- 0xef, 0x10, 0x31, 0xb0, 0x26, 0x6e, 0xe9, 0x35, 0x3e, 0x51, 0x7d, 0x44, 0xf2, 0x7f, 0x90, 0x48,
- 0x10, 0xcb, 0xbf, 0xa3, 0x22, 0x8c, 0x88, 0x76, 0xa9, 0xbb, 0x75, 0xad, 0xc6, 0x75, 0xe7, 0xae,
- 0xc8, 0xc6, 0x5d, 0xaa, 0x6b, 0x35, 0x65, 0x98, 0xb7, 0x87, 0x14, 0x3a, 0x8f, 0x43, 0x22, 0x62,
- 0x1c, 0x02, 0x03, 0x9f, 0x3c, 0xdc, 0xc0, 0x07, 0x86, 0x28, 0x15, 0x1e, 0xa2, 0x5f, 0x48, 0xd0,
- 0xc5, 0x8c, 0x65, 0xda, 0x5a, 0xfd, 0x9b, 0x31, 0x23, 0x4e, 0x40, 0xd6, 0x32, 0xeb, 0x2a, 0xfb,
- 0xc2, 0x4e, 0xb8, 0x67, 0x2c, 0xb3, 0xae, 0xb4, 0x0d, 0x7b, 0xfa, 0x36, 0x4d, 0x97, 0xc1, 0xdb,
- 0x20, 0xb5, 0xa1, 0xb0, 0xd4, 0x9a, 0x90, 0x63, 0xa2, 0xe0, 0xbe, 0xec, 0x51, 0x22, 0x03, 0xea,
- 0x1c, 0xa5, 0x76, 0xdf, 0xcb, 0x9a, 0xcd, 0x30, 0x15, 0x8e, 0x47, 0x28, 0x98, 0xe9, 0xef, 0xb4,
- 0x0a, 0xf6, 0xab, 0xa5, 0xc2, 0xf1, 0xe4, 0xbf, 0x25, 0x01, 0xac, 0x12, 0xc9, 0xd2, 0xfe, 0x12,
- 0x2f, 0x64, 0xd3, 0x26, 0xa8, 0x81, 0x9a, 0xa7, 0xa3, 0x06, 0x8d, 0xd7, 0x9f, 0xb3, 0xfd, 0xed,
- 0x5e, 0x80, 0x11, 0x4f, 0x19, 0x6d, 0x2c, 0x1a, 0x33, 0xdd, 0x25, 0xaa, 0xde, 0xc2, 0x8e, 0x92,
- 0xbb, 0xe6, 0x2b, 0xc9, 0xff, 0x4c, 0x82, 0x2c, 0x6d, 0xd3, 0x1a, 0x76, 0xb4, 0xc0, 0x18, 0x4a,
- 0x87, 0x1f, 0xc3, 0xbb, 0x00, 0x18, 0x1b, 0x5b, 0x7f, 0x19, 0x73, 0xcd, 0xca, 0x52, 0xc8, 0x96,
- 0xfe, 0x32, 0x46, 0xe7, 0x5d, 0x81, 0x27, 0xbb, 0x0b, 0x5c, 0x44, 0xdd, 0x5c, 0xec, 0xc7, 0x60,
- 0x88, 0x3e, 0x51, 0xb5, 0x6f, 0xf3, 0x40, 0x7a, 0xd0, 0x68, 0x35, 0xb6, 0xf7, 0x6d, 0xf9, 0x25,
- 0x18, 0xda, 0xde, 0x67, 0xb9, 0x91, 0x13, 0x90, 0x6d, 0x9a, 0x26, 0xf7, 0xc9, 0x2c, 0x16, 0xca,
- 0x10, 0x00, 0x75, 0x41, 0x22, 0x1f, 0x90, 0xf0, 0xf2, 0x01, 0x5e, 0x42, 0x23, 0xd9, 0x53, 0x42,
- 0xe3, 0xf4, 0xbf, 0x93, 0x60, 0xd8, 0x67, 0x1f, 0xd0, 0x63, 0x70, 0xa4, 0xb4, 0xba, 0xb1, 0xf0,
- 0xac, 0xba, 0xb2, 0xa8, 0x5e, 0x5a, 0x2d, 0x2e, 0x79, 0x77, 0xb8, 0x0a, 0x47, 0x6f, 0xdc, 0x9c,
- 0x45, 0x3e, 0xdc, 0xcb, 0x06, 0xcd, 0x28, 0xa1, 0x33, 0x30, 0x19, 0x24, 0x29, 0x96, 0xb6, 0xca,
- 0xeb, 0xdb, 0x79, 0xa9, 0x70, 0xe4, 0xc6, 0xcd, 0xd9, 0x71, 0x1f, 0x45, 0x71, 0xc7, 0xc6, 0x86,
- 0xd3, 0x4e, 0xb0, 0xb0, 0xb1, 0xb6, 0xb6, 0xb2, 0x9d, 0x4f, 0xb4, 0x11, 0x70, 0x83, 0xfd, 0x20,
- 0x8c, 0x07, 0x09, 0xd6, 0x57, 0x56, 0xf3, 0xc9, 0x02, 0xba, 0x71, 0x73, 0x76, 0xd4, 0x87, 0xbd,
- 0xae, 0xd7, 0x0b, 0x99, 0x0f, 0x7e, 0x62, 0x7a, 0xe0, 0x27, 0x7e, 0x7c, 0x5a, 0x22, 0x3d, 0x1b,
- 0x09, 0xd8, 0x08, 0xf4, 0x30, 0x1c, 0xdb, 0x5a, 0x59, 0x5a, 0x2f, 0x2f, 0xaa, 0x6b, 0x5b, 0x4b,
- 0x22, 0x07, 0x2d, 0x7a, 0x37, 0x76, 0xe3, 0xe6, 0xec, 0x30, 0xef, 0x52, 0x14, 0xf6, 0xa6, 0x52,
- 0xbe, 0xb2, 0xb1, 0x5d, 0xce, 0x4b, 0x0c, 0x7b, 0xb3, 0x89, 0xaf, 0x99, 0x0e, 0x7b, 0xc3, 0xee,
- 0x51, 0x38, 0xde, 0x01, 0xdb, 0xed, 0xd8, 0xf8, 0x8d, 0x9b, 0xb3, 0x23, 0x9b, 0x4d, 0xcc, 0xe6,
- 0x0f, 0xa5, 0x98, 0x83, 0xa9, 0x76, 0x8a, 0x8d, 0xcd, 0x8d, 0xad, 0xe2, 0x6a, 0x7e, 0xb6, 0x90,
- 0xbf, 0x71, 0x73, 0x36, 0x27, 0x8c, 0x21, 0x4d, 0xf4, 0xbb, 0x3d, 0xbb, 0x93, 0x2b, 0x9e, 0xdf,
- 0x1e, 0x0a, 0xe4, 0xf7, 0xd8, 0x5a, 0xc2, 0xd2, 0x9a, 0x5a, 0xa3, 0xdf, 0x25, 0x4f, 0x4c, 0x5a,
- 0x59, 0x7e, 0x35, 0x01, 0x63, 0x6e, 0x40, 0xbd, 0x49, 0x6b, 0x40, 0x17, 0xfc, 0x79, 0x99, 0xe1,
- 0x48, 0x57, 0xc6, 0xb0, 0xc5, 0xd2, 0x81, 0x25, 0x6f, 0x4a, 0x90, 0x11, 0xe1, 0x19, 0x37, 0x1c,
- 0xb3, 0xed, 0xd4, 0x65, 0x8e, 0x11, 0x60, 0xe0, 0xd2, 0xa1, 0x32, 0x64, 0x5d, 0x63, 0xe2, 0xbe,
- 0x08, 0x13, 0x6d, 0x7d, 0x02, 0x5c, 0x3c, 0x4a, 0xf4, 0xb4, 0xb7, 0x98, 0x48, 0x45, 0x2d, 0x4f,
- 0xae, 0x30, 0x84, 0x00, 0x0b, 0x41, 0x25, 0x63, 0x3e, 0x25, 0xb9, 0x54, 0xe8, 0xcd, 0xfa, 0x7d,
- 0x95, 0xad, 0xb2, 0x58, 0xc4, 0x92, 0x69, 0x68, 0xfb, 0x25, 0xba, 0xd0, 0x3a, 0x06, 0x43, 0xe4,
- 0x63, 0x8d, 0x5f, 0x3d, 0x4e, 0x2a, 0x83, 0x0d, 0x6d, 0x7f, 0x49, 0xb3, 0xd1, 0x2c, 0xe4, 0x88,
- 0x07, 0x51, 0x75, 0xd3, 0xd1, 0xd4, 0x86, 0xcd, 0x57, 0x1c, 0x40, 0x60, 0x2b, 0xa6, 0xa3, 0xad,
- 0xd9, 0xf2, 0x4f, 0x4a, 0x30, 0x1a, 0x94, 0x08, 0x7a, 0x08, 0x10, 0xe1, 0xa6, 0xd5, 0xb0, 0x4a,
- 0x4c, 0x13, 0x15, 0xad, 0xa8, 0x73, 0xac, 0xa1, 0xed, 0x17, 0x6b, 0x78, 0xbd, 0xd5, 0xa0, 0x8d,
- 0xb3, 0xd1, 0x1a, 0xe4, 0x05, 0xb2, 0x18, 0x5b, 0x2e, 0xfa, 0xe3, 0xed, 0xef, 0xc8, 0x71, 0x04,
- 0xe6, 0xe0, 0x5e, 0x25, 0x0e, 0x6e, 0x94, 0xf1, 0x73, 0xb7, 0x12, 0x02, 0xdd, 0x4c, 0x06, 0xbb,
- 0x29, 0x3f, 0x0d, 0x63, 0x21, 0xb9, 0x23, 0x19, 0x46, 0x78, 0x46, 0x81, 0x6e, 0xa6, 0x89, 0x0d,
- 0xaf, 0x61, 0x96, 0x39, 0xa0, 0x69, 0xeb, 0xf9, 0xcc, 0x2f, 0xbf, 0x36, 0x23, 0xd1, 0x0d, 0xde,
- 0x79, 0x18, 0x09, 0xc8, 0x9c, 0xde, 0xdb, 0xb6, 0x2c, 0xd5, 0xbf, 0xec, 0x4b, 0x29, 0xa0, 0x59,
- 0x16, 0x47, 0xf3, 0xd1, 0xbe, 0x08, 0x39, 0x62, 0x6f, 0x71, 0x95, 0x93, 0xde, 0x0f, 0x63, 0xcc,
- 0x1f, 0x84, 0x87, 0x85, 0x05, 0x64, 0x6b, 0x62, 0x6c, 0x64, 0x11, 0xa1, 0x05, 0x47, 0x68, 0x58,
- 0x60, 0x2d, 0x69, 0x76, 0xe9, 0xf2, 0x4f, 0xbc, 0x3e, 0x2d, 0xdd, 0xb9, 0xf9, 0x7c, 0x73, 0x19,
- 0x4e, 0xf8, 0x3e, 0x6a, 0x3b, 0x15, 0x3d, 0x90, 0xc0, 0x18, 0xf3, 0x69, 0x26, 0xf9, 0x18, 0x97,
- 0x88, 0xe8, 0x9a, 0x0e, 0xe9, 0x9e, 0x7f, 0x2b, 0x74, 0x37, 0x2c, 0xf1, 0x39, 0x92, 0xce, 0x69,
- 0xcf, 0x0f, 0x67, 0x60, 0x48, 0xc1, 0xef, 0x6d, 0x61, 0xdb, 0x41, 0x67, 0x21, 0x85, 0x2b, 0x7b,
- 0x66, 0xa7, 0x0c, 0x13, 0xe9, 0xdc, 0x1c, 0xc7, 0x2b, 0x57, 0xf6, 0xcc, 0xe5, 0x01, 0x85, 0xe2,
- 0xa2, 0x73, 0x90, 0xde, 0xad, 0xb7, 0x78, 0xca, 0x23, 0x64, 0x73, 0xfc, 0x44, 0x97, 0x08, 0xd2,
- 0xf2, 0x80, 0xc2, 0xb0, 0x49, 0x55, 0xf4, 0x91, 0xce, 0x64, 0xf7, 0xaa, 0x56, 0x8c, 0x5d, 0x5a,
- 0x15, 0xc1, 0x45, 0x25, 0x00, 0x1b, 0x3b, 0xe2, 0x06, 0x76, 0xaa, 0xdd, 0xc0, 0xf8, 0x29, 0xb7,
- 0xb0, 0xc3, 0x8e, 0x78, 0xb0, 0xe4, 0x2c, 0x2f, 0x10, 0x1e, 0xba, 0xa1, 0x3b, 0x2a, 0x4d, 0x29,
- 0xf0, 0xc0, 0xf4, 0xee, 0xe8, 0xda, 0x75, 0x87, 0x26, 0x21, 0x08, 0x0f, 0x5d, 0x14, 0x48, 0x97,
- 0xdf, 0xdb, 0xc2, 0xcd, 0x03, 0x1e, 0x8f, 0x46, 0x76, 0xf9, 0x39, 0x82, 0x44, 0xba, 0x4c, 0xb1,
- 0x51, 0x19, 0x86, 0xe9, 0x9d, 0x50, 0x66, 0x16, 0xf8, 0xa3, 0x93, 0x72, 0x14, 0x71, 0x89, 0xa0,
- 0x52, 0x4b, 0xb1, 0x3c, 0xa0, 0xc0, 0x8e, 0x5b, 0x42, 0x6f, 0x81, 0x0c, 0x7b, 0x94, 0xc8, 0xd9,
- 0xe7, 0x4f, 0xed, 0xcd, 0x44, 0xf1, 0xa0, 0x2f, 0x13, 0x6d, 0xef, 0x2f, 0x0f, 0x28, 0x43, 0x15,
- 0xf6, 0x2f, 0xe9, 0x7f, 0x15, 0xd7, 0xf5, 0x6b, 0xb8, 0x49, 0xe8, 0xb3, 0xdd, 0xfb, 0xbf, 0xc8,
- 0x30, 0x29, 0x87, 0x6c, 0x55, 0x14, 0xd0, 0xd3, 0x90, 0xc5, 0x46, 0x95, 0x77, 0x03, 0xda, 0x9d,
- 0x45, 0x40, 0x57, 0x8c, 0xaa, 0xe8, 0x44, 0x06, 0xf3, 0xff, 0xd1, 0x53, 0x6e, 0xc0, 0x3c, 0xdc,
- 0x1e, 0xa3, 0x06, 0x3a, 0xc0, 0x52, 0x27, 0x03, 0x22, 0x70, 0x46, 0xeb, 0x30, 0x5a, 0xd7, 0x6d,
- 0x47, 0xb5, 0x0d, 0xcd, 0xb2, 0xf7, 0x4c, 0xc7, 0xa6, 0x39, 0x88, 0xe1, 0xb3, 0xf7, 0x45, 0x71,
- 0x58, 0xd5, 0x6d, 0x67, 0x4b, 0x20, 0x2f, 0x0f, 0x28, 0x23, 0x75, 0x3f, 0x80, 0xf0, 0x33, 0x77,
- 0x77, 0x71, 0xd3, 0x65, 0x48, 0x73, 0x15, 0x5d, 0xf8, 0x6d, 0x10, 0x6c, 0x41, 0x4f, 0xf8, 0x99,
- 0x7e, 0x00, 0x7a, 0x27, 0x4c, 0xd4, 0x4d, 0xad, 0xea, 0xb2, 0x53, 0x2b, 0x7b, 0x2d, 0xe3, 0x2a,
- 0x4d, 0x6c, 0x0c, 0x9f, 0x7d, 0x30, 0xb2, 0x91, 0xa6, 0x56, 0x15, 0x2c, 0x16, 0x08, 0xc1, 0xf2,
- 0x80, 0x32, 0x5e, 0x0f, 0x03, 0xd1, 0x7b, 0x60, 0x52, 0xb3, 0xac, 0xfa, 0x41, 0x98, 0xfb, 0x18,
- 0xe5, 0x7e, 0x3a, 0x8a, 0x7b, 0x91, 0xd0, 0x84, 0xd9, 0x23, 0xad, 0x0d, 0x5a, 0x1a, 0xe2, 0x3b,
- 0xed, 0xf2, 0x03, 0x30, 0xec, 0x9b, 0xea, 0x68, 0x0a, 0x86, 0xf8, 0xb9, 0x53, 0xb1, 0x37, 0xcf,
- 0x8b, 0xf2, 0x28, 0xe4, 0xfc, 0xd3, 0x5b, 0x6e, 0xb8, 0x84, 0xf4, 0xa2, 0xf6, 0x54, 0x30, 0x2d,
- 0x98, 0xf5, 0x32, 0x7e, 0xf7, 0x08, 0xd3, 0x2e, 0xbe, 0xb3, 0x5d, 0xa3, 0x1c, 0x05, 0x72, 0x0f,
- 0x42, 0x5c, 0x8c, 0x75, 0xd6, 0x73, 0x31, 0x49, 0xe6, 0x62, 0xac, 0xb3, 0xc2, 0xc5, 0xc8, 0xf3,
- 0x90, 0x0f, 0xcf, 0xf6, 0xce, 0xbb, 0x8a, 0xde, 0x01, 0x82, 0x2c, 0x3f, 0x40, 0x20, 0xff, 0x56,
- 0xc2, 0x25, 0x76, 0xa7, 0xb9, 0x9b, 0x48, 0x94, 0xfa, 0x4e, 0x24, 0x1e, 0x0f, 0xa7, 0x30, 0xbd,
- 0xac, 0xe5, 0xb3, 0x90, 0xf7, 0x92, 0x6f, 0xcc, 0x64, 0x73, 0xb3, 0xd7, 0x3e, 0x6b, 0x42, 0x11,
- 0x9d, 0x32, 0x56, 0x09, 0x85, 0x78, 0x97, 0x02, 0x7b, 0x2e, 0xe2, 0xb9, 0xe8, 0x30, 0x1b, 0xd7,
- 0xd7, 0x5f, 0xb6, 0xaa, 0x9a, 0x83, 0x45, 0x2e, 0xc4, 0xb7, 0xfd, 0x72, 0x3f, 0x8c, 0x11, 0xf7,
- 0x6d, 0x3b, 0x9a, 0x83, 0xb9, 0x0f, 0x4e, 0xb3, 0x94, 0xa0, 0x66, 0x59, 0x5b, 0x04, 0xca, 0x7c,
- 0xf0, 0x7d, 0x30, 0x4a, 0x0c, 0x9f, 0xae, 0xd5, 0x55, 0x9e, 0x19, 0x18, 0x64, 0xae, 0x9a, 0x43,
- 0x97, 0x29, 0x50, 0xae, 0xba, 0x8a, 0x40, 0x8d, 0x9e, 0xbb, 0xb4, 0x92, 0x7c, 0x4b, 0x2b, 0xc4,
- 0x6f, 0xd6, 0x33, 0xf1, 0x88, 0xc7, 0x08, 0x3a, 0x67, 0x74, 0x27, 0xe9, 0x32, 0xec, 0x1a, 0x4b,
- 0x72, 0x64, 0x14, 0x56, 0x90, 0x3f, 0x90, 0x80, 0xf1, 0x36, 0xf3, 0xd8, 0x31, 0xd5, 0xed, 0xad,
- 0x29, 0x13, 0x7d, 0xad, 0x29, 0x37, 0x82, 0xa9, 0x5c, 0x9f, 0x8b, 0x6a, 0x37, 0xb2, 0xab, 0x6e,
- 0x6e, 0x97, 0x28, 0x3b, 0x67, 0xe4, 0xcb, 0xf8, 0xd2, 0x29, 0xa0, 0xc0, 0xe4, 0xce, 0xc1, 0xcb,
- 0x9a, 0xe1, 0xe8, 0x06, 0x56, 0xdb, 0x46, 0xee, 0x78, 0x1b, 0x53, 0x11, 0x50, 0x72, 0x76, 0x13,
- 0x2e, 0xb1, 0x97, 0xd1, 0x95, 0x15, 0x18, 0x0d, 0x1a, 0x78, 0x34, 0x0a, 0x09, 0x67, 0x9f, 0x0b,
- 0x20, 0xe1, 0xec, 0xa3, 0x47, 0x79, 0xf2, 0x27, 0x41, 0x93, 0x3f, 0xed, 0xde, 0x95, 0xd3, 0x79,
- 0x99, 0x1f, 0x59, 0x76, 0x67, 0x83, 0x6b, 0xf4, 0xc3, 0x5c, 0xe5, 0x07, 0x61, 0x2c, 0x64, 0xd5,
- 0xa3, 0x52, 0x81, 0xf2, 0x18, 0x8c, 0x04, 0x4c, 0xb8, 0x7c, 0x14, 0x26, 0x3b, 0x59, 0x64, 0x79,
- 0xcf, 0x85, 0x07, 0x2c, 0x2b, 0x3a, 0x07, 0x19, 0xd7, 0x24, 0x77, 0x48, 0x3d, 0xd0, 0x5e, 0x08,
- 0x64, 0xc5, 0x45, 0x0d, 0x64, 0xb0, 0x13, 0x81, 0x0c, 0xb6, 0xfc, 0x1d, 0x30, 0x15, 0x65, 0x6e,
- 0x43, 0xdd, 0x48, 0xb9, 0x6a, 0x78, 0x14, 0x06, 0xf9, 0xb3, 0x61, 0x09, 0xba, 0x67, 0xc3, 0x4b,
- 0x44, 0x3d, 0x99, 0xe9, 0x4d, 0xb2, 0xad, 0x1c, 0x5a, 0x90, 0x55, 0x38, 0x1e, 0x69, 0x72, 0xa3,
- 0x77, 0x7f, 0x18, 0x23, 0xbe, 0xfb, 0x53, 0x11, 0xcd, 0xb1, 0x69, 0x5f, 0xc5, 0x89, 0x07, 0x56,
- 0x92, 0xff, 0x53, 0x06, 0x32, 0x0a, 0xb6, 0x2d, 0x62, 0x13, 0x50, 0x09, 0xb2, 0x78, 0xbf, 0x82,
- 0x2d, 0xc7, 0xdb, 0x75, 0xe9, 0x14, 0x4c, 0x30, 0xec, 0xb2, 0xc0, 0x24, 0x9e, 0xdc, 0x25, 0x43,
- 0x8f, 0xf3, 0x80, 0x2f, 0x3a, 0x76, 0xe3, 0xe4, 0xfe, 0x88, 0xef, 0xbc, 0x88, 0xf8, 0x92, 0x91,
- 0xce, 0x9b, 0x51, 0x85, 0x42, 0xbe, 0xc7, 0x79, 0xc8, 0x97, 0x8a, 0xa9, 0x2c, 0x10, 0xf3, 0x2d,
- 0x04, 0x62, 0xbe, 0x74, 0x4c, 0x37, 0x23, 0x82, 0xbe, 0x85, 0x40, 0xd0, 0x37, 0x18, 0xc3, 0x24,
- 0x22, 0xea, 0x3b, 0x2f, 0xa2, 0xbe, 0xa1, 0x98, 0x6e, 0x87, 0xc2, 0xbe, 0x4b, 0xc1, 0xb0, 0x8f,
- 0x85, 0x6c, 0xf7, 0x44, 0x52, 0x47, 0xc6, 0x7d, 0x6f, 0xf5, 0xc5, 0x7d, 0xd9, 0xc8, 0xa0, 0x8b,
- 0x31, 0xe9, 0x10, 0xf8, 0x2d, 0x04, 0x02, 0x3f, 0x88, 0x91, 0x41, 0x44, 0xe4, 0xf7, 0x76, 0x7f,
- 0xe4, 0x37, 0x1c, 0x19, 0x3c, 0x72, 0xa5, 0xe9, 0x14, 0xfa, 0x5d, 0x70, 0x43, 0xbf, 0x5c, 0x64,
- 0xec, 0xca, 0xfb, 0x10, 0x8e, 0xfd, 0x36, 0xda, 0x62, 0xbf, 0x11, 0xfe, 0x8c, 0x79, 0x14, 0x8b,
- 0x98, 0xe0, 0x6f, 0xa3, 0x2d, 0xf8, 0x1b, 0x8d, 0x61, 0x18, 0x13, 0xfd, 0xbd, 0xab, 0x73, 0xf4,
- 0x17, 0x1d, 0x9f, 0xf1, 0x66, 0xf6, 0x16, 0xfe, 0xa9, 0x11, 0xe1, 0x5f, 0x9e, 0xb2, 0x7f, 0x28,
- 0x92, 0x7d, 0xff, 0xf1, 0xdf, 0x83, 0xc4, 0xcd, 0x86, 0x0c, 0x07, 0x31, 0x55, 0xb8, 0xd9, 0x34,
- 0x9b, 0xe2, 0x8c, 0x38, 0x2d, 0xc8, 0xa7, 0x88, 0xe3, 0xf7, 0x8c, 0x44, 0x97, 0x58, 0x91, 0xba,
- 0x04, 0x9f, 0x61, 0x90, 0x7f, 0x59, 0xf2, 0x68, 0xa9, 0xaf, 0xf4, 0x07, 0x0d, 0x59, 0x1e, 0x34,
- 0xf8, 0x42, 0xc8, 0x44, 0x30, 0x84, 0x0c, 0x25, 0x20, 0x92, 0xe1, 0x04, 0x84, 0xbb, 0x65, 0xc9,
- 0x02, 0x4d, 0x6e, 0xdf, 0x59, 0xa6, 0x78, 0xcc, 0xdd, 0xbe, 0x65, 0xf1, 0x0b, 0x7a, 0x04, 0x26,
- 0x7c, 0xb8, 0xae, 0x0b, 0x61, 0x21, 0x51, 0xde, 0xc5, 0x2e, 0x72, 0x5f, 0xb2, 0xe6, 0x09, 0xc8,
- 0x8b, 0x3c, 0x11, 0xa4, 0x2a, 0x66, 0x15, 0x73, 0x03, 0x4f, 0xff, 0x27, 0xd1, 0x68, 0xdd, 0xac,
- 0x71, 0x33, 0x4e, 0xfe, 0x25, 0x58, 0xae, 0x15, 0xcc, 0x32, 0x23, 0x27, 0xff, 0x73, 0xc9, 0xe3,
- 0xe7, 0x05, 0xa3, 0x9d, 0xe2, 0x46, 0xe9, 0xf6, 0xc4, 0x8d, 0x89, 0x43, 0xc7, 0x8d, 0x7e, 0x07,
- 0x9b, 0x0c, 0x3a, 0xd8, 0x3f, 0x91, 0xbc, 0x11, 0x76, 0xa3, 0xc0, 0xc3, 0x49, 0xc4, 0xf3, 0x96,
- 0x69, 0xff, 0xe9, 0x45, 0x1e, 0xdb, 0x0f, 0x7a, 0x47, 0xfa, 0xdc, 0xd8, 0x7e, 0xc8, 0x77, 0x38,
- 0x18, 0x3d, 0x05, 0x59, 0x9a, 0x74, 0x51, 0x4d, 0x4b, 0x3c, 0x47, 0x7f, 0x22, 0xfa, 0x38, 0x9f,
- 0x4d, 0x0f, 0x17, 0xb1, 0x23, 0x80, 0x5e, 0x20, 0x90, 0x0d, 0xc4, 0xa3, 0x27, 0x21, 0x4b, 0x5a,
- 0xcf, 0x9e, 0x55, 0x05, 0x7e, 0x91, 0x49, 0x00, 0xe4, 0xf7, 0x00, 0x6a, 0x37, 0xdf, 0x68, 0x19,
- 0x06, 0xf1, 0x35, 0xfa, 0xca, 0x15, 0x3b, 0x1a, 0x75, 0xb4, 0x43, 0xb0, 0x87, 0x0d, 0xa7, 0x34,
- 0x45, 0x84, 0xfc, 0x95, 0x5b, 0x33, 0x79, 0x86, 0xfd, 0xb0, 0xd9, 0xd0, 0x1d, 0xdc, 0xb0, 0x9c,
- 0x03, 0x85, 0xd3, 0xcb, 0xbf, 0x9f, 0x20, 0x91, 0x57, 0xc0, 0xb4, 0x77, 0x94, 0x6d, 0xa7, 0x0d,
- 0x8d, 0xde, 0xe4, 0x3d, 0x0d, 0x50, 0xd3, 0x6c, 0xf5, 0xba, 0x66, 0x38, 0xb8, 0xca, 0x85, 0xee,
- 0x83, 0xa0, 0x02, 0x64, 0x48, 0xa9, 0x65, 0xe3, 0x2a, 0x5f, 0x00, 0xb8, 0x65, 0x5f, 0x3f, 0x87,
- 0xde, 0x5c, 0x3f, 0x83, 0x52, 0xce, 0x84, 0xa4, 0xec, 0x8b, 0x8a, 0xb2, 0xfe, 0xa8, 0x88, 0x1d,
- 0x69, 0xe4, 0x27, 0xaa, 0x80, 0xb5, 0x4d, 0x94, 0xc9, 0x3a, 0xb3, 0x81, 0x1b, 0x96, 0x69, 0xd6,
- 0x55, 0x66, 0xbc, 0xd8, 0xfb, 0xc9, 0x39, 0x0e, 0x2c, 0x53, 0x1b, 0xf6, 0xbd, 0x09, 0x6f, 0xfa,
- 0x79, 0xd1, 0xef, 0xb7, 0x9d, 0x80, 0xe5, 0xef, 0xa7, 0x4b, 0xe2, 0xa0, 0xf3, 0x46, 0x5b, 0xfe,
- 0x3d, 0xee, 0x16, 0x35, 0x0b, 0x42, 0xa1, 0x7b, 0xb5, 0x1f, 0xde, 0x5e, 0x38, 0x03, 0xdb, 0xe8,
- 0x05, 0x38, 0x16, 0x32, 0x6d, 0x2e, 0xeb, 0x44, 0x8f, 0x16, 0xee, 0x48, 0xd0, 0xc2, 0x09, 0xce,
- 0x9e, 0xac, 0x92, 0x6f, 0x72, 0xd2, 0xad, 0x90, 0x55, 0x96, 0x3f, 0x14, 0xe9, 0x38, 0xfa, 0xf4,
- 0xb9, 0x7e, 0x87, 0x2c, 0xfc, 0x03, 0xeb, 0xd8, 0x1c, 0x03, 0xf2, 0xd5, 0xf1, 0x26, 0x1c, 0xe9,
- 0x18, 0x92, 0xa0, 0x27, 0x21, 0xeb, 0x45, 0x33, 0x52, 0xc4, 0x92, 0xd0, 0x5d, 0xe6, 0x78, 0xb8,
- 0xf2, 0x3f, 0x91, 0x3c, 0x96, 0xc1, 0x85, 0x53, 0x19, 0x06, 0xd9, 0x19, 0x1d, 0xbe, 0xf3, 0xff,
- 0x48, 0x6f, 0xc1, 0xcc, 0x1c, 0x3b, 0xc0, 0xa3, 0x70, 0x62, 0xf9, 0x3d, 0x30, 0xc8, 0x20, 0x68,
- 0x18, 0x86, 0xbc, 0x77, 0x28, 0x01, 0x06, 0x8b, 0x0b, 0x0b, 0xe5, 0xcd, 0xed, 0xbc, 0x84, 0xb2,
- 0x90, 0x2e, 0x96, 0x36, 0x94, 0xed, 0x7c, 0x82, 0x80, 0x95, 0xf2, 0x33, 0xe5, 0x85, 0xed, 0x7c,
- 0x12, 0x8d, 0xc3, 0x08, 0xfb, 0x5f, 0xbd, 0xb4, 0xa1, 0xac, 0x15, 0xb7, 0xf3, 0x29, 0x1f, 0x68,
- 0xab, 0xbc, 0xbe, 0x58, 0x56, 0xf2, 0x69, 0xf9, 0x31, 0xb2, 0x56, 0x8a, 0x08, 0x7f, 0xbc, 0x55,
- 0x91, 0xe4, 0x5b, 0x15, 0xc9, 0xaf, 0x26, 0xa0, 0x10, 0x1d, 0xd3, 0xa0, 0x67, 0x42, 0x1d, 0x3f,
- 0xdb, 0x47, 0x40, 0x14, 0xea, 0x3d, 0xba, 0x0f, 0x46, 0x9b, 0x78, 0x17, 0x3b, 0x95, 0x3d, 0x16,
- 0x63, 0x31, 0x8f, 0x39, 0xa2, 0x8c, 0x70, 0x28, 0x25, 0xb2, 0x19, 0xda, 0x4b, 0xb8, 0xe2, 0xa8,
- 0xcc, 0x14, 0xd9, 0xfc, 0x77, 0xc3, 0x46, 0x18, 0x74, 0x8b, 0x01, 0xe5, 0xef, 0xe8, 0x4b, 0x96,
- 0x59, 0x48, 0x2b, 0xe5, 0x6d, 0xe5, 0x1d, 0xf9, 0x24, 0x42, 0x30, 0x4a, 0xff, 0x55, 0xb7, 0xd6,
- 0x8b, 0x9b, 0x5b, 0xcb, 0x1b, 0x44, 0x96, 0x13, 0x30, 0x26, 0x64, 0x29, 0x80, 0x69, 0xf9, 0xcf,
- 0xa5, 0xf6, 0xcd, 0xc0, 0xb3, 0xc1, 0xcd, 0xc0, 0xf6, 0x24, 0x80, 0x6f, 0x8f, 0x4c, 0xec, 0x02,
- 0xbe, 0xa5, 0xff, 0x5d, 0x40, 0xdf, 0xfe, 0xdf, 0xd3, 0x87, 0xd9, 0xff, 0xf3, 0xef, 0xfc, 0x5d,
- 0xe8, 0x77, 0xe7, 0xcf, 0xdb, 0xf3, 0x5b, 0xb8, 0x0d, 0x7b, 0x7e, 0xf2, 0xbb, 0x61, 0x34, 0x98,
- 0xd4, 0xf1, 0x0e, 0xbe, 0x48, 0xfe, 0x83, 0x2f, 0xe7, 0x20, 0x7d, 0xcd, 0x64, 0xc6, 0xaa, 0xf3,
- 0x94, 0xbd, 0x62, 0x3a, 0xd8, 0x97, 0x14, 0x62, 0xd8, 0xf2, 0xcb, 0x90, 0xa6, 0xc6, 0xa7, 0xe3,
- 0x75, 0x85, 0x77, 0x03, 0x68, 0x8e, 0xd3, 0xd4, 0x77, 0x5a, 0x1e, 0xe3, 0x99, 0xce, 0xc6, 0xab,
- 0x28, 0xf0, 0x4a, 0x27, 0xb9, 0x15, 0x9b, 0xf4, 0x48, 0x7d, 0x96, 0xcc, 0xc7, 0x50, 0x5e, 0x87,
- 0xd1, 0x20, 0x6d, 0x87, 0xcb, 0x1c, 0x1d, 0x6f, 0x5a, 0x79, 0xa1, 0x18, 0xbf, 0x6c, 0x4f, 0x0b,
- 0xf2, 0x0d, 0x09, 0x32, 0xdb, 0xfb, 0x5c, 0xad, 0xbb, 0x1c, 0x08, 0xf3, 0xee, 0xa0, 0xb8, 0x39,
- 0x0f, 0x96, 0x56, 0x4a, 0xba, 0xc9, 0xaa, 0xb7, 0xbb, 0x13, 0x37, 0xd5, 0xeb, 0xaa, 0x54, 0x64,
- 0xed, 0xb8, 0xb1, 0xba, 0xd8, 0xdb, 0x19, 0xef, 0x49, 0x48, 0xfb, 0xcf, 0x67, 0xb3, 0x82, 0x5c,
- 0xf5, 0x6d, 0x8d, 0x32, 0x2f, 0xe2, 0x3f, 0x0c, 0x2e, 0xf5, 0x7d, 0x18, 0xdc, 0xad, 0x25, 0xe1,
- 0xaf, 0xe5, 0x1a, 0x64, 0x84, 0x52, 0xa0, 0xb7, 0xf9, 0xe7, 0x89, 0x48, 0x35, 0x47, 0xba, 0xd2,
- 0xf6, 0x0d, 0xf2, 0xd3, 0x30, 0xce, 0x8f, 0x0b, 0x79, 0x6b, 0x16, 0xfe, 0x70, 0xf6, 0x18, 0xfb,
- 0xb0, 0x2a, 0x16, 0x2c, 0xf2, 0x9f, 0x49, 0x90, 0x11, 0x13, 0x16, 0x3d, 0x16, 0x38, 0x13, 0x76,
- 0x57, 0x64, 0xf2, 0xd1, 0x77, 0x22, 0x2c, 0xd0, 0xd6, 0x44, 0xff, 0x6d, 0xbd, 0xfd, 0x47, 0x76,
- 0x3b, 0x9f, 0xff, 0x4f, 0x47, 0x9c, 0xff, 0x7f, 0x9f, 0x04, 0x19, 0xd7, 0x37, 0xf6, 0x9b, 0xe6,
- 0x3b, 0x0a, 0x83, 0xdc, 0xfc, 0xb3, 0x3c, 0x1f, 0x2f, 0xb9, 0x19, 0xe7, 0x94, 0x2f, 0xe3, 0x5c,
- 0x80, 0x8c, 0xf8, 0x05, 0x06, 0xbe, 0x6c, 0x74, 0xcb, 0xa7, 0x2f, 0xc0, 0xb0, 0x2f, 0xe3, 0x4a,
- 0x66, 0xde, 0x7a, 0xf9, 0xf9, 0xfc, 0x40, 0x61, 0xe8, 0xc6, 0xcd, 0xd9, 0xe4, 0x3a, 0xbe, 0x4e,
- 0x74, 0x56, 0x29, 0x2f, 0x2c, 0x97, 0x17, 0x9e, 0xcd, 0x4b, 0x85, 0xe1, 0x1b, 0x37, 0x67, 0x87,
- 0x14, 0x4c, 0x13, 0x37, 0xa7, 0x97, 0x21, 0xe7, 0x1f, 0x95, 0xa0, 0x07, 0x41, 0x30, 0xba, 0x78,
- 0x79, 0x73, 0x75, 0x65, 0xa1, 0xb8, 0x5d, 0x56, 0xd9, 0xc9, 0x1a, 0x74, 0x0c, 0x26, 0x56, 0x57,
- 0x96, 0x96, 0xb7, 0xd5, 0x85, 0xd5, 0x95, 0xf2, 0xfa, 0xb6, 0x5a, 0xdc, 0xde, 0x2e, 0x2e, 0x3c,
- 0x9b, 0x4f, 0x9c, 0x7d, 0x3f, 0xc0, 0x58, 0xb1, 0xb4, 0xb0, 0x42, 0xbc, 0x9f, 0xce, 0xdf, 0x08,
- 0x5e, 0x80, 0x14, 0x5d, 0xb5, 0x77, 0xdd, 0xea, 0x2d, 0x74, 0xcf, 0x0b, 0xa2, 0x4b, 0x90, 0xa6,
- 0x0b, 0x7a, 0xd4, 0x7d, 0xef, 0xb7, 0x10, 0x93, 0x28, 0x24, 0x8d, 0xa1, 0xd3, 0xa3, 0xeb, 0x66,
- 0x70, 0xa1, 0x7b, 0xde, 0x10, 0x29, 0x90, 0xf5, 0x56, 0xe4, 0xf1, 0x9b, 0xc3, 0x85, 0x1e, 0x72,
- 0x89, 0x84, 0xa7, 0xb7, 0x2c, 0x88, 0xdf, 0x2c, 0x2d, 0xf4, 0x60, 0xc0, 0xd0, 0x2a, 0x0c, 0x89,
- 0x95, 0x5c, 0xdc, 0xf6, 0x6d, 0x21, 0x36, 0xcf, 0x47, 0x86, 0x80, 0xad, 0xb8, 0xbb, 0xef, 0x45,
- 0x17, 0x62, 0x92, 0x96, 0x68, 0xc5, 0x3d, 0xe3, 0x1b, 0xb3, 0x25, 0x5b, 0x88, 0xcb, 0xdb, 0x11,
- 0xa1, 0x79, 0xa9, 0x8c, 0xf8, 0x1d, 0xf6, 0x42, 0x0f, 0xf9, 0x58, 0x74, 0x19, 0xc0, 0xb7, 0xbe,
- 0xee, 0x61, 0xeb, 0xbc, 0xd0, 0x4b, 0x9e, 0x15, 0x6d, 0x40, 0xc6, 0x5d, 0xee, 0xc4, 0x6e, 0x64,
- 0x17, 0xe2, 0x13, 0x9e, 0xe8, 0x3d, 0x30, 0x12, 0x8c, 0xf3, 0x7b, 0xdb, 0x9e, 0x2e, 0xf4, 0x98,
- 0xc9, 0x24, 0xfc, 0x83, 0x41, 0x7f, 0x6f, 0xdb, 0xd5, 0x85, 0x1e, 0x13, 0x9b, 0xe8, 0x25, 0x18,
- 0x6f, 0x0f, 0xca, 0x7b, 0xdf, 0xbd, 0x2e, 0xf4, 0x91, 0xea, 0x44, 0x0d, 0x40, 0x1d, 0x82, 0xf9,
- 0x3e, 0x36, 0xb3, 0x0b, 0xfd, 0x64, 0x3e, 0x4b, 0xe5, 0xc8, 0xb3, 0x42, 0x0f, 0xc5, 0x9e, 0x15,
- 0xf2, 0x4e, 0xff, 0xb8, 0xe7, 0x83, 0x7e, 0xe9, 0x2c, 0xdc, 0x1b, 0xf1, 0xa6, 0x84, 0x78, 0x8d,
- 0xe0, 0x50, 0xaf, 0x4a, 0x44, 0xde, 0xab, 0x8f, 0x3b, 0x17, 0x18, 0x7f, 0x0c, 0xe8, 0xf0, 0x2f,
- 0x56, 0xc4, 0x9c, 0x5e, 0xea, 0x76, 0x50, 0x4a, 0xfe, 0x90, 0x04, 0xa3, 0xcb, 0xba, 0xed, 0x98,
- 0x4d, 0xbd, 0xa2, 0xd5, 0xa9, 0xa9, 0x3e, 0xdf, 0xeb, 0x41, 0xeb, 0xd0, 0x1e, 0xed, 0xd3, 0x30,
- 0x78, 0x4d, 0xab, 0xb3, 0x13, 0xce, 0x49, 0xba, 0xc6, 0x88, 0x78, 0xff, 0x21, 0x1c, 0x96, 0x70,
- 0x32, 0xf9, 0x67, 0xe8, 0xd1, 0xc9, 0x46, 0x43, 0xb7, 0xd9, 0xef, 0x91, 0x92, 0x35, 0x41, 0x09,
- 0x52, 0x4d, 0xcd, 0xe1, 0x21, 0x79, 0x69, 0x8e, 0x3f, 0x45, 0x72, 0x7f, 0x0f, 0x0f, 0x6b, 0x2c,
- 0xe2, 0x8a, 0x42, 0x69, 0xd1, 0xbb, 0x80, 0xac, 0x31, 0x54, 0xca, 0x87, 0x5d, 0x63, 0x2a, 0xf6,
- 0xc7, 0xe7, 0x8d, 0x5b, 0x33, 0x63, 0x07, 0x5a, 0xa3, 0x3e, 0x2f, 0x0b, 0x3e, 0xb2, 0x42, 0x96,
- 0x2a, 0xa4, 0x89, 0xc8, 0x82, 0x31, 0x02, 0xad, 0xec, 0x69, 0x46, 0x0d, 0xb3, 0x4a, 0x68, 0xce,
- 0xa9, 0xb4, 0xdc, 0x77, 0x25, 0x47, 0xbd, 0x4a, 0x7c, 0xec, 0x64, 0x65, 0xa4, 0xa1, 0xed, 0x2f,
- 0x50, 0x00, 0xa9, 0x71, 0x3e, 0xf3, 0xea, 0x6b, 0x33, 0x03, 0xf4, 0x04, 0xdf, 0xe7, 0x25, 0x00,
- 0x4f, 0x62, 0xe8, 0x5d, 0x90, 0xaf, 0xb8, 0x25, 0x4a, 0x2b, 0x32, 0xd3, 0x0f, 0x44, 0x8d, 0x45,
- 0x48, 0xde, 0x2c, 0xaa, 0xfb, 0xdc, 0xad, 0x19, 0x49, 0x19, 0xab, 0x84, 0x86, 0xe2, 0x9d, 0x30,
- 0xcc, 0x92, 0x41, 0x2a, 0x8d, 0x10, 0x13, 0xb1, 0x11, 0xe2, 0x34, 0xe1, 0xf5, 0xc6, 0xad, 0x19,
- 0xc4, 0xba, 0xe5, 0x23, 0x96, 0x69, 0xdc, 0x08, 0x0c, 0x42, 0x08, 0x7c, 0x7d, 0xfa, 0x4d, 0x09,
- 0x86, 0x17, 0x7d, 0x0f, 0x2c, 0x4e, 0xc1, 0x50, 0xc3, 0x34, 0xf4, 0xab, 0xb8, 0xe9, 0xee, 0x5c,
- 0xb0, 0x22, 0x09, 0xed, 0xd8, 0x2f, 0x5b, 0x38, 0x07, 0xe2, 0x5e, 0xb4, 0x28, 0x13, 0xaa, 0xeb,
- 0x78, 0xc7, 0xd6, 0xc5, 0x68, 0x28, 0xa2, 0x88, 0x2e, 0x41, 0xde, 0xc6, 0x95, 0x56, 0x53, 0x77,
- 0x0e, 0xd4, 0x8a, 0x69, 0x38, 0x5a, 0x85, 0x2d, 0x70, 0xb2, 0xa5, 0x13, 0x6f, 0xdc, 0x9a, 0x39,
- 0xc6, 0xda, 0x1a, 0xc6, 0x90, 0x95, 0x31, 0x01, 0x5a, 0x60, 0x10, 0x52, 0x43, 0x15, 0x3b, 0x9a,
- 0x5e, 0x67, 0x27, 0x34, 0xb2, 0x8a, 0x28, 0xfa, 0xfa, 0xf2, 0x03, 0x19, 0xff, 0x0a, 0xe8, 0x12,
- 0xe4, 0x4d, 0x0b, 0x37, 0x03, 0xb7, 0x52, 0xa4, 0x70, 0xcd, 0x61, 0x0c, 0x59, 0x19, 0x13, 0x20,
- 0x71, 0x63, 0xc5, 0x09, 0x6c, 0x40, 0xb4, 0x76, 0xbc, 0xcb, 0xb1, 0x93, 0x6d, 0xa3, 0x51, 0x34,
- 0x0e, 0x4a, 0x8f, 0x7b, 0xdc, 0xc3, 0x74, 0xf2, 0x67, 0x3f, 0xfd, 0xc8, 0x24, 0x57, 0x0d, 0x6f,
- 0xfd, 0xf4, 0x2c, 0x3e, 0xf0, 0xef, 0x54, 0x50, 0x4c, 0x12, 0x74, 0xbf, 0xa4, 0xe9, 0x75, 0xf1,
- 0x5b, 0x3f, 0x0a, 0x2f, 0xa1, 0x79, 0x18, 0xb4, 0x1d, 0xcd, 0x69, 0xd9, 0xfc, 0xd9, 0x17, 0x39,
- 0x4a, 0xd5, 0x4a, 0xa6, 0x51, 0xdd, 0xa2, 0x98, 0x0a, 0xa7, 0x40, 0x97, 0x60, 0x90, 0xbf, 0xa7,
- 0x93, 0xee, 0x7b, 0x7e, 0xd3, 0x87, 0x93, 0x18, 0x35, 0x91, 0x48, 0x15, 0xd7, 0x71, 0x8d, 0xdd,
- 0xb1, 0xd8, 0xd3, 0x9a, 0x98, 0xdd, 0xbb, 0xca, 0x96, 0x56, 0xfa, 0x9e, 0x84, 0x5c, 0x52, 0x61,
- 0x7e, 0xb2, 0x32, 0xe6, 0x82, 0xb6, 0x28, 0x04, 0x3d, 0x1b, 0x78, 0x09, 0x94, 0xef, 0x3f, 0xdf,
- 0x13, 0xd5, 0x7d, 0x9f, 0x4e, 0x8b, 0xcb, 0x8a, 0xfe, 0x77, 0x44, 0x2f, 0x41, 0xbe, 0x65, 0xec,
- 0x98, 0x06, 0xfd, 0x41, 0x0e, 0xbe, 0x1a, 0xca, 0x90, 0xc5, 0x93, 0x5f, 0x39, 0xc2, 0x18, 0xb2,
- 0x32, 0xe6, 0x82, 0xf8, 0x8e, 0x59, 0x15, 0x46, 0x3d, 0x2c, 0x3a, 0x51, 0xb3, 0xb1, 0x13, 0xf5,
- 0x6e, 0x3e, 0x51, 0x8f, 0x84, 0x6b, 0xf1, 0xe6, 0xea, 0x88, 0x0b, 0x24, 0x64, 0x68, 0x19, 0xc0,
- 0x33, 0x0f, 0xee, 0xae, 0x75, 0xac, 0x8d, 0x11, 0x1b, 0x57, 0x1e, 0x2d, 0xfa, 0x2e, 0x98, 0x68,
- 0xe8, 0x86, 0x6a, 0xe3, 0xfa, 0xae, 0xca, 0x05, 0x4c, 0x58, 0xd2, 0xfd, 0x80, 0xd2, 0x6a, 0x7f,
- 0xfa, 0xf0, 0xc6, 0xad, 0x99, 0x02, 0x37, 0xa1, 0xed, 0x2c, 0x65, 0x65, 0xbc, 0xa1, 0x1b, 0x5b,
- 0xb8, 0xbe, 0xbb, 0xe8, 0xc2, 0xd0, 0x5b, 0xe0, 0x84, 0xd7, 0x5b, 0xd3, 0x50, 0xf7, 0xcc, 0x7a,
- 0x55, 0x6d, 0xe2, 0x5d, 0xb5, 0x42, 0xdf, 0xd7, 0xca, 0xd1, 0xd5, 0xeb, 0x31, 0x17, 0x65, 0xc3,
- 0x58, 0x36, 0xeb, 0x55, 0x05, 0xef, 0x2e, 0x90, 0xcf, 0xe8, 0x1e, 0xf0, 0xc4, 0xa2, 0xea, 0x55,
- 0x7b, 0x6a, 0x64, 0x36, 0x79, 0x2a, 0xa5, 0xe4, 0x5c, 0xe0, 0x4a, 0xd5, 0x9e, 0xcf, 0x7d, 0xf0,
- 0xb5, 0x99, 0x01, 0x6e, 0x11, 0x06, 0xe4, 0xf3, 0xf4, 0xae, 0x3e, 0x9f, 0xc9, 0x98, 0x66, 0xfe,
- 0x35, 0x51, 0xe0, 0x27, 0xbd, 0x3d, 0x00, 0xb3, 0x24, 0xaf, 0xfc, 0xfe, 0xac, 0x24, 0xff, 0xb4,
- 0x04, 0x83, 0x8b, 0x57, 0x36, 0x35, 0xbd, 0x89, 0x56, 0x60, 0xdc, 0x53, 0xce, 0xa0, 0x1d, 0x39,
- 0xf9, 0xc6, 0xad, 0x99, 0xa9, 0xb0, 0xfe, 0xba, 0x86, 0xc4, 0x9b, 0x23, 0xc2, 0x92, 0xac, 0x44,
- 0x5d, 0x94, 0x0b, 0xb0, 0x6a, 0x43, 0x91, 0xdb, 0xaf, 0xd1, 0x85, 0xba, 0x59, 0x86, 0x21, 0xd6,
- 0x5a, 0x1b, 0xcd, 0x43, 0xda, 0x22, 0xff, 0xf0, 0x3c, 0xfa, 0x74, 0xe4, 0xfc, 0xa0, 0xf8, 0xee,
- 0xc5, 0x69, 0x42, 0x22, 0x7f, 0x38, 0x01, 0xb0, 0x78, 0xe5, 0xca, 0x76, 0x53, 0xb7, 0xea, 0xd8,
- 0xb9, 0x9d, 0x3d, 0xdf, 0x86, 0x23, 0xbe, 0x5b, 0x59, 0xcd, 0x4a, 0xa8, 0xf7, 0xb3, 0x6f, 0xdc,
- 0x9a, 0x39, 0x19, 0xee, 0xbd, 0x0f, 0x4d, 0x56, 0x26, 0xbc, 0xfb, 0x59, 0xcd, 0x4a, 0x47, 0xae,
- 0x55, 0xdb, 0x71, 0xb9, 0x26, 0xa3, 0xb9, 0xfa, 0xd0, 0xfc, 0x5c, 0x17, 0x6d, 0xa7, 0xb3, 0x68,
- 0xb7, 0x60, 0xd8, 0x13, 0x89, 0x8d, 0x16, 0x21, 0xe3, 0xf0, 0xff, 0xb9, 0x84, 0xe5, 0x68, 0x09,
- 0x0b, 0x32, 0x71, 0x45, 0x44, 0x50, 0xca, 0x7f, 0x2a, 0x01, 0xf8, 0xa6, 0xc5, 0x5f, 0x48, 0x15,
- 0x23, 0xde, 0x82, 0xdb, 0xf6, 0xe4, 0xa1, 0xa2, 0x41, 0x4e, 0x1d, 0x92, 0xe7, 0xf7, 0x27, 0x60,
- 0xe2, 0xb2, 0x98, 0xb0, 0x7f, 0xe1, 0x65, 0xb0, 0x09, 0x43, 0xd8, 0x70, 0x9a, 0x3a, 0x16, 0x1b,
- 0x69, 0x8f, 0x46, 0x8d, 0x76, 0x87, 0x3e, 0xd1, 0x1f, 0xad, 0x14, 0xb7, 0x72, 0x38, 0x9b, 0x90,
- 0x34, 0xbe, 0x96, 0x84, 0xa9, 0x28, 0x4a, 0xb4, 0x00, 0x63, 0x95, 0x26, 0x66, 0x0f, 0xbd, 0xf9,
- 0x13, 0xcb, 0xa5, 0x82, 0x17, 0xbc, 0x86, 0x10, 0x64, 0x65, 0x54, 0x40, 0xb8, 0x83, 0xaa, 0x01,
- 0x89, 0x2c, 0x89, 0xda, 0xd1, 0xf7, 0xe2, 0x7a, 0x0b, 0x25, 0x65, 0xee, 0xa1, 0x44, 0x25, 0x41,
- 0x06, 0xcc, 0x45, 0x8d, 0x7a, 0x50, 0xea, 0xa3, 0xde, 0x0b, 0x63, 0xe2, 0x88, 0xec, 0x8e, 0x56,
- 0xd7, 0x8c, 0xca, 0x61, 0x02, 0x73, 0xe6, 0x55, 0x78, 0xb5, 0x21, 0x76, 0xb2, 0x22, 0xce, 0xe0,
- 0x96, 0x18, 0x00, 0x2d, 0xc3, 0x90, 0xa8, 0x2a, 0x75, 0xa8, 0x80, 0x46, 0x90, 0xa3, 0xbb, 0x21,
- 0xe7, 0x77, 0x2d, 0x34, 0x3e, 0x4a, 0x29, 0xc3, 0x3e, 0xcf, 0x12, 0xe7, 0xbb, 0x06, 0xbb, 0xfa,
- 0x2e, 0x5f, 0x90, 0xfa, 0x87, 0x49, 0x18, 0x57, 0x70, 0xf5, 0xff, 0x8f, 0x75, 0x7f, 0x63, 0xbd,
- 0x06, 0xc0, 0xec, 0x09, 0xb1, 0xe0, 0x87, 0x18, 0x6e, 0x62, 0x91, 0xb2, 0x8c, 0xc3, 0xa2, 0xed,
- 0x7c, 0x33, 0x07, 0xfc, 0x56, 0x02, 0x72, 0xfe, 0x01, 0xff, 0x36, 0xf5, 0xab, 0x68, 0xc5, 0xb3,
- 0xa5, 0xec, 0xd8, 0x77, 0xe4, 0x8b, 0x95, 0x6d, 0xd3, 0xa3, 0xbb, 0x11, 0xfd, 0x5f, 0x09, 0x18,
- 0xe4, 0x1b, 0x9e, 0x95, 0xb6, 0x70, 0x5c, 0x8a, 0xbb, 0x4a, 0xd8, 0x3d, 0x1a, 0x7f, 0xb5, 0x43,
- 0x34, 0xfe, 0x76, 0x18, 0x6d, 0x68, 0xfb, 0x6a, 0xe0, 0x20, 0x99, 0x74, 0x6a, 0xa4, 0x74, 0xdc,
- 0xe3, 0x12, 0xfc, 0xce, 0x52, 0x0a, 0x57, 0xfc, 0xaf, 0x3e, 0x0d, 0x13, 0x0c, 0xcf, 0xb5, 0x10,
- 0xf2, 0xa3, 0xde, 0xda, 0xdd, 0xf7, 0x51, 0x56, 0xa0, 0xa1, 0xed, 0x97, 0x59, 0x01, 0xad, 0x02,
- 0xda, 0x73, 0xd3, 0x47, 0xaa, 0x27, 0x4e, 0x42, 0x7f, 0xd7, 0x1b, 0xb7, 0x66, 0x8e, 0x33, 0xfa,
- 0x76, 0x1c, 0x59, 0x19, 0xf7, 0x80, 0x82, 0xdb, 0x13, 0x00, 0xa4, 0x5f, 0x2a, 0x7b, 0xf4, 0x96,
- 0xad, 0x09, 0x8f, 0xbc, 0x71, 0x6b, 0x66, 0x9c, 0x71, 0xf1, 0xbe, 0xc9, 0x4a, 0x96, 0x14, 0x16,
- 0xc9, 0xff, 0x3e, 0xcd, 0xfe, 0x84, 0x04, 0xc8, 0x73, 0x5a, 0xee, 0x91, 0xec, 0x65, 0x7a, 0xc6,
- 0x56, 0x2c, 0x2d, 0xa4, 0xee, 0xab, 0x15, 0x8f, 0x5e, 0xac, 0x56, 0x7c, 0x33, 0xe5, 0x82, 0x67,
- 0xe0, 0x13, 0x71, 0x2f, 0xc0, 0x72, 0x15, 0xe1, 0xf8, 0x6e, 0x2b, 0x07, 0xe4, 0xdf, 0x92, 0xe0,
- 0x78, 0x9b, 0x46, 0xb9, 0x8d, 0x7d, 0x0f, 0xa0, 0xa6, 0xef, 0x23, 0xff, 0xe5, 0x69, 0x89, 0xdf,
- 0x54, 0xea, 0x53, 0x41, 0xc7, 0x9b, 0x6d, 0x86, 0xfd, 0xb6, 0xf9, 0x28, 0xfe, 0xc4, 0xf0, 0x3f,
- 0x95, 0x60, 0xd2, 0x5f, 0xbd, 0xdb, 0x91, 0x75, 0xc8, 0xf9, 0x6b, 0xe7, 0x5d, 0xb8, 0xb7, 0x97,
- 0x2e, 0xf0, 0xd6, 0x07, 0xe8, 0xd1, 0x73, 0xde, 0x74, 0x65, 0x09, 0xc6, 0xc7, 0x7a, 0x96, 0x86,
- 0xbb, 0xb9, 0x10, 0x9a, 0xb6, 0x29, 0x3a, 0x1e, 0x7f, 0x2e, 0x41, 0x6a, 0xd3, 0x34, 0xeb, 0xc8,
- 0x84, 0x71, 0xc3, 0x74, 0x54, 0xa2, 0x59, 0xb8, 0xea, 0x7f, 0xe9, 0x37, 0x5b, 0x5a, 0xe8, 0x4f,
- 0x48, 0x5f, 0xb9, 0x35, 0xd3, 0xce, 0x4a, 0x19, 0x33, 0x4c, 0xa7, 0x44, 0x21, 0xfc, 0xb1, 0xdf,
- 0xef, 0x82, 0x91, 0x60, 0x65, 0xcc, 0x4a, 0x3e, 0xdf, 0x77, 0x65, 0x41, 0x36, 0x6f, 0xdc, 0x9a,
- 0x99, 0xf4, 0x66, 0x8c, 0x0b, 0x96, 0x95, 0xdc, 0x8e, 0xaf, 0x76, 0xf6, 0x20, 0xde, 0xd7, 0xc8,
- 0x18, 0x6e, 0x43, 0xfe, 0x4a, 0xf8, 0x2c, 0xd8, 0xdb, 0x61, 0xe8, 0x70, 0xc7, 0xca, 0x04, 0xd9,
- 0xe9, 0x5f, 0x94, 0x00, 0xbc, 0xa4, 0x0f, 0x7a, 0x18, 0x8e, 0x95, 0x36, 0xd6, 0x17, 0xd5, 0xad,
- 0xed, 0xe2, 0xf6, 0xe5, 0xad, 0xe0, 0x5b, 0xbb, 0xe2, 0x99, 0x02, 0xdb, 0xc2, 0x15, 0x7d, 0x57,
- 0xc7, 0x55, 0x74, 0x3f, 0x4c, 0x06, 0xb1, 0x49, 0xa9, 0xbc, 0x98, 0x97, 0x0a, 0xb9, 0x1b, 0x37,
- 0x67, 0x33, 0x2c, 0x46, 0xc5, 0x55, 0x74, 0x0a, 0x8e, 0xb4, 0xe3, 0xad, 0xac, 0x2f, 0xe5, 0x13,
- 0x85, 0x91, 0x1b, 0x37, 0x67, 0xb3, 0x6e, 0x30, 0x8b, 0x64, 0x40, 0x7e, 0x4c, 0xce, 0x2f, 0x59,
- 0x80, 0x1b, 0x37, 0x67, 0x07, 0xd9, 0xb0, 0x14, 0x52, 0x1f, 0xfc, 0xc4, 0xf4, 0xc0, 0xe9, 0x9f,
- 0x94, 0x60, 0x74, 0xc5, 0xd8, 0x6d, 0x6a, 0x15, 0xf7, 0xbd, 0xe0, 0x27, 0xe0, 0xc4, 0xca, 0xfa,
- 0x25, 0xa5, 0xb8, 0x10, 0xf1, 0x58, 0x70, 0x61, 0xe2, 0xc6, 0xcd, 0xd9, 0x31, 0x8f, 0xa8, 0xdc,
- 0xb0, 0x9c, 0x03, 0x74, 0xa6, 0x9d, 0x6a, 0x71, 0xe3, 0x72, 0x69, 0xb5, 0xac, 0x6e, 0xad, 0x2c,
- 0xad, 0xe7, 0xa5, 0xc2, 0xe8, 0x8d, 0x9b, 0xb3, 0xb0, 0x48, 0x7f, 0x1b, 0x77, 0x4b, 0xaf, 0x19,
- 0xe8, 0x34, 0x4c, 0xb5, 0x13, 0x3c, 0xcf, 0x7e, 0x62, 0x3f, 0xc1, 0x7a, 0xbe, 0x68, 0x5e, 0x37,
- 0x88, 0x27, 0x60, 0x6d, 0xbd, 0xed, 0xaf, 0x07, 0xff, 0xf1, 0x50, 0xe4, 0xce, 0x49, 0x0d, 0x1b,
- 0xd8, 0xd6, 0xed, 0x43, 0xed, 0x9c, 0xf4, 0xb4, 0x1b, 0x23, 0xff, 0x4e, 0x1a, 0x72, 0x4b, 0xac,
- 0x16, 0x7a, 0xd7, 0x0d, 0xbd, 0x05, 0x06, 0x03, 0x27, 0xac, 0x23, 0xb3, 0x07, 0x81, 0x17, 0x07,
- 0x38, 0x0d, 0xb2, 0xf9, 0xad, 0x31, 0x76, 0x2e, 0xc1, 0x3b, 0xfd, 0x91, 0xeb, 0x2b, 0x2d, 0xc8,
- 0xc2, 0x42, 0x9e, 0x81, 0x0b, 0xf3, 0x93, 0xd9, 0xcd, 0xb2, 0x6d, 0x02, 0x61, 0x2f, 0x0a, 0x7e,
- 0x40, 0x82, 0x23, 0x14, 0xcb, 0x0b, 0x45, 0x28, 0xa6, 0x58, 0xb0, 0x9d, 0x8e, 0xea, 0xc2, 0xaa,
- 0x66, 0x7b, 0xef, 0x83, 0xb1, 0x37, 0x00, 0xef, 0xe5, 0xa1, 0xc0, 0x49, 0x5f, 0xe5, 0x61, 0xb6,
- 0xb2, 0x42, 0x8f, 0xc8, 0x07, 0x29, 0x6d, 0xb4, 0xd4, 0xe1, 0x42, 0x62, 0xcf, 0x3b, 0x32, 0xfe,
- 0x93, 0xe5, 0xcf, 0xc0, 0xb0, 0x67, 0x4d, 0xed, 0xa9, 0x74, 0x4c, 0x8e, 0x21, 0x6c, 0xc3, 0xfd,
- 0xc4, 0xe8, 0xfb, 0x24, 0x38, 0xe2, 0xc5, 0x33, 0x7e, 0xb6, 0x83, 0x94, 0xed, 0x43, 0x7d, 0x2c,
- 0x66, 0xc3, 0xc2, 0xe9, 0xc8, 0x57, 0x56, 0x26, 0x5b, 0xed, 0xa4, 0x64, 0x19, 0x3d, 0xe2, 0xf7,
- 0x2d, 0xe2, 0x04, 0x6f, 0x3f, 0xce, 0x29, 0xc8, 0x00, 0x15, 0x20, 0x83, 0xf7, 0x2d, 0xb3, 0xe9,
- 0xe0, 0x2a, 0xcd, 0xdb, 0x66, 0x14, 0xb7, 0x2c, 0xaf, 0x03, 0x6a, 0x1f, 0xdc, 0xf0, 0x81, 0xa8,
- 0x6c, 0x87, 0x03, 0x51, 0xfe, 0xa3, 0x4a, 0xf3, 0x99, 0x0f, 0xf2, 0x00, 0xe2, 0xb6, 0xcf, 0xf9,
- 0x2f, 0x24, 0xe0, 0xb4, 0x7f, 0x8b, 0x91, 0x5e, 0x90, 0x72, 0xa7, 0xa8, 0xa5, 0xd5, 0x74, 0xc3,
- 0xff, 0x72, 0xf6, 0x71, 0x7f, 0xc8, 0x43, 0x71, 0x85, 0x9c, 0xe4, 0x0f, 0x4a, 0x30, 0xbc, 0xa9,
- 0xd5, 0xb0, 0x78, 0xb9, 0xa0, 0xfd, 0x30, 0xdb, 0x51, 0x18, 0x34, 0x77, 0x77, 0xc5, 0x3b, 0x48,
- 0x29, 0x85, 0x97, 0x48, 0x9f, 0xeb, 0x7a, 0x43, 0x77, 0xf8, 0x85, 0x11, 0x56, 0x40, 0x33, 0x30,
- 0x4c, 0x17, 0x37, 0x6c, 0xca, 0xf1, 0x5b, 0xa7, 0x40, 0x41, 0x74, 0xca, 0x11, 0x21, 0x36, 0xf1,
- 0x35, 0xdc, 0xb4, 0xd9, 0x2f, 0x92, 0x67, 0x14, 0x51, 0x94, 0x9f, 0x86, 0x1c, 0x6b, 0x09, 0x0f,
- 0x47, 0x8e, 0x43, 0x86, 0xbe, 0xce, 0xe7, 0xb5, 0x67, 0x88, 0x94, 0xf9, 0xd1, 0x30, 0xc6, 0x9f,
- 0x35, 0x89, 0x15, 0x4a, 0xa5, 0x48, 0x29, 0x9f, 0x8a, 0xb7, 0x1a, 0x4c, 0x86, 0xae, 0x84, 0x7f,
- 0x2d, 0x0d, 0x47, 0xf8, 0x06, 0xb0, 0x66, 0xe9, 0x67, 0xf6, 0x1c, 0x47, 0xbc, 0xb7, 0x0d, 0x7c,
- 0x1d, 0xa0, 0x59, 0xba, 0x7c, 0x00, 0xa9, 0x65, 0xc7, 0xb1, 0xd0, 0x69, 0x48, 0x37, 0x5b, 0x75,
- 0xd7, 0xf1, 0xba, 0xbb, 0x3a, 0x9a, 0xa5, 0xcf, 0x11, 0x04, 0xa5, 0x55, 0xc7, 0x0a, 0x43, 0x41,
- 0x65, 0x98, 0xd9, 0x6d, 0xd5, 0xeb, 0x07, 0x6a, 0x15, 0x57, 0xcc, 0x2a, 0x56, 0x9b, 0xd8, 0xc6,
- 0xcd, 0x6b, 0xb8, 0xaa, 0xe2, 0x7d, 0x4b, 0x33, 0xdc, 0x0b, 0x3a, 0x19, 0xe5, 0x24, 0x45, 0x5b,
- 0xa4, 0x58, 0x0a, 0x47, 0x2a, 0x0b, 0x1c, 0xf9, 0xf7, 0x12, 0x90, 0x11, 0xac, 0xe9, 0x83, 0xc3,
- 0xb8, 0x8e, 0x2b, 0x8e, 0x7b, 0xab, 0xc8, 0x2d, 0x23, 0x04, 0xc9, 0x1a, 0x1f, 0xbc, 0xec, 0xf2,
- 0x80, 0x42, 0x0a, 0x04, 0xe6, 0x3e, 0x03, 0x4d, 0x60, 0x56, 0x8b, 0x8c, 0x67, 0xca, 0x32, 0xc5,
- 0xc2, 0x78, 0x79, 0x40, 0xa1, 0x25, 0x34, 0x05, 0x83, 0x64, 0xd2, 0x38, 0x6c, 0xb4, 0x08, 0x9c,
- 0x97, 0xd1, 0x51, 0x48, 0x5b, 0x9a, 0x53, 0x61, 0x2f, 0x34, 0x92, 0x0f, 0xac, 0x88, 0x9e, 0x84,
- 0x41, 0xf6, 0x4b, 0x3e, 0xfc, 0xc2, 0xc8, 0x5d, 0x7e, 0x61, 0xb0, 0x9f, 0x4c, 0x26, 0xed, 0xde,
- 0xd4, 0x1c, 0x07, 0x37, 0x0d, 0x7a, 0x2d, 0x8d, 0x02, 0x11, 0x82, 0xd4, 0x8e, 0x59, 0x65, 0xd7,
- 0x02, 0xb3, 0x0a, 0xfd, 0x9f, 0x9d, 0x0a, 0x67, 0xfa, 0xa0, 0xd2, 0x8f, 0x39, 0x76, 0xed, 0x40,
- 0x00, 0x4b, 0x04, 0xa9, 0x0c, 0x13, 0x5a, 0xb5, 0xaa, 0x13, 0x85, 0x27, 0xeb, 0x7f, 0x9d, 0x1a,
- 0x0f, 0x7b, 0x6a, 0xb8, 0xcb, 0x58, 0x20, 0x8f, 0xa0, 0xc4, 0xf1, 0x4b, 0x59, 0x18, 0xb2, 0x58,
- 0xa3, 0xe4, 0x8b, 0x30, 0xde, 0xd6, 0x52, 0xd2, 0xbe, 0xab, 0x3a, 0x3f, 0xc1, 0x9a, 0x55, 0xe8,
- 0xff, 0x9d, 0xae, 0x62, 0x97, 0xde, 0x17, 0xfd, 0x84, 0xfa, 0xa8, 0xef, 0x09, 0x75, 0xcd, 0xd2,
- 0x4b, 0x59, 0xca, 0x9f, 0x3f, 0x9c, 0x5e, 0x6c, 0x7f, 0x38, 0xbd, 0x86, 0x0d, 0xe1, 0x98, 0xc9,
- 0x27, 0xcd, 0xd2, 0x6d, 0xaa, 0x8e, 0xde, 0x8f, 0xae, 0xdb, 0x17, 0x7d, 0xff, 0xd3, 0x77, 0xd4,
- 0x53, 0x4b, 0xc5, 0xcd, 0x15, 0x57, 0x8f, 0x7f, 0x35, 0x01, 0x27, 0x7d, 0x7a, 0xec, 0x43, 0x6e,
- 0x57, 0xe7, 0x42, 0x67, 0x8d, 0xef, 0xe1, 0xf7, 0x6c, 0x9e, 0x85, 0x14, 0xc1, 0x47, 0xd3, 0x1d,
- 0x7e, 0x75, 0xc6, 0xd9, 0x33, 0xdd, 0xdf, 0x88, 0xf9, 0xd9, 0xcf, 0xfe, 0x63, 0x39, 0xb8, 0xef,
- 0x19, 0x18, 0x15, 0xca, 0xa4, 0xf4, 0x7d, 0xbd, 0xcb, 0x2f, 0xef, 0xfd, 0xde, 0xbc, 0x7d, 0xfb,
- 0xc4, 0x18, 0x96, 0xe1, 0x97, 0xce, 0x45, 0xfe, 0xde, 0x09, 0x33, 0xa6, 0xdd, 0xe3, 0xab, 0x3e,
- 0x2c, 0x75, 0xd4, 0x73, 0xd2, 0xdd, 0x46, 0xb0, 0xc7, 0x48, 0x6d, 0x1f, 0x8e, 0xd2, 0xa3, 0x69,
- 0x5e, 0x0e, 0x41, 0x98, 0xfc, 0xa3, 0xee, 0x7e, 0xb0, 0xc4, 0xaf, 0x03, 0x89, 0xbd, 0x5e, 0xf0,
- 0xda, 0xc7, 0x57, 0xcf, 0xf7, 0xcf, 0x45, 0xba, 0x92, 0x39, 0x9f, 0x1b, 0x51, 0x7c, 0x94, 0xf2,
- 0x4f, 0x49, 0x70, 0xac, 0xad, 0x6a, 0x6e, 0xe3, 0x97, 0x3a, 0xbc, 0x7c, 0x7d, 0xa8, 0xa0, 0x67,
- 0xa9, 0x43, 0x63, 0x1f, 0x88, 0x6d, 0x2c, 0x6b, 0x45, 0xa0, 0xb5, 0x6f, 0x83, 0x23, 0xc1, 0xc6,
- 0x0a, 0x31, 0xdd, 0x07, 0xa3, 0xc1, 0x84, 0x3f, 0x17, 0xd7, 0x48, 0x20, 0xe5, 0x2f, 0xab, 0x61,
- 0x39, 0xbb, 0x7d, 0x2d, 0xb7, 0x9f, 0x56, 0xee, 0xb9, 0xab, 0x1e, 0xa5, 0xfc, 0x61, 0x09, 0x66,
- 0x83, 0x35, 0xf8, 0xe2, 0xa4, 0xfe, 0x1a, 0x7b, 0xdb, 0x86, 0xf8, 0xcb, 0x12, 0xdc, 0xdd, 0xa5,
- 0x4d, 0x5c, 0x00, 0x2f, 0xc3, 0xa4, 0x2f, 0x4d, 0x22, 0x4c, 0xb8, 0x18, 0xf6, 0xd3, 0xf1, 0x11,
- 0xaa, 0x9b, 0x15, 0x38, 0x41, 0x84, 0xf2, 0xa9, 0x2f, 0xcc, 0x4c, 0xb4, 0x7f, 0xb3, 0x95, 0x89,
- 0xf6, 0xd4, 0xc6, 0x6d, 0xd4, 0x8f, 0x8f, 0x4a, 0xf0, 0x60, 0xb0, 0xab, 0x1d, 0x42, 0xdd, 0x6f,
- 0xd5, 0x38, 0xfc, 0x7b, 0x09, 0x4e, 0xf7, 0xd2, 0x38, 0x3e, 0x20, 0x3b, 0x30, 0xe1, 0x05, 0xe1,
- 0xe1, 0xf1, 0xe8, 0x2b, 0xb4, 0x67, 0x5a, 0x8a, 0x5c, 0x6e, 0x77, 0x40, 0xf0, 0x16, 0x9f, 0x58,
- 0xfe, 0x21, 0x77, 0x85, 0x1c, 0x4c, 0x75, 0x0b, 0x21, 0x07, 0x92, 0xdd, 0x1d, 0xc6, 0x22, 0xd1,
- 0x61, 0x2c, 0xbc, 0xa8, 0x5d, 0xbe, 0xc6, 0xed, 0x56, 0x87, 0x04, 0xe5, 0x3b, 0x61, 0xa2, 0x83,
- 0x2a, 0xf3, 0x59, 0xdd, 0x87, 0x26, 0x2b, 0xa8, 0x5d, 0x59, 0xe5, 0x03, 0x98, 0xa1, 0xf5, 0x76,
- 0x10, 0xf4, 0x9d, 0xee, 0x72, 0x83, 0xdb, 0x96, 0x8e, 0x55, 0xf3, 0xbe, 0xaf, 0xc0, 0x20, 0x1b,
- 0x67, 0xde, 0xdd, 0x43, 0x28, 0x0a, 0x67, 0x20, 0xff, 0x88, 0xb0, 0x65, 0x8b, 0xa2, 0xd9, 0x9d,
- 0xe7, 0x50, 0x2f, 0x7d, 0xbd, 0x4d, 0x73, 0xc8, 0x27, 0x8c, 0xcf, 0x0b, 0xab, 0xd6, 0xb9, 0x75,
- 0x5c, 0x1c, 0x95, 0xdb, 0x66, 0xd5, 0xf8, 0x4b, 0x35, 0x77, 0xd4, 0x7c, 0xfd, 0xb8, 0x30, 0x5f,
- 0x6e, 0x9f, 0x62, 0xcc, 0xd7, 0xb7, 0x46, 0xf4, 0xae, 0x21, 0x8b, 0x69, 0xe6, 0x5f, 0x46, 0x43,
- 0xf6, 0x35, 0x09, 0x8e, 0xd3, 0xbe, 0xf9, 0x73, 0x14, 0xfd, 0x8a, 0xfc, 0x61, 0x40, 0x76, 0xb3,
- 0xa2, 0x76, 0x9c, 0xdd, 0x79, 0xbb, 0x59, 0xb9, 0x12, 0xf0, 0x2f, 0x0f, 0x03, 0xaa, 0x06, 0x32,
- 0x51, 0x14, 0x9b, 0x9d, 0xb3, 0xcc, 0x57, 0x7d, 0x89, 0x8e, 0x0e, 0xc3, 0x99, 0xba, 0x0d, 0xc3,
- 0xf9, 0x39, 0x09, 0x0a, 0x9d, 0xba, 0xcc, 0x87, 0x4f, 0x87, 0xa3, 0x81, 0x1d, 0x94, 0xf0, 0x08,
- 0x3e, 0xdc, 0x4b, 0x96, 0x27, 0x34, 0x8d, 0x8e, 0x34, 0xf1, 0x9d, 0x8e, 0x03, 0x66, 0x82, 0x1a,
- 0xda, 0x1e, 0x59, 0x7f, 0xcb, 0xa6, 0xcf, 0xa7, 0xdb, 0xec, 0xea, 0x5f, 0x8a, 0xd8, 0x7b, 0x1f,
- 0xa6, 0x23, 0x5a, 0x7d, 0xa7, 0xfd, 0xde, 0x5e, 0xe4, 0x60, 0xde, 0xee, 0xf0, 0xfd, 0x09, 0x3e,
- 0x13, 0x82, 0x67, 0xf8, 0x7d, 0x6b, 0xb1, 0x8e, 0xcf, 0x80, 0xbd, 0x03, 0x4e, 0x74, 0xa4, 0xe2,
- 0x6d, 0x9b, 0x87, 0xd4, 0x9e, 0x6e, 0x8b, 0x07, 0xbe, 0xee, 0x8f, 0x6a, 0x56, 0x88, 0x9a, 0xd2,
- 0xc8, 0x08, 0xf2, 0x94, 0xf5, 0xa6, 0x69, 0xd6, 0x79, 0x33, 0xe4, 0x67, 0x61, 0xdc, 0x07, 0xe3,
- 0x95, 0x9c, 0x87, 0x94, 0x65, 0xf2, 0x5f, 0xbb, 0x1a, 0x3e, 0x7b, 0x32, 0x32, 0xb1, 0x6f, 0x9a,
- 0x75, 0xde, 0x6d, 0x8a, 0x2f, 0x4f, 0x02, 0x62, 0xcc, 0xd8, 0x4d, 0x63, 0x5e, 0xc5, 0x16, 0x4c,
- 0x04, 0xa0, 0xbc, 0x92, 0x37, 0xb5, 0x7f, 0x70, 0xf6, 0x2b, 0x47, 0xc4, 0xfd, 0xad, 0x1f, 0x96,
- 0x02, 0x3f, 0x47, 0x39, 0x17, 0xc5, 0xa6, 0xf3, 0x9a, 0xb8, 0x70, 0xa6, 0x67, 0x7c, 0x1e, 0xb3,
- 0x9d, 0x7e, 0xdf, 0xbf, 0xf9, 0xd2, 0x47, 0x12, 0xf7, 0x22, 0xf9, 0x4c, 0xc4, 0x6a, 0xdc, 0x37,
- 0x5f, 0x3e, 0x19, 0xf8, 0x29, 0xa5, 0x47, 0x7a, 0xab, 0x4a, 0xb4, 0x6c, 0xae, 0x57, 0x74, 0xde,
- 0xb0, 0x8b, 0xb4, 0x61, 0xe7, 0xd0, 0xe3, 0xf1, 0x0d, 0x3b, 0xf3, 0x9d, 0xc1, 0x49, 0xf3, 0xdd,
- 0xe8, 0x77, 0x24, 0x98, 0xec, 0xb4, 0xa4, 0x43, 0x4f, 0xf5, 0xd6, 0x8a, 0xf6, 0x90, 0xa2, 0x70,
- 0xe1, 0x10, 0x94, 0xbc, 0x2b, 0x4b, 0xb4, 0x2b, 0x45, 0xf4, 0xf4, 0x21, 0xba, 0x72, 0xc6, 0x9f,
- 0xfa, 0xff, 0xdf, 0x12, 0xdc, 0xd5, 0x75, 0x85, 0x84, 0x8a, 0xbd, 0xb5, 0xb2, 0x4b, 0xec, 0x54,
- 0x28, 0xbd, 0x19, 0x16, 0xbc, 0xc7, 0xcf, 0xd1, 0x1e, 0x3f, 0x8b, 0x56, 0x0e, 0xd3, 0xe3, 0x8e,
- 0xfb, 0x2b, 0xe8, 0xd7, 0x83, 0x07, 0x47, 0xbb, 0xab, 0x53, 0xdb, 0xc2, 0x23, 0x66, 0x62, 0xb4,
- 0x07, 0xb5, 0xf2, 0x0b, 0xb4, 0x0b, 0x0a, 0xda, 0x7c, 0x93, 0x83, 0x76, 0xe6, 0x3b, 0x83, 0x86,
- 0xff, 0xbb, 0xd1, 0x9f, 0x48, 0x9d, 0xcf, 0x81, 0x3e, 0xd9, 0xb5, 0x89, 0xd1, 0x8b, 0xaa, 0xc2,
- 0x53, 0xfd, 0x13, 0xf2, 0x4e, 0x36, 0x68, 0x27, 0x6b, 0x08, 0xdf, 0xee, 0x4e, 0x76, 0x1c, 0x44,
- 0xf4, 0x9b, 0x12, 0x4c, 0x76, 0x5a, 0x93, 0xc4, 0x4c, 0xcb, 0x2e, 0x8b, 0xac, 0x98, 0x69, 0xd9,
- 0x6d, 0x01, 0x24, 0xbf, 0x85, 0x76, 0xfe, 0x3c, 0x7a, 0x22, 0xaa, 0xf3, 0x5d, 0x47, 0x91, 0xcc,
- 0xc5, 0xae, 0x41, 0x7e, 0xcc, 0x5c, 0xec, 0x65, 0x1d, 0x13, 0x33, 0x17, 0x7b, 0x5a, 0x63, 0xc4,
- 0xcf, 0x45, 0xb7, 0x67, 0x3d, 0x0e, 0xa3, 0x8d, 0x7e, 0x95, 0x3e, 0xf4, 0xe5, 0x87, 0x3c, 0xd6,
- 0xb5, 0xa1, 0x9d, 0x16, 0x0c, 0x85, 0xb3, 0xfd, 0x90, 0xf0, 0xbe, 0xac, 0xd0, 0xbe, 0x2c, 0xa0,
- 0xe2, 0x61, 0xfa, 0x12, 0xdc, 0x46, 0xfd, 0x9c, 0x04, 0x13, 0x1d, 0xa2, 0xcc, 0x98, 0x59, 0x18,
- 0x1d, 0x34, 0x17, 0x9e, 0xea, 0x9f, 0x90, 0xf7, 0xea, 0x12, 0xed, 0xd5, 0xdb, 0xd1, 0xdb, 0x0e,
- 0xd3, 0x2b, 0x9f, 0x7f, 0xbe, 0xe5, 0x1d, 0x4a, 0xf3, 0xd5, 0x83, 0xce, 0xf7, 0xd9, 0x30, 0xd1,
- 0xa1, 0x27, 0xfb, 0xa6, 0xe3, 0xfd, 0x79, 0x9e, 0xf6, 0xe7, 0x39, 0xb4, 0xf1, 0xe6, 0xfa, 0xd3,
- 0xee, 0xd6, 0x7f, 0xa1, 0xfd, 0x0e, 0x69, 0x77, 0x2d, 0xea, 0x18, 0xac, 0x16, 0x1e, 0xef, 0x8b,
- 0x86, 0x77, 0xea, 0x29, 0xda, 0xa9, 0xb3, 0xe8, 0xd1, 0xa8, 0x4e, 0xf9, 0x4e, 0x1e, 0xea, 0xc6,
- 0xae, 0x79, 0xe6, 0x3b, 0x59, 0x08, 0xfc, 0xdd, 0xe8, 0x7b, 0xc4, 0xa9, 0xaf, 0x53, 0x5d, 0xeb,
- 0xf5, 0xc5, 0xb1, 0x85, 0x07, 0x7b, 0xc0, 0xe4, 0xed, 0xba, 0x97, 0xb6, 0x6b, 0x1a, 0x9d, 0x8c,
- 0x6a, 0x17, 0x89, 0x65, 0xd1, 0x87, 0x24, 0xf7, 0xa0, 0xe8, 0xe9, 0xee, 0xbc, 0xfd, 0xc1, 0x6e,
- 0xe1, 0xa1, 0x9e, 0x70, 0x79, 0x4b, 0xee, 0xa7, 0x2d, 0x99, 0x45, 0xd3, 0x91, 0x2d, 0x61, 0xa1,
- 0xef, 0xed, 0x3e, 0x54, 0xf0, 0x7f, 0x8e, 0xc2, 0x4c, 0x44, 0x8d, 0xce, 0x7e, 0xcc, 0x1e, 0x57,
- 0x97, 0x7b, 0xd6, 0x87, 0xfb, 0x39, 0x85, 0x37, 0x73, 0xbb, 0xba, 0xb7, 0x0d, 0xb1, 0xdf, 0x4e,
- 0x01, 0x5a, 0xb3, 0x6b, 0x0b, 0x4d, 0xac, 0x39, 0xbe, 0xdf, 0x07, 0x0d, 0xdd, 0x11, 0x94, 0xde,
- 0xd4, 0x1d, 0xc1, 0xb5, 0xc0, 0xad, 0xbb, 0x44, 0x7f, 0x37, 0x7b, 0x7b, 0xbe, 0x7a, 0x97, 0xfc,
- 0xe6, 0x5c, 0xbd, 0xeb, 0x78, 0xe8, 0x3c, 0x75, 0xfb, 0xee, 0xd7, 0xa4, 0x0f, 0x7b, 0xc7, 0x88,
- 0xdf, 0xa8, 0x1d, 0xec, 0x72, 0xa3, 0x76, 0x2a, 0xf2, 0xda, 0x2c, 0xa7, 0xa6, 0x4f, 0x51, 0xb9,
- 0x0f, 0x60, 0xf6, 0x70, 0x4c, 0x98, 0xff, 0x7c, 0xbe, 0x97, 0x42, 0x38, 0x09, 0x85, 0x76, 0x75,
- 0x72, 0x27, 0xf5, 0x47, 0x92, 0x90, 0x5f, 0xb3, 0x6b, 0xe5, 0xaa, 0xee, 0xdc, 0x21, 0x5d, 0x7b,
- 0x3a, 0xfa, 0xce, 0x12, 0x7a, 0xe3, 0xd6, 0xcc, 0x28, 0x93, 0x69, 0x17, 0x49, 0x36, 0x60, 0x2c,
- 0x74, 0x19, 0x9d, 0x6b, 0xd6, 0xe2, 0x61, 0xee, 0xc4, 0x87, 0x58, 0xc9, 0xf4, 0x06, 0x88, 0x4f,
- 0xbf, 0xd1, 0x7e, 0x67, 0x65, 0x66, 0x0a, 0xb5, 0x7c, 0x07, 0x15, 0xd9, 0x37, 0x66, 0x05, 0x98,
- 0x0a, 0x0f, 0x8a, 0x3b, 0x62, 0xaf, 0x4b, 0x30, 0xbc, 0x66, 0x8b, 0x50, 0x10, 0xff, 0x05, 0xbd,
- 0x5e, 0xf6, 0x24, 0x0c, 0x6a, 0x0d, 0x7a, 0x9b, 0x24, 0xd9, 0x9b, 0xde, 0x72, 0x74, 0x7e, 0x92,
- 0xfa, 0x08, 0x4c, 0xf8, 0xfa, 0xe8, 0xf6, 0xfd, 0xb3, 0x09, 0x6a, 0x1b, 0xe9, 0xd3, 0x2e, 0x6e,
- 0x04, 0x89, 0xbf, 0x5d, 0xaf, 0x9d, 0x78, 0x32, 0x4e, 0x1d, 0x46, 0xc6, 0x57, 0xa9, 0x61, 0x08,
- 0xc9, 0xd2, 0x4d, 0x78, 0xad, 0xb5, 0xdf, 0xb8, 0xea, 0xe7, 0x47, 0x33, 0x42, 0xf7, 0xaa, 0xe4,
- 0x2f, 0x49, 0x30, 0xb2, 0x66, 0xd7, 0x2e, 0x1b, 0xd5, 0xff, 0xa7, 0xf5, 0x76, 0x17, 0x8e, 0x04,
- 0x7a, 0x79, 0x87, 0xc4, 0x79, 0xf6, 0xa3, 0x29, 0x48, 0xae, 0xd9, 0x35, 0xf4, 0x5e, 0x18, 0x0b,
- 0x07, 0x0a, 0x91, 0xf1, 0x5f, 0xbb, 0x17, 0x88, 0x5e, 0xa3, 0x45, 0x7b, 0x0c, 0x74, 0x15, 0x46,
- 0x82, 0xde, 0xe2, 0x54, 0x17, 0x26, 0x01, 0xcc, 0xc2, 0xa3, 0xbd, 0x62, 0xba, 0x95, 0xbd, 0x0b,
- 0x32, 0xae, 0xa1, 0xbb, 0xa7, 0x0b, 0xb5, 0x40, 0x8a, 0x8e, 0x68, 0x3b, 0x98, 0x13, 0x22, 0xbd,
- 0xb0, 0x29, 0xe9, 0x26, 0xbd, 0x10, 0x6e, 0x57, 0xe9, 0x45, 0x4d, 0xab, 0x1d, 0x00, 0xdf, 0x1c,
- 0xb8, 0xaf, 0x0b, 0x07, 0x0f, 0xad, 0xf0, 0x48, 0x4f, 0x68, 0xee, 0x46, 0xd3, 0x6d, 0x0e, 0xc0,
- 0xff, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x97, 0xcb, 0xb2, 0x05, 0xc2, 0x00, 0x00,
+ 0x75, 0x18, 0x66, 0x77, 0x01, 0xec, 0x5e, 0x7c, 0x2d, 0x1e, 0x40, 0x12, 0x58, 0x52, 0x00, 0x34,
+ 0x92, 0x48, 0x8a, 0x92, 0x40, 0x89, 0x12, 0x29, 0x11, 0xb4, 0x45, 0xef, 0x02, 0x4b, 0x60, 0x49,
+ 0x7c, 0x69, 0x00, 0x50, 0xb2, 0xfc, 0xb1, 0x19, 0xec, 0x3e, 0x2c, 0x46, 0xdc, 0x9d, 0x59, 0xed,
+ 0xcc, 0x92, 0x80, 0x62, 0xf7, 0x28, 0xb6, 0x93, 0xda, 0xcc, 0x49, 0x13, 0xd7, 0xad, 0xa3, 0x38,
+ 0xa6, 0x2d, 0xc7, 0x69, 0xec, 0x38, 0x69, 0xf3, 0xe5, 0xa6, 0x49, 0xdb, 0xd3, 0x3a, 0xcd, 0x49,
+ 0x13, 0x3b, 0x4d, 0x8f, 0xdd, 0xcf, 0x34, 0x27, 0xa5, 0x53, 0xd9, 0x6d, 0x5d, 0xd7, 0x4d, 0x5c,
+ 0xd5, 0x3d, 0x69, 0x8f, 0x4f, 0x4e, 0x7a, 0xde, 0xd7, 0x7c, 0xed, 0xcc, 0xce, 0x2e, 0x44, 0xda,
+ 0x4e, 0xd2, 0x5f, 0xc0, 0x7b, 0x73, 0xef, 0x7d, 0xf7, 0xdd, 0x77, 0xdf, 0xbd, 0xf7, 0xdd, 0xf7,
+ 0xb1, 0xf0, 0x4b, 0x17, 0x60, 0xa6, 0x62, 0x18, 0x95, 0x2a, 0x3e, 0x5d, 0x6f, 0x18, 0x96, 0xb1,
+ 0xdd, 0xdc, 0x39, 0x5d, 0xc6, 0x66, 0xa9, 0xa1, 0xd5, 0x2d, 0xa3, 0x31, 0x4b, 0xeb, 0xd0, 0x08,
+ 0x83, 0x98, 0x15, 0x10, 0xf2, 0x0a, 0x8c, 0x5e, 0xd2, 0xaa, 0x78, 0xc1, 0x06, 0xdc, 0xc0, 0x16,
+ 0x7a, 0x0a, 0x12, 0x3b, 0x5a, 0x15, 0x4f, 0x48, 0x33, 0xf1, 0x93, 0x03, 0x67, 0xee, 0x9f, 0xf5,
+ 0x21, 0xcd, 0x7a, 0x31, 0xd6, 0x49, 0xb5, 0x42, 0x31, 0xe4, 0xaf, 0x26, 0x60, 0x2c, 0xe0, 0x2b,
+ 0x42, 0x90, 0xd0, 0xd5, 0x1a, 0xa1, 0x28, 0x9d, 0x4c, 0x29, 0xf4, 0x7f, 0x34, 0x01, 0xfd, 0x75,
+ 0xb5, 0x74, 0x4d, 0xad, 0xe0, 0x89, 0x18, 0xad, 0x16, 0x45, 0x34, 0x05, 0x50, 0xc6, 0x75, 0xac,
+ 0x97, 0xb1, 0x5e, 0xda, 0x9f, 0x88, 0xcf, 0xc4, 0x4f, 0xa6, 0x14, 0x57, 0x0d, 0x7a, 0x08, 0x46,
+ 0xeb, 0xcd, 0xed, 0xaa, 0x56, 0x2a, 0xba, 0xc0, 0x60, 0x26, 0x7e, 0xb2, 0x57, 0x49, 0xb3, 0x0f,
+ 0x0b, 0x0e, 0xf0, 0x09, 0x18, 0xb9, 0x81, 0xd5, 0x6b, 0x6e, 0xd0, 0x01, 0x0a, 0x3a, 0x4c, 0xaa,
+ 0x5d, 0x80, 0xf3, 0x30, 0x58, 0xc3, 0xa6, 0xa9, 0x56, 0x70, 0xd1, 0xda, 0xaf, 0xe3, 0x89, 0x04,
+ 0xed, 0xfd, 0x4c, 0x4b, 0xef, 0xfd, 0x3d, 0x1f, 0xe0, 0x58, 0x9b, 0xfb, 0x75, 0x8c, 0xb2, 0x90,
+ 0xc2, 0x7a, 0xb3, 0xc6, 0x28, 0xf4, 0x86, 0xc8, 0x2f, 0xaf, 0x37, 0x6b, 0x7e, 0x2a, 0x49, 0x82,
+ 0xc6, 0x49, 0xf4, 0x9b, 0xb8, 0x71, 0x5d, 0x2b, 0xe1, 0x89, 0x3e, 0x4a, 0xe0, 0x44, 0x0b, 0x81,
+ 0x0d, 0xf6, 0xdd, 0x4f, 0x43, 0xe0, 0xa1, 0x79, 0x48, 0xe1, 0x3d, 0x0b, 0xeb, 0xa6, 0x66, 0xe8,
+ 0x13, 0xfd, 0x94, 0xc8, 0x03, 0x01, 0xa3, 0x88, 0xab, 0x65, 0x3f, 0x09, 0x07, 0x0f, 0x9d, 0x83,
+ 0x7e, 0xa3, 0x6e, 0x69, 0x86, 0x6e, 0x4e, 0x24, 0x67, 0xa4, 0x93, 0x03, 0x67, 0x8e, 0x05, 0x2a,
+ 0xc2, 0x1a, 0x83, 0x51, 0x04, 0x30, 0x2a, 0x40, 0xda, 0x34, 0x9a, 0x8d, 0x12, 0x2e, 0x96, 0x8c,
+ 0x32, 0x2e, 0x6a, 0xfa, 0x8e, 0x31, 0x91, 0xa2, 0x04, 0xa6, 0x5b, 0x3b, 0x42, 0x01, 0xe7, 0x8d,
+ 0x32, 0x2e, 0xe8, 0x3b, 0x86, 0x32, 0x6c, 0x7a, 0xca, 0xe8, 0x30, 0xf4, 0x99, 0xfb, 0xba, 0xa5,
+ 0xee, 0x4d, 0x0c, 0x52, 0x0d, 0xe1, 0x25, 0xf9, 0xd7, 0xfb, 0x60, 0xa4, 0x13, 0x15, 0xbb, 0x00,
+ 0xbd, 0x3b, 0xa4, 0x97, 0x13, 0xb1, 0x6e, 0x64, 0xc0, 0x70, 0xbc, 0x42, 0xec, 0x3b, 0xa0, 0x10,
+ 0xb3, 0x30, 0xa0, 0x63, 0xd3, 0xc2, 0x65, 0xa6, 0x11, 0xf1, 0x0e, 0x75, 0x0a, 0x18, 0x52, 0xab,
+ 0x4a, 0x25, 0x0e, 0xa4, 0x52, 0xcf, 0xc1, 0x88, 0xcd, 0x52, 0xb1, 0xa1, 0xea, 0x15, 0xa1, 0x9b,
+ 0xa7, 0xa3, 0x38, 0x99, 0xcd, 0x0b, 0x3c, 0x85, 0xa0, 0x29, 0xc3, 0xd8, 0x53, 0x46, 0x0b, 0x00,
+ 0x86, 0x8e, 0x8d, 0x9d, 0x62, 0x19, 0x97, 0xaa, 0x13, 0xc9, 0x10, 0x29, 0xad, 0x11, 0x90, 0x16,
+ 0x29, 0x19, 0xac, 0xb6, 0x54, 0x45, 0xe7, 0x1d, 0x55, 0xeb, 0x0f, 0xd1, 0x94, 0x15, 0x36, 0xc9,
+ 0x5a, 0xb4, 0x6d, 0x0b, 0x86, 0x1b, 0x98, 0xe8, 0x3d, 0x2e, 0xf3, 0x9e, 0xa5, 0x28, 0x13, 0xb3,
+ 0x91, 0x3d, 0x53, 0x38, 0x1a, 0xeb, 0xd8, 0x50, 0xc3, 0x5d, 0x44, 0xf7, 0x81, 0x5d, 0x51, 0xa4,
+ 0x6a, 0x05, 0xd4, 0x0a, 0x0d, 0x8a, 0xca, 0x55, 0xb5, 0x86, 0x33, 0x2f, 0xc1, 0xb0, 0x57, 0x3c,
+ 0x68, 0x1c, 0x7a, 0x4d, 0x4b, 0x6d, 0x58, 0x54, 0x0b, 0x7b, 0x15, 0x56, 0x40, 0x69, 0x88, 0x63,
+ 0xbd, 0x4c, 0xad, 0x5c, 0xaf, 0x42, 0xfe, 0x45, 0x6f, 0x71, 0x3a, 0x1c, 0xa7, 0x1d, 0x3e, 0xde,
+ 0x3a, 0xa2, 0x1e, 0xca, 0xfe, 0x7e, 0x67, 0x9e, 0x84, 0x21, 0x4f, 0x07, 0x3a, 0x6d, 0x5a, 0x7e,
+ 0x17, 0x1c, 0x0a, 0x24, 0x8d, 0x9e, 0x83, 0xf1, 0xa6, 0xae, 0xe9, 0x16, 0x6e, 0xd4, 0x1b, 0x98,
+ 0x68, 0x2c, 0x6b, 0x6a, 0xe2, 0xbf, 0xf6, 0x87, 0xe8, 0xdc, 0x96, 0x1b, 0x9a, 0x51, 0x51, 0xc6,
+ 0x9a, 0xad, 0x95, 0xa7, 0x52, 0xc9, 0xaf, 0xf5, 0xa7, 0x5f, 0x7e, 0xf9, 0xe5, 0x97, 0x63, 0xf2,
+ 0x6f, 0xf4, 0xc1, 0x78, 0xd0, 0x9c, 0x09, 0x9c, 0xbe, 0x87, 0xa1, 0x4f, 0x6f, 0xd6, 0xb6, 0x71,
+ 0x83, 0x0a, 0xa9, 0x57, 0xe1, 0x25, 0x94, 0x85, 0xde, 0xaa, 0xba, 0x8d, 0xab, 0x13, 0x89, 0x19,
+ 0xe9, 0xe4, 0xf0, 0x99, 0x87, 0x3a, 0x9a, 0x95, 0xb3, 0xcb, 0x04, 0x45, 0x61, 0x98, 0xe8, 0x69,
+ 0x48, 0x70, 0x13, 0x4d, 0x28, 0x9c, 0xea, 0x8c, 0x02, 0x99, 0x4b, 0x0a, 0xc5, 0x43, 0x47, 0x21,
+ 0x45, 0xfe, 0x32, 0xdd, 0xe8, 0xa3, 0x3c, 0x27, 0x49, 0x05, 0xd1, 0x0b, 0x94, 0x81, 0x24, 0x9d,
+ 0x26, 0x65, 0x2c, 0x5c, 0x9b, 0x5d, 0x26, 0x8a, 0x55, 0xc6, 0x3b, 0x6a, 0xb3, 0x6a, 0x15, 0xaf,
+ 0xab, 0xd5, 0x26, 0xa6, 0x0a, 0x9f, 0x52, 0x06, 0x79, 0xe5, 0x55, 0x52, 0x87, 0xa6, 0x61, 0x80,
+ 0xcd, 0x2a, 0x4d, 0x2f, 0xe3, 0x3d, 0x6a, 0x3d, 0x7b, 0x15, 0x36, 0xd1, 0x0a, 0xa4, 0x86, 0x34,
+ 0xff, 0x82, 0x69, 0xe8, 0x42, 0x35, 0x69, 0x13, 0xa4, 0x82, 0x36, 0xff, 0xa4, 0xdf, 0x70, 0xdf,
+ 0x13, 0xdc, 0xbd, 0x96, 0xb9, 0x74, 0x02, 0x46, 0x28, 0xc4, 0xe3, 0x7c, 0xe8, 0xd5, 0xea, 0xc4,
+ 0xe8, 0x8c, 0x74, 0x32, 0xa9, 0x0c, 0xb3, 0xea, 0x35, 0x5e, 0x2b, 0xff, 0x6a, 0x0c, 0x12, 0xd4,
+ 0xb0, 0x8c, 0xc0, 0xc0, 0xe6, 0x5b, 0xd7, 0xf3, 0xc5, 0x85, 0xb5, 0xad, 0xdc, 0x72, 0x3e, 0x2d,
+ 0xa1, 0x61, 0x00, 0x5a, 0x71, 0x69, 0x79, 0x2d, 0xbb, 0x99, 0x8e, 0xd9, 0xe5, 0xc2, 0xea, 0xe6,
+ 0xb9, 0x27, 0xd2, 0x71, 0x1b, 0x61, 0x8b, 0x55, 0x24, 0xdc, 0x00, 0x8f, 0x9f, 0x49, 0xf7, 0xa2,
+ 0x34, 0x0c, 0x32, 0x02, 0x85, 0xe7, 0xf2, 0x0b, 0xe7, 0x9e, 0x48, 0xf7, 0x79, 0x6b, 0x1e, 0x3f,
+ 0x93, 0xee, 0x47, 0x43, 0x90, 0xa2, 0x35, 0xb9, 0xb5, 0xb5, 0xe5, 0x74, 0xd2, 0xa6, 0xb9, 0xb1,
+ 0xa9, 0x14, 0x56, 0x17, 0xd3, 0x29, 0x9b, 0xe6, 0xa2, 0xb2, 0xb6, 0xb5, 0x9e, 0x06, 0x9b, 0xc2,
+ 0x4a, 0x7e, 0x63, 0x23, 0xbb, 0x98, 0x4f, 0x0f, 0xd8, 0x10, 0xb9, 0xb7, 0x6e, 0xe6, 0x37, 0xd2,
+ 0x83, 0x1e, 0xb6, 0x1e, 0x3f, 0x93, 0x1e, 0xb2, 0x9b, 0xc8, 0xaf, 0x6e, 0xad, 0xa4, 0x87, 0xd1,
+ 0x28, 0x0c, 0xb1, 0x26, 0x04, 0x13, 0x23, 0xbe, 0xaa, 0x73, 0x4f, 0xa4, 0xd3, 0x0e, 0x23, 0x8c,
+ 0xca, 0xa8, 0xa7, 0xe2, 0xdc, 0x13, 0x69, 0x24, 0xcf, 0x43, 0x2f, 0x55, 0x43, 0x84, 0x60, 0x78,
+ 0x39, 0x9b, 0xcb, 0x2f, 0x17, 0xd7, 0xd6, 0x37, 0x0b, 0x6b, 0xab, 0xd9, 0xe5, 0xb4, 0xe4, 0xd4,
+ 0x29, 0xf9, 0x67, 0xb6, 0x0a, 0x4a, 0x7e, 0x21, 0x1d, 0x73, 0xd7, 0xad, 0xe7, 0xb3, 0x9b, 0xf9,
+ 0x85, 0x74, 0x5c, 0x2e, 0xc1, 0x78, 0x90, 0x41, 0x0d, 0x9c, 0x42, 0x2e, 0x5d, 0x88, 0x85, 0xe8,
+ 0x02, 0xa5, 0xe5, 0xd7, 0x05, 0xf9, 0x2b, 0x31, 0x18, 0x0b, 0x70, 0x2a, 0x81, 0x8d, 0x5c, 0x84,
+ 0x5e, 0xa6, 0xcb, 0xcc, 0xcd, 0x3e, 0x18, 0xe8, 0x9d, 0xa8, 0x66, 0xb7, 0xb8, 0x5a, 0x8a, 0xe7,
+ 0x0e, 0x35, 0xe2, 0x21, 0xa1, 0x06, 0x21, 0xd1, 0xa2, 0xb0, 0xef, 0x68, 0x31, 0xfe, 0xcc, 0x3f,
+ 0x9e, 0xeb, 0xc4, 0x3f, 0xd2, 0xba, 0xee, 0x9c, 0x40, 0x6f, 0x80, 0x13, 0xb8, 0x00, 0xa3, 0x2d,
+ 0x84, 0x3a, 0x36, 0xc6, 0xef, 0x95, 0x60, 0x22, 0x4c, 0x38, 0x11, 0x26, 0x31, 0xe6, 0x31, 0x89,
+ 0x17, 0xfc, 0x12, 0xbc, 0x37, 0x7c, 0x10, 0x5a, 0xc6, 0xfa, 0x53, 0x12, 0x1c, 0x0e, 0x0e, 0x29,
+ 0x03, 0x79, 0x78, 0x1a, 0xfa, 0x6a, 0xd8, 0xda, 0x35, 0x44, 0x58, 0x75, 0x3c, 0xc0, 0x59, 0x93,
+ 0xcf, 0xfe, 0xc1, 0xe6, 0x58, 0x6e, 0x6f, 0x1f, 0x0f, 0x8b, 0x0b, 0x19, 0x37, 0x2d, 0x9c, 0x7e,
+ 0x20, 0x06, 0x87, 0x02, 0x89, 0x07, 0x32, 0x7a, 0x0f, 0x80, 0xa6, 0xd7, 0x9b, 0x16, 0x0b, 0x9d,
+ 0x98, 0x25, 0x4e, 0xd1, 0x1a, 0x6a, 0xbc, 0x88, 0x95, 0x6d, 0x5a, 0xf6, 0xf7, 0x38, 0xfd, 0x0e,
+ 0xac, 0x8a, 0x02, 0x3c, 0xe5, 0x30, 0x9a, 0xa0, 0x8c, 0x4e, 0x85, 0xf4, 0xb4, 0x45, 0x31, 0x1f,
+ 0x85, 0x74, 0xa9, 0xaa, 0x61, 0xdd, 0x2a, 0x9a, 0x56, 0x03, 0xab, 0x35, 0x4d, 0xaf, 0x50, 0x57,
+ 0x93, 0x9c, 0xeb, 0xdd, 0x51, 0xab, 0x26, 0x56, 0x46, 0xd8, 0xe7, 0x0d, 0xf1, 0x95, 0x60, 0x50,
+ 0x05, 0x6a, 0xb8, 0x30, 0xfa, 0x3c, 0x18, 0xec, 0xb3, 0x8d, 0x21, 0x7f, 0x30, 0x05, 0x03, 0xae,
+ 0x00, 0x1c, 0xdd, 0x0b, 0x83, 0x2f, 0xa8, 0xd7, 0xd5, 0xa2, 0x58, 0x54, 0x31, 0x49, 0x0c, 0x90,
+ 0xba, 0x75, 0xbe, 0xb0, 0x7a, 0x14, 0xc6, 0x29, 0x88, 0xd1, 0xb4, 0x70, 0xa3, 0x58, 0xaa, 0xaa,
+ 0xa6, 0x49, 0x85, 0x96, 0xa4, 0xa0, 0x88, 0x7c, 0x5b, 0x23, 0x9f, 0xe6, 0xc5, 0x17, 0x74, 0x16,
+ 0xc6, 0x28, 0x46, 0xad, 0x59, 0xb5, 0xb4, 0x7a, 0x15, 0x17, 0xc9, 0x32, 0xcf, 0xa4, 0x2e, 0xc7,
+ 0xe6, 0x6c, 0x94, 0x40, 0xac, 0x70, 0x00, 0xc2, 0x91, 0x89, 0x16, 0xe0, 0x1e, 0x8a, 0x56, 0xc1,
+ 0x3a, 0x6e, 0xa8, 0x16, 0x2e, 0xe2, 0x17, 0x9b, 0x6a, 0xd5, 0x2c, 0xaa, 0x7a, 0xb9, 0xb8, 0xab,
+ 0x9a, 0xbb, 0x13, 0xe3, 0x84, 0x40, 0x2e, 0x36, 0x21, 0x29, 0x93, 0x04, 0x70, 0x91, 0xc3, 0xe5,
+ 0x29, 0x58, 0x56, 0x2f, 0x2f, 0xa9, 0xe6, 0x2e, 0x9a, 0x83, 0xc3, 0x94, 0x8a, 0x69, 0x35, 0x34,
+ 0xbd, 0x52, 0x2c, 0xed, 0xe2, 0xd2, 0xb5, 0x62, 0xd3, 0xda, 0x79, 0x6a, 0xe2, 0xa8, 0xbb, 0x7d,
+ 0xca, 0xe1, 0x06, 0x85, 0x99, 0x27, 0x20, 0x5b, 0xd6, 0xce, 0x53, 0x68, 0x03, 0x06, 0xc9, 0x60,
+ 0xd4, 0xb4, 0x97, 0x70, 0x71, 0xc7, 0x68, 0x50, 0x1f, 0x3a, 0x1c, 0x60, 0x9a, 0x5c, 0x12, 0x9c,
+ 0x5d, 0xe3, 0x08, 0x2b, 0x46, 0x19, 0xcf, 0xf5, 0x6e, 0xac, 0xe7, 0xf3, 0x0b, 0xca, 0x80, 0xa0,
+ 0x72, 0xc9, 0x68, 0x10, 0x85, 0xaa, 0x18, 0xb6, 0x80, 0x07, 0x98, 0x42, 0x55, 0x0c, 0x21, 0xde,
+ 0xb3, 0x30, 0x56, 0x2a, 0xb1, 0x3e, 0x6b, 0xa5, 0x22, 0x5f, 0x8c, 0x99, 0x13, 0x69, 0x8f, 0xb0,
+ 0x4a, 0xa5, 0x45, 0x06, 0xc0, 0x75, 0xdc, 0x44, 0xe7, 0xe1, 0x90, 0x23, 0x2c, 0x37, 0xe2, 0x68,
+ 0x4b, 0x2f, 0xfd, 0xa8, 0x67, 0x61, 0xac, 0xbe, 0xdf, 0x8a, 0x88, 0x3c, 0x2d, 0xd6, 0xf7, 0xfd,
+ 0x68, 0x4f, 0xc2, 0x78, 0x7d, 0xb7, 0xde, 0x8a, 0x77, 0xca, 0x8d, 0x87, 0xea, 0xbb, 0x75, 0x3f,
+ 0xe2, 0x03, 0x74, 0x65, 0xde, 0xc0, 0x25, 0xd5, 0xc2, 0xe5, 0x89, 0x23, 0x6e, 0x70, 0xd7, 0x07,
+ 0x34, 0x0b, 0xe9, 0x52, 0xa9, 0x88, 0x75, 0x75, 0xbb, 0x8a, 0x8b, 0x6a, 0x03, 0xeb, 0xaa, 0x39,
+ 0x31, 0x4d, 0x81, 0x13, 0x56, 0xa3, 0x89, 0x95, 0xe1, 0x52, 0x29, 0x4f, 0x3f, 0x66, 0xe9, 0x37,
+ 0x74, 0x0a, 0x46, 0x8d, 0xed, 0x17, 0x4a, 0x4c, 0x23, 0x8b, 0xf5, 0x06, 0xde, 0xd1, 0xf6, 0x26,
+ 0xee, 0xa7, 0xe2, 0x1d, 0x21, 0x1f, 0xa8, 0x3e, 0xae, 0xd3, 0x6a, 0xf4, 0x20, 0xa4, 0x4b, 0xe6,
+ 0xae, 0xda, 0xa8, 0x53, 0x93, 0x6c, 0xd6, 0xd5, 0x12, 0x9e, 0x78, 0x80, 0x81, 0xb2, 0xfa, 0x55,
+ 0x51, 0x4d, 0x66, 0x84, 0x79, 0x43, 0xdb, 0xb1, 0x04, 0xc5, 0x13, 0x6c, 0x46, 0xd0, 0x3a, 0x4e,
+ 0xed, 0x24, 0xa4, 0x89, 0x24, 0x3c, 0x0d, 0x9f, 0xa4, 0x60, 0xc3, 0xf5, 0xdd, 0xba, 0xbb, 0xdd,
+ 0xfb, 0x60, 0x88, 0x40, 0x3a, 0x8d, 0x3e, 0xc8, 0x02, 0xb7, 0xfa, 0xae, 0xab, 0xc5, 0x27, 0xe0,
+ 0x30, 0x01, 0xaa, 0x61, 0x4b, 0x2d, 0xab, 0x96, 0xea, 0x82, 0x7e, 0x98, 0x42, 0x13, 0xb1, 0xaf,
+ 0xf0, 0x8f, 0x1e, 0x3e, 0x1b, 0xcd, 0xed, 0x7d, 0x5b, 0xb1, 0x1e, 0x61, 0x7c, 0x92, 0x3a, 0xa1,
+ 0x5a, 0x77, 0x2d, 0x38, 0x97, 0xe7, 0x60, 0xd0, 0xad, 0xf7, 0x28, 0x05, 0x4c, 0xf3, 0xd3, 0x12,
+ 0x09, 0x82, 0xe6, 0xd7, 0x16, 0x48, 0xf8, 0xf2, 0x7c, 0x3e, 0x1d, 0x23, 0x61, 0xd4, 0x72, 0x61,
+ 0x33, 0x5f, 0x54, 0xb6, 0x56, 0x37, 0x0b, 0x2b, 0xf9, 0x74, 0xdc, 0x15, 0xd8, 0x5f, 0x4e, 0x24,
+ 0x8f, 0xa7, 0x4f, 0xc8, 0x5f, 0x8a, 0xc1, 0xb0, 0x77, 0xa5, 0x86, 0xde, 0x04, 0x47, 0x44, 0x5a,
+ 0xc5, 0xc4, 0x56, 0xf1, 0x86, 0xd6, 0xa0, 0x13, 0xb2, 0xa6, 0x32, 0xe7, 0x68, 0xeb, 0xcf, 0x38,
+ 0x87, 0xda, 0xc0, 0xd6, 0xb3, 0x5a, 0x83, 0x4c, 0xb7, 0x9a, 0x6a, 0xa1, 0x65, 0x98, 0xd6, 0x8d,
+ 0xa2, 0x69, 0xa9, 0x7a, 0x59, 0x6d, 0x94, 0x8b, 0x4e, 0x42, 0xab, 0xa8, 0x96, 0x4a, 0xd8, 0x34,
+ 0x0d, 0xe6, 0x08, 0x6d, 0x2a, 0xc7, 0x74, 0x63, 0x83, 0x03, 0x3b, 0x1e, 0x22, 0xcb, 0x41, 0x7d,
+ 0xea, 0x1b, 0x0f, 0x53, 0xdf, 0xa3, 0x90, 0xaa, 0xa9, 0xf5, 0x22, 0xd6, 0xad, 0xc6, 0x3e, 0x8d,
+ 0xcf, 0x93, 0x4a, 0xb2, 0xa6, 0xd6, 0xf3, 0xa4, 0xfc, 0x1d, 0x59, 0x26, 0x5d, 0x4e, 0x24, 0x93,
+ 0xe9, 0xd4, 0xe5, 0x44, 0x32, 0x95, 0x06, 0xf9, 0xb5, 0x38, 0x0c, 0xba, 0xe3, 0x75, 0xb2, 0xfc,
+ 0x29, 0x51, 0x8f, 0x25, 0x51, 0x9b, 0x76, 0x5f, 0xdb, 0xe8, 0x7e, 0x76, 0x9e, 0xb8, 0xb2, 0xb9,
+ 0x3e, 0x16, 0x1c, 0x2b, 0x0c, 0x93, 0x84, 0x11, 0x44, 0xd9, 0x30, 0x0b, 0x46, 0x92, 0x0a, 0x2f,
+ 0xa1, 0x45, 0xe8, 0x7b, 0xc1, 0xa4, 0xb4, 0xfb, 0x28, 0xed, 0xfb, 0xdb, 0xd3, 0xbe, 0xbc, 0x41,
+ 0x89, 0xa7, 0x2e, 0x6f, 0x14, 0x57, 0xd7, 0x94, 0x95, 0xec, 0xb2, 0xc2, 0xd1, 0xd1, 0x24, 0x24,
+ 0xaa, 0xea, 0x4b, 0xfb, 0x5e, 0xa7, 0x47, 0xab, 0x3a, 0x1d, 0x84, 0x49, 0x48, 0xdc, 0xc0, 0xea,
+ 0x35, 0xaf, 0xab, 0xa1, 0x55, 0x77, 0x71, 0x32, 0x9c, 0x86, 0x5e, 0x2a, 0x2f, 0x04, 0xc0, 0x25,
+ 0x96, 0xee, 0x41, 0x49, 0x48, 0xcc, 0xaf, 0x29, 0x64, 0x42, 0xa4, 0x61, 0x90, 0xd5, 0x16, 0xd7,
+ 0x0b, 0xf9, 0xf9, 0x7c, 0x3a, 0x26, 0x9f, 0x85, 0x3e, 0x26, 0x04, 0x32, 0x59, 0x6c, 0x31, 0xa4,
+ 0x7b, 0x78, 0x91, 0xd3, 0x90, 0xc4, 0xd7, 0xad, 0x95, 0x5c, 0x5e, 0x49, 0xc7, 0xbc, 0x43, 0x9d,
+ 0x48, 0xf7, 0xca, 0x26, 0x0c, 0xba, 0xe3, 0xf0, 0xef, 0xcc, 0x62, 0xfc, 0x73, 0x12, 0x0c, 0xb8,
+ 0xe2, 0x6a, 0x12, 0x10, 0xa9, 0xd5, 0xaa, 0x71, 0xa3, 0xa8, 0x56, 0x35, 0xd5, 0xe4, 0xaa, 0x01,
+ 0xb4, 0x2a, 0x4b, 0x6a, 0x3a, 0x1d, 0xba, 0xef, 0xd0, 0x14, 0xe9, 0x4d, 0xf7, 0xc9, 0x1f, 0x93,
+ 0x20, 0xed, 0x0f, 0x6c, 0x7d, 0x6c, 0x4a, 0xdf, 0x4d, 0x36, 0xe5, 0x8f, 0x4a, 0x30, 0xec, 0x8d,
+ 0x66, 0x7d, 0xec, 0xdd, 0xfb, 0x5d, 0x65, 0xef, 0x8f, 0x62, 0x30, 0xe4, 0x89, 0x61, 0x3b, 0xe5,
+ 0xee, 0x45, 0x18, 0xd5, 0xca, 0xb8, 0x56, 0x37, 0x2c, 0xac, 0x97, 0xf6, 0x8b, 0x55, 0x7c, 0x1d,
+ 0x57, 0x27, 0x64, 0x6a, 0x34, 0x4e, 0xb7, 0x8f, 0x92, 0x67, 0x0b, 0x0e, 0xde, 0x32, 0x41, 0x9b,
+ 0x1b, 0x2b, 0x2c, 0xe4, 0x57, 0xd6, 0xd7, 0x36, 0xf3, 0xab, 0xf3, 0x6f, 0x2d, 0x6e, 0xad, 0x5e,
+ 0x59, 0x5d, 0x7b, 0x76, 0x55, 0x49, 0x6b, 0x3e, 0xb0, 0xbb, 0x38, 0xed, 0xd7, 0x21, 0xed, 0x67,
+ 0x0a, 0x1d, 0x81, 0x20, 0xb6, 0xd2, 0x3d, 0x68, 0x0c, 0x46, 0x56, 0xd7, 0x8a, 0x1b, 0x85, 0x85,
+ 0x7c, 0x31, 0x7f, 0xe9, 0x52, 0x7e, 0x7e, 0x73, 0x83, 0xe5, 0x3d, 0x6c, 0xe8, 0x4d, 0xcf, 0x04,
+ 0x97, 0x3f, 0x12, 0x87, 0xb1, 0x00, 0x4e, 0x50, 0x96, 0xaf, 0x58, 0xd8, 0x22, 0xea, 0x91, 0x4e,
+ 0xb8, 0x9f, 0x25, 0x31, 0xc3, 0xba, 0xda, 0xb0, 0xf8, 0x02, 0xe7, 0x41, 0x20, 0x52, 0xd2, 0x2d,
+ 0x6d, 0x47, 0xc3, 0x0d, 0x9e, 0x4f, 0x62, 0xcb, 0x98, 0x11, 0xa7, 0x9e, 0xa5, 0x94, 0x1e, 0x06,
+ 0x54, 0x37, 0x4c, 0xcd, 0xd2, 0xae, 0xe3, 0xa2, 0xa6, 0x8b, 0xe4, 0x13, 0x59, 0xd6, 0x24, 0x94,
+ 0xb4, 0xf8, 0x52, 0xd0, 0x2d, 0x1b, 0x5a, 0xc7, 0x15, 0xd5, 0x07, 0x4d, 0x8c, 0x79, 0x5c, 0x49,
+ 0x8b, 0x2f, 0x36, 0xf4, 0xbd, 0x30, 0x58, 0x36, 0x9a, 0x24, 0xd6, 0x63, 0x70, 0xc4, 0x77, 0x48,
+ 0xca, 0x00, 0xab, 0xb3, 0x41, 0x78, 0x14, 0xef, 0x64, 0xbd, 0x06, 0x95, 0x01, 0x56, 0xc7, 0x40,
+ 0x4e, 0xc0, 0x88, 0x5a, 0xa9, 0x34, 0x08, 0x71, 0x41, 0x88, 0xad, 0x4b, 0x86, 0xed, 0x6a, 0x0a,
+ 0x98, 0xb9, 0x0c, 0x49, 0x21, 0x07, 0xe2, 0xaa, 0x89, 0x24, 0x8a, 0x75, 0xb6, 0xd8, 0x8e, 0x9d,
+ 0x4c, 0x29, 0x49, 0x5d, 0x7c, 0xbc, 0x17, 0x06, 0x35, 0xb3, 0xe8, 0x24, 0xf1, 0x63, 0x33, 0xb1,
+ 0x93, 0x49, 0x65, 0x40, 0x33, 0xed, 0x04, 0xa8, 0xfc, 0xa9, 0x18, 0x0c, 0x7b, 0x37, 0x21, 0xd0,
+ 0x02, 0x24, 0xab, 0x46, 0x49, 0xa5, 0xaa, 0xc5, 0x76, 0xc0, 0x4e, 0x46, 0xec, 0x5b, 0xcc, 0x2e,
+ 0x73, 0x78, 0xc5, 0xc6, 0xcc, 0xfc, 0x4b, 0x09, 0x92, 0xa2, 0x1a, 0x1d, 0x86, 0x44, 0x5d, 0xb5,
+ 0x76, 0x29, 0xb9, 0xde, 0x5c, 0x2c, 0x2d, 0x29, 0xb4, 0x4c, 0xea, 0xcd, 0xba, 0xaa, 0x53, 0x15,
+ 0xe0, 0xf5, 0xa4, 0x4c, 0xc6, 0xb5, 0x8a, 0xd5, 0x32, 0x5d, 0xf4, 0x18, 0xb5, 0x1a, 0xd6, 0x2d,
+ 0x53, 0x8c, 0x2b, 0xaf, 0x9f, 0xe7, 0xd5, 0xe8, 0x21, 0x18, 0xb5, 0x1a, 0xaa, 0x56, 0xf5, 0xc0,
+ 0x26, 0x28, 0x6c, 0x5a, 0x7c, 0xb0, 0x81, 0xe7, 0x60, 0x52, 0xd0, 0x2d, 0x63, 0x4b, 0x2d, 0xed,
+ 0xe2, 0xb2, 0x83, 0xd4, 0x47, 0x93, 0x1b, 0x47, 0x38, 0xc0, 0x02, 0xff, 0x2e, 0x70, 0xe5, 0x2f,
+ 0x49, 0x30, 0x2a, 0x96, 0x69, 0x65, 0x5b, 0x58, 0x2b, 0x00, 0xaa, 0xae, 0x1b, 0x96, 0x5b, 0x5c,
+ 0xad, 0xaa, 0xdc, 0x82, 0x37, 0x9b, 0xb5, 0x91, 0x14, 0x17, 0x81, 0x4c, 0x0d, 0xc0, 0xf9, 0x12,
+ 0x2a, 0xb6, 0x69, 0x18, 0xe0, 0x3b, 0x4c, 0x74, 0x9b, 0x92, 0x2d, 0xec, 0x81, 0x55, 0x91, 0xf5,
+ 0x1c, 0x1a, 0x87, 0xde, 0x6d, 0x5c, 0xd1, 0x74, 0x9e, 0x37, 0x66, 0x05, 0x91, 0x7e, 0x49, 0xd8,
+ 0xe9, 0x97, 0xdc, 0x5f, 0x83, 0xb1, 0x92, 0x51, 0xf3, 0xb3, 0x9b, 0x4b, 0xfb, 0x92, 0x0b, 0xe6,
+ 0x92, 0xf4, 0xfc, 0x23, 0x1c, 0xa8, 0x62, 0x54, 0x55, 0xbd, 0x32, 0x6b, 0x34, 0x2a, 0xce, 0x36,
+ 0x2b, 0x89, 0x78, 0x4c, 0xd7, 0x66, 0x6b, 0x7d, 0xfb, 0xff, 0x48, 0xd2, 0x4f, 0xc5, 0xe2, 0x8b,
+ 0xeb, 0xb9, 0xcf, 0xc4, 0x32, 0x8b, 0x0c, 0x71, 0x5d, 0x08, 0x43, 0xc1, 0x3b, 0x55, 0x5c, 0x22,
+ 0x1d, 0x84, 0xaf, 0x3f, 0x04, 0xe3, 0x15, 0xa3, 0x62, 0x50, 0x4a, 0xa7, 0xc9, 0x7f, 0x7c, 0x9f,
+ 0x36, 0x65, 0xd7, 0x66, 0x22, 0x37, 0x75, 0xe7, 0x56, 0x61, 0x8c, 0x03, 0x17, 0xe9, 0x46, 0x11,
+ 0x5b, 0xc6, 0xa0, 0xb6, 0x39, 0xb4, 0x89, 0x5f, 0xfa, 0x2a, 0x75, 0xdf, 0xca, 0x28, 0x47, 0x25,
+ 0xdf, 0xd8, 0x4a, 0x67, 0x4e, 0x81, 0x43, 0x1e, 0x7a, 0x6c, 0x92, 0xe2, 0x46, 0x04, 0xc5, 0xdf,
+ 0xe2, 0x14, 0xc7, 0x5c, 0x14, 0x37, 0x38, 0xea, 0xdc, 0x3c, 0x0c, 0x75, 0x43, 0xeb, 0x9f, 0x73,
+ 0x5a, 0x83, 0xd8, 0x4d, 0x64, 0x11, 0x46, 0x28, 0x91, 0x52, 0xd3, 0xb4, 0x8c, 0x1a, 0xb5, 0x80,
+ 0xed, 0xc9, 0xfc, 0xf6, 0x57, 0xd9, 0xac, 0x19, 0x26, 0x68, 0xf3, 0x36, 0xd6, 0xdc, 0x1c, 0xd0,
+ 0xbd, 0xb1, 0x32, 0x2e, 0x55, 0x23, 0x28, 0xfc, 0x0e, 0x67, 0xc4, 0x86, 0x9f, 0xbb, 0x0a, 0xe3,
+ 0xe4, 0x7f, 0x6a, 0xa0, 0xdc, 0x9c, 0x44, 0x27, 0xdc, 0x26, 0xbe, 0xf4, 0x5e, 0x36, 0x31, 0xc7,
+ 0x6c, 0x02, 0x2e, 0x9e, 0x5c, 0xa3, 0x58, 0xc1, 0x96, 0x85, 0x1b, 0x66, 0x51, 0xad, 0x06, 0xb1,
+ 0xe7, 0xca, 0x58, 0x4c, 0xfc, 0xc4, 0x37, 0xbc, 0xa3, 0xb8, 0xc8, 0x30, 0xb3, 0xd5, 0xea, 0xdc,
+ 0x16, 0x1c, 0x09, 0xd0, 0x8a, 0x0e, 0x68, 0x7e, 0x84, 0xd3, 0x1c, 0x6f, 0xd1, 0x0c, 0x42, 0x76,
+ 0x1d, 0x44, 0xbd, 0x3d, 0x96, 0x1d, 0xd0, 0xfc, 0x49, 0x4e, 0x13, 0x71, 0x5c, 0x31, 0xa4, 0x84,
+ 0xe2, 0x65, 0x18, 0xbd, 0x8e, 0x1b, 0xdb, 0x86, 0xc9, 0xb3, 0x44, 0x1d, 0x90, 0xfb, 0x28, 0x27,
+ 0x37, 0xc2, 0x11, 0x69, 0xda, 0x88, 0xd0, 0x3a, 0x0f, 0xc9, 0x1d, 0xb5, 0x84, 0x3b, 0x20, 0x71,
+ 0x8b, 0x93, 0xe8, 0x27, 0xf0, 0x04, 0x35, 0x0b, 0x83, 0x15, 0x83, 0xfb, 0xa8, 0x68, 0xf4, 0x8f,
+ 0x71, 0xf4, 0x01, 0x81, 0xc3, 0x49, 0xd4, 0x8d, 0x7a, 0xb3, 0x4a, 0x1c, 0x58, 0x34, 0x89, 0x8f,
+ 0x0b, 0x12, 0x02, 0x87, 0x93, 0xe8, 0x42, 0xac, 0xaf, 0x0a, 0x12, 0xa6, 0x4b, 0x9e, 0x17, 0x61,
+ 0xc0, 0xd0, 0xab, 0xfb, 0x86, 0xde, 0x09, 0x13, 0x9f, 0xe0, 0x14, 0x80, 0xa3, 0x10, 0x02, 0x17,
+ 0x20, 0xd5, 0xe9, 0x40, 0xfc, 0x9d, 0x6f, 0x88, 0xe9, 0x21, 0x46, 0x60, 0x11, 0x46, 0x84, 0x81,
+ 0xd2, 0x0c, 0xbd, 0x03, 0x12, 0x3f, 0xc3, 0x49, 0x0c, 0xbb, 0xd0, 0x78, 0x37, 0x2c, 0x6c, 0x5a,
+ 0x15, 0xdc, 0x09, 0x91, 0x4f, 0x89, 0x6e, 0x70, 0x14, 0x2e, 0xca, 0x6d, 0xac, 0x97, 0x76, 0x3b,
+ 0xa3, 0xf0, 0x69, 0x21, 0x4a, 0x81, 0x43, 0x48, 0xcc, 0xc3, 0x50, 0x4d, 0x6d, 0x98, 0xbb, 0x6a,
+ 0xb5, 0xa3, 0xe1, 0xf8, 0x59, 0x4e, 0x63, 0xd0, 0x46, 0xe2, 0x12, 0x69, 0xea, 0xdd, 0x90, 0xf9,
+ 0x8c, 0x90, 0x88, 0x0b, 0x8d, 0x4f, 0x3d, 0xd3, 0xa2, 0x29, 0xb5, 0x6e, 0xa8, 0xfd, 0x9c, 0x98,
+ 0x7a, 0x0c, 0x77, 0xc5, 0x4d, 0xf1, 0x02, 0xa4, 0x4c, 0xed, 0xa5, 0x8e, 0xc8, 0xfc, 0xbc, 0x18,
+ 0x69, 0x8a, 0x40, 0x90, 0xdf, 0x0a, 0x93, 0x81, 0x6e, 0xa2, 0x03, 0x62, 0x7f, 0x97, 0x13, 0x3b,
+ 0x1c, 0xe0, 0x2a, 0xb8, 0x49, 0xe8, 0x96, 0xe4, 0xdf, 0x13, 0x26, 0x01, 0xfb, 0x68, 0xad, 0x93,
+ 0x55, 0x83, 0xa9, 0xee, 0x74, 0x27, 0xb5, 0x5f, 0x10, 0x52, 0x63, 0xb8, 0x1e, 0xa9, 0x6d, 0xc2,
+ 0x61, 0x4e, 0xb1, 0xbb, 0x71, 0xfd, 0x45, 0x61, 0x58, 0x19, 0xf6, 0x96, 0x77, 0x74, 0xdf, 0x06,
+ 0x19, 0x5b, 0x9c, 0x22, 0x3c, 0x35, 0x8b, 0x35, 0xb5, 0xde, 0x01, 0xe5, 0x5f, 0xe2, 0x94, 0x85,
+ 0xc5, 0xb7, 0xe3, 0x5b, 0x73, 0x45, 0xad, 0x13, 0xe2, 0xcf, 0xc1, 0x84, 0x20, 0xde, 0xd4, 0x1b,
+ 0xb8, 0x64, 0x54, 0x74, 0xed, 0x25, 0x5c, 0xee, 0x80, 0xf4, 0x2f, 0xfb, 0x86, 0x6a, 0xcb, 0x85,
+ 0x4e, 0x28, 0x17, 0x20, 0x6d, 0xc7, 0x2a, 0x45, 0xad, 0x56, 0x37, 0x1a, 0x56, 0x04, 0xc5, 0x5f,
+ 0x11, 0x23, 0x65, 0xe3, 0x15, 0x28, 0xda, 0x5c, 0x1e, 0xd8, 0x3e, 0x73, 0xa7, 0x2a, 0xf9, 0x59,
+ 0x4e, 0x68, 0xc8, 0xc1, 0xe2, 0x86, 0xa3, 0x64, 0xd4, 0xea, 0x6a, 0xa3, 0x13, 0xfb, 0xf7, 0xf7,
+ 0x85, 0xe1, 0xe0, 0x28, 0xdc, 0x70, 0x90, 0x88, 0x8e, 0x78, 0xfb, 0x0e, 0x28, 0xfc, 0xaa, 0x30,
+ 0x1c, 0x02, 0x87, 0x93, 0x10, 0x01, 0x43, 0x07, 0x24, 0xfe, 0x81, 0x20, 0x21, 0x70, 0x08, 0x89,
+ 0x67, 0x1c, 0x47, 0xdb, 0xc0, 0x15, 0xcd, 0xb4, 0x1a, 0x2c, 0x28, 0x6e, 0x4f, 0xea, 0xd7, 0xbe,
+ 0xe1, 0x0d, 0xc2, 0x14, 0x17, 0x2a, 0xb1, 0x44, 0x3c, 0xc9, 0x4a, 0xd7, 0x4c, 0xd1, 0x8c, 0xfd,
+ 0xba, 0xb0, 0x44, 0x2e, 0x34, 0xc2, 0x9b, 0x2b, 0x42, 0x24, 0x62, 0x2f, 0x91, 0x95, 0x42, 0x07,
+ 0xe4, 0xfe, 0xa1, 0x8f, 0xb9, 0x0d, 0x81, 0x4b, 0x68, 0xba, 0xe2, 0x9f, 0xa6, 0x7e, 0x0d, 0xef,
+ 0x77, 0xa4, 0x9d, 0xff, 0xc8, 0x17, 0xff, 0x6c, 0x31, 0x4c, 0x66, 0x43, 0x46, 0x7c, 0xf1, 0x14,
+ 0x8a, 0x3a, 0x55, 0x34, 0xf1, 0x03, 0xdf, 0xe2, 0xfd, 0xf5, 0x86, 0x53, 0x73, 0xcb, 0x44, 0xc9,
+ 0xbd, 0x41, 0x4f, 0x34, 0xb1, 0xf7, 0x7e, 0xcb, 0xd6, 0x73, 0x4f, 0xcc, 0x33, 0x77, 0x09, 0x86,
+ 0x3c, 0x01, 0x4f, 0x34, 0xa9, 0xf7, 0x71, 0x52, 0x83, 0xee, 0x78, 0x67, 0xee, 0x2c, 0x24, 0x48,
+ 0xf0, 0x12, 0x8d, 0xfe, 0x83, 0x1c, 0x9d, 0x82, 0xcf, 0xbd, 0x19, 0x92, 0x22, 0x68, 0x89, 0x46,
+ 0xfd, 0x21, 0x8e, 0x6a, 0xa3, 0x10, 0x74, 0x11, 0xb0, 0x44, 0xa3, 0xff, 0x75, 0x81, 0x2e, 0x50,
+ 0x08, 0x7a, 0xe7, 0x22, 0xfc, 0xdc, 0x0f, 0x27, 0xb8, 0xd3, 0x11, 0xb2, 0xbb, 0x00, 0xfd, 0x3c,
+ 0x52, 0x89, 0xc6, 0xfe, 0x00, 0x6f, 0x5c, 0x60, 0xcc, 0x3d, 0x09, 0xbd, 0x1d, 0x0a, 0xfc, 0x47,
+ 0x38, 0x2a, 0x83, 0x9f, 0x9b, 0x87, 0x01, 0x57, 0x74, 0x12, 0x8d, 0xfe, 0x37, 0x38, 0xba, 0x1b,
+ 0x8b, 0xb0, 0xce, 0xa3, 0x93, 0x68, 0x02, 0x3f, 0x2a, 0x58, 0xe7, 0x18, 0x44, 0x6c, 0x22, 0x30,
+ 0x89, 0xc6, 0xfe, 0x31, 0x21, 0x75, 0x81, 0x32, 0x77, 0x11, 0x52, 0xb6, 0xb3, 0x89, 0xc6, 0xff,
+ 0x20, 0xc7, 0x77, 0x70, 0x88, 0x04, 0x5c, 0xce, 0x2e, 0x9a, 0xc4, 0xdf, 0x14, 0x12, 0x70, 0x61,
+ 0x91, 0x69, 0xe4, 0x0f, 0x60, 0xa2, 0x29, 0x7d, 0x48, 0x4c, 0x23, 0x5f, 0xfc, 0x42, 0x46, 0x93,
+ 0xda, 0xfc, 0x68, 0x12, 0x7f, 0x4b, 0x8c, 0x26, 0x85, 0x27, 0x6c, 0xf8, 0x23, 0x82, 0x68, 0x1a,
+ 0x3f, 0x2e, 0xd8, 0xf0, 0x05, 0x04, 0x73, 0xeb, 0x80, 0x5a, 0xa3, 0x81, 0x68, 0x7a, 0xaf, 0x70,
+ 0x7a, 0xa3, 0x2d, 0xc1, 0xc0, 0xdc, 0xb3, 0x70, 0x38, 0x38, 0x12, 0x88, 0xa6, 0xfa, 0x13, 0xdf,
+ 0xf2, 0xad, 0xdd, 0xdc, 0x81, 0xc0, 0xdc, 0xa6, 0xe3, 0x52, 0xdc, 0x51, 0x40, 0x34, 0xd9, 0x8f,
+ 0x7c, 0xcb, 0x6b, 0xb8, 0xdd, 0x41, 0xc0, 0x5c, 0x16, 0xc0, 0x71, 0xc0, 0xd1, 0xb4, 0x3e, 0xca,
+ 0x69, 0xb9, 0x90, 0xc8, 0xd4, 0xe0, 0xfe, 0x37, 0x1a, 0xff, 0x96, 0x98, 0x1a, 0x1c, 0x83, 0x4c,
+ 0x0d, 0xe1, 0x7a, 0xa3, 0xb1, 0x3f, 0x26, 0xa6, 0x86, 0x40, 0x21, 0x9a, 0xed, 0xf2, 0x6e, 0xd1,
+ 0x14, 0x3e, 0x21, 0x34, 0xdb, 0x85, 0x35, 0xb7, 0x0a, 0xa3, 0x2d, 0x0e, 0x31, 0x9a, 0xd4, 0x4f,
+ 0x71, 0x52, 0x69, 0xbf, 0x3f, 0x74, 0x3b, 0x2f, 0xee, 0x0c, 0xa3, 0xa9, 0x7d, 0xd2, 0xe7, 0xbc,
+ 0xb8, 0x2f, 0x9c, 0xbb, 0x00, 0x49, 0xbd, 0x59, 0xad, 0x92, 0xc9, 0x83, 0xda, 0x9f, 0x04, 0x9c,
+ 0xf8, 0x6f, 0xdf, 0xe6, 0xd2, 0x11, 0x08, 0x73, 0x67, 0xa1, 0x17, 0xd7, 0xb6, 0x71, 0x39, 0x0a,
+ 0xf3, 0xeb, 0xdf, 0x16, 0x06, 0x93, 0x40, 0xcf, 0x5d, 0x04, 0x60, 0xa9, 0x11, 0xba, 0x19, 0x18,
+ 0x81, 0xfb, 0xdf, 0xbf, 0xcd, 0x8f, 0xde, 0x38, 0x28, 0x0e, 0x01, 0x76, 0x90, 0xa7, 0x3d, 0x81,
+ 0x6f, 0x78, 0x09, 0xd0, 0x11, 0x39, 0x0f, 0xfd, 0x2f, 0x98, 0x86, 0x6e, 0xa9, 0x95, 0x28, 0xec,
+ 0xff, 0xc1, 0xb1, 0x05, 0x3c, 0x11, 0x58, 0xcd, 0x68, 0x60, 0x4b, 0xad, 0x98, 0x51, 0xb8, 0x7f,
+ 0xcc, 0x71, 0x6d, 0x04, 0x82, 0x5c, 0x52, 0x4d, 0xab, 0x93, 0x7e, 0xff, 0x89, 0x40, 0x16, 0x08,
+ 0x84, 0x69, 0xf2, 0xff, 0x35, 0xbc, 0x1f, 0x85, 0xfb, 0x4d, 0xc1, 0x34, 0x87, 0x9f, 0x7b, 0x33,
+ 0xa4, 0xc8, 0xbf, 0xec, 0x3c, 0x5d, 0x04, 0xf2, 0xff, 0xe4, 0xc8, 0x0e, 0x06, 0x69, 0xd9, 0xb4,
+ 0xca, 0x96, 0x16, 0x2d, 0xec, 0xd7, 0xf9, 0x48, 0x0b, 0xf8, 0xb9, 0x2c, 0x0c, 0x98, 0x56, 0xb9,
+ 0xdc, 0xe4, 0xf1, 0x69, 0x04, 0xfa, 0xff, 0xfa, 0xb6, 0x9d, 0xb2, 0xb0, 0x71, 0xc8, 0x68, 0xdf,
+ 0xb8, 0x66, 0xd5, 0x0d, 0xba, 0xe1, 0x11, 0x45, 0xe1, 0x5b, 0x9c, 0x82, 0x0b, 0x65, 0x6e, 0x1e,
+ 0x06, 0x49, 0x5f, 0x1a, 0xb8, 0x8e, 0xe9, 0xee, 0x54, 0x04, 0x89, 0xff, 0xcd, 0x05, 0xe0, 0x41,
+ 0xca, 0xbd, 0xe3, 0x77, 0x5e, 0x9b, 0x92, 0xbe, 0xf8, 0xda, 0x94, 0xf4, 0x47, 0xaf, 0x4d, 0x49,
+ 0x3f, 0xf6, 0x95, 0xa9, 0x9e, 0x2f, 0x7e, 0x65, 0xaa, 0xe7, 0xf7, 0xbf, 0x32, 0xd5, 0x13, 0x9c,
+ 0x25, 0x86, 0x45, 0x63, 0xd1, 0x60, 0xf9, 0xe1, 0xe7, 0xe5, 0x8a, 0x66, 0xed, 0x36, 0xb7, 0x67,
+ 0x4b, 0x46, 0x8d, 0xa6, 0x71, 0x9d, 0x6c, 0xad, 0xbd, 0xc8, 0x81, 0xf7, 0xc4, 0x61, 0xb2, 0x64,
+ 0x98, 0x35, 0xc3, 0x2c, 0xb2, 0x7c, 0x2f, 0x2b, 0xf0, 0x8c, 0xef, 0xa0, 0xfb, 0x53, 0x07, 0x49,
+ 0xdf, 0x25, 0x18, 0xa6, 0x5d, 0xa7, 0xe9, 0x2e, 0xaa, 0x6d, 0x91, 0x06, 0xe2, 0xf3, 0xff, 0xae,
+ 0x97, 0xf6, 0x7a, 0xc8, 0x46, 0xa4, 0xbb, 0xf7, 0x9b, 0x30, 0xae, 0xd5, 0xea, 0x55, 0x4c, 0xd3,
+ 0xfc, 0x45, 0xfb, 0x5b, 0x34, 0xbd, 0x2f, 0x70, 0x7a, 0x63, 0x0e, 0x7a, 0x41, 0x60, 0xcf, 0x2d,
+ 0xc3, 0xa8, 0x5a, 0x2a, 0xe1, 0xba, 0x87, 0x64, 0xc4, 0xb0, 0x08, 0x06, 0xd3, 0x1c, 0xd3, 0xa6,
+ 0x96, 0xbb, 0x18, 0x36, 0x34, 0xcf, 0x3f, 0xe0, 0x92, 0x7c, 0x03, 0x57, 0xb0, 0xfe, 0x88, 0x8e,
+ 0xad, 0x1b, 0x46, 0xe3, 0x1a, 0x17, 0xef, 0x23, 0xac, 0xa9, 0x3e, 0x76, 0x82, 0x19, 0xde, 0x17,
+ 0x87, 0x29, 0xf6, 0xe1, 0xf4, 0xb6, 0x6a, 0xe2, 0xd3, 0xd7, 0x1f, 0xdb, 0xc6, 0x96, 0xfa, 0xd8,
+ 0xe9, 0x92, 0xa1, 0xe9, 0x7c, 0x24, 0xc6, 0xf8, 0xb8, 0x90, 0xef, 0xb3, 0xfc, 0x7b, 0x26, 0x30,
+ 0x4d, 0x2f, 0x2f, 0x42, 0x62, 0xde, 0xd0, 0x74, 0x34, 0x0e, 0xbd, 0x65, 0xac, 0x1b, 0x35, 0x7e,
+ 0xe6, 0x8e, 0x15, 0xd0, 0x7d, 0xd0, 0xa7, 0xd6, 0x8c, 0xa6, 0x6e, 0xb1, 0x1d, 0x8a, 0xdc, 0xc0,
+ 0xef, 0xdc, 0x9e, 0xee, 0xf9, 0x83, 0xdb, 0xd3, 0xf1, 0x82, 0x6e, 0x29, 0xfc, 0xd3, 0x5c, 0xe2,
+ 0x6b, 0xaf, 0x4e, 0x4b, 0xf2, 0x65, 0xe8, 0x5f, 0xc0, 0xa5, 0x83, 0xd0, 0x5a, 0xc0, 0x25, 0x1f,
+ 0xad, 0x07, 0x21, 0x59, 0xd0, 0x2d, 0x76, 0x2a, 0xf2, 0x1e, 0x88, 0x6b, 0x3a, 0x3b, 0x68, 0xe3,
+ 0x6b, 0x9f, 0xd4, 0x13, 0xd0, 0x05, 0x5c, 0xb2, 0x41, 0xcb, 0xb8, 0xe4, 0x07, 0x25, 0xe4, 0x49,
+ 0x7d, 0x6e, 0xe1, 0xf7, 0xff, 0xd3, 0x54, 0xcf, 0xcb, 0xaf, 0x4d, 0xf5, 0x84, 0x8e, 0x84, 0x7b,
+ 0x0e, 0x70, 0x11, 0xf3, 0x21, 0x30, 0xcb, 0xd7, 0xd8, 0x1e, 0x89, 0x3d, 0x0c, 0xbf, 0xd7, 0x07,
+ 0x32, 0x87, 0x31, 0x2d, 0xf5, 0x9a, 0xa6, 0x57, 0xec, 0x91, 0x50, 0x9b, 0xd6, 0xee, 0x4b, 0x7c,
+ 0x28, 0x0e, 0xf3, 0xa1, 0xe0, 0x30, 0xed, 0x47, 0x23, 0x13, 0x3e, 0xbb, 0x32, 0x11, 0x63, 0x2e,
+ 0xff, 0x8b, 0x38, 0xa0, 0x0d, 0x4b, 0xbd, 0x86, 0xb3, 0x4d, 0x6b, 0xd7, 0x68, 0x68, 0x2f, 0x31,
+ 0x5b, 0x86, 0x01, 0x6a, 0xea, 0x5e, 0xd1, 0x32, 0xae, 0x61, 0xdd, 0xa4, 0xa2, 0x19, 0x38, 0x33,
+ 0x39, 0x1b, 0xa0, 0x1f, 0xb3, 0x64, 0xe8, 0x72, 0x0f, 0x7d, 0xe6, 0xcb, 0xd3, 0x27, 0xa2, 0xa5,
+ 0x40, 0x81, 0x49, 0x70, 0xbd, 0xb7, 0x49, 0x09, 0xa3, 0xab, 0xc0, 0x0e, 0x59, 0x14, 0xab, 0x9a,
+ 0x69, 0xf1, 0x73, 0xda, 0x67, 0x67, 0x83, 0xfb, 0x3e, 0xdb, 0xca, 0xe6, 0xec, 0x55, 0xb5, 0xaa,
+ 0x95, 0x55, 0xcb, 0x68, 0x98, 0x4b, 0x3d, 0x4a, 0x8a, 0x92, 0x5a, 0xd6, 0x4c, 0x0b, 0x6d, 0x42,
+ 0xaa, 0x8c, 0xf5, 0x7d, 0x46, 0x36, 0xfe, 0xc6, 0xc8, 0x26, 0x09, 0x25, 0x4a, 0xf5, 0x39, 0x40,
+ 0xaa, 0x1b, 0x4e, 0x5c, 0x4c, 0x62, 0xe7, 0x2b, 0x43, 0xc8, 0x7b, 0x28, 0xd3, 0x7b, 0x14, 0xa3,
+ 0xaa, 0xbf, 0x2a, 0x73, 0x1c, 0xc0, 0x69, 0x13, 0x4d, 0x40, 0xbf, 0x5a, 0x2e, 0x37, 0xb0, 0x69,
+ 0xd2, 0x0d, 0xc0, 0x94, 0x22, 0x8a, 0x73, 0xa3, 0xff, 0xea, 0xb3, 0x8f, 0x0c, 0x79, 0x28, 0xe6,
+ 0x06, 0x01, 0xae, 0xdb, 0xa8, 0xa7, 0x3e, 0x26, 0xc1, 0x68, 0x4b, 0x8b, 0x48, 0x86, 0xa9, 0xec,
+ 0xd6, 0xe6, 0xd2, 0x9a, 0x52, 0x78, 0x3e, 0xbb, 0x59, 0x58, 0x5b, 0x2d, 0xb2, 0x23, 0xff, 0xab,
+ 0x1b, 0xeb, 0xf9, 0xf9, 0xc2, 0xa5, 0x42, 0x7e, 0x21, 0xdd, 0x83, 0xa6, 0xe1, 0x68, 0x00, 0xcc,
+ 0x42, 0x7e, 0x39, 0xbf, 0x98, 0xdd, 0xcc, 0xa7, 0x25, 0x74, 0x2f, 0xdc, 0x13, 0x48, 0xc4, 0x06,
+ 0x89, 0x85, 0x80, 0x28, 0x79, 0x1b, 0x24, 0x9e, 0xbb, 0x14, 0x3a, 0x8b, 0x1e, 0x6e, 0xab, 0x3f,
+ 0x7b, 0xf6, 0x74, 0xf1, 0xce, 0xa7, 0x1f, 0x88, 0xc1, 0xa4, 0xdf, 0x65, 0xa8, 0xfa, 0x7e, 0xc8,
+ 0xad, 0xcf, 0x10, 0x6b, 0xb6, 0x04, 0xf1, 0xac, 0xbe, 0x8f, 0x26, 0x59, 0x3c, 0x5d, 0x6c, 0x36,
+ 0xaa, 0xdc, 0x06, 0xf5, 0x93, 0xf2, 0x56, 0xa3, 0x4a, 0x6c, 0x93, 0x38, 0xe8, 0x2f, 0x9d, 0x1c,
+ 0xe4, 0xa7, 0xf7, 0xe7, 0xd2, 0xaf, 0xbc, 0x3a, 0xdd, 0xf3, 0x8b, 0xaf, 0x4e, 0xf7, 0x7c, 0xf3,
+ 0x13, 0xd3, 0x3d, 0x2f, 0xff, 0xe1, 0x4c, 0x4f, 0xee, 0x9a, 0xbf, 0x7b, 0x9f, 0x8b, 0xf4, 0xa6,
+ 0xc9, 0xac, 0xbe, 0x4f, 0x0d, 0xd1, 0xba, 0xf4, 0x7c, 0x2f, 0xed, 0x9c, 0xd8, 0x40, 0x9d, 0xf2,
+ 0x6f, 0xa0, 0x3e, 0x8b, 0xab, 0xd5, 0x2b, 0xba, 0x71, 0x83, 0x8e, 0xaa, 0x23, 0x83, 0x0f, 0xc5,
+ 0x60, 0xaa, 0xc5, 0x6d, 0xf2, 0x08, 0x23, 0xec, 0xfa, 0xeb, 0x1c, 0x24, 0x17, 0x44, 0xe0, 0x32,
+ 0x01, 0xfd, 0x26, 0x2e, 0x19, 0x7a, 0x99, 0xcd, 0xf4, 0xb8, 0x22, 0x8a, 0xa4, 0xdb, 0xba, 0xaa,
+ 0x1b, 0x26, 0x3f, 0x73, 0xcf, 0x0a, 0xb9, 0x9f, 0x94, 0xba, 0x8b, 0x17, 0x86, 0x44, 0x4b, 0xa2,
+ 0x9b, 0x8f, 0x45, 0x6e, 0x29, 0x5f, 0x23, 0xbd, 0xb4, 0x3b, 0xe1, 0xd9, 0x56, 0xee, 0x54, 0x2a,
+ 0x3f, 0x1e, 0x83, 0x69, 0xbf, 0x54, 0x48, 0xd8, 0x66, 0x5a, 0x6a, 0xad, 0x1e, 0x26, 0x96, 0x0b,
+ 0x90, 0xda, 0x14, 0x30, 0x5d, 0xcb, 0xe5, 0x56, 0x97, 0x72, 0x19, 0xb6, 0x9b, 0x12, 0x82, 0x39,
+ 0xd3, 0xa1, 0x60, 0xec, 0x7e, 0x1c, 0x48, 0x32, 0x9f, 0x49, 0xc0, 0x3d, 0xf4, 0x52, 0x56, 0xa3,
+ 0xa6, 0xe9, 0xd6, 0xe9, 0x52, 0x63, 0xbf, 0x6e, 0xd1, 0xc0, 0xcd, 0xd8, 0xe1, 0x72, 0x19, 0x75,
+ 0x3e, 0xcf, 0xb2, 0xcf, 0x21, 0x33, 0x67, 0x07, 0x7a, 0xd7, 0x09, 0x1e, 0x91, 0x88, 0x65, 0x58,
+ 0x6a, 0x95, 0x4b, 0x8a, 0x15, 0x48, 0x2d, 0xbb, 0xc8, 0x15, 0x63, 0xb5, 0x9a, 0xb8, 0xc3, 0x55,
+ 0xc5, 0xea, 0x0e, 0x3b, 0x0f, 0x1f, 0xa7, 0x13, 0x2a, 0x49, 0x2a, 0xe8, 0xd1, 0xf7, 0x71, 0xe8,
+ 0x55, 0x9b, 0xec, 0x28, 0x47, 0x9c, 0xcc, 0x34, 0x5a, 0x90, 0xaf, 0x40, 0x3f, 0xdf, 0x50, 0x46,
+ 0x69, 0x88, 0x5f, 0xc3, 0xfb, 0xb4, 0x9d, 0x41, 0x85, 0xfc, 0x8b, 0x66, 0xa1, 0x97, 0x32, 0xcf,
+ 0x1d, 0xc8, 0xc4, 0x6c, 0x0b, 0xf7, 0xb3, 0x94, 0x49, 0x85, 0x81, 0xc9, 0x97, 0x21, 0xb9, 0x60,
+ 0xd4, 0x34, 0xdd, 0xf0, 0x52, 0x4b, 0x31, 0x6a, 0x94, 0xe7, 0x7a, 0x93, 0xc7, 0x1b, 0x0a, 0x2b,
+ 0xa0, 0xc3, 0xd0, 0xc7, 0xee, 0x47, 0xf0, 0xe3, 0x28, 0xbc, 0x24, 0xcf, 0x43, 0x3f, 0xa5, 0xbd,
+ 0x56, 0x47, 0x88, 0xdf, 0xac, 0xe3, 0x17, 0x31, 0x68, 0x68, 0xca, 0xc9, 0xc7, 0x1c, 0x66, 0x11,
+ 0x24, 0xca, 0xaa, 0xa5, 0xf2, 0x7e, 0xd3, 0xff, 0xe5, 0xa7, 0x21, 0xc9, 0x89, 0x98, 0xe8, 0x0c,
+ 0xc4, 0x8d, 0xba, 0xc9, 0x0f, 0x94, 0x64, 0xc2, 0xba, 0xb2, 0x56, 0xcf, 0x25, 0x48, 0xa4, 0xa2,
+ 0x10, 0xe0, 0x9c, 0x12, 0x6a, 0x54, 0x9f, 0x72, 0x19, 0x55, 0xd7, 0x90, 0xbb, 0xfe, 0x65, 0x43,
+ 0xda, 0xa2, 0x0e, 0xb6, 0xb2, 0x7c, 0x22, 0x06, 0x53, 0xae, 0xaf, 0xd7, 0x71, 0xc3, 0xd4, 0x0c,
+ 0x9d, 0xfb, 0x73, 0xa6, 0x2d, 0xc8, 0xc5, 0x24, 0xff, 0x1e, 0xa2, 0x2e, 0x6f, 0x86, 0x78, 0xb6,
+ 0x5e, 0x47, 0x19, 0x48, 0xd2, 0x72, 0xc9, 0x60, 0xfa, 0x92, 0x50, 0xec, 0x32, 0xf9, 0x66, 0x1a,
+ 0x3b, 0xd6, 0x0d, 0xb5, 0x61, 0x5f, 0x21, 0x14, 0x65, 0xf9, 0x3c, 0xa4, 0xe6, 0x0d, 0xdd, 0xc4,
+ 0xba, 0xd9, 0xa4, 0x73, 0x70, 0xbb, 0x6a, 0x94, 0xae, 0x71, 0x0a, 0xac, 0x40, 0x04, 0xae, 0xd6,
+ 0xeb, 0x14, 0x33, 0xa1, 0x90, 0x7f, 0x59, 0x6c, 0x98, 0xdb, 0x08, 0x15, 0xd1, 0xf9, 0xee, 0x45,
+ 0xc4, 0x3b, 0x69, 0xcb, 0xe8, 0xcf, 0x24, 0x38, 0xd6, 0x3a, 0xa1, 0xae, 0xe1, 0x7d, 0xb3, 0xdb,
+ 0xf9, 0xf4, 0x1c, 0xa4, 0xd6, 0xe9, 0x3d, 0xfe, 0x2b, 0x78, 0x1f, 0x65, 0xa0, 0x1f, 0x97, 0xcf,
+ 0x9c, 0x3d, 0xfb, 0xd8, 0x79, 0xa6, 0xed, 0x4b, 0x3d, 0x8a, 0xa8, 0x40, 0x53, 0x90, 0x32, 0x71,
+ 0xa9, 0x7e, 0xe6, 0xec, 0xb9, 0x6b, 0x8f, 0x31, 0xf5, 0x22, 0x11, 0x90, 0x5d, 0x35, 0x97, 0x24,
+ 0xbd, 0xfe, 0xda, 0x27, 0xa6, 0xa5, 0x5c, 0x2f, 0xc4, 0xcd, 0x66, 0xed, 0xae, 0xea, 0xc8, 0x47,
+ 0x7a, 0x61, 0xc6, 0x8d, 0x49, 0x2d, 0x95, 0x1d, 0x95, 0x70, 0x19, 0xa4, 0x5d, 0x32, 0xa0, 0x10,
+ 0x21, 0xc1, 0x6c, 0x5b, 0x49, 0xca, 0xbf, 0x2c, 0xc1, 0xa0, 0x1d, 0x2a, 0x6d, 0x60, 0x0b, 0x5d,
+ 0x70, 0xc7, 0x3f, 0x7c, 0xda, 0x1c, 0x9d, 0xf5, 0xb7, 0xe5, 0x84, 0x74, 0x8a, 0x0b, 0x1c, 0x3d,
+ 0x49, 0x15, 0xb1, 0x6e, 0x98, 0xfc, 0x5a, 0x59, 0x04, 0xaa, 0x0d, 0x8c, 0x1e, 0x06, 0x44, 0x2d,
+ 0x5c, 0xf1, 0xba, 0x61, 0x69, 0x7a, 0xa5, 0x58, 0x37, 0x6e, 0xf0, 0xcb, 0xba, 0x71, 0x25, 0x4d,
+ 0xbf, 0x5c, 0xa5, 0x1f, 0xd6, 0x49, 0x3d, 0x61, 0x3a, 0x65, 0x53, 0xf1, 0x86, 0x77, 0xc4, 0x08,
+ 0x88, 0x22, 0xba, 0x00, 0xfd, 0xf5, 0xe6, 0x76, 0x51, 0x58, 0x8c, 0x81, 0x33, 0xc7, 0x82, 0xe6,
+ 0xbf, 0xd0, 0x0f, 0x6e, 0x01, 0xfa, 0xea, 0xcd, 0x6d, 0xa2, 0x2d, 0xf7, 0xc2, 0x60, 0x00, 0x33,
+ 0x03, 0xd7, 0x1d, 0x3e, 0xe8, 0xf3, 0x11, 0xbc, 0x07, 0xc5, 0x7a, 0x43, 0x33, 0x1a, 0x9a, 0xb5,
+ 0x4f, 0xe3, 0xd7, 0xb8, 0x92, 0x16, 0x1f, 0xd6, 0x79, 0xbd, 0x7c, 0x0d, 0x46, 0x36, 0xe8, 0xfa,
+ 0xd6, 0xe1, 0xfc, 0xac, 0xc3, 0x9f, 0x14, 0xcd, 0x5f, 0x28, 0x67, 0xb1, 0x16, 0xce, 0x72, 0xcf,
+ 0x84, 0x6a, 0xe7, 0x93, 0xdd, 0x6b, 0xa7, 0x37, 0x42, 0xfc, 0x93, 0x49, 0xcf, 0xe4, 0x64, 0xca,
+ 0xe9, 0x36, 0x5f, 0x9d, 0x2a, 0x66, 0x54, 0x34, 0x91, 0x69, 0xef, 0x54, 0x33, 0x11, 0x66, 0x34,
+ 0x13, 0x39, 0x85, 0xe4, 0xf3, 0x30, 0xb4, 0xae, 0x36, 0xac, 0x0d, 0x6c, 0x2d, 0x61, 0xb5, 0x8c,
+ 0x1b, 0x5e, 0xaf, 0x3b, 0x24, 0xbc, 0x2e, 0x82, 0x04, 0x75, 0xad, 0xcc, 0xeb, 0xd0, 0xff, 0xe5,
+ 0x5d, 0x48, 0xd0, 0x93, 0xa1, 0xb6, 0x47, 0xe6, 0x18, 0xcc, 0x23, 0x13, 0x5b, 0xba, 0x6f, 0x61,
+ 0x53, 0x84, 0xb7, 0xb4, 0x80, 0x9e, 0x10, 0x7e, 0x35, 0xde, 0xde, 0xaf, 0x72, 0x45, 0xe4, 0xde,
+ 0xb5, 0x0a, 0xfd, 0x39, 0x62, 0x8a, 0x0b, 0x0b, 0x36, 0x23, 0x92, 0xc3, 0x08, 0x5a, 0x81, 0x91,
+ 0xba, 0xda, 0xb0, 0xe8, 0x95, 0x98, 0x5d, 0xda, 0x0b, 0xae, 0xeb, 0xd3, 0xad, 0x33, 0xcf, 0xd3,
+ 0x59, 0xde, 0xca, 0x50, 0xdd, 0x5d, 0x29, 0xff, 0x97, 0x04, 0xf4, 0x71, 0x61, 0xbc, 0x19, 0xfa,
+ 0xb9, 0x58, 0xb9, 0x76, 0xde, 0x33, 0xdb, 0xea, 0x98, 0x66, 0x6d, 0x07, 0xc2, 0xe9, 0x09, 0x1c,
+ 0x74, 0x1c, 0x92, 0xa5, 0x5d, 0x55, 0xd3, 0x8b, 0x5a, 0x59, 0xa4, 0x1a, 0x5e, 0xbb, 0x3d, 0xdd,
+ 0x3f, 0x4f, 0xea, 0x0a, 0x0b, 0x4a, 0x3f, 0xfd, 0x58, 0x28, 0x93, 0x48, 0x60, 0x17, 0x6b, 0x95,
+ 0x5d, 0x8b, 0xcf, 0x30, 0x5e, 0x42, 0x4f, 0x41, 0x82, 0x28, 0x04, 0xbf, 0x30, 0x99, 0x69, 0x49,
+ 0xf8, 0xd8, 0xc1, 0x5e, 0x2e, 0x49, 0x1a, 0xfe, 0xb1, 0x2f, 0x4f, 0x4b, 0x0a, 0xc5, 0x40, 0xf3,
+ 0x30, 0x54, 0x55, 0x4d, 0xab, 0x48, 0x3d, 0x18, 0x69, 0xbe, 0x97, 0xaf, 0xb7, 0x5b, 0x04, 0xc2,
+ 0x05, 0xcb, 0x59, 0x1f, 0x20, 0x58, 0xac, 0xaa, 0x8c, 0x4e, 0x42, 0x9a, 0x12, 0x29, 0x19, 0xb5,
+ 0x9a, 0x66, 0xb1, 0xd8, 0xaa, 0x8f, 0xca, 0x7d, 0x98, 0xd4, 0xcf, 0xd3, 0x6a, 0x1a, 0x61, 0x1d,
+ 0x85, 0x14, 0xbd, 0xa2, 0x45, 0x41, 0xd8, 0x71, 0xe4, 0x24, 0xa9, 0xa0, 0x1f, 0x4f, 0xc0, 0x88,
+ 0x63, 0x1f, 0x19, 0x48, 0x92, 0x51, 0x71, 0xaa, 0x29, 0xe0, 0xa3, 0x30, 0xae, 0xe3, 0x3d, 0x7a,
+ 0x40, 0xda, 0x03, 0x9d, 0xa2, 0xd0, 0x88, 0x7c, 0xbb, 0xea, 0xc5, 0x78, 0x00, 0x86, 0x4b, 0x42,
+ 0xf8, 0x0c, 0x16, 0x28, 0xec, 0x90, 0x5d, 0x4b, 0xc1, 0x26, 0x21, 0xa9, 0xd6, 0xeb, 0x0c, 0x60,
+ 0x80, 0xdb, 0xc7, 0x7a, 0x9d, 0x7e, 0x3a, 0x05, 0xa3, 0xb4, 0x8f, 0x0d, 0x6c, 0x36, 0xab, 0x16,
+ 0x27, 0x32, 0x48, 0x61, 0x46, 0xc8, 0x07, 0x85, 0xd5, 0x53, 0xd8, 0xfb, 0x60, 0x08, 0x5f, 0xd7,
+ 0xca, 0x58, 0x2f, 0x61, 0x06, 0x37, 0x44, 0xe1, 0x06, 0x45, 0x25, 0x05, 0x7a, 0x10, 0x6c, 0xbb,
+ 0x57, 0x14, 0x36, 0x79, 0x98, 0xd1, 0x13, 0xf5, 0x59, 0x56, 0x2d, 0x4f, 0x40, 0x62, 0x41, 0xb5,
+ 0x54, 0x12, 0x60, 0x58, 0x7b, 0xcc, 0xd1, 0x0c, 0x2a, 0xe4, 0x5f, 0xf9, 0x6b, 0x31, 0x48, 0x5c,
+ 0x35, 0x2c, 0x8c, 0x1e, 0x77, 0x05, 0x80, 0xc3, 0x41, 0xfa, 0xbc, 0xa1, 0x55, 0x74, 0x5c, 0x5e,
+ 0x31, 0x2b, 0xae, 0xf7, 0x14, 0x1c, 0x75, 0x8a, 0x79, 0xd4, 0x69, 0x1c, 0x7a, 0x1b, 0x46, 0x53,
+ 0x2f, 0x8b, 0x93, 0xbc, 0xb4, 0x80, 0xf2, 0x90, 0xb4, 0xb5, 0x24, 0x11, 0xa5, 0x25, 0x23, 0x44,
+ 0x4b, 0x88, 0x0e, 0xf3, 0x0a, 0xa5, 0x7f, 0x9b, 0x2b, 0x4b, 0x0e, 0x52, 0xb6, 0xf1, 0xe2, 0xda,
+ 0xd6, 0x99, 0xc2, 0x3a, 0x68, 0xc4, 0x99, 0xd8, 0x63, 0x6f, 0x0b, 0x8f, 0x69, 0x5c, 0xda, 0xfe,
+ 0xc0, 0xa5, 0xe7, 0x51, 0x2b, 0xfe, 0xb6, 0x43, 0x3f, 0xed, 0x97, 0xa3, 0x56, 0xec, 0x7d, 0x87,
+ 0x63, 0x90, 0x32, 0xb5, 0x8a, 0xae, 0x5a, 0xcd, 0x06, 0xe6, 0x9a, 0xe7, 0x54, 0xc8, 0x9f, 0x93,
+ 0xa0, 0x8f, 0x69, 0xb2, 0x4b, 0x6e, 0x52, 0xb0, 0xdc, 0x62, 0x61, 0x72, 0x8b, 0x1f, 0x5c, 0x6e,
+ 0x59, 0x00, 0x9b, 0x19, 0x93, 0x5f, 0xb9, 0x0f, 0x88, 0x18, 0x18, 0x8b, 0x1b, 0x5a, 0x85, 0x4f,
+ 0x54, 0x17, 0x92, 0xfc, 0x1f, 0x25, 0x12, 0xc4, 0xf2, 0xef, 0x28, 0x0b, 0x43, 0x82, 0xaf, 0xe2,
+ 0x4e, 0x55, 0xad, 0x70, 0xdd, 0xb9, 0x27, 0x94, 0xb9, 0x4b, 0x55, 0xb5, 0xa2, 0x0c, 0x70, 0x7e,
+ 0x48, 0x21, 0x78, 0x1c, 0x62, 0x21, 0xe3, 0xe0, 0x19, 0xf8, 0xf8, 0xc1, 0x06, 0xde, 0x33, 0x44,
+ 0x09, 0xff, 0x10, 0xfd, 0x4a, 0x8c, 0x2e, 0x66, 0xea, 0x86, 0xa9, 0x56, 0xbf, 0x13, 0x33, 0xe2,
+ 0x28, 0xa4, 0xea, 0x46, 0xb5, 0xc8, 0xbe, 0xb0, 0x13, 0xee, 0xc9, 0xba, 0x51, 0x55, 0x5a, 0x86,
+ 0xbd, 0xf7, 0x0e, 0x4d, 0x97, 0xbe, 0x3b, 0x20, 0xb5, 0x7e, 0xbf, 0xd4, 0x1a, 0x30, 0xc8, 0x44,
+ 0xc1, 0x7d, 0xd9, 0xa3, 0x44, 0x06, 0xd4, 0x39, 0x4a, 0xad, 0xbe, 0x97, 0xb1, 0xcd, 0x20, 0x15,
+ 0x0e, 0x47, 0x30, 0x98, 0xe9, 0x0f, 0x5a, 0x05, 0xbb, 0xd5, 0x52, 0xe1, 0x70, 0xf2, 0x87, 0x25,
+ 0x80, 0x65, 0x22, 0x59, 0xda, 0x5f, 0xe2, 0x85, 0x4c, 0xca, 0x42, 0xd1, 0xd3, 0xf2, 0x54, 0xd8,
+ 0xa0, 0xf1, 0xf6, 0x07, 0x4d, 0x37, 0xdf, 0xf3, 0x30, 0xe4, 0x28, 0xa3, 0x89, 0x05, 0x33, 0x53,
+ 0x6d, 0xa2, 0xea, 0x0d, 0x6c, 0x29, 0x83, 0xd7, 0x5d, 0x25, 0xf9, 0x9f, 0x49, 0x90, 0xa2, 0x3c,
+ 0xad, 0x60, 0x4b, 0xf5, 0x8c, 0xa1, 0x74, 0xf0, 0x31, 0xbc, 0x07, 0x80, 0x91, 0x31, 0xb5, 0x97,
+ 0x30, 0xd7, 0xac, 0x14, 0xad, 0xd9, 0xd0, 0x5e, 0xc2, 0xe8, 0x9c, 0x2d, 0xf0, 0x78, 0x7b, 0x81,
+ 0x8b, 0xa8, 0x9b, 0x8b, 0xfd, 0x08, 0xf4, 0xd3, 0x27, 0xaa, 0xf6, 0x4c, 0x1e, 0x48, 0xf7, 0xe9,
+ 0xcd, 0xda, 0xe6, 0x9e, 0x29, 0xbf, 0x00, 0xfd, 0x9b, 0x7b, 0x2c, 0x37, 0x72, 0x14, 0x52, 0x0d,
+ 0xc3, 0xe0, 0x3e, 0x99, 0xc5, 0x42, 0x49, 0x52, 0x41, 0x5d, 0x90, 0xc8, 0x07, 0xc4, 0x9c, 0x7c,
+ 0x80, 0x93, 0xd0, 0x88, 0x77, 0x94, 0xd0, 0x38, 0xf5, 0xef, 0x25, 0x18, 0x70, 0xd9, 0x07, 0xf4,
+ 0x18, 0x1c, 0xca, 0x2d, 0xaf, 0xcd, 0x5f, 0x29, 0x16, 0x16, 0x8a, 0x97, 0x96, 0xb3, 0x8b, 0xce,
+ 0x1d, 0xae, 0xcc, 0xe1, 0x9b, 0xb7, 0x66, 0x90, 0x0b, 0x76, 0x4b, 0xa7, 0x19, 0x25, 0x74, 0x1a,
+ 0xc6, 0xbd, 0x28, 0xd9, 0xdc, 0x46, 0x7e, 0x75, 0x33, 0x2d, 0x65, 0x0e, 0xdd, 0xbc, 0x35, 0x33,
+ 0xea, 0xc2, 0xc8, 0x6e, 0x9b, 0x58, 0xb7, 0x5a, 0x11, 0xe6, 0xd7, 0x56, 0x56, 0x0a, 0x9b, 0xe9,
+ 0x58, 0x0b, 0x02, 0x37, 0xd8, 0x0f, 0xc2, 0xa8, 0x17, 0x61, 0xb5, 0xb0, 0x9c, 0x8e, 0x67, 0xd0,
+ 0xcd, 0x5b, 0x33, 0xc3, 0x2e, 0xe8, 0x55, 0xad, 0x9a, 0x49, 0xbe, 0xff, 0x93, 0x53, 0x3d, 0x9f,
+ 0xfe, 0xe9, 0x29, 0x89, 0xf4, 0x6c, 0xc8, 0x63, 0x23, 0xd0, 0xc3, 0x70, 0x64, 0xa3, 0xb0, 0xb8,
+ 0x9a, 0x5f, 0x28, 0xae, 0x6c, 0x2c, 0x8a, 0x1c, 0xb4, 0xe8, 0xdd, 0xc8, 0xcd, 0x5b, 0x33, 0x03,
+ 0xbc, 0x4b, 0x61, 0xd0, 0xeb, 0x4a, 0xfe, 0xea, 0xda, 0x66, 0x3e, 0x2d, 0x31, 0xe8, 0xf5, 0x06,
+ 0xbe, 0x6e, 0x58, 0xec, 0x0d, 0xbb, 0x47, 0x61, 0x32, 0x00, 0xda, 0xee, 0xd8, 0xe8, 0xcd, 0x5b,
+ 0x33, 0x43, 0xeb, 0x0d, 0xcc, 0xe6, 0x0f, 0xc5, 0x98, 0x85, 0x89, 0x56, 0x8c, 0xb5, 0xf5, 0xb5,
+ 0x8d, 0xec, 0x72, 0x7a, 0x26, 0x93, 0xbe, 0x79, 0x6b, 0x66, 0x50, 0x18, 0x43, 0x9a, 0xe8, 0xb7,
+ 0x7b, 0x76, 0x37, 0x57, 0x3c, 0xbf, 0xd7, 0xef, 0xc9, 0xef, 0xb1, 0xb5, 0x44, 0x5d, 0x6d, 0xa8,
+ 0xb5, 0x6e, 0x97, 0x3c, 0x11, 0x69, 0x65, 0xf9, 0x95, 0x18, 0x8c, 0xd8, 0x01, 0xf5, 0x3a, 0x6d,
+ 0x01, 0x9d, 0x77, 0xe7, 0x65, 0x06, 0x42, 0x5d, 0x19, 0x83, 0x16, 0x4b, 0x07, 0x96, 0xbc, 0xc9,
+ 0x41, 0x52, 0x84, 0x67, 0xdc, 0x70, 0xcc, 0xb4, 0x62, 0xe7, 0x39, 0x84, 0x87, 0x80, 0x8d, 0x87,
+ 0xf2, 0x90, 0xb2, 0x8d, 0x89, 0xfd, 0x22, 0x4c, 0xb8, 0xf5, 0xf1, 0x50, 0x71, 0x30, 0xd1, 0x45,
+ 0x67, 0x31, 0x91, 0x08, 0x5b, 0x9e, 0x5c, 0x65, 0x00, 0x1e, 0x12, 0x02, 0x4b, 0xc6, 0x7c, 0x4a,
+ 0x72, 0xa9, 0xd0, 0x9b, 0xf5, 0x7b, 0x45, 0xb6, 0xca, 0x62, 0x11, 0x4b, 0xb2, 0xa6, 0xee, 0xe5,
+ 0xe8, 0x42, 0xeb, 0x08, 0xf4, 0x93, 0x8f, 0x15, 0x7e, 0xf5, 0x38, 0xae, 0xf4, 0xd5, 0xd4, 0xbd,
+ 0x45, 0xd5, 0x44, 0x33, 0x30, 0x48, 0x3c, 0x48, 0x51, 0x33, 0x2c, 0xb5, 0x58, 0x33, 0xf9, 0x8a,
+ 0x03, 0x48, 0x5d, 0xc1, 0xb0, 0xd4, 0x15, 0x53, 0xfe, 0x59, 0x09, 0x86, 0xbd, 0x12, 0x41, 0x0f,
+ 0x01, 0x22, 0xd4, 0xd4, 0x0a, 0x2e, 0x12, 0xd3, 0x44, 0x45, 0x2b, 0xda, 0x1c, 0xa9, 0xa9, 0x7b,
+ 0xd9, 0x0a, 0x5e, 0x6d, 0xd6, 0x28, 0x73, 0x26, 0x5a, 0x81, 0xb4, 0x00, 0x16, 0x63, 0xcb, 0x45,
+ 0x3f, 0xd9, 0xfa, 0x8e, 0x1c, 0x07, 0x60, 0x0e, 0xee, 0x15, 0xe2, 0xe0, 0x86, 0x19, 0x3d, 0x7b,
+ 0x2b, 0xc1, 0xd3, 0xcd, 0xb8, 0xb7, 0x9b, 0xf2, 0x45, 0x18, 0xf1, 0xc9, 0x1d, 0xc9, 0x30, 0xc4,
+ 0x33, 0x0a, 0x74, 0x33, 0x4d, 0x6c, 0x78, 0x0d, 0xb0, 0xcc, 0x01, 0x4d, 0x5b, 0xcf, 0x25, 0x7f,
+ 0xed, 0xd5, 0x69, 0x89, 0x6e, 0xf0, 0xce, 0xc1, 0x90, 0x47, 0xe6, 0xf4, 0xde, 0x76, 0xbd, 0x5e,
+ 0x74, 0x2f, 0xfb, 0x12, 0x0a, 0xa8, 0xf5, 0x3a, 0x07, 0x73, 0xe1, 0x3e, 0x0f, 0x83, 0xc4, 0xde,
+ 0xe2, 0x32, 0x47, 0x3d, 0x0e, 0x23, 0xcc, 0x1f, 0xf8, 0x87, 0x85, 0x05, 0x64, 0x2b, 0x62, 0x6c,
+ 0x64, 0x11, 0xa1, 0x79, 0x47, 0x68, 0x40, 0x40, 0x2d, 0xaa, 0x66, 0x6e, 0xeb, 0xd3, 0xaf, 0x4d,
+ 0x49, 0x77, 0x6f, 0x3e, 0xdf, 0x5a, 0x82, 0xa3, 0xae, 0x8f, 0xea, 0x76, 0x49, 0xf3, 0x24, 0x30,
+ 0x46, 0x5c, 0x9a, 0x49, 0x3e, 0x46, 0x25, 0x22, 0xda, 0xa6, 0x43, 0xda, 0xe7, 0xdf, 0x32, 0xed,
+ 0x0d, 0x4b, 0x74, 0x8e, 0x24, 0x38, 0xed, 0xf9, 0xc1, 0x24, 0xf4, 0x2b, 0xf8, 0xc5, 0x26, 0x36,
+ 0x2d, 0x74, 0x06, 0x12, 0xb8, 0xb4, 0x6b, 0x04, 0x65, 0x98, 0x48, 0xe7, 0x66, 0x39, 0x5c, 0xbe,
+ 0xb4, 0x6b, 0x2c, 0xf5, 0x28, 0x14, 0x16, 0x9d, 0x85, 0xde, 0x9d, 0x6a, 0x93, 0xa7, 0x3c, 0x7c,
+ 0x36, 0xc7, 0x8d, 0x74, 0x89, 0x00, 0x2d, 0xf5, 0x28, 0x0c, 0x9a, 0x34, 0x45, 0x1f, 0xe9, 0x8c,
+ 0xb7, 0x6f, 0xaa, 0xa0, 0xef, 0xd0, 0xa6, 0x08, 0x2c, 0xca, 0x01, 0x98, 0xd8, 0x12, 0x37, 0xb0,
+ 0x13, 0xad, 0x06, 0xc6, 0x8d, 0xb9, 0x81, 0x2d, 0x76, 0xc4, 0x83, 0x25, 0x67, 0x79, 0x81, 0xd0,
+ 0xd0, 0x74, 0xcd, 0x2a, 0xd2, 0x94, 0x02, 0x0f, 0x4c, 0xef, 0x0d, 0x6f, 0x5d, 0xb3, 0x68, 0x12,
+ 0x82, 0xd0, 0xd0, 0x44, 0x81, 0x74, 0xf9, 0xc5, 0x26, 0x6e, 0xec, 0xf3, 0x78, 0x34, 0xb4, 0xcb,
+ 0xcf, 0x10, 0x20, 0xd2, 0x65, 0x0a, 0x8d, 0xf2, 0x30, 0x40, 0xef, 0x84, 0x32, 0xb3, 0xc0, 0x1f,
+ 0x9d, 0x94, 0xc3, 0x90, 0x73, 0x04, 0x94, 0x5a, 0x8a, 0xa5, 0x1e, 0x05, 0xb6, 0xed, 0x12, 0x7a,
+ 0x13, 0x24, 0xd9, 0xa3, 0x44, 0xd6, 0x1e, 0x7f, 0x6a, 0x6f, 0x3a, 0x8c, 0x06, 0x7d, 0x99, 0x68,
+ 0x73, 0x6f, 0xa9, 0x47, 0xe9, 0x2f, 0xb1, 0x7f, 0x49, 0xff, 0xcb, 0xb8, 0xaa, 0x5d, 0xc7, 0x0d,
+ 0x82, 0x9f, 0x6a, 0xdf, 0xff, 0x05, 0x06, 0x49, 0x29, 0xa4, 0xca, 0xa2, 0x80, 0x2e, 0x42, 0x0a,
+ 0xeb, 0x65, 0xde, 0x0d, 0x68, 0x75, 0x16, 0x1e, 0x5d, 0xd1, 0xcb, 0xa2, 0x13, 0x49, 0xcc, 0xff,
+ 0x47, 0x4f, 0xd9, 0x01, 0xf3, 0x40, 0x6b, 0x8c, 0xea, 0xe9, 0x00, 0x4b, 0x9d, 0xf4, 0x88, 0xc0,
+ 0x19, 0xad, 0xc2, 0x70, 0x55, 0x33, 0xad, 0xa2, 0xa9, 0xab, 0x75, 0x73, 0xd7, 0xb0, 0x4c, 0x9a,
+ 0x83, 0x18, 0x38, 0xf3, 0x40, 0x18, 0x85, 0x65, 0xcd, 0xb4, 0x36, 0x04, 0xf0, 0x52, 0x8f, 0x32,
+ 0x54, 0x75, 0x57, 0x10, 0x7a, 0xc6, 0xce, 0x0e, 0x6e, 0xd8, 0x04, 0x69, 0xae, 0xa2, 0x0d, 0xbd,
+ 0x35, 0x02, 0x2d, 0xf0, 0x09, 0x3d, 0xc3, 0x5d, 0x81, 0xde, 0x06, 0x63, 0x55, 0x43, 0x2d, 0xdb,
+ 0xe4, 0x8a, 0xa5, 0xdd, 0xa6, 0x7e, 0x8d, 0x26, 0x36, 0x06, 0xce, 0x3c, 0x18, 0xca, 0xa4, 0xa1,
+ 0x96, 0x05, 0x89, 0x79, 0x82, 0xb0, 0xd4, 0xa3, 0x8c, 0x56, 0xfd, 0x95, 0xe8, 0x9d, 0x30, 0xae,
+ 0xd6, 0xeb, 0xd5, 0x7d, 0x3f, 0xf5, 0x11, 0x4a, 0xfd, 0x54, 0x18, 0xf5, 0x2c, 0xc1, 0xf1, 0x93,
+ 0x47, 0x6a, 0x4b, 0x6d, 0xae, 0x9f, 0xef, 0xb4, 0xcb, 0x27, 0x60, 0xc0, 0x35, 0xd5, 0xd1, 0x04,
+ 0xf4, 0xf3, 0x73, 0xa7, 0x62, 0x6f, 0x9e, 0x17, 0xe5, 0x61, 0x18, 0x74, 0x4f, 0x6f, 0xb9, 0x66,
+ 0x23, 0xd2, 0x8b, 0xda, 0x13, 0xde, 0xb4, 0x60, 0xca, 0xc9, 0xf8, 0xdd, 0x27, 0x4c, 0xbb, 0xf8,
+ 0xce, 0x76, 0x8d, 0x06, 0x69, 0x25, 0xf7, 0x20, 0xc4, 0xc5, 0xd4, 0xcf, 0x38, 0x2e, 0x26, 0xce,
+ 0x5c, 0x4c, 0xfd, 0x8c, 0x70, 0x31, 0xf2, 0x1c, 0xa4, 0xfd, 0xb3, 0x3d, 0x78, 0x57, 0xd1, 0x39,
+ 0x40, 0x90, 0xe2, 0x07, 0x08, 0xe4, 0xdf, 0x8d, 0xd9, 0xc8, 0xf6, 0x34, 0xb7, 0x13, 0x89, 0x52,
+ 0xd7, 0x89, 0xc4, 0x49, 0x7f, 0x0a, 0xd3, 0xc9, 0x5a, 0x5e, 0x81, 0xb4, 0x93, 0x7c, 0x63, 0x26,
+ 0x9b, 0x9b, 0xbd, 0xd6, 0x59, 0xe3, 0x8b, 0xe8, 0x94, 0x91, 0x92, 0x2f, 0xc4, 0xbb, 0xe4, 0xd9,
+ 0x73, 0x11, 0xcf, 0x45, 0xfb, 0xc9, 0xd8, 0xbe, 0x7e, 0xab, 0x5e, 0x56, 0x2d, 0x2c, 0x72, 0x21,
+ 0xae, 0xed, 0x97, 0xe3, 0x30, 0x42, 0xdc, 0xb7, 0x69, 0xa9, 0x16, 0xe6, 0x3e, 0xb8, 0x97, 0xa5,
+ 0x04, 0xd5, 0x7a, 0x7d, 0x83, 0xd4, 0x32, 0x1f, 0xfc, 0x00, 0x0c, 0x13, 0xc3, 0xa7, 0xa9, 0xd5,
+ 0x22, 0xcf, 0x0c, 0xf4, 0x31, 0x57, 0xcd, 0x6b, 0x97, 0x68, 0xa5, 0x5c, 0xb6, 0x15, 0x81, 0x1a,
+ 0x3d, 0x7b, 0x69, 0x25, 0xb9, 0x96, 0x56, 0x88, 0xdf, 0xac, 0x67, 0xe2, 0x11, 0x8f, 0x11, 0x04,
+ 0x67, 0x74, 0xc7, 0xe9, 0x32, 0xec, 0x3a, 0x4b, 0x72, 0x24, 0x15, 0x56, 0x90, 0xdf, 0x17, 0x83,
+ 0xd1, 0x16, 0xf3, 0x18, 0x98, 0xea, 0x76, 0xd6, 0x94, 0xb1, 0xae, 0xd6, 0x94, 0x6b, 0xde, 0x54,
+ 0xae, 0xcb, 0x45, 0xb5, 0x1a, 0xd9, 0x65, 0x3b, 0xb7, 0x4b, 0x94, 0x9d, 0x13, 0x72, 0x65, 0x7c,
+ 0xe9, 0x14, 0x50, 0x60, 0x7c, 0x7b, 0xff, 0x25, 0x55, 0xb7, 0x34, 0x1d, 0x17, 0x5b, 0x46, 0x6e,
+ 0xb2, 0x85, 0xa8, 0x08, 0x28, 0x39, 0xb9, 0x31, 0x1b, 0xd9, 0xc9, 0xe8, 0xca, 0x0a, 0x0c, 0x7b,
+ 0x0d, 0x3c, 0x1a, 0x86, 0x98, 0xb5, 0xc7, 0x05, 0x10, 0xb3, 0xf6, 0xd0, 0xa3, 0x3c, 0xf9, 0x13,
+ 0xa3, 0xc9, 0x9f, 0x56, 0xef, 0xca, 0xf1, 0x9c, 0xcc, 0x8f, 0x2c, 0xdb, 0xb3, 0xc1, 0x36, 0xfa,
+ 0x7e, 0xaa, 0xf2, 0x83, 0x30, 0xe2, 0xb3, 0xea, 0x61, 0xa9, 0x40, 0x79, 0x04, 0x86, 0x3c, 0x26,
+ 0x5c, 0x3e, 0x0c, 0xe3, 0x41, 0x16, 0x59, 0xde, 0xb5, 0xeb, 0x3d, 0x96, 0x15, 0x9d, 0x85, 0xa4,
+ 0x6d, 0x92, 0x03, 0x52, 0x0f, 0xb4, 0x17, 0x02, 0x58, 0xb1, 0x41, 0x3d, 0x19, 0xec, 0x98, 0x27,
+ 0x83, 0x2d, 0x7f, 0x1f, 0x4c, 0x84, 0x99, 0x5b, 0x5f, 0x37, 0x12, 0xb6, 0x1a, 0x1e, 0x86, 0x3e,
+ 0xfe, 0x6c, 0x58, 0x8c, 0xee, 0xd9, 0xf0, 0x12, 0x51, 0x4f, 0x66, 0x7a, 0xe3, 0x6c, 0x2b, 0x87,
+ 0x16, 0xe4, 0x22, 0x4c, 0x86, 0x9a, 0xdc, 0xf0, 0xdd, 0x1f, 0x46, 0x88, 0xef, 0xfe, 0x94, 0x04,
+ 0x3b, 0x26, 0xed, 0xab, 0x38, 0xf1, 0xc0, 0x4a, 0xf2, 0x7f, 0x4e, 0x42, 0x52, 0xc1, 0x66, 0x9d,
+ 0xd8, 0x04, 0x94, 0x83, 0x14, 0xde, 0x2b, 0xe1, 0xba, 0xe5, 0xec, 0xba, 0x04, 0x05, 0x13, 0x0c,
+ 0x3a, 0x2f, 0x20, 0x89, 0x27, 0xb7, 0xd1, 0xd0, 0xe3, 0x3c, 0xe0, 0x0b, 0x8f, 0xdd, 0x38, 0xba,
+ 0x3b, 0xe2, 0x3b, 0x27, 0x22, 0xbe, 0x78, 0xa8, 0xf3, 0x66, 0x58, 0xbe, 0x90, 0xef, 0x71, 0x1e,
+ 0xf2, 0x25, 0x22, 0x1a, 0xf3, 0xc4, 0x7c, 0xf3, 0x9e, 0x98, 0xaf, 0x37, 0xa2, 0x9b, 0x21, 0x41,
+ 0xdf, 0xbc, 0x27, 0xe8, 0xeb, 0x8b, 0x20, 0x12, 0x12, 0xf5, 0x9d, 0x13, 0x51, 0x5f, 0x7f, 0x44,
+ 0xb7, 0x7d, 0x61, 0xdf, 0x25, 0x6f, 0xd8, 0xc7, 0x42, 0xb6, 0xfb, 0x42, 0xb1, 0x43, 0xe3, 0xbe,
+ 0x37, 0xbb, 0xe2, 0xbe, 0x54, 0x68, 0xd0, 0xc5, 0x88, 0x04, 0x04, 0x7e, 0xf3, 0x9e, 0xc0, 0x0f,
+ 0x22, 0x64, 0x10, 0x12, 0xf9, 0xbd, 0xc5, 0x1d, 0xf9, 0x0d, 0x84, 0x06, 0x8f, 0x5c, 0x69, 0x82,
+ 0x42, 0xbf, 0xf3, 0x76, 0xe8, 0x37, 0x18, 0x1a, 0xbb, 0xf2, 0x3e, 0xf8, 0x63, 0xbf, 0xb5, 0x96,
+ 0xd8, 0x6f, 0x88, 0x3f, 0x63, 0x1e, 0x46, 0x22, 0x22, 0xf8, 0x5b, 0x6b, 0x09, 0xfe, 0x86, 0x23,
+ 0x08, 0x46, 0x44, 0x7f, 0x6f, 0x0f, 0x8e, 0xfe, 0xc2, 0xe3, 0x33, 0xce, 0x66, 0x67, 0xe1, 0x5f,
+ 0x31, 0x24, 0xfc, 0x4b, 0x53, 0xf2, 0x0f, 0x85, 0x92, 0xef, 0x3e, 0xfe, 0x7b, 0x90, 0xb8, 0x59,
+ 0x9f, 0xe1, 0x20, 0xa6, 0x0a, 0x37, 0x1a, 0x46, 0x43, 0x9c, 0x11, 0xa7, 0x05, 0xf9, 0x24, 0x71,
+ 0xfc, 0x8e, 0x91, 0x68, 0x13, 0x2b, 0x52, 0x97, 0xe0, 0x32, 0x0c, 0xf2, 0xaf, 0x49, 0x0e, 0x2e,
+ 0xf5, 0x95, 0xee, 0xa0, 0x21, 0xc5, 0x83, 0x06, 0x57, 0x08, 0x19, 0xf3, 0x86, 0x90, 0xbe, 0x04,
+ 0x44, 0xdc, 0x9f, 0x80, 0xb0, 0xb7, 0x2c, 0x59, 0xa0, 0xc9, 0xed, 0x3b, 0xcb, 0x14, 0x8f, 0xd8,
+ 0xdb, 0xb7, 0x2c, 0x7e, 0x41, 0x8f, 0xc0, 0x98, 0x0b, 0xd6, 0x76, 0x21, 0x2c, 0x24, 0x4a, 0xdb,
+ 0xd0, 0x59, 0xee, 0x4b, 0x56, 0x1c, 0x01, 0x39, 0x91, 0x27, 0x82, 0x44, 0xc9, 0x28, 0x63, 0x6e,
+ 0xe0, 0xe9, 0xff, 0x24, 0x1a, 0xad, 0x1a, 0x15, 0x6e, 0xc6, 0xc9, 0xbf, 0x04, 0xca, 0xb6, 0x82,
+ 0x29, 0x66, 0xe4, 0xe4, 0xdf, 0x94, 0x1c, 0x7a, 0x4e, 0x30, 0x1a, 0x14, 0x37, 0x4a, 0x77, 0x26,
+ 0x6e, 0x8c, 0x1d, 0x38, 0x6e, 0x74, 0x3b, 0xd8, 0xb8, 0xd7, 0xc1, 0xfe, 0xa9, 0xe4, 0x8c, 0xb0,
+ 0x1d, 0x05, 0x1e, 0x4c, 0x22, 0x8e, 0xb7, 0xec, 0x75, 0x9f, 0x5e, 0xe4, 0xb1, 0x7d, 0x9f, 0x73,
+ 0xa4, 0xcf, 0x8e, 0xed, 0xfb, 0x5d, 0x87, 0x83, 0xd1, 0x53, 0x90, 0xa2, 0x49, 0x97, 0xa2, 0x51,
+ 0x17, 0xcf, 0xd1, 0x1f, 0x0d, 0x3f, 0xce, 0x67, 0xd2, 0xc3, 0x45, 0xec, 0x08, 0xa0, 0x13, 0x08,
+ 0xa4, 0x3c, 0xf1, 0xe8, 0x31, 0x48, 0x11, 0xee, 0xd9, 0xb3, 0xaa, 0xc0, 0x2f, 0x32, 0x89, 0x0a,
+ 0xf9, 0x9d, 0x80, 0x5a, 0xcd, 0x37, 0x5a, 0x82, 0x3e, 0x7c, 0x9d, 0xbe, 0x72, 0xc5, 0x8e, 0x46,
+ 0x1d, 0x0e, 0x08, 0xf6, 0xb0, 0x6e, 0xe5, 0x26, 0x88, 0x90, 0xbf, 0x7e, 0x7b, 0x3a, 0xcd, 0xa0,
+ 0x1f, 0x36, 0x6a, 0x9a, 0x85, 0x6b, 0x75, 0x6b, 0x5f, 0xe1, 0xf8, 0xf2, 0x1f, 0xc6, 0x48, 0xe4,
+ 0xe5, 0x31, 0xed, 0x81, 0xb2, 0x0d, 0xda, 0xd0, 0xe8, 0x4c, 0xde, 0x53, 0x00, 0x15, 0xd5, 0x2c,
+ 0xde, 0x50, 0x75, 0x0b, 0x97, 0xb9, 0xd0, 0x5d, 0x35, 0x28, 0x03, 0x49, 0x52, 0x6a, 0x9a, 0xb8,
+ 0xcc, 0x17, 0x00, 0x76, 0xd9, 0xd5, 0xcf, 0xfe, 0x37, 0xd6, 0x4f, 0xaf, 0x94, 0x93, 0x3e, 0x29,
+ 0xbb, 0xa2, 0xa2, 0x94, 0x3b, 0x2a, 0x62, 0x47, 0x1a, 0xf9, 0x89, 0x2a, 0x60, 0xbc, 0x89, 0x32,
+ 0x59, 0x67, 0xd6, 0x70, 0xad, 0x6e, 0x18, 0xd5, 0x22, 0x33, 0x5e, 0xec, 0xfd, 0xe4, 0x41, 0x5e,
+ 0x99, 0xa7, 0x36, 0xec, 0x07, 0x63, 0xce, 0xf4, 0x73, 0xa2, 0xdf, 0xbf, 0x72, 0x02, 0x96, 0x7f,
+ 0x98, 0x2e, 0x89, 0xbd, 0xce, 0x1b, 0x6d, 0xb8, 0xf7, 0xb8, 0x9b, 0xd4, 0x2c, 0x08, 0x85, 0xee,
+ 0xd4, 0x7e, 0x38, 0x7b, 0xe1, 0xac, 0xda, 0x44, 0xcf, 0xc1, 0x11, 0x9f, 0x69, 0xb3, 0x49, 0xc7,
+ 0x3a, 0xb4, 0x70, 0x87, 0xbc, 0x16, 0x4e, 0x50, 0x76, 0x64, 0x15, 0x7f, 0x83, 0x93, 0xae, 0x40,
+ 0x56, 0x59, 0xee, 0x50, 0x24, 0x70, 0xf4, 0xe9, 0x73, 0xfd, 0x16, 0x59, 0xf8, 0x7b, 0xd6, 0xb1,
+ 0x83, 0xac, 0x92, 0xaf, 0x8e, 0xd7, 0xe1, 0x50, 0x60, 0x48, 0x82, 0x9e, 0x84, 0x94, 0x13, 0xcd,
+ 0x48, 0x21, 0x4b, 0x42, 0x7b, 0x99, 0xe3, 0xc0, 0xca, 0xff, 0x44, 0x72, 0x48, 0x7a, 0x17, 0x4e,
+ 0x79, 0xe8, 0x63, 0x67, 0x74, 0xf8, 0xce, 0xff, 0x23, 0x9d, 0x05, 0x33, 0xb3, 0xec, 0x00, 0x8f,
+ 0xc2, 0x91, 0xe5, 0x77, 0x42, 0x1f, 0xab, 0x41, 0x03, 0xd0, 0xef, 0xbc, 0x43, 0x09, 0xd0, 0x97,
+ 0x9d, 0x9f, 0xcf, 0xaf, 0x6f, 0xa6, 0x25, 0x94, 0x82, 0xde, 0x6c, 0x6e, 0x4d, 0xd9, 0x4c, 0xc7,
+ 0x48, 0xb5, 0x92, 0xbf, 0x9c, 0x9f, 0xdf, 0x4c, 0xc7, 0xd1, 0x28, 0x0c, 0xb1, 0xff, 0x8b, 0x97,
+ 0xd6, 0x94, 0x95, 0xec, 0x66, 0x3a, 0xe1, 0xaa, 0xda, 0xc8, 0xaf, 0x2e, 0xe4, 0x95, 0x74, 0xaf,
+ 0xfc, 0x18, 0x59, 0x2b, 0x85, 0x84, 0x3f, 0xce, 0xaa, 0x48, 0x72, 0xad, 0x8a, 0xe4, 0x57, 0x62,
+ 0x90, 0x09, 0x8f, 0x69, 0xd0, 0x65, 0x5f, 0xc7, 0xcf, 0x74, 0x11, 0x10, 0xf9, 0x7a, 0x8f, 0x1e,
+ 0x80, 0xe1, 0x06, 0xde, 0xc1, 0x56, 0x69, 0x97, 0xc5, 0x58, 0xcc, 0x63, 0x0e, 0x29, 0x43, 0xbc,
+ 0x96, 0x22, 0x99, 0x0c, 0xec, 0x05, 0x5c, 0xb2, 0x8a, 0xcc, 0x14, 0x99, 0xfc, 0x77, 0xc3, 0x86,
+ 0x58, 0xed, 0x06, 0xab, 0x94, 0xbf, 0xaf, 0x2b, 0x59, 0xa6, 0xa0, 0x57, 0xc9, 0x6f, 0x2a, 0x6f,
+ 0x4d, 0xc7, 0x11, 0x82, 0x61, 0xfa, 0x6f, 0x71, 0x63, 0x35, 0xbb, 0xbe, 0xb1, 0xb4, 0x46, 0x64,
+ 0x39, 0x06, 0x23, 0x42, 0x96, 0xa2, 0xb2, 0x57, 0xfe, 0x73, 0xa9, 0x75, 0x33, 0xf0, 0x8c, 0x77,
+ 0x33, 0xb0, 0x35, 0x09, 0xe0, 0xda, 0x23, 0x13, 0xbb, 0x80, 0x6f, 0xea, 0x7e, 0x17, 0xd0, 0xb5,
+ 0xff, 0x77, 0xf1, 0x20, 0xfb, 0x7f, 0xee, 0x9d, 0xbf, 0xf3, 0xdd, 0xee, 0xfc, 0x39, 0x7b, 0x7e,
+ 0xf3, 0x77, 0x60, 0xcf, 0x4f, 0x7e, 0x07, 0x0c, 0x7b, 0x93, 0x3a, 0xce, 0xc1, 0x17, 0xc9, 0x7d,
+ 0xf0, 0xe5, 0x2c, 0xf4, 0x5e, 0x37, 0x98, 0xb1, 0x0a, 0x9e, 0xb2, 0x57, 0x0d, 0x0b, 0xbb, 0x92,
+ 0x42, 0x0c, 0x5a, 0x7e, 0x09, 0x7a, 0xa9, 0xf1, 0x09, 0xbc, 0xae, 0xf0, 0x0e, 0x00, 0xd5, 0xb2,
+ 0x1a, 0xda, 0x76, 0xd3, 0x21, 0x3c, 0x1d, 0x6c, 0xbc, 0xb2, 0x02, 0x2e, 0x77, 0x8c, 0x5b, 0xb1,
+ 0x71, 0x07, 0xd5, 0x65, 0xc9, 0x5c, 0x04, 0xe5, 0x55, 0x18, 0xf6, 0xe2, 0x06, 0x5c, 0xe6, 0x08,
+ 0xbc, 0x69, 0xe5, 0x84, 0x62, 0xfc, 0xb2, 0x3d, 0x2d, 0xc8, 0x37, 0x25, 0x48, 0x6e, 0xee, 0x71,
+ 0xb5, 0x6e, 0x73, 0x20, 0xcc, 0xb9, 0x83, 0x62, 0xe7, 0x3c, 0x58, 0x5a, 0x29, 0x6e, 0x27, 0xab,
+ 0xde, 0x62, 0x4f, 0xdc, 0x44, 0xa7, 0xab, 0x52, 0x91, 0xb5, 0xe3, 0xc6, 0xea, 0x42, 0x67, 0x67,
+ 0xbc, 0xc7, 0xa1, 0xd7, 0x7d, 0x3e, 0x9b, 0x15, 0xe4, 0xb2, 0x6b, 0x6b, 0x94, 0x79, 0x11, 0xf7,
+ 0x61, 0x70, 0xa9, 0xeb, 0xc3, 0xe0, 0x76, 0x2b, 0x31, 0x77, 0x2b, 0xd7, 0x21, 0x29, 0x94, 0x02,
+ 0x3d, 0xed, 0x9e, 0x27, 0x22, 0xd5, 0x1c, 0xea, 0x4a, 0x5b, 0x37, 0xc8, 0x4f, 0xc1, 0x28, 0x3f,
+ 0x2e, 0xe4, 0xac, 0x59, 0xf8, 0xc3, 0xd9, 0x23, 0xec, 0xc3, 0xb2, 0x58, 0xb0, 0xc8, 0x7f, 0x26,
+ 0x41, 0x52, 0x4c, 0x58, 0xf4, 0x98, 0xe7, 0x4c, 0xd8, 0x3d, 0xa1, 0xc9, 0x47, 0xd7, 0x89, 0x30,
+ 0x0f, 0xaf, 0xb1, 0xee, 0x79, 0xbd, 0xf3, 0x47, 0x76, 0x83, 0xcf, 0xff, 0xf7, 0x86, 0x9c, 0xff,
+ 0x7f, 0x8f, 0x04, 0x49, 0xdb, 0x37, 0x76, 0x9b, 0xe6, 0x3b, 0x0c, 0x7d, 0xdc, 0xfc, 0xb3, 0x3c,
+ 0x1f, 0x2f, 0xd9, 0x19, 0xe7, 0x84, 0x2b, 0xe3, 0x9c, 0x81, 0xa4, 0xf8, 0x05, 0x06, 0xbe, 0x6c,
+ 0xb4, 0xcb, 0xa7, 0xce, 0xc3, 0x80, 0x2b, 0xe3, 0x4a, 0x66, 0xde, 0x6a, 0xfe, 0xd9, 0x74, 0x4f,
+ 0xa6, 0xff, 0xe6, 0xad, 0x99, 0xf8, 0x2a, 0xbe, 0x41, 0x74, 0x56, 0xc9, 0xcf, 0x2f, 0xe5, 0xe7,
+ 0xaf, 0xa4, 0xa5, 0xcc, 0xc0, 0xcd, 0x5b, 0x33, 0xfd, 0x0a, 0xa6, 0x89, 0x9b, 0x53, 0x4b, 0x30,
+ 0xe8, 0x1e, 0x15, 0xaf, 0x07, 0x41, 0x30, 0xbc, 0xb0, 0xb5, 0xbe, 0x5c, 0x98, 0xcf, 0x6e, 0xe6,
+ 0x8b, 0xec, 0x64, 0x0d, 0x3a, 0x02, 0x63, 0xcb, 0x85, 0xc5, 0xa5, 0xcd, 0xe2, 0xfc, 0x72, 0x21,
+ 0xbf, 0xba, 0x59, 0xcc, 0x6e, 0x6e, 0x66, 0xe7, 0xaf, 0xa4, 0x63, 0x67, 0xde, 0x0b, 0x30, 0x92,
+ 0xcd, 0xcd, 0x17, 0x88, 0xf7, 0xd3, 0xf8, 0x1b, 0xc1, 0xf3, 0x90, 0xa0, 0xab, 0xf6, 0xb6, 0x5b,
+ 0xbd, 0x99, 0xf6, 0x79, 0x41, 0x74, 0x09, 0x7a, 0xe9, 0x82, 0x1e, 0xb5, 0xdf, 0xfb, 0xcd, 0x44,
+ 0x24, 0x0a, 0x09, 0x33, 0x74, 0x7a, 0xb4, 0xdd, 0x0c, 0xce, 0xb4, 0xcf, 0x1b, 0x22, 0x05, 0x52,
+ 0xce, 0x8a, 0x3c, 0x7a, 0x73, 0x38, 0xd3, 0x41, 0x2e, 0x91, 0xd0, 0x74, 0x96, 0x05, 0xd1, 0x9b,
+ 0xa5, 0x99, 0x0e, 0x0c, 0x18, 0x5a, 0x86, 0x7e, 0xb1, 0x92, 0x8b, 0xda, 0xbe, 0xcd, 0x44, 0xe6,
+ 0xf9, 0xc8, 0x10, 0xb0, 0x15, 0x77, 0xfb, 0xbd, 0xe8, 0x4c, 0x44, 0xd2, 0x12, 0x15, 0xec, 0x33,
+ 0xbe, 0x11, 0x5b, 0xb2, 0x99, 0xa8, 0xbc, 0x1d, 0x11, 0x9a, 0x93, 0xca, 0x88, 0xde, 0x61, 0xcf,
+ 0x74, 0x90, 0x8f, 0x45, 0x5b, 0x00, 0xae, 0xf5, 0x75, 0x07, 0x5b, 0xe7, 0x99, 0x4e, 0xf2, 0xac,
+ 0x68, 0x0d, 0x92, 0xf6, 0x72, 0x27, 0x72, 0x23, 0x3b, 0x13, 0x9d, 0xf0, 0x44, 0xef, 0x84, 0x21,
+ 0x6f, 0x9c, 0xdf, 0xd9, 0xf6, 0x74, 0xa6, 0xc3, 0x4c, 0x26, 0xa1, 0xef, 0x0d, 0xfa, 0x3b, 0xdb,
+ 0xae, 0xce, 0x74, 0x98, 0xd8, 0x44, 0x2f, 0xc0, 0x68, 0x6b, 0x50, 0xde, 0xf9, 0xee, 0x75, 0xa6,
+ 0x8b, 0x54, 0x27, 0xaa, 0x01, 0x0a, 0x08, 0xe6, 0xbb, 0xd8, 0xcc, 0xce, 0x74, 0x93, 0xf9, 0xcc,
+ 0xe5, 0x43, 0xcf, 0x0a, 0x3d, 0x14, 0x79, 0x56, 0xc8, 0x39, 0xfd, 0x63, 0x9f, 0x0f, 0xfa, 0xcd,
+ 0x0b, 0x70, 0x7f, 0xc8, 0x9b, 0x12, 0xe2, 0x35, 0x82, 0x03, 0xbd, 0x2a, 0x11, 0x7a, 0xaf, 0x3e,
+ 0xea, 0x5c, 0x60, 0xf4, 0x31, 0xa0, 0x83, 0xbf, 0x58, 0x11, 0x71, 0x7a, 0xa9, 0xdd, 0x41, 0x29,
+ 0xf9, 0x03, 0x12, 0x0c, 0x2f, 0x69, 0xa6, 0x65, 0x34, 0xb4, 0x92, 0x5a, 0xa5, 0xa6, 0xfa, 0x5c,
+ 0xa7, 0x07, 0xad, 0x7d, 0x7b, 0xb4, 0x17, 0xa1, 0xef, 0xba, 0x5a, 0x65, 0x27, 0x9c, 0xe3, 0x74,
+ 0x8d, 0x11, 0xf2, 0xfe, 0x83, 0x3f, 0x2c, 0xe1, 0x68, 0xf2, 0x2f, 0xd0, 0xa3, 0x93, 0xb5, 0x9a,
+ 0x66, 0xb2, 0xdf, 0x23, 0x25, 0x6b, 0x82, 0x1c, 0x24, 0x1a, 0xaa, 0xc5, 0x43, 0xf2, 0xdc, 0x2c,
+ 0x7f, 0x8a, 0xe4, 0x78, 0x07, 0x0f, 0x6b, 0x2c, 0xe0, 0x92, 0x42, 0x71, 0xd1, 0xdb, 0x81, 0xac,
+ 0x31, 0x8a, 0x94, 0x0e, 0xbb, 0xc6, 0x94, 0xed, 0x8e, 0xce, 0xeb, 0xb7, 0xa7, 0x47, 0xf6, 0xd5,
+ 0x5a, 0x75, 0x4e, 0x16, 0x74, 0x64, 0x85, 0x2c, 0x55, 0x08, 0x8b, 0xa8, 0x0e, 0x23, 0xa4, 0xb6,
+ 0xb4, 0xab, 0xea, 0x15, 0xcc, 0x1a, 0xa1, 0x39, 0xa7, 0xdc, 0x52, 0xd7, 0x8d, 0x1c, 0x76, 0x1a,
+ 0x71, 0x91, 0x93, 0x95, 0xa1, 0x9a, 0xba, 0x37, 0x4f, 0x2b, 0x48, 0x8b, 0x73, 0xc9, 0x57, 0x5e,
+ 0x9d, 0xee, 0xa1, 0x27, 0xf8, 0xbe, 0x24, 0x01, 0x38, 0x12, 0x43, 0x6f, 0x87, 0x74, 0xc9, 0x2e,
+ 0x51, 0x5c, 0x91, 0x99, 0x3e, 0x11, 0x36, 0x16, 0x3e, 0x79, 0xb3, 0xa8, 0xee, 0x8b, 0xb7, 0xa7,
+ 0x25, 0x65, 0xa4, 0xe4, 0x1b, 0x8a, 0xb7, 0xc1, 0x00, 0x4b, 0x06, 0x15, 0x69, 0x84, 0x18, 0x8b,
+ 0x8c, 0x10, 0xa7, 0x08, 0xad, 0xd7, 0x6f, 0x4f, 0x23, 0xd6, 0x2d, 0x17, 0xb2, 0x4c, 0xe3, 0x46,
+ 0x60, 0x35, 0x04, 0xc1, 0xd5, 0xa7, 0xcf, 0x4b, 0x30, 0xb0, 0xe0, 0x7a, 0x60, 0x71, 0x02, 0xfa,
+ 0x6b, 0x86, 0xae, 0x5d, 0xc3, 0x0d, 0x7b, 0xe7, 0x82, 0x15, 0x49, 0x68, 0xc7, 0x7e, 0xd9, 0xc2,
+ 0xda, 0x17, 0xf7, 0xa2, 0x45, 0x99, 0x60, 0xdd, 0xc0, 0xdb, 0xa6, 0x26, 0x46, 0x43, 0x11, 0x45,
+ 0x74, 0x09, 0xd2, 0x26, 0x2e, 0x35, 0x1b, 0x9a, 0xb5, 0x5f, 0x2c, 0x19, 0xba, 0xa5, 0x96, 0xd8,
+ 0x02, 0x27, 0x95, 0x3b, 0xfa, 0xfa, 0xed, 0xe9, 0x23, 0x8c, 0x57, 0x3f, 0x84, 0xac, 0x8c, 0x88,
+ 0xaa, 0x79, 0x56, 0x43, 0x5a, 0x28, 0x63, 0x4b, 0xd5, 0xaa, 0xec, 0x84, 0x46, 0x4a, 0x11, 0x45,
+ 0x57, 0x5f, 0x7e, 0x2e, 0xe5, 0x5e, 0x01, 0x5d, 0x82, 0xb4, 0x51, 0xc7, 0x0d, 0xcf, 0xad, 0x14,
+ 0xc9, 0xdf, 0xb2, 0x1f, 0x42, 0x56, 0x46, 0x44, 0x95, 0xb8, 0xb1, 0x62, 0x79, 0x36, 0x20, 0x9a,
+ 0xdb, 0xce, 0xe5, 0xd8, 0xf1, 0x96, 0xd1, 0xc8, 0xea, 0xfb, 0xb9, 0xc7, 0x1d, 0xea, 0x7e, 0x3c,
+ 0xf9, 0x0b, 0x9f, 0x7d, 0x64, 0x9c, 0xab, 0x86, 0xb3, 0x7e, 0xba, 0x82, 0xf7, 0xdd, 0x3b, 0x15,
+ 0x14, 0x92, 0x04, 0xdd, 0x2f, 0xa8, 0x5a, 0x55, 0xfc, 0xd6, 0x8f, 0xc2, 0x4b, 0x68, 0x0e, 0xfa,
+ 0x4c, 0x4b, 0xb5, 0x9a, 0x26, 0x7f, 0xf6, 0x45, 0x0e, 0x53, 0xb5, 0x9c, 0xa1, 0x97, 0x37, 0x28,
+ 0xa4, 0xc2, 0x31, 0xd0, 0x25, 0xe8, 0xe3, 0xef, 0xe9, 0xf4, 0x76, 0x3d, 0xbf, 0xe9, 0xc3, 0x49,
+ 0x0c, 0x9b, 0x48, 0xa4, 0x8c, 0xab, 0xb8, 0xc2, 0xee, 0x58, 0xec, 0xaa, 0x0d, 0xcc, 0xee, 0x5d,
+ 0xa5, 0x72, 0x85, 0xae, 0x27, 0x21, 0x97, 0x94, 0x9f, 0x9e, 0xac, 0x8c, 0xd8, 0x55, 0x1b, 0xb4,
+ 0x06, 0x5d, 0xf1, 0xbc, 0x04, 0xca, 0xf7, 0x9f, 0xef, 0x0b, 0xeb, 0xbe, 0x4b, 0xa7, 0xc5, 0x65,
+ 0x45, 0xf7, 0x3b, 0xa2, 0x97, 0x20, 0xdd, 0xd4, 0xb7, 0x0d, 0x9d, 0xfe, 0x20, 0x07, 0x5f, 0x0d,
+ 0x25, 0xc9, 0xe2, 0xc9, 0xad, 0x1c, 0x7e, 0x08, 0x59, 0x19, 0xb1, 0xab, 0xf8, 0x8e, 0x59, 0x19,
+ 0x86, 0x1d, 0x28, 0x3a, 0x51, 0x53, 0x91, 0x13, 0xf5, 0x5e, 0x3e, 0x51, 0x0f, 0xf9, 0x5b, 0x71,
+ 0xe6, 0xea, 0x90, 0x5d, 0x49, 0xd0, 0xd0, 0x12, 0x80, 0x63, 0x1e, 0xec, 0x5d, 0xeb, 0x48, 0x1b,
+ 0x23, 0x36, 0xae, 0x1c, 0x5c, 0xf4, 0x26, 0x38, 0xea, 0xb4, 0x67, 0xe8, 0xc5, 0x5d, 0xa3, 0x5a,
+ 0x2e, 0x36, 0xf0, 0x4e, 0xb1, 0x44, 0x5f, 0xb8, 0x1a, 0xa4, 0xeb, 0xc7, 0x23, 0x36, 0xc8, 0x9a,
+ 0xbe, 0x64, 0x54, 0xcb, 0x0a, 0xde, 0x99, 0x27, 0x9f, 0xd1, 0x7d, 0xe0, 0x30, 0x56, 0xd4, 0xca,
+ 0xe6, 0xc4, 0xd0, 0x4c, 0xfc, 0x64, 0x42, 0x19, 0xb4, 0x2b, 0x0b, 0x65, 0x13, 0x7d, 0x48, 0x82,
+ 0xa3, 0x7c, 0x69, 0x6a, 0x67, 0xcc, 0xc9, 0x67, 0xa1, 0x29, 0xc3, 0x54, 0x53, 0x36, 0xbb, 0xd6,
+ 0x14, 0x99, 0x89, 0xab, 0x0d, 0x69, 0x59, 0x99, 0x60, 0x2b, 0x5f, 0xdb, 0xe3, 0x91, 0x39, 0xc0,
+ 0xb4, 0xe7, 0x5d, 0x30, 0xc6, 0x30, 0xab, 0xda, 0x8b, 0x4d, 0xcd, 0x66, 0x66, 0x84, 0x32, 0xb3,
+ 0xdc, 0x35, 0x33, 0x19, 0x37, 0x33, 0x1e, 0x92, 0xb2, 0x32, 0x4a, 0x6b, 0x97, 0x69, 0x25, 0x6b,
+ 0x7d, 0x6e, 0xf0, 0xfd, 0xaf, 0x4e, 0xf7, 0x70, 0x3b, 0xd5, 0x73, 0x39, 0x91, 0x1c, 0x48, 0x0f,
+ 0xca, 0xe7, 0xe8, 0x3b, 0x02, 0xdc, 0xca, 0x60, 0xba, 0x2b, 0xa1, 0x8a, 0x02, 0x3f, 0x85, 0xee,
+ 0x54, 0x30, 0x2b, 0xf7, 0xf2, 0x1f, 0xce, 0x48, 0xf2, 0xcf, 0x4b, 0xd0, 0xb7, 0x70, 0x75, 0x5d,
+ 0xd5, 0x1a, 0xa8, 0x00, 0xa3, 0xce, 0xc4, 0xf1, 0xda, 0xb8, 0x63, 0xaf, 0xdf, 0x9e, 0x9e, 0xf0,
+ 0xcf, 0x2d, 0xdb, 0xc8, 0x39, 0xf3, 0x57, 0x58, 0xb9, 0x42, 0xd8, 0x25, 0x3e, 0x0f, 0xa9, 0x16,
+ 0x10, 0xb9, 0xf5, 0x8a, 0x9f, 0xb7, 0xb3, 0x72, 0x1e, 0xfa, 0x19, 0xb7, 0x26, 0x9a, 0x83, 0xde,
+ 0x3a, 0xf9, 0x87, 0xe7, 0xf8, 0xa7, 0x42, 0xe7, 0x2e, 0x85, 0xb7, 0x2f, 0x75, 0x13, 0x14, 0xf9,
+ 0x83, 0x31, 0x80, 0x85, 0xab, 0x57, 0x37, 0x1b, 0x5a, 0xbd, 0x8a, 0xad, 0x3b, 0xd9, 0xf3, 0x4d,
+ 0x38, 0xe4, 0xba, 0x31, 0xd6, 0x28, 0xf9, 0x7a, 0x3f, 0xf3, 0xfa, 0xed, 0xe9, 0x63, 0xfe, 0xde,
+ 0xbb, 0xc0, 0x64, 0x65, 0xcc, 0xb9, 0x3b, 0xd6, 0x28, 0x05, 0x52, 0x2d, 0x9b, 0x96, 0x4d, 0x35,
+ 0x1e, 0x4e, 0xd5, 0x05, 0xe6, 0xa6, 0xba, 0x60, 0x5a, 0xc1, 0xa2, 0xdd, 0x80, 0x01, 0x47, 0x24,
+ 0x26, 0x5a, 0x80, 0xa4, 0xc5, 0xff, 0xe7, 0x12, 0x96, 0xc3, 0x25, 0x2c, 0xd0, 0xc4, 0xf5, 0x15,
+ 0x81, 0x29, 0x7f, 0x9c, 0x08, 0x9a, 0xc9, 0x88, 0x18, 0x8c, 0xef, 0x49, 0x15, 0x23, 0x9e, 0x8c,
+ 0x4f, 0xe0, 0xf8, 0x81, 0x22, 0x55, 0x8e, 0x8d, 0x1e, 0x80, 0x61, 0xaf, 0x25, 0xe1, 0x27, 0x2d,
+ 0x9d, 0x3b, 0x84, 0xc4, 0x84, 0xf8, 0xc4, 0xfe, 0xc3, 0x31, 0x18, 0xdb, 0x12, 0x16, 0xef, 0x7b,
+ 0x5e, 0x54, 0xeb, 0xd0, 0x8f, 0x75, 0xab, 0xa1, 0x61, 0xb1, 0x17, 0xf8, 0x68, 0x98, 0x52, 0x04,
+ 0xf4, 0x89, 0xfe, 0xee, 0xa6, 0xb8, 0x58, 0xc4, 0xc9, 0xf8, 0xa4, 0xf1, 0xcd, 0x38, 0x4c, 0x84,
+ 0x61, 0xa2, 0x79, 0x18, 0x29, 0x35, 0x30, 0x7b, 0xab, 0xce, 0x9d, 0x1b, 0xcf, 0x65, 0x9c, 0xf8,
+ 0xdb, 0x07, 0x20, 0x2b, 0xc3, 0xa2, 0x86, 0xfb, 0xd8, 0x0a, 0x90, 0xe0, 0x98, 0x68, 0x27, 0x7d,
+ 0xf2, 0xae, 0xb3, 0x68, 0x58, 0xe6, 0x4e, 0x56, 0x34, 0xe2, 0x25, 0xc0, 0xbc, 0xec, 0xb0, 0x53,
+ 0x4b, 0xdd, 0xec, 0x8b, 0x30, 0x22, 0x4e, 0xf9, 0x6e, 0xab, 0x55, 0x55, 0x2f, 0x1d, 0x64, 0x6d,
+ 0x51, 0xd0, 0x2d, 0xa7, 0x59, 0x1f, 0x39, 0x59, 0x11, 0xc7, 0x88, 0x73, 0xac, 0x02, 0x2d, 0x41,
+ 0xbf, 0x68, 0x2a, 0x71, 0xa0, 0x98, 0x4c, 0xa0, 0xa3, 0x7b, 0x61, 0xd0, 0xed, 0x9b, 0x69, 0x88,
+ 0x97, 0x50, 0x06, 0x5c, 0xae, 0x39, 0xca, 0xf9, 0xf7, 0xb5, 0x75, 0xfe, 0xae, 0x38, 0xfb, 0x8f,
+ 0xe3, 0x30, 0xaa, 0xe0, 0xf2, 0xff, 0x1f, 0xeb, 0xee, 0xc6, 0x7a, 0x05, 0x80, 0x99, 0x1d, 0x62,
+ 0xe8, 0x0f, 0x30, 0xdc, 0xc4, 0x70, 0xa5, 0x18, 0x85, 0x05, 0xd3, 0xfa, 0x4e, 0x0e, 0xf8, 0xed,
+ 0x18, 0x0c, 0xba, 0x07, 0xfc, 0xaf, 0xa8, 0xfb, 0x45, 0x05, 0xc7, 0x96, 0xb2, 0x93, 0xeb, 0xa1,
+ 0x8f, 0x6e, 0xb6, 0x4c, 0x8f, 0xf6, 0x46, 0xf4, 0xa7, 0xfa, 0xa1, 0x8f, 0xef, 0xd9, 0x96, 0x5a,
+ 0x56, 0x14, 0x52, 0xd4, 0x6d, 0xc8, 0xf6, 0x0b, 0x8a, 0x57, 0x02, 0x16, 0x14, 0x6f, 0x81, 0xe1,
+ 0x9a, 0xba, 0x57, 0xf4, 0x9c, 0x85, 0x93, 0x4e, 0x0e, 0xe5, 0x26, 0x1d, 0x2a, 0xde, 0xef, 0x2c,
+ 0x2b, 0x72, 0xd5, 0xfd, 0x70, 0xd5, 0x00, 0x81, 0x70, 0x5c, 0x0b, 0x41, 0x3f, 0xec, 0xa4, 0x1f,
+ 0x5c, 0x1f, 0x65, 0x05, 0x6a, 0xea, 0x5e, 0x9e, 0x15, 0xd0, 0x32, 0xa0, 0x5d, 0x3b, 0x03, 0x56,
+ 0x74, 0xc4, 0x49, 0xf0, 0xef, 0x79, 0xfd, 0xf6, 0xf4, 0x24, 0xc3, 0x6f, 0x85, 0x91, 0x95, 0x51,
+ 0xa7, 0x52, 0x50, 0x7b, 0x02, 0x80, 0x2e, 0x00, 0xd8, 0xbb, 0xbd, 0x6c, 0x59, 0x7b, 0xe8, 0xf5,
+ 0xdb, 0xd3, 0xa3, 0x8c, 0x8a, 0xf3, 0x4d, 0x56, 0x52, 0xa4, 0xb0, 0x40, 0x9f, 0xf4, 0x7d, 0x17,
+ 0x8c, 0xd5, 0x34, 0xbd, 0xe8, 0xcb, 0xde, 0xf0, 0x35, 0xec, 0x81, 0x17, 0x03, 0x01, 0x24, 0x65,
+ 0x65, 0xb4, 0xa6, 0xe9, 0xde, 0xac, 0x0f, 0x7a, 0x8f, 0xe4, 0x56, 0x4e, 0xca, 0xe2, 0x8e, 0x5a,
+ 0xb2, 0x8c, 0x06, 0x5d, 0xd3, 0xa6, 0x72, 0xab, 0x5d, 0x33, 0xd0, 0xa2, 0xca, 0x2e, 0xa2, 0x6e,
+ 0x55, 0x26, 0xc1, 0xcc, 0x25, 0x5a, 0x8b, 0x7e, 0x44, 0x82, 0xc9, 0x4a, 0xd5, 0xd8, 0x76, 0x2d,
+ 0x5f, 0x98, 0x0a, 0x17, 0x4b, 0x6a, 0x9d, 0x1d, 0x8a, 0xca, 0x29, 0x5d, 0x33, 0x32, 0xc3, 0x18,
+ 0x09, 0x25, 0x2c, 0x2b, 0x87, 0xd9, 0x37, 0xbe, 0x3a, 0x62, 0x5f, 0xe6, 0xd5, 0x3a, 0xfa, 0xb0,
+ 0x04, 0xc7, 0x1c, 0xfe, 0x03, 0x58, 0xa2, 0xa7, 0xdd, 0x72, 0x5b, 0x5d, 0xb3, 0x74, 0x9f, 0x5f,
+ 0x36, 0x41, 0x5c, 0x4d, 0xda, 0x9f, 0xfd, 0x8c, 0xb9, 0xac, 0xe0, 0x27, 0x25, 0x40, 0x4e, 0x80,
+ 0x63, 0xdf, 0x40, 0x58, 0xa2, 0x47, 0xca, 0x79, 0xad, 0x7d, 0x05, 0x21, 0x34, 0x2d, 0x21, 0x20,
+ 0xc5, 0xe2, 0xdc, 0x65, 0x55, 0xcf, 0x3b, 0xc1, 0x40, 0x2c, 0xea, 0xc1, 0x63, 0x6e, 0x4e, 0x38,
+ 0xbc, 0xcd, 0x65, 0x8f, 0xfc, 0xbb, 0x12, 0x4c, 0xb6, 0x58, 0x1f, 0x9b, 0xd9, 0x77, 0x02, 0x6a,
+ 0xb8, 0x3e, 0xf2, 0x1f, 0x5a, 0x97, 0xf8, 0xc5, 0xbc, 0x2e, 0x8d, 0xd9, 0x68, 0xa3, 0x25, 0x08,
+ 0xb8, 0x63, 0xf1, 0x0c, 0x7f, 0x51, 0xfb, 0x9f, 0x4a, 0x30, 0xee, 0x6e, 0xde, 0xee, 0xc8, 0x2a,
+ 0x0c, 0xba, 0x5b, 0xe7, 0x5d, 0xb8, 0xbf, 0x93, 0x2e, 0x70, 0xee, 0x3d, 0xf8, 0xe8, 0x19, 0xc7,
+ 0xb4, 0xb3, 0x7c, 0xfa, 0x63, 0x1d, 0x4b, 0xc3, 0xde, 0x4b, 0xf3, 0x99, 0xf8, 0x04, 0x1d, 0x8f,
+ 0x3f, 0x97, 0x20, 0xb1, 0x6e, 0x18, 0x55, 0x64, 0xc0, 0xa8, 0x6e, 0x58, 0x74, 0x6a, 0xe2, 0xb2,
+ 0xfb, 0x61, 0xeb, 0x54, 0x6e, 0xbe, 0x3b, 0x21, 0x7d, 0xfd, 0xf6, 0x74, 0x2b, 0x29, 0x65, 0x44,
+ 0x37, 0xac, 0x1c, 0xad, 0xe1, 0x6f, 0x5b, 0xbf, 0x0b, 0x86, 0xbc, 0x8d, 0x31, 0x8f, 0xfa, 0x6c,
+ 0xd7, 0x8d, 0x79, 0xc9, 0xbc, 0x7e, 0x7b, 0x7a, 0xdc, 0xb1, 0xae, 0x76, 0xb5, 0xac, 0x0c, 0x6e,
+ 0xbb, 0x5a, 0x67, 0xef, 0x3f, 0x7e, 0x93, 0x8c, 0xe1, 0x26, 0xa4, 0xaf, 0xfa, 0x8f, 0x3e, 0xbe,
+ 0x05, 0xfa, 0x0f, 0x76, 0x8a, 0x52, 0xa0, 0xc9, 0x37, 0x25, 0x18, 0xa3, 0x4d, 0x69, 0x2f, 0x61,
+ 0x9a, 0x65, 0x51, 0x70, 0xc9, 0x68, 0x94, 0xd1, 0x30, 0xc4, 0xf8, 0x3b, 0x2d, 0x09, 0x25, 0xa6,
+ 0x95, 0xd1, 0x38, 0xf4, 0x1a, 0x37, 0x74, 0x7e, 0x10, 0x25, 0xa5, 0xb0, 0x02, 0x59, 0xf8, 0xd5,
+ 0x8c, 0x72, 0xb3, 0x8a, 0x8b, 0x6a, 0x89, 0x05, 0x43, 0x2c, 0x6f, 0x3d, 0xc4, 0x6a, 0xb3, 0xac,
+ 0x12, 0x1d, 0x73, 0x9f, 0xfb, 0x60, 0x07, 0x59, 0x9d, 0x0a, 0x57, 0x17, 0x73, 0x20, 0xaf, 0x63,
+ 0xe6, 0x5e, 0xdd, 0x2c, 0x79, 0x1e, 0xc2, 0x8e, 0xc8, 0xf0, 0x9c, 0xfa, 0x55, 0x09, 0xc0, 0x49,
+ 0xda, 0xa2, 0x87, 0xe1, 0x48, 0x6e, 0x6d, 0x75, 0xa1, 0xb8, 0xb1, 0x99, 0xdd, 0xdc, 0xda, 0xf0,
+ 0xbe, 0x95, 0x2d, 0x9e, 0x19, 0x31, 0xeb, 0xb8, 0xa4, 0xed, 0x68, 0xb8, 0x8c, 0x8e, 0xc3, 0xb8,
+ 0x17, 0x9a, 0x94, 0xf2, 0x0b, 0x69, 0x29, 0x33, 0x78, 0xf3, 0xd6, 0x4c, 0x92, 0x2d, 0xd0, 0x70,
+ 0x19, 0x9d, 0x84, 0x43, 0xad, 0x70, 0x85, 0xd5, 0xc5, 0x74, 0x2c, 0x33, 0x74, 0xf3, 0xd6, 0x4c,
+ 0xca, 0x5e, 0xc9, 0x21, 0x19, 0x90, 0x1b, 0x92, 0xd3, 0x8b, 0x67, 0xe0, 0xe6, 0xad, 0x99, 0x3e,
+ 0xa6, 0x67, 0x99, 0xc4, 0xfb, 0x3f, 0x39, 0xd5, 0x73, 0xea, 0x67, 0x25, 0x18, 0x2e, 0xe8, 0x3b,
+ 0x0d, 0xb5, 0x64, 0xbf, 0xf7, 0xfd, 0x04, 0x1c, 0x2d, 0xac, 0x5e, 0x52, 0xb2, 0xf3, 0x21, 0x8f,
+ 0x7d, 0x67, 0xc6, 0x6e, 0xde, 0x9a, 0x19, 0x71, 0x90, 0xf2, 0xb5, 0xba, 0xb5, 0x8f, 0x4e, 0xb7,
+ 0x62, 0x2d, 0xac, 0x6d, 0xe5, 0x96, 0xf3, 0xc5, 0x8d, 0xc2, 0xe2, 0x6a, 0x5a, 0xca, 0x0c, 0xdf,
+ 0xbc, 0x35, 0x03, 0x0b, 0xf4, 0xb7, 0xad, 0x37, 0xb4, 0x8a, 0x8e, 0x4e, 0xc1, 0x44, 0x2b, 0xc2,
+ 0xb3, 0xab, 0x9b, 0x85, 0x95, 0x7c, 0x3a, 0xc6, 0x7a, 0xbe, 0x60, 0xdc, 0xd0, 0x49, 0x18, 0xc4,
+ 0x79, 0xfd, 0xbc, 0x04, 0x47, 0x3c, 0x43, 0xb4, 0x6c, 0x94, 0xae, 0x71, 0x89, 0x9f, 0x82, 0xe3,
+ 0x9b, 0x6b, 0x57, 0xf2, 0xab, 0x85, 0xe7, 0xf3, 0xc5, 0x8d, 0xa5, 0xac, 0x92, 0x2f, 0xd2, 0xd7,
+ 0x62, 0x82, 0x06, 0x00, 0x3d, 0x00, 0xf7, 0xb6, 0x81, 0x25, 0xff, 0x13, 0xe1, 0xa3, 0x13, 0x70,
+ 0x5f, 0x5b, 0x92, 0x1c, 0x30, 0x86, 0x1e, 0x86, 0x93, 0x11, 0xf4, 0x8a, 0xf9, 0xe7, 0xd6, 0x0b,
+ 0x0a, 0x19, 0xaa, 0x38, 0xeb, 0xcb, 0x1d, 0x7f, 0xc9, 0xfc, 0xa3, 0xa9, 0xd0, 0x5d, 0xdc, 0x0a,
+ 0xd6, 0xb1, 0xa9, 0x99, 0x07, 0xda, 0xc5, 0xed, 0x68, 0x67, 0x58, 0xfe, 0xf3, 0x3e, 0x18, 0x5c,
+ 0x64, 0xad, 0xd0, 0x7b, 0xb7, 0xe8, 0x4d, 0xd0, 0xe7, 0xb9, 0xed, 0x11, 0x9a, 0x2d, 0xf4, 0xbc,
+ 0x7e, 0xc2, 0x71, 0x90, 0xc9, 0x6f, 0xb0, 0xb2, 0x04, 0xad, 0x73, 0x12, 0x6d, 0xb0, 0xab, 0x2d,
+ 0x0a, 0xb6, 0xbe, 0xe3, 0xbb, 0x01, 0x7e, 0x7a, 0x32, 0xbb, 0xe5, 0xba, 0x49, 0x6a, 0xd8, 0xeb,
+ 0xa6, 0xef, 0x93, 0xe0, 0x10, 0x85, 0x72, 0x82, 0x0d, 0x0a, 0x29, 0x32, 0x2f, 0xa7, 0xc2, 0xba,
+ 0xb0, 0xac, 0x9a, 0xce, 0x5b, 0x85, 0xec, 0x3d, 0xd2, 0xfb, 0x79, 0x4c, 0x7f, 0xcc, 0xd5, 0xb8,
+ 0x9f, 0xac, 0xac, 0xd0, 0xeb, 0x3a, 0x5e, 0x4c, 0x13, 0x2d, 0x06, 0x5c, 0x8e, 0xee, 0x78, 0x77,
+ 0xd8, 0x7d, 0xcb, 0xe5, 0x32, 0x0c, 0x38, 0xae, 0xce, 0x9c, 0xe8, 0x8d, 0xc8, 0x29, 0xfa, 0x1d,
+ 0xac, 0x1b, 0x19, 0xfd, 0x90, 0x04, 0x87, 0x9c, 0x85, 0x89, 0x9b, 0x6c, 0x1f, 0x25, 0xfb, 0x50,
+ 0x17, 0x59, 0x29, 0xbf, 0x70, 0x02, 0xe9, 0xca, 0xca, 0x78, 0xb3, 0x15, 0xd5, 0x44, 0xeb, 0x30,
+ 0xe4, 0x76, 0xfc, 0xe2, 0x36, 0x41, 0x37, 0x91, 0x83, 0x97, 0x00, 0xca, 0x40, 0x12, 0xef, 0xd5,
+ 0x8d, 0x86, 0x85, 0xcb, 0x34, 0x70, 0x4e, 0x2a, 0x76, 0x19, 0x55, 0xe0, 0xb0, 0xc5, 0xcd, 0x0d,
+ 0xdb, 0x1f, 0x28, 0x36, 0xa8, 0x9b, 0x32, 0x27, 0x52, 0xed, 0xbb, 0x1d, 0xe0, 0xda, 0x78, 0xeb,
+ 0xe3, 0x56, 0xeb, 0x27, 0xe2, 0x50, 0xef, 0xe1, 0x0a, 0x1a, 0xd0, 0x5a, 0x51, 0x2b, 0xd3, 0x5d,
+ 0xa3, 0x84, 0x32, 0xc9, 0x54, 0xb6, 0x85, 0x40, 0xa1, 0x2c, 0xaf, 0x02, 0x6a, 0xd5, 0x43, 0xff,
+ 0x39, 0xd2, 0x54, 0xc0, 0x39, 0x52, 0xf7, 0x09, 0xcf, 0xb9, 0xe4, 0xfb, 0x79, 0x20, 0x7a, 0xc7,
+ 0xcd, 0xd3, 0x97, 0x63, 0x70, 0xca, 0x7d, 0x32, 0x83, 0xde, 0x2b, 0xb5, 0xad, 0x49, 0x5d, 0xad,
+ 0x68, 0xba, 0xfb, 0x07, 0x07, 0x26, 0xdd, 0xa1, 0x33, 0x85, 0x15, 0xb2, 0x95, 0xdf, 0x2f, 0xc1,
+ 0xc0, 0xba, 0x5a, 0xc1, 0xe2, 0xc1, 0x97, 0xd6, 0x33, 0xc0, 0x87, 0xa1, 0xcf, 0xd8, 0xd9, 0x11,
+ 0xcf, 0xc7, 0x25, 0x14, 0x5e, 0x22, 0x7d, 0xae, 0x6a, 0x35, 0xcd, 0xe2, 0xf7, 0xec, 0x58, 0x01,
+ 0x4d, 0xc3, 0x00, 0x0d, 0x17, 0x98, 0x75, 0xe0, 0x29, 0x64, 0xa0, 0x55, 0xd4, 0x3a, 0x10, 0x21,
+ 0x36, 0xf0, 0x75, 0xdc, 0x30, 0x31, 0x5d, 0xa2, 0x26, 0x15, 0x51, 0x94, 0x2f, 0xc2, 0x20, 0xe3,
+ 0x84, 0x87, 0xb5, 0x93, 0x90, 0xa4, 0x8f, 0x9a, 0x3a, 0xfc, 0xf4, 0x93, 0x32, 0x3f, 0x51, 0xcb,
+ 0xe8, 0x33, 0x96, 0x58, 0x21, 0x97, 0x0b, 0x95, 0xf2, 0xc9, 0x68, 0x03, 0xc7, 0x64, 0x68, 0x4b,
+ 0xf8, 0xb7, 0x7a, 0xe1, 0x10, 0x3f, 0x37, 0xa3, 0xd6, 0xb5, 0xd3, 0xbb, 0x96, 0x25, 0x7e, 0xa6,
+ 0x00, 0x78, 0xee, 0x41, 0xad, 0x6b, 0xf2, 0x3e, 0x24, 0x96, 0x2c, 0xab, 0x8e, 0x4e, 0x41, 0x6f,
+ 0xa3, 0x59, 0xb5, 0x03, 0x38, 0x7b, 0x33, 0x5c, 0xad, 0x6b, 0xb3, 0x04, 0x40, 0x69, 0x56, 0xb1,
+ 0xc2, 0x40, 0x50, 0x1e, 0xa6, 0x77, 0x9a, 0xd5, 0xea, 0x7e, 0xb1, 0x8c, 0x4b, 0x46, 0x99, 0xa8,
+ 0xa5, 0x89, 0x1b, 0xd7, 0x71, 0xb9, 0x88, 0xf7, 0xea, 0xaa, 0x6e, 0xdf, 0x6b, 0x4c, 0x2a, 0xc7,
+ 0x28, 0xd8, 0x02, 0x85, 0x52, 0x38, 0x50, 0x5e, 0xc0, 0xc8, 0x7f, 0x10, 0x83, 0xa4, 0x20, 0x4d,
+ 0xdf, 0x69, 0xc7, 0x55, 0x5c, 0xb2, 0xec, 0xcb, 0x98, 0x76, 0x19, 0x21, 0x88, 0x57, 0xf8, 0xe0,
+ 0xa5, 0x96, 0x7a, 0x14, 0x52, 0x20, 0x75, 0xf6, 0xeb, 0xf9, 0xa4, 0xae, 0xde, 0x24, 0xe3, 0x99,
+ 0xa8, 0x1b, 0x22, 0x19, 0xb7, 0xd4, 0xa3, 0xd0, 0x12, 0x9a, 0x80, 0x3e, 0x32, 0xbf, 0x2d, 0x36,
+ 0x5a, 0xa4, 0x9e, 0x97, 0xd1, 0x61, 0xe8, 0xad, 0xab, 0x56, 0x89, 0x3d, 0x6c, 0x4b, 0x3e, 0xb0,
+ 0x22, 0x7a, 0x12, 0xfa, 0xd8, 0x0f, 0xa0, 0xf1, 0x7b, 0x76, 0xf7, 0xb8, 0x85, 0xc1, 0x7e, 0x69,
+ 0x9e, 0xf0, 0xbd, 0xae, 0x5a, 0x16, 0x6e, 0xe8, 0xf4, 0x36, 0x2f, 0xad, 0x44, 0x08, 0x12, 0xdb,
+ 0x46, 0x99, 0xdd, 0xa6, 0x4e, 0x29, 0xf4, 0x7f, 0x76, 0x99, 0x86, 0xe9, 0x43, 0x91, 0x7e, 0x1c,
+ 0x64, 0xb7, 0xb5, 0x44, 0x65, 0x8e, 0x00, 0xe5, 0x61, 0x4c, 0x2d, 0x97, 0x35, 0xa2, 0xf0, 0x6a,
+ 0xb5, 0xb8, 0xad, 0x51, 0x3b, 0x67, 0x4e, 0x0c, 0xb4, 0x19, 0x0b, 0xe4, 0x20, 0xe4, 0x38, 0x7c,
+ 0x2e, 0x05, 0xfd, 0x75, 0xc6, 0x94, 0x7c, 0x01, 0x46, 0x5b, 0x38, 0x25, 0xfc, 0x5d, 0xd3, 0xf8,
+ 0xc1, 0xff, 0x94, 0x42, 0xff, 0x0f, 0x7a, 0xc1, 0x22, 0xf7, 0x9e, 0xf0, 0x5f, 0x9e, 0x18, 0x76,
+ 0xfd, 0xf2, 0x84, 0x5a, 0xd7, 0x72, 0x29, 0x4a, 0x9f, 0xff, 0xde, 0x44, 0xb6, 0xf5, 0xf7, 0x26,
+ 0x2a, 0x58, 0x17, 0x31, 0x04, 0xf9, 0xa4, 0xd6, 0x35, 0x93, 0xaa, 0xa3, 0xaa, 0xeb, 0x86, 0xc5,
+ 0x4c, 0xee, 0x05, 0xd7, 0xff, 0xf4, 0xe7, 0x27, 0x12, 0x8b, 0xd9, 0xf5, 0x82, 0xad, 0xc7, 0xbf,
+ 0x11, 0x83, 0x63, 0x2e, 0x3d, 0x76, 0x01, 0xb7, 0xaa, 0x73, 0x26, 0x58, 0xe3, 0x3b, 0xf8, 0x19,
+ 0xb0, 0x2b, 0x90, 0x20, 0xf0, 0x68, 0x2a, 0xe0, 0xc7, 0xba, 0xac, 0x5d, 0xc3, 0xfe, 0x69, 0xad,
+ 0x5f, 0xfc, 0xc2, 0x3f, 0x96, 0xbd, 0xc7, 0x45, 0x3c, 0xa3, 0x42, 0x89, 0xe4, 0x7e, 0xa8, 0x73,
+ 0xf9, 0xa5, 0xb3, 0x4e, 0x7f, 0xee, 0x9c, 0x18, 0xfd, 0x32, 0xfc, 0x50, 0x21, 0xf4, 0x67, 0xa2,
+ 0x98, 0x31, 0x6d, 0x1f, 0x0a, 0x76, 0x61, 0xa9, 0xc3, 0x5e, 0xe1, 0x6f, 0x37, 0x82, 0x9d, 0x05,
+ 0x95, 0x91, 0xbf, 0x3d, 0xb5, 0x07, 0x87, 0xe9, 0x89, 0x5f, 0x27, 0xaf, 0x29, 0x5c, 0xc2, 0x61,
+ 0xfb, 0x98, 0x8d, 0xc4, 0x6f, 0x59, 0x8a, 0x23, 0x34, 0xe0, 0xf0, 0xcf, 0xb3, 0x34, 0xc7, 0x67,
+ 0x43, 0x5d, 0xcd, 0xac, 0xcb, 0xcd, 0x28, 0x2e, 0x4c, 0xf9, 0xe7, 0x24, 0x38, 0xd2, 0xd2, 0x34,
+ 0xf7, 0x01, 0x8b, 0x01, 0x3f, 0x28, 0x70, 0xa0, 0xf8, 0x6d, 0x31, 0x80, 0xd9, 0x13, 0x91, 0xcc,
+ 0x32, 0x2e, 0x3c, 0xdc, 0x3e, 0x0d, 0x87, 0xbc, 0xcc, 0x0a, 0x31, 0x79, 0xf6, 0x4f, 0x49, 0x60,
+ 0xc0, 0xc5, 0x35, 0xe4, 0xd9, 0x86, 0x94, 0x8b, 0x7e, 0x39, 0xdb, 0x7d, 0xcd, 0xb7, 0x5e, 0x02,
+ 0xe9, 0xb8, 0xab, 0x0e, 0xa6, 0xfc, 0x41, 0x09, 0x66, 0xbc, 0x2d, 0xb8, 0x42, 0xbe, 0xee, 0x98,
+ 0xbd, 0x63, 0x43, 0xfc, 0x35, 0x09, 0xee, 0x6d, 0xc3, 0x13, 0x17, 0xc0, 0x4b, 0x30, 0xee, 0x4a,
+ 0xc7, 0x09, 0x13, 0x2f, 0x86, 0xfd, 0x54, 0x74, 0xb0, 0x6d, 0x67, 0x9f, 0x8e, 0x12, 0xa1, 0x7c,
+ 0xe6, 0xcb, 0xd3, 0x63, 0xad, 0xdf, 0x4c, 0x65, 0xac, 0x35, 0x85, 0x76, 0x07, 0xf5, 0xe3, 0x23,
+ 0x12, 0x3c, 0xe8, 0xed, 0x6a, 0x40, 0xd4, 0xfe, 0xdd, 0x1a, 0x87, 0xff, 0x20, 0xc1, 0xa9, 0x4e,
+ 0x98, 0xe3, 0x03, 0xb2, 0x0d, 0x63, 0xce, 0x7a, 0xc2, 0x3f, 0x1e, 0x5d, 0xad, 0x52, 0x98, 0x96,
+ 0x22, 0x9b, 0xda, 0x5d, 0x10, 0x7c, 0x9d, 0x4f, 0x2c, 0xf7, 0x90, 0xdb, 0x42, 0xf6, 0x6e, 0xbf,
+ 0x09, 0x21, 0x7b, 0x36, 0xe0, 0x02, 0xc6, 0x22, 0x16, 0x30, 0x16, 0x4e, 0x54, 0x2f, 0x5f, 0xe7,
+ 0x76, 0x2b, 0x20, 0x11, 0xfe, 0x36, 0x18, 0x0b, 0x50, 0x65, 0x3e, 0xab, 0xbb, 0xd0, 0x64, 0x05,
+ 0xb5, 0x2a, 0xab, 0xbc, 0x0f, 0xd3, 0xb4, 0xdd, 0x00, 0x41, 0xdf, 0xed, 0x2e, 0xd7, 0xb8, 0x6d,
+ 0x09, 0x6c, 0x9a, 0xf7, 0xbd, 0x00, 0x7d, 0x6c, 0x9c, 0x79, 0x77, 0x0f, 0xa0, 0x28, 0x9c, 0x80,
+ 0xfc, 0x93, 0xc2, 0x96, 0x2d, 0x08, 0xb6, 0x83, 0xe7, 0x50, 0x27, 0x7d, 0xbd, 0x43, 0x73, 0xc8,
+ 0x25, 0x8c, 0x2f, 0x09, 0xab, 0x16, 0xcc, 0x1d, 0x17, 0x47, 0xe9, 0x8e, 0x59, 0x35, 0xfe, 0x00,
+ 0xd8, 0x5d, 0x35, 0x5f, 0x3f, 0x2d, 0xcc, 0x97, 0xdd, 0xa7, 0x08, 0xf3, 0xf5, 0xdd, 0x11, 0xbd,
+ 0x6d, 0xc8, 0x22, 0xd8, 0xfc, 0x8b, 0x68, 0xc8, 0xbe, 0x29, 0xc1, 0x24, 0xed, 0x9b, 0x3b, 0xdd,
+ 0xd2, 0xad, 0xc8, 0x1f, 0x06, 0x64, 0x36, 0x4a, 0xc5, 0xc0, 0xd9, 0x9d, 0x36, 0x1b, 0xa5, 0xab,
+ 0x1e, 0xff, 0xf2, 0x30, 0xa0, 0xb2, 0x27, 0xa9, 0x46, 0xa1, 0xd9, 0x36, 0x40, 0xba, 0xec, 0x4a,
+ 0x84, 0x04, 0x0c, 0x67, 0xe2, 0x0e, 0x0c, 0xe7, 0x17, 0x25, 0xc8, 0x04, 0x75, 0x99, 0x0f, 0x9f,
+ 0x06, 0x87, 0x3d, 0x3b, 0x75, 0xfe, 0x11, 0x7c, 0xb8, 0x93, 0x84, 0x95, 0x6f, 0x1a, 0x1d, 0x6a,
+ 0xe0, 0xbb, 0x1d, 0x07, 0x4c, 0x7b, 0x35, 0xb4, 0x35, 0xb2, 0xfe, 0xae, 0x4d, 0x9f, 0xcf, 0xb6,
+ 0xd8, 0xd5, 0xbf, 0x10, 0xb1, 0xf7, 0x1e, 0x4c, 0x85, 0x70, 0x7d, 0xb7, 0xfd, 0xde, 0x6e, 0xe8,
+ 0x60, 0xde, 0xe9, 0xf0, 0xfd, 0x09, 0x3e, 0x13, 0xbc, 0x57, 0xa3, 0x5c, 0x6b, 0xb1, 0xc0, 0xd7,
+ 0x15, 0xdf, 0x0a, 0x47, 0x03, 0xb1, 0x38, 0x6f, 0x73, 0x90, 0xd8, 0xd5, 0x4c, 0xf1, 0x6e, 0xe2,
+ 0xf1, 0x30, 0xb6, 0x7c, 0xd8, 0x14, 0x47, 0x46, 0x90, 0xa6, 0xa4, 0xd7, 0x0d, 0xa3, 0xca, 0xd9,
+ 0x90, 0xaf, 0xc0, 0xa8, 0xab, 0x8e, 0x37, 0x72, 0x0e, 0x12, 0x75, 0x83, 0xff, 0x88, 0xe0, 0xc0,
+ 0x99, 0x63, 0xa1, 0x7b, 0x14, 0x86, 0x51, 0xe5, 0xdd, 0xa6, 0xf0, 0xf2, 0x38, 0x20, 0x46, 0x8c,
+ 0x3d, 0xe0, 0xc0, 0x9b, 0xd8, 0x80, 0x31, 0x4f, 0x2d, 0x6f, 0xe4, 0x0d, 0x6d, 0x85, 0xc8, 0x67,
+ 0xe1, 0x3e, 0x4a, 0x34, 0x28, 0xa3, 0xbc, 0x5f, 0x28, 0x0b, 0x29, 0xfb, 0xf6, 0x4d, 0xe5, 0x17,
+ 0xe1, 0xfe, 0xf6, 0x68, 0x4e, 0xe4, 0xc3, 0x92, 0xcc, 0x51, 0x91, 0x4f, 0x78, 0x46, 0x9b, 0x13,
+ 0x90, 0x9f, 0x86, 0xe3, 0xe1, 0x4d, 0xd2, 0x93, 0x3b, 0x82, 0xd9, 0xc0, 0x5f, 0xea, 0x96, 0x2d,
+ 0x38, 0x11, 0x89, 0x7f, 0xe7, 0xb9, 0x7e, 0x33, 0x3c, 0x10, 0xd6, 0xaa, 0xb9, 0x76, 0x43, 0xc7,
+ 0x65, 0x17, 0xd3, 0x6c, 0x27, 0x5a, 0x72, 0xed, 0x44, 0xcb, 0xcd, 0xf0, 0x4e, 0x0b, 0x74, 0xce,
+ 0xf3, 0x15, 0xe8, 0x17, 0x9b, 0x07, 0xd2, 0x41, 0x37, 0x0f, 0x04, 0x05, 0xf9, 0x01, 0xae, 0x15,
+ 0xd9, 0x6a, 0x35, 0xa8, 0x65, 0xa1, 0x91, 0x26, 0xd7, 0x82, 0x50, 0xb0, 0xbb, 0xc1, 0xdb, 0x09,
+ 0x2e, 0xd1, 0xe5, 0xb0, 0xbd, 0x0a, 0xc1, 0xdd, 0x53, 0x5c, 0x76, 0x6d, 0x00, 0x39, 0x7f, 0x7e,
+ 0xed, 0x3e, 0x61, 0x0f, 0x9a, 0xa5, 0x7a, 0x7b, 0x56, 0xce, 0x9a, 0x26, 0xb6, 0x6c, 0x01, 0x14,
+ 0xed, 0xe1, 0x09, 0x05, 0xe4, 0x4d, 0x9c, 0x15, 0xef, 0x86, 0x48, 0x9d, 0x9d, 0xdd, 0xe1, 0xaf,
+ 0x0c, 0x4e, 0xf0, 0x25, 0xdc, 0xa6, 0xeb, 0xd2, 0x88, 0xa5, 0x5e, 0xc3, 0x65, 0x79, 0x9f, 0x5b,
+ 0xfe, 0x96, 0x2f, 0x76, 0x93, 0xcf, 0xda, 0x17, 0xba, 0xd8, 0x39, 0x92, 0x8b, 0x5d, 0xef, 0x6d,
+ 0x0e, 0x89, 0x7b, 0x2c, 0xec, 0x08, 0x07, 0x27, 0x27, 0x9f, 0xe3, 0x06, 0xb9, 0x65, 0xab, 0x5c,
+ 0x3c, 0x68, 0x1d, 0xbc, 0x27, 0x24, 0x63, 0x90, 0xc3, 0xf1, 0x6c, 0xb6, 0xc3, 0x92, 0x6b, 0x27,
+ 0x60, 0x04, 0xef, 0xd5, 0xb5, 0x86, 0xea, 0x3d, 0xfc, 0x9b, 0x52, 0x86, 0x9d, 0xea, 0x4d, 0xad,
+ 0x86, 0xcf, 0xfc, 0xcc, 0xb4, 0xb8, 0xe9, 0xff, 0x13, 0x92, 0xe7, 0x87, 0xcb, 0x67, 0xc3, 0xb4,
+ 0x2e, 0x38, 0xcd, 0x97, 0x39, 0xdd, 0x31, 0x3c, 0x5f, 0x86, 0x9e, 0x7a, 0xcf, 0xbf, 0xfe, 0xea,
+ 0x87, 0x62, 0xf7, 0x23, 0xf9, 0x74, 0x48, 0x02, 0xd2, 0x15, 0x02, 0x7c, 0xca, 0xf3, 0xa3, 0x9b,
+ 0x8f, 0x74, 0xd6, 0x94, 0xe0, 0x6c, 0xb6, 0x53, 0x70, 0xce, 0xd8, 0x05, 0xca, 0xd8, 0x59, 0xf4,
+ 0x78, 0x34, 0x63, 0xa7, 0xbf, 0xdf, 0x1b, 0x07, 0xbc, 0x1b, 0xfd, 0x1b, 0x09, 0xc6, 0x83, 0xb2,
+ 0x54, 0xe8, 0xa9, 0xce, 0xb8, 0x68, 0x5d, 0x25, 0x65, 0xce, 0x1f, 0x00, 0x93, 0x77, 0x65, 0x91,
+ 0x76, 0x25, 0x8b, 0x2e, 0x1e, 0xa0, 0x2b, 0xa7, 0xdd, 0x1b, 0xb3, 0xff, 0x57, 0x82, 0x7b, 0xda,
+ 0x26, 0x7d, 0x50, 0xb6, 0x33, 0x2e, 0xdb, 0x2c, 0x07, 0x33, 0xb9, 0x37, 0x42, 0x82, 0xf7, 0xf8,
+ 0x19, 0xda, 0xe3, 0x2b, 0xa8, 0x70, 0x90, 0x1e, 0x07, 0xee, 0x7e, 0xa3, 0xdf, 0x96, 0x3c, 0xd7,
+ 0x78, 0xda, 0xab, 0x53, 0x4b, 0x2e, 0x25, 0x62, 0x62, 0xb4, 0xae, 0xd3, 0xe5, 0xe7, 0x68, 0x17,
+ 0x14, 0xb4, 0xfe, 0x06, 0x07, 0xed, 0xf4, 0xf7, 0x7b, 0x63, 0xd9, 0x77, 0xa3, 0x3f, 0x95, 0x82,
+ 0xaf, 0xdb, 0x3c, 0xd9, 0x96, 0xc5, 0xf0, 0x3c, 0x51, 0xe6, 0xa9, 0xee, 0x11, 0x79, 0x27, 0x6b,
+ 0xb4, 0x93, 0x15, 0x84, 0xef, 0x74, 0x27, 0x03, 0x07, 0x11, 0x7d, 0x5e, 0x82, 0xf1, 0xa0, 0x34,
+ 0x4b, 0xc4, 0xb4, 0x6c, 0x93, 0x37, 0x8a, 0x98, 0x96, 0xed, 0x72, 0x3a, 0xf2, 0x9b, 0x68, 0xe7,
+ 0xcf, 0xa1, 0x27, 0xc2, 0x3a, 0xdf, 0x76, 0x14, 0xc9, 0x5c, 0x6c, 0x9b, 0xb7, 0x88, 0x98, 0x8b,
+ 0x9d, 0xa4, 0x66, 0x22, 0xe6, 0x62, 0x47, 0x69, 0x93, 0xe8, 0xb9, 0x68, 0xf7, 0xac, 0xc3, 0x61,
+ 0x34, 0xd1, 0x6f, 0xd0, 0x27, 0x61, 0xdd, 0x35, 0x8f, 0xb5, 0x65, 0x34, 0x28, 0x07, 0x92, 0x39,
+ 0xd3, 0x0d, 0x0a, 0xef, 0x4b, 0x81, 0xf6, 0x65, 0x1e, 0x65, 0x0f, 0xd2, 0x17, 0xef, 0x21, 0x97,
+ 0x2f, 0x4a, 0x30, 0x16, 0xb0, 0x70, 0x8e, 0x98, 0x85, 0xe1, 0x79, 0x80, 0xcc, 0x53, 0xdd, 0x23,
+ 0xf2, 0x5e, 0x5d, 0xa2, 0xbd, 0x7a, 0x0b, 0x7a, 0xfa, 0x20, 0xbd, 0x72, 0xf9, 0xe7, 0xdb, 0xce,
+ 0x79, 0x6e, 0x57, 0x3b, 0xe8, 0x5c, 0x97, 0x8c, 0x89, 0x0e, 0x3d, 0xd9, 0x35, 0x1e, 0xef, 0xcf,
+ 0xb3, 0xb4, 0x3f, 0xcf, 0xa0, 0xb5, 0x37, 0xd6, 0x9f, 0x56, 0xb7, 0xfe, 0x2b, 0xad, 0xaf, 0x8d,
+ 0xb4, 0xd7, 0xa2, 0xc0, 0xf5, 0x77, 0xe6, 0xf1, 0xae, 0x70, 0x78, 0xa7, 0x9e, 0xa2, 0x9d, 0x3a,
+ 0x83, 0x1e, 0x0d, 0xeb, 0x94, 0xeb, 0x82, 0x87, 0xa6, 0xef, 0x18, 0xa7, 0xbf, 0x9f, 0xad, 0xea,
+ 0xdf, 0x8d, 0x7e, 0x40, 0x1c, 0x98, 0x3e, 0xd9, 0xb6, 0x5d, 0xd7, 0xd2, 0x3c, 0xf3, 0x60, 0x07,
+ 0x90, 0x9c, 0xaf, 0xfb, 0x29, 0x5f, 0x53, 0xe8, 0x58, 0x18, 0x5f, 0x64, 0x79, 0x8e, 0x3e, 0x20,
+ 0xd9, 0xf7, 0x71, 0x4e, 0xb5, 0xa7, 0xed, 0x5e, 0xbf, 0x67, 0x1e, 0xea, 0x08, 0x96, 0x73, 0x72,
+ 0x9c, 0x72, 0x32, 0x83, 0xa6, 0x42, 0x39, 0x61, 0x0c, 0x7c, 0xd8, 0x7f, 0x64, 0xd5, 0x59, 0x84,
+ 0xa3, 0x0b, 0x6d, 0x1b, 0x6c, 0xbf, 0xe2, 0xcf, 0xbc, 0xe9, 0x60, 0xc8, 0x9c, 0xfd, 0x1e, 0xf4,
+ 0x71, 0x09, 0x32, 0xe1, 0x4b, 0x6d, 0xf4, 0x74, 0xf7, 0xe4, 0xdd, 0x6b, 0xfc, 0xcc, 0xc5, 0x03,
+ 0xe3, 0xdb, 0x1c, 0x7e, 0x54, 0x82, 0xc9, 0xd0, 0x75, 0x35, 0x7a, 0x73, 0xb7, 0x0d, 0x78, 0x96,
+ 0xf3, 0x99, 0xa7, 0x0f, 0x8a, 0x6e, 0xb3, 0x47, 0x46, 0x36, 0x64, 0x61, 0x1d, 0x31, 0xb2, 0xed,
+ 0x57, 0xed, 0x11, 0x23, 0x1b, 0xb1, 0x96, 0xe7, 0x72, 0x0b, 0x5d, 0x53, 0x47, 0xc8, 0x2d, 0x6a,
+ 0xd1, 0x1e, 0x21, 0xb7, 0xc8, 0xa5, 0xbc, 0x3d, 0xac, 0x21, 0xeb, 0xf1, 0xc8, 0x61, 0x6d, 0xbf,
+ 0xe0, 0x8f, 0x1c, 0xd6, 0x88, 0x34, 0x80, 0xdc, 0x83, 0xde, 0x0d, 0xa3, 0x2d, 0x4b, 0xf6, 0x88,
+ 0x00, 0xbc, 0x05, 0x3e, 0x73, 0xae, 0x3b, 0x78, 0x57, 0xf3, 0x1f, 0x90, 0xe0, 0x50, 0xf0, 0xba,
+ 0xfd, 0x4c, 0xe7, 0x1a, 0x2b, 0x70, 0x32, 0x73, 0xdd, 0xe3, 0x38, 0xbc, 0xdc, 0xf9, 0x33, 0xa0,
+ 0x0f, 0xc1, 0x74, 0x88, 0xb5, 0xb4, 0xf6, 0x22, 0x8e, 0x24, 0xb5, 0x79, 0x4d, 0xec, 0x60, 0x3f,
+ 0x1a, 0xf8, 0x46, 0xde, 0x10, 0xeb, 0xec, 0x50, 0xfc, 0xbf, 0x8d, 0x03, 0x5a, 0x31, 0x2b, 0xf3,
+ 0x0d, 0xac, 0x5a, 0xce, 0x4f, 0x1f, 0xf9, 0x5f, 0xc2, 0x91, 0xde, 0xd0, 0x4b, 0x38, 0x2b, 0x9e,
+ 0xb7, 0x65, 0x62, 0xdd, 0xbd, 0x5f, 0xd5, 0xfa, 0xc0, 0x4c, 0xe0, 0xcd, 0xe0, 0xc4, 0x9d, 0x7b,
+ 0x04, 0xa1, 0xf7, 0xa0, 0xef, 0x45, 0xf0, 0x97, 0x9b, 0xfa, 0xda, 0xbc, 0xdc, 0x34, 0x11, 0xfa,
+ 0x3c, 0x13, 0xc7, 0x76, 0x72, 0x7c, 0xfd, 0xdd, 0xe4, 0xf8, 0x9c, 0x3d, 0x95, 0xcb, 0x89, 0x64,
+ 0x3c, 0x9d, 0x90, 0x8f, 0x41, 0xa6, 0x75, 0x58, 0xed, 0x69, 0xf3, 0xf1, 0x18, 0xa4, 0x57, 0xcc,
+ 0x4a, 0xbe, 0xac, 0x59, 0x77, 0x69, 0xcc, 0x2f, 0x86, 0x3f, 0x2f, 0x81, 0x5e, 0xbf, 0x3d, 0x3d,
+ 0xcc, 0x24, 0xdb, 0x46, 0x9e, 0x35, 0x18, 0xf1, 0x5f, 0x9e, 0x65, 0x17, 0xab, 0x17, 0x0e, 0xf2,
+ 0x02, 0x5b, 0xcb, 0xa5, 0xd9, 0x61, 0xef, 0x63, 0x68, 0x1e, 0xf9, 0x25, 0xd2, 0xbd, 0x72, 0x06,
+ 0x26, 0xfc, 0x02, 0xb2, 0xa5, 0xf7, 0x9a, 0x04, 0x03, 0x2b, 0xa6, 0x58, 0xda, 0xe1, 0xef, 0xd1,
+ 0x57, 0x39, 0x9e, 0x84, 0x3e, 0xb5, 0x66, 0xdf, 0x3b, 0xeb, 0x40, 0x93, 0x38, 0x38, 0xbf, 0x54,
+ 0x78, 0x08, 0xc6, 0x5c, 0x7d, 0xb4, 0xfb, 0xfe, 0x85, 0x18, 0xb5, 0x17, 0xf4, 0x51, 0x4f, 0x7b,
+ 0x45, 0x88, 0xff, 0xaa, 0xde, 0xd6, 0x77, 0x64, 0x9c, 0x38, 0x88, 0x8c, 0xaf, 0xd1, 0x49, 0xea,
+ 0x93, 0xa5, 0x9d, 0xc3, 0x5e, 0x69, 0x7d, 0xa8, 0xa2, 0x9b, 0x9f, 0x4b, 0xf4, 0x3d, 0x47, 0x21,
+ 0x7f, 0x55, 0x82, 0xa1, 0x15, 0xb3, 0xb2, 0xa5, 0x97, 0xff, 0x52, 0xeb, 0xed, 0x0e, 0x1c, 0xf2,
+ 0xf4, 0xf2, 0x6e, 0x89, 0x73, 0x8b, 0xce, 0x03, 0x96, 0xe7, 0xb9, 0xea, 0xfa, 0x49, 0xed, 0x00,
+ 0x39, 0x48, 0x9d, 0x9b, 0x3d, 0x6e, 0xb7, 0x7d, 0x64, 0xed, 0xd9, 0xf7, 0xe1, 0x18, 0x1c, 0x23,
+ 0x66, 0x5d, 0xd5, 0x4b, 0xb8, 0xfa, 0x17, 0xe7, 0x81, 0xa0, 0x83, 0x0e, 0x29, 0x3a, 0xd1, 0xfa,
+ 0xe0, 0x0b, 0xfb, 0x5d, 0x29, 0xdf, 0xa3, 0x2e, 0xf2, 0x71, 0xb8, 0xbf, 0x9d, 0x5c, 0x6c, 0x01,
+ 0xbe, 0x1a, 0x83, 0xd1, 0x15, 0xd3, 0x7b, 0x85, 0xd6, 0xfc, 0xcb, 0x26, 0xb5, 0x33, 0x70, 0x48,
+ 0xdc, 0xd1, 0xe2, 0x4f, 0xc6, 0x15, 0xd9, 0xae, 0x30, 0xbb, 0x5e, 0x3c, 0x66, 0x7f, 0xa4, 0xdd,
+ 0x27, 0x4b, 0x46, 0xf7, 0x99, 0x8c, 0x4d, 0x98, 0x6c, 0x91, 0x90, 0x3d, 0x89, 0x1c, 0x9e, 0xa4,
+ 0xae, 0x78, 0x92, 0x3f, 0x2d, 0x51, 0x87, 0x4a, 0xcc, 0x1c, 0xae, 0xb1, 0xfb, 0xdb, 0x97, 0xec,
+ 0x77, 0x17, 0xef, 0xa0, 0xfc, 0x1d, 0x06, 0x63, 0xdd, 0x59, 0x0f, 0x47, 0x00, 0x6f, 0x83, 0x99,
+ 0x30, 0x4e, 0xdf, 0xb8, 0x1c, 0x5e, 0x91, 0x60, 0x8a, 0x88, 0xb7, 0xa1, 0xea, 0xe6, 0x0e, 0x6e,
+ 0x04, 0x5d, 0x2f, 0x7f, 0x12, 0x26, 0x42, 0xaf, 0xd8, 0xb1, 0xed, 0xe5, 0x43, 0x56, 0xe0, 0xaa,
+ 0xd9, 0xf9, 0xdd, 0xa6, 0x98, 0xe7, 0x77, 0x9b, 0x8e, 0x42, 0x4a, 0xc7, 0x37, 0xb8, 0x0e, 0xb0,
+ 0xd3, 0x67, 0x49, 0x1d, 0xdf, 0xf0, 0x0f, 0xfc, 0x49, 0x38, 0xde, 0x9e, 0x33, 0x7b, 0x16, 0x19,
+ 0x74, 0x2c, 0x17, 0x34, 0x53, 0xdd, 0xae, 0xe2, 0xbb, 0x36, 0x97, 0x5c, 0xac, 0xc9, 0x74, 0x48,
+ 0x02, 0x1b, 0xb4, 0x99, 0xd2, 0xe1, 0x08, 0x89, 0xd8, 0xf4, 0xef, 0x14, 0x4f, 0x75, 0x98, 0x0e,
+ 0x69, 0xef, 0x6e, 0xb9, 0x9c, 0x5f, 0x96, 0x68, 0xd4, 0xee, 0x79, 0x7b, 0xf2, 0x7b, 0xf4, 0x81,
+ 0x46, 0x47, 0x4c, 0x2c, 0x90, 0xf6, 0xf0, 0x2c, 0xe4, 0x73, 0xe6, 0x93, 0x83, 0x10, 0x5f, 0x31,
+ 0x2b, 0xe8, 0x45, 0x18, 0xf1, 0x2f, 0x40, 0x43, 0x73, 0xa2, 0xad, 0xab, 0x9a, 0xf0, 0x7d, 0x8b,
+ 0xf0, 0x15, 0x10, 0xba, 0x06, 0x43, 0xde, 0xd5, 0xcf, 0xc9, 0x36, 0x44, 0x3c, 0x90, 0x99, 0x47,
+ 0x3b, 0x85, 0xb4, 0x1b, 0x7b, 0x3b, 0x24, 0xed, 0xc5, 0xc2, 0x7d, 0x6d, 0xb0, 0x05, 0x50, 0x78,
+ 0x96, 0x37, 0x20, 0x24, 0x27, 0xd2, 0xf3, 0x87, 0xe3, 0xed, 0xa4, 0xe7, 0x83, 0x6d, 0x2b, 0xbd,
+ 0xb0, 0xd0, 0x74, 0x1b, 0xc0, 0x15, 0x47, 0x3e, 0xd0, 0x86, 0x82, 0x03, 0x96, 0x79, 0xa4, 0x23,
+ 0x30, 0x77, 0xb7, 0xfc, 0xd1, 0xd5, 0xa9, 0xb6, 0x14, 0x3c, 0xb0, 0x6d, 0xbb, 0x15, 0x12, 0x5e,
+ 0xa1, 0x1f, 0x95, 0x60, 0x32, 0x3c, 0xb6, 0x7a, 0xa2, 0x9d, 0x9a, 0x85, 0x61, 0x85, 0x27, 0x4a,
+ 0x3b, 0x89, 0x57, 0x90, 0x0e, 0xc3, 0x3e, 0x5b, 0xf6, 0x60, 0x1b, 0x7a, 0x5e, 0xd0, 0xcc, 0x63,
+ 0x1d, 0x83, 0xda, 0xed, 0xbd, 0x97, 0xfe, 0xdc, 0x59, 0x90, 0x8f, 0x6e, 0xa7, 0xf5, 0x81, 0x18,
+ 0xe1, 0xdb, 0x6f, 0x91, 0xde, 0xf5, 0x6f, 0x4b, 0x70, 0xb4, 0x9d, 0x87, 0x3c, 0xd7, 0xae, 0x63,
+ 0xe1, 0x78, 0xe1, 0x89, 0xd7, 0xce, 0xfc, 0x1e, 0x95, 0x4e, 0xb0, 0xd7, 0x6b, 0x27, 0x9d, 0x40,
+ 0x8c, 0xb6, 0xd2, 0x69, 0xeb, 0xe8, 0xd0, 0xcb, 0x12, 0x8c, 0x07, 0xba, 0xb9, 0xd3, 0xed, 0x0c,
+ 0x53, 0x00, 0x42, 0xf8, 0x7e, 0x62, 0x94, 0x63, 0xbb, 0x06, 0x43, 0x5e, 0x2f, 0xd4, 0xce, 0x7a,
+ 0x7a, 0x20, 0xdb, 0x5a, 0xcf, 0x40, 0x2f, 0x71, 0xa7, 0x33, 0xbc, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0xff, 0x3e, 0xae, 0x3c, 0x92, 0x4c, 0xdb, 0x00, 0x00,
}
r := bytes.NewReader(gzipped)
gzipr, err := compress_gzip.NewReader(r)
@@ -2399,6 +2666,18 @@ func (this *Params) Equal(that interface{}) bool {
if this.BondDenom != that1.BondDenom {
return false
}
+ if !this.MinCommissionRate.Equal(that1.MinCommissionRate) {
+ return false
+ }
+ if !this.ValidatorBondFactor.Equal(that1.ValidatorBondFactor) {
+ return false
+ }
+ if !this.GlobalLiquidStakingCap.Equal(that1.GlobalLiquidStakingCap) {
+ return false
+ }
+ if !this.ValidatorLiquidStakingCap.Equal(that1.ValidatorLiquidStakingCap) {
+ return false
+ }
return true
}
func (this *RedelegationEntryResponse) Equal(that interface{}) bool {
@@ -2455,6 +2734,39 @@ func (this *Pool) Equal(that interface{}) bool {
}
return true
}
+func (this *TokenizeShareRecord) Equal(that interface{}) bool {
+ if that == nil {
+ return this == nil
+ }
+
+ that1, ok := that.(*TokenizeShareRecord)
+ if !ok {
+ that2, ok := that.(TokenizeShareRecord)
+ if ok {
+ that1 = &that2
+ } else {
+ return false
+ }
+ }
+ if that1 == nil {
+ return this == nil
+ } else if this == nil {
+ return false
+ }
+ if this.Id != that1.Id {
+ return false
+ }
+ if this.Owner != that1.Owner {
+ return false
+ }
+ if this.ModuleAccount != that1.ModuleAccount {
+ return false
+ }
+ if this.Validator != that1.Validator {
+ return false
+ }
+ return true
+}
func (m *HistoricalInfo) Marshal() (dAtA []byte, err error) {
size := m.Size()
dAtA = make([]byte, size)
@@ -2674,6 +2986,26 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ {
+ size := m.TotalLiquidShares.Size()
+ i -= size
+ if _, err := m.TotalLiquidShares.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintStaking(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x7a
+ {
+ size := m.TotalValidatorBondShares.Size()
+ i -= size
+ if _, err := m.TotalValidatorBondShares.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintStaking(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x72
if len(m.UnbondingIds) > 0 {
dAtA5 := make([]byte, len(m.UnbondingIds)*10)
var j4 int
@@ -2697,16 +3029,6 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x60
}
- {
- size := m.MinSelfDelegation.Size()
- i -= size
- if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- i = encodeVarintStaking(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x5a
{
size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@@ -3004,6 +3326,16 @@ func (m *Delegation) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ if m.ValidatorBond {
+ i--
+ if m.ValidatorBond {
+ dAtA[i] = 1
+ } else {
+ dAtA[i] = 0
+ }
+ i--
+ dAtA[i] = 0x20
+ }
{
size := m.Shares.Size()
i -= size
@@ -3292,6 +3624,46 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ {
+ size := m.ValidatorLiquidStakingCap.Size()
+ i -= size
+ if _, err := m.ValidatorLiquidStakingCap.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintStaking(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x4a
+ {
+ size := m.GlobalLiquidStakingCap.Size()
+ i -= size
+ if _, err := m.GlobalLiquidStakingCap.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintStaking(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x42
+ {
+ size := m.ValidatorBondFactor.Size()
+ i -= size
+ if _, err := m.ValidatorBondFactor.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintStaking(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ {
+ size := m.MinCommissionRate.Size()
+ i -= size
+ if _, err := m.MinCommissionRate.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintStaking(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
if len(m.BondDenom) > 0 {
i -= len(m.BondDenom)
copy(dAtA[i:], m.BondDenom)
@@ -3538,6 +3910,87 @@ func (m *ValidatorUpdates) MarshalToSizedBuffer(dAtA []byte) (int, error) {
return len(dAtA) - i, nil
}
+func (m *TokenizeShareRecord) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *TokenizeShareRecord) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *TokenizeShareRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Validator) > 0 {
+ i -= len(m.Validator)
+ copy(dAtA[i:], m.Validator)
+ i = encodeVarintStaking(dAtA, i, uint64(len(m.Validator)))
+ i--
+ dAtA[i] = 0x22
+ }
+ if len(m.ModuleAccount) > 0 {
+ i -= len(m.ModuleAccount)
+ copy(dAtA[i:], m.ModuleAccount)
+ i = encodeVarintStaking(dAtA, i, uint64(len(m.ModuleAccount)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Owner) > 0 {
+ i -= len(m.Owner)
+ copy(dAtA[i:], m.Owner)
+ i = encodeVarintStaking(dAtA, i, uint64(len(m.Owner)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.Id != 0 {
+ i = encodeVarintStaking(dAtA, i, uint64(m.Id))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *PendingTokenizeShareAuthorizations) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *PendingTokenizeShareAuthorizations) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *PendingTokenizeShareAuthorizations) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.Addresses) > 0 {
+ for iNdEx := len(m.Addresses) - 1; iNdEx >= 0; iNdEx-- {
+ i -= len(m.Addresses[iNdEx])
+ copy(dAtA[i:], m.Addresses[iNdEx])
+ i = encodeVarintStaking(dAtA, i, uint64(len(m.Addresses[iNdEx])))
+ i--
+ dAtA[i] = 0xa
+ }
+ }
+ return len(dAtA) - i, nil
+}
+
func encodeVarintStaking(dAtA []byte, offset int, v uint64) int {
offset -= sovStaking(v)
base := offset
@@ -3656,8 +4109,6 @@ func (m *Validator) Size() (n int) {
n += 1 + l + sovStaking(uint64(l))
l = m.Commission.Size()
n += 1 + l + sovStaking(uint64(l))
- l = m.MinSelfDelegation.Size()
- n += 1 + l + sovStaking(uint64(l))
if m.UnbondingOnHoldRefCount != 0 {
n += 1 + sovStaking(uint64(m.UnbondingOnHoldRefCount))
}
@@ -3668,6 +4119,10 @@ func (m *Validator) Size() (n int) {
}
n += 1 + sovStaking(uint64(l)) + l
}
+ l = m.TotalValidatorBondShares.Size()
+ n += 1 + l + sovStaking(uint64(l))
+ l = m.TotalLiquidShares.Size()
+ n += 1 + l + sovStaking(uint64(l))
return n
}
@@ -3770,6 +4225,9 @@ func (m *Delegation) Size() (n int) {
}
l = m.Shares.Size()
n += 1 + l + sovStaking(uint64(l))
+ if m.ValidatorBond {
+ n += 2
+ }
return n
}
@@ -3892,6 +4350,14 @@ func (m *Params) Size() (n int) {
if l > 0 {
n += 1 + l + sovStaking(uint64(l))
}
+ l = m.MinCommissionRate.Size()
+ n += 1 + l + sovStaking(uint64(l))
+ l = m.ValidatorBondFactor.Size()
+ n += 1 + l + sovStaking(uint64(l))
+ l = m.GlobalLiquidStakingCap.Size()
+ n += 1 + l + sovStaking(uint64(l))
+ l = m.ValidatorLiquidStakingCap.Size()
+ n += 1 + l + sovStaking(uint64(l))
return n
}
@@ -3966,14 +4432,53 @@ func (m *ValidatorUpdates) Size() (n int) {
return n
}
-func sovStaking(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozStaking(x uint64) (n int) {
- return sovStaking(uint64((x << 1) ^ uint64((int64(x) >> 63))))
-}
-func (this *ValAddresses) String() string {
- if this == nil {
+func (m *TokenizeShareRecord) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.Id != 0 {
+ n += 1 + sovStaking(uint64(m.Id))
+ }
+ l = len(m.Owner)
+ if l > 0 {
+ n += 1 + l + sovStaking(uint64(l))
+ }
+ l = len(m.ModuleAccount)
+ if l > 0 {
+ n += 1 + l + sovStaking(uint64(l))
+ }
+ l = len(m.Validator)
+ if l > 0 {
+ n += 1 + l + sovStaking(uint64(l))
+ }
+ return n
+}
+
+func (m *PendingTokenizeShareAuthorizations) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if len(m.Addresses) > 0 {
+ for _, s := range m.Addresses {
+ l = len(s)
+ n += 1 + l + sovStaking(uint64(l))
+ }
+ }
+ return n
+}
+
+func sovStaking(x uint64) (n int) {
+ return (math_bits.Len64(x|1) + 6) / 7
+}
+func sozStaking(x uint64) (n int) {
+ return sovStaking(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+func (this *ValAddresses) String() string {
+ if this == nil {
return "nil"
}
s := strings.Join([]string{`&ValAddresses{`,
@@ -4907,40 +5412,6 @@ func (m *Validator) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
- case 11:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowStaking
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthStaking
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthStaking
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
case 12:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field UnbondingOnHoldRefCount", wireType)
@@ -5036,6 +5507,74 @@ func (m *Validator) Unmarshal(dAtA []byte) error {
} else {
return fmt.Errorf("proto: wrong wireType = %d for field UnbondingIds", wireType)
}
+ case 14:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TotalValidatorBondShares", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.TotalValidatorBondShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 15:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TotalLiquidShares", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.TotalLiquidShares.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipStaking(dAtA[iNdEx:])
@@ -5694,6 +6233,26 @@ func (m *Delegation) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorBond", wireType)
+ }
+ var v int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ v |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ m.ValidatorBond = bool(v != 0)
default:
iNdEx = preIndex
skippy, err := skipStaking(dAtA[iNdEx:])
@@ -6610,6 +7169,142 @@ func (m *Params) Unmarshal(dAtA []byte) error {
}
m.BondDenom = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field MinCommissionRate", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.MinCommissionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorBondFactor", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.ValidatorBondFactor.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 8:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field GlobalLiquidStakingCap", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.GlobalLiquidStakingCap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 9:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorLiquidStakingCap", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.ValidatorLiquidStakingCap.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipStaking(dAtA[iNdEx:])
@@ -7183,6 +7878,253 @@ func (m *ValidatorUpdates) Unmarshal(dAtA []byte) error {
}
return nil
}
+func (m *TokenizeShareRecord) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: TokenizeShareRecord: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: TokenizeShareRecord: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
+ }
+ m.Id = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.Id |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Owner = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ModuleAccount", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ModuleAccount = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Validator = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipStaking(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *PendingTokenizeShareAuthorizations) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: PendingTokenizeShareAuthorizations: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: PendingTokenizeShareAuthorizations: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowStaking
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthStaking
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Addresses = append(m.Addresses, string(dAtA[iNdEx:postIndex]))
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipStaking(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthStaking
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
func skipStaking(dAtA []byte) (n int, err error) {
l := len(dAtA)
iNdEx := 0
diff --git a/x/staking/types/tokenize_share_record.go b/x/staking/types/tokenize_share_record.go
new file mode 100644
index 00000000000..c68a1771aa2
--- /dev/null
+++ b/x/staking/types/tokenize_share_record.go
@@ -0,0 +1,18 @@
+package types
+
+import (
+ fmt "fmt"
+ "strconv"
+ "strings"
+
+ sdk "github.com/cosmos/cosmos-sdk/types"
+ authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
+)
+
+func (r TokenizeShareRecord) GetModuleAddress() sdk.AccAddress {
+ return authtypes.NewModuleAddress(r.ModuleAccount)
+}
+
+func (r TokenizeShareRecord) GetShareTokenDenom() string {
+ return fmt.Sprintf("%s/%s", strings.ToLower(r.Validator), strconv.Itoa(int(r.Id)))
+}
diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go
index 59e3b4ba665..060afd336ba 100644
--- a/x/staking/types/tx.pb.go
+++ b/x/staking/types/tx.pb.go
@@ -38,13 +38,12 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
// MsgCreateValidator defines a SDK message for creating a new validator.
type MsgCreateValidator struct {
- Description Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description"`
- Commission CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission"`
- MinSelfDelegation github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,3,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation" yaml:"min_self_delegation"`
- DelegatorAddress string `protobuf:"bytes,4,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
- ValidatorAddress string `protobuf:"bytes,5,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"`
- Pubkey *types.Any `protobuf:"bytes,6,opt,name=pubkey,proto3" json:"pubkey,omitempty"`
- Value types1.Coin `protobuf:"bytes,7,opt,name=value,proto3" json:"value"`
+ Description Description `protobuf:"bytes,1,opt,name=description,proto3" json:"description"`
+ Commission CommissionRates `protobuf:"bytes,2,opt,name=commission,proto3" json:"commission"`
+ DelegatorAddress string `protobuf:"bytes,4,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
+ ValidatorAddress string `protobuf:"bytes,5,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"`
+ Pubkey *types.Any `protobuf:"bytes,6,opt,name=pubkey,proto3" json:"pubkey,omitempty"`
+ Value types1.Coin `protobuf:"bytes,7,opt,name=value,proto3" json:"value"`
}
func (m *MsgCreateValidator) Reset() { *m = MsgCreateValidator{} }
@@ -125,8 +124,7 @@ type MsgEditValidator struct {
// it's not mandatory to update. If not updated, the deserialized rate will be
// zero with no way to distinguish if an update was intended.
// REF: #2373
- CommissionRate *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"commission_rate,omitempty" yaml:"commission_rate"`
- MinSelfDelegation *github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,4,opt,name=min_self_delegation,json=minSelfDelegation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"min_self_delegation,omitempty" yaml:"min_self_delegation"`
+ CommissionRate *github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=commission_rate,json=commissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"commission_rate,omitempty" yaml:"commission_rate"`
}
func (m *MsgEditValidator) Reset() { *m = MsgEditValidator{} }
@@ -520,931 +518,4004 @@ func (m *MsgUndelegateResponse) GetCompletionTime() time.Time {
return time.Time{}
}
-func init() {
- proto.RegisterType((*MsgCreateValidator)(nil), "cosmos.staking.v1beta1.MsgCreateValidator")
- proto.RegisterType((*MsgCreateValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgCreateValidatorResponse")
- proto.RegisterType((*MsgEditValidator)(nil), "cosmos.staking.v1beta1.MsgEditValidator")
- proto.RegisterType((*MsgEditValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgEditValidatorResponse")
- proto.RegisterType((*MsgDelegate)(nil), "cosmos.staking.v1beta1.MsgDelegate")
- proto.RegisterType((*MsgDelegateResponse)(nil), "cosmos.staking.v1beta1.MsgDelegateResponse")
- proto.RegisterType((*MsgBeginRedelegate)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegate")
- proto.RegisterType((*MsgBeginRedelegateResponse)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegateResponse")
- proto.RegisterType((*MsgUndelegate)(nil), "cosmos.staking.v1beta1.MsgUndelegate")
- proto.RegisterType((*MsgUndelegateResponse)(nil), "cosmos.staking.v1beta1.MsgUndelegateResponse")
+// MsgUnbondValidator defines a method for performing the status transition for
+// a validator from bonded to unbonded
+type MsgUnbondValidator struct {
+ ValidatorAddress string `protobuf:"bytes,1,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"address"`
}
-func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) }
-
-var fileDescriptor_0926ef28816b35ab = []byte{
- // 861 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x56, 0x4d, 0x6b, 0xe3, 0x46,
- 0x18, 0xb6, 0x6c, 0xc7, 0x4d, 0x27, 0xe4, 0x4b, 0xf9, 0xc0, 0x11, 0xc1, 0x0a, 0x4a, 0x3f, 0x42,
- 0xdb, 0xc8, 0x4d, 0x4a, 0x29, 0xe4, 0x52, 0xe2, 0xb8, 0xa1, 0x21, 0x35, 0x14, 0x25, 0xed, 0xa1,
- 0x14, 0x8c, 0x3e, 0xc6, 0xaa, 0xb0, 0xa4, 0x51, 0x34, 0xe3, 0x10, 0x43, 0x7f, 0x40, 0x8f, 0x81,
- 0xde, 0x7a, 0xca, 0x8f, 0xe8, 0x8f, 0x08, 0x81, 0x85, 0x1c, 0x97, 0x3d, 0x78, 0x17, 0x67, 0x0f,
- 0x7b, 0xf6, 0x2f, 0x58, 0x34, 0x1a, 0xc9, 0xb2, 0xfc, 0x81, 0x09, 0xeb, 0xcb, 0x9e, 0x6c, 0x66,
- 0x9e, 0x79, 0xde, 0x79, 0x9f, 0xf7, 0x99, 0xf7, 0x15, 0x10, 0x75, 0x84, 0x1d, 0x84, 0xcb, 0x98,
- 0xa8, 0x4d, 0xcb, 0x35, 0xcb, 0xd7, 0x07, 0x1a, 0x24, 0xea, 0x41, 0x99, 0xdc, 0xc8, 0x9e, 0x8f,
- 0x08, 0xe2, 0x37, 0x43, 0x80, 0xcc, 0x00, 0x32, 0x03, 0x08, 0x5b, 0x26, 0x42, 0xa6, 0x0d, 0xcb,
- 0x14, 0xa5, 0xb5, 0x1a, 0x65, 0xd5, 0x6d, 0x87, 0x47, 0x04, 0x31, 0xbd, 0x45, 0x2c, 0x07, 0x62,
- 0xa2, 0x3a, 0x1e, 0x03, 0xac, 0x9b, 0xc8, 0x44, 0xf4, 0x6f, 0x39, 0xf8, 0xc7, 0x56, 0xb7, 0xc2,
- 0x48, 0xf5, 0x70, 0x83, 0x85, 0x0d, 0xb7, 0x4a, 0xec, 0x96, 0x9a, 0x8a, 0x61, 0x7c, 0x45, 0x1d,
- 0x59, 0x2e, 0xdb, 0xff, 0x6c, 0x4c, 0x16, 0xd1, 0xa5, 0x29, 0x4a, 0x7a, 0x91, 0x07, 0x7c, 0x0d,
- 0x9b, 0x27, 0x3e, 0x54, 0x09, 0xfc, 0x5d, 0xb5, 0x2d, 0x43, 0x25, 0xc8, 0xe7, 0xcf, 0xc1, 0x82,
- 0x01, 0xb1, 0xee, 0x5b, 0x1e, 0xb1, 0x90, 0x5b, 0xe4, 0x76, 0xb8, 0xbd, 0x85, 0xc3, 0x5d, 0x79,
- 0x74, 0xde, 0x72, 0xb5, 0x0f, 0xad, 0xe4, 0xef, 0x3b, 0x62, 0x46, 0x49, 0x9e, 0xe6, 0x6b, 0x00,
- 0xe8, 0xc8, 0x71, 0x2c, 0x8c, 0x03, 0xae, 0x2c, 0xe5, 0xfa, 0x72, 0x1c, 0xd7, 0x49, 0x8c, 0x54,
- 0x54, 0x02, 0x31, 0xe3, 0x4b, 0x10, 0xf0, 0x7f, 0x83, 0x35, 0xc7, 0x72, 0xeb, 0x18, 0xda, 0x8d,
- 0xba, 0x01, 0x6d, 0x68, 0xaa, 0xf4, 0x8e, 0xb9, 0x1d, 0x6e, 0xef, 0xd3, 0xca, 0x2f, 0x01, 0xfc,
- 0x55, 0x47, 0xfc, 0xc2, 0xb4, 0xc8, 0x5f, 0x2d, 0x4d, 0xd6, 0x91, 0xc3, 0x64, 0x63, 0x3f, 0xfb,
- 0xd8, 0x68, 0x96, 0x49, 0xdb, 0x83, 0x58, 0x3e, 0x73, 0x49, 0xaf, 0x23, 0x0a, 0x6d, 0xd5, 0xb1,
- 0x8f, 0xa4, 0x11, 0x94, 0x92, 0xb2, 0xea, 0x58, 0xee, 0x05, 0xb4, 0x1b, 0xd5, 0x78, 0x8d, 0x3f,
- 0x03, 0xab, 0x0c, 0x81, 0xfc, 0xba, 0x6a, 0x18, 0x3e, 0xc4, 0xb8, 0x98, 0xa7, 0xb1, 0xb7, 0x7b,
- 0x1d, 0xb1, 0x18, 0xb2, 0x0d, 0x41, 0x24, 0x65, 0x25, 0x5e, 0x3b, 0x0e, 0x97, 0x02, 0xaa, 0xeb,
- 0x48, 0xf1, 0x98, 0x6a, 0x2e, 0x4d, 0x35, 0x04, 0x91, 0x94, 0x95, 0x78, 0x2d, 0xa2, 0x3a, 0x05,
- 0x05, 0xaf, 0xa5, 0x35, 0x61, 0xbb, 0x58, 0xa0, 0xf2, 0xae, 0xcb, 0xa1, 0xdf, 0xe4, 0xc8, 0x6f,
- 0xf2, 0xb1, 0xdb, 0xae, 0x14, 0x1f, 0xfe, 0xdf, 0x5f, 0x67, 0xba, 0xeb, 0x7e, 0xdb, 0x23, 0x48,
- 0xfe, 0xb5, 0xa5, 0x9d, 0xc3, 0xb6, 0xc2, 0x4e, 0xf3, 0xdf, 0x83, 0xb9, 0x6b, 0xd5, 0x6e, 0xc1,
- 0xe2, 0x27, 0x94, 0x66, 0x2b, 0xaa, 0x52, 0x60, 0xb2, 0x44, 0x89, 0xac, 0xa8, 0xce, 0x21, 0xfa,
- 0x68, 0xfe, 0x9f, 0x3b, 0x31, 0xf3, 0xee, 0x4e, 0xcc, 0x48, 0xdb, 0x40, 0x18, 0xb6, 0x93, 0x02,
- 0xb1, 0x87, 0x5c, 0x0c, 0xa5, 0x7f, 0x73, 0x60, 0xa5, 0x86, 0xcd, 0x9f, 0x0c, 0x8b, 0xcc, 0xc8,
- 0x6b, 0x3f, 0x8e, 0xd2, 0x34, 0x4b, 0x35, 0xe5, 0x7b, 0x1d, 0x71, 0x29, 0xd4, 0x74, 0x82, 0x92,
- 0x0e, 0x58, 0xee, 0x7b, 0xad, 0xee, 0xab, 0x04, 0x32, 0x67, 0x55, 0xa7, 0x74, 0x55, 0x15, 0xea,
- 0xbd, 0x8e, 0xb8, 0x19, 0x06, 0x4a, 0x51, 0x49, 0xca, 0x92, 0x3e, 0xe0, 0x6f, 0xfe, 0x66, 0xb4,
- 0x99, 0x43, 0x43, 0xfd, 0x3c, 0x43, 0x23, 0x27, 0x6a, 0x26, 0x80, 0x62, 0xba, 0x28, 0x71, 0xc5,
- 0xba, 0x1c, 0x58, 0xa8, 0x61, 0x93, 0x9d, 0x83, 0xa3, 0xed, 0xcf, 0x7d, 0x38, 0xfb, 0x67, 0x9f,
- 0x65, 0xff, 0x1f, 0x40, 0x41, 0x75, 0x50, 0xcb, 0x25, 0xb4, 0x56, 0x53, 0xf8, 0x96, 0xc1, 0x8f,
- 0xf2, 0x54, 0x80, 0x0d, 0xb0, 0x96, 0xc8, 0x31, 0xce, 0xfd, 0x21, 0x4b, 0x7b, 0x63, 0x05, 0x9a,
- 0x96, 0xab, 0x40, 0x63, 0x06, 0x12, 0x5c, 0x82, 0x8d, 0x7e, 0x7e, 0xd8, 0xd7, 0x53, 0x32, 0xec,
- 0xf4, 0x3a, 0xe2, 0x76, 0x5a, 0x86, 0x04, 0x4c, 0x52, 0xd6, 0xe2, 0xf5, 0x0b, 0x5f, 0x1f, 0xc9,
- 0x6a, 0x60, 0x12, 0xb3, 0xe6, 0xc6, 0xb3, 0x26, 0x60, 0x49, 0xd6, 0x2a, 0x26, 0xc3, 0x1a, 0xe7,
- 0x9f, 0xa3, 0x71, 0x93, 0x36, 0x86, 0x94, 0x96, 0x91, 0xd4, 0x7c, 0x8d, 0xbe, 0x3a, 0xcf, 0x86,
- 0x81, 0x35, 0xeb, 0xc1, 0x6c, 0x64, 0x7d, 0x40, 0x18, 0x6a, 0x64, 0x97, 0xd1, 0xe0, 0xac, 0xcc,
- 0x07, 0x61, 0x6e, 0x5f, 0x8b, 0x1c, 0x7d, 0x55, 0xec, 0x70, 0xb0, 0x2d, 0xbd, 0xe5, 0xc0, 0x62,
- 0x0d, 0x9b, 0xbf, 0xb9, 0xc6, 0x47, 0xed, 0xdb, 0x06, 0xd8, 0x18, 0xc8, 0x72, 0x46, 0x72, 0x1e,
- 0xfe, 0x97, 0x07, 0xb9, 0x1a, 0x36, 0xf9, 0x2b, 0xb0, 0x9c, 0xfe, 0x50, 0xf8, 0x6a, 0x5c, 0x9f,
- 0x1e, 0x9e, 0x02, 0xc2, 0xe1, 0xf4, 0xd8, 0x38, 0x93, 0x26, 0x58, 0x1c, 0x9c, 0x16, 0x7b, 0x13,
- 0x48, 0x06, 0x90, 0xc2, 0xb7, 0xd3, 0x22, 0xe3, 0x60, 0x7f, 0x82, 0xf9, 0xb8, 0xd1, 0xed, 0x4e,
- 0x38, 0x1d, 0x81, 0x84, 0xaf, 0xa7, 0x00, 0xc5, 0xec, 0x57, 0x60, 0x39, 0xdd, 0x4a, 0x26, 0xa9,
- 0x97, 0xc2, 0x4e, 0x54, 0x6f, 0xdc, 0xb3, 0xd2, 0x00, 0x48, 0xbc, 0x81, 0xcf, 0x27, 0x30, 0xf4,
- 0x61, 0xc2, 0xfe, 0x54, 0xb0, 0x28, 0x46, 0xe5, 0xf4, 0xbe, 0x5b, 0xe2, 0x1e, 0xbb, 0x25, 0xee,
- 0x4d, 0xb7, 0xc4, 0xdd, 0x3e, 0x95, 0x32, 0x8f, 0x4f, 0xa5, 0xcc, 0xcb, 0xa7, 0x52, 0xe6, 0x8f,
- 0x6f, 0x26, 0x8e, 0xae, 0x9b, 0xf8, 0xcb, 0x94, 0x0e, 0x31, 0xad, 0x40, 0x2d, 0xf9, 0xdd, 0xfb,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0x99, 0xdc, 0x0e, 0x15, 0x7e, 0x0b, 0x00, 0x00,
+func (m *MsgUnbondValidator) Reset() { *m = MsgUnbondValidator{} }
+func (m *MsgUnbondValidator) String() string { return proto.CompactTextString(m) }
+func (*MsgUnbondValidator) ProtoMessage() {}
+func (*MsgUnbondValidator) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{10}
+}
+func (m *MsgUnbondValidator) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgUnbondValidator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgUnbondValidator.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *MsgUnbondValidator) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgUnbondValidator.Merge(m, src)
+}
+func (m *MsgUnbondValidator) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgUnbondValidator) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgUnbondValidator.DiscardUnknown(m)
}
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
+var xxx_messageInfo_MsgUnbondValidator proto.InternalMessageInfo
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
+func (m *MsgUnbondValidator) GetValidatorAddress() string {
+ if m != nil {
+ return m.ValidatorAddress
+ }
+ return ""
+}
-// MsgClient is the client API for Msg service.
-//
-// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
-type MsgClient interface {
- // CreateValidator defines a method for creating a new validator.
- CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error)
- // EditValidator defines a method for editing an existing validator.
- EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error)
- // Delegate defines a method for performing a delegation of coins
- // from a delegator to a validator.
- Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error)
- // BeginRedelegate defines a method for performing a redelegation
- // of coins from a delegator and source validator to a destination validator.
- BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error)
- // Undelegate defines a method for performing an undelegation from a
- // delegate and a validator.
- Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error)
+// MsgUnbondValidatorResponse defines the Msg/UnbondValidator response type.
+type MsgUnbondValidatorResponse struct {
}
-type msgClient struct {
- cc grpc1.ClientConn
+func (m *MsgUnbondValidatorResponse) Reset() { *m = MsgUnbondValidatorResponse{} }
+func (m *MsgUnbondValidatorResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgUnbondValidatorResponse) ProtoMessage() {}
+func (*MsgUnbondValidatorResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{11}
+}
+func (m *MsgUnbondValidatorResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgUnbondValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgUnbondValidatorResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
+}
+func (m *MsgUnbondValidatorResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgUnbondValidatorResponse.Merge(m, src)
+}
+func (m *MsgUnbondValidatorResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgUnbondValidatorResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgUnbondValidatorResponse.DiscardUnknown(m)
}
-func NewMsgClient(cc grpc1.ClientConn) MsgClient {
- return &msgClient{cc}
+var xxx_messageInfo_MsgUnbondValidatorResponse proto.InternalMessageInfo
+
+// MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator
+//
+// Since: cosmos-sdk 0.46
+type MsgCancelUnbondingDelegation struct {
+ DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
+ ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"`
+ // amount is always less than or equal to unbonding delegation entry balance
+ Amount types1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount"`
+ // creation_height is the height which the unbonding took place.
+ CreationHeight int64 `protobuf:"varint,4,opt,name=creation_height,json=creationHeight,proto3" json:"creation_height,omitempty"`
}
-func (c *msgClient) CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) {
- out := new(MsgCreateValidatorResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CreateValidator", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *MsgCancelUnbondingDelegation) Reset() { *m = MsgCancelUnbondingDelegation{} }
+func (m *MsgCancelUnbondingDelegation) String() string { return proto.CompactTextString(m) }
+func (*MsgCancelUnbondingDelegation) ProtoMessage() {}
+func (*MsgCancelUnbondingDelegation) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{12}
+}
+func (m *MsgCancelUnbondingDelegation) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgCancelUnbondingDelegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgCancelUnbondingDelegation.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return out, nil
+}
+func (m *MsgCancelUnbondingDelegation) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgCancelUnbondingDelegation.Merge(m, src)
+}
+func (m *MsgCancelUnbondingDelegation) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgCancelUnbondingDelegation) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgCancelUnbondingDelegation.DiscardUnknown(m)
}
-func (c *msgClient) EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) {
- out := new(MsgEditValidatorResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EditValidator", in, out, opts...)
- if err != nil {
- return nil, err
+var xxx_messageInfo_MsgCancelUnbondingDelegation proto.InternalMessageInfo
+
+func (m *MsgCancelUnbondingDelegation) GetDelegatorAddress() string {
+ if m != nil {
+ return m.DelegatorAddress
}
- return out, nil
+ return ""
}
-func (c *msgClient) Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) {
- out := new(MsgDelegateResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Delegate", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *MsgCancelUnbondingDelegation) GetValidatorAddress() string {
+ if m != nil {
+ return m.ValidatorAddress
}
- return out, nil
+ return ""
}
-func (c *msgClient) BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) {
- out := new(MsgBeginRedelegateResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/BeginRedelegate", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *MsgCancelUnbondingDelegation) GetAmount() types1.Coin {
+ if m != nil {
+ return m.Amount
}
- return out, nil
+ return types1.Coin{}
}
-func (c *msgClient) Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) {
- out := new(MsgUndelegateResponse)
- err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Undelegate", in, out, opts...)
- if err != nil {
- return nil, err
+func (m *MsgCancelUnbondingDelegation) GetCreationHeight() int64 {
+ if m != nil {
+ return m.CreationHeight
}
- return out, nil
+ return 0
}
-// MsgServer is the server API for Msg service.
-type MsgServer interface {
- // CreateValidator defines a method for creating a new validator.
- CreateValidator(context.Context, *MsgCreateValidator) (*MsgCreateValidatorResponse, error)
- // EditValidator defines a method for editing an existing validator.
- EditValidator(context.Context, *MsgEditValidator) (*MsgEditValidatorResponse, error)
- // Delegate defines a method for performing a delegation of coins
- // from a delegator to a validator.
- Delegate(context.Context, *MsgDelegate) (*MsgDelegateResponse, error)
- // BeginRedelegate defines a method for performing a redelegation
- // of coins from a delegator and source validator to a destination validator.
- BeginRedelegate(context.Context, *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error)
- // Undelegate defines a method for performing an undelegation from a
- // delegate and a validator.
- Undelegate(context.Context, *MsgUndelegate) (*MsgUndelegateResponse, error)
+// MsgCancelUnbondingDelegationResponse
+//
+// Since: cosmos-sdk 0.46
+type MsgCancelUnbondingDelegationResponse struct {
}
-// UnimplementedMsgServer can be embedded to have forward compatible implementations.
-type UnimplementedMsgServer struct {
+func (m *MsgCancelUnbondingDelegationResponse) Reset() { *m = MsgCancelUnbondingDelegationResponse{} }
+func (m *MsgCancelUnbondingDelegationResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgCancelUnbondingDelegationResponse) ProtoMessage() {}
+func (*MsgCancelUnbondingDelegationResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{13}
}
-
-func (*UnimplementedMsgServer) CreateValidator(ctx context.Context, req *MsgCreateValidator) (*MsgCreateValidatorResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method CreateValidator not implemented")
+func (m *MsgCancelUnbondingDelegationResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
}
-func (*UnimplementedMsgServer) EditValidator(ctx context.Context, req *MsgEditValidator) (*MsgEditValidatorResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method EditValidator not implemented")
+func (m *MsgCancelUnbondingDelegationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgCancelUnbondingDelegationResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
+ }
}
-func (*UnimplementedMsgServer) Delegate(ctx context.Context, req *MsgDelegate) (*MsgDelegateResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Delegate not implemented")
+func (m *MsgCancelUnbondingDelegationResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgCancelUnbondingDelegationResponse.Merge(m, src)
}
-func (*UnimplementedMsgServer) BeginRedelegate(ctx context.Context, req *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method BeginRedelegate not implemented")
+func (m *MsgCancelUnbondingDelegationResponse) XXX_Size() int {
+ return m.Size()
}
-func (*UnimplementedMsgServer) Undelegate(ctx context.Context, req *MsgUndelegate) (*MsgUndelegateResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method Undelegate not implemented")
+func (m *MsgCancelUnbondingDelegationResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgCancelUnbondingDelegationResponse.DiscardUnknown(m)
}
-func RegisterMsgServer(s grpc1.Server, srv MsgServer) {
- s.RegisterService(&_Msg_serviceDesc, srv)
+var xxx_messageInfo_MsgCancelUnbondingDelegationResponse proto.InternalMessageInfo
+
+// MsgTokenizeShares tokenizes a delegation
+type MsgTokenizeShares struct {
+ DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
+ ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"`
+ Amount types1.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount"`
+ TokenizedShareOwner string `protobuf:"bytes,4,opt,name=tokenized_share_owner,json=tokenizedShareOwner,proto3" json:"tokenized_share_owner,omitempty"`
}
-func _Msg_CreateValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MsgCreateValidator)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).CreateValidator(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Msg/CreateValidator",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).CreateValidator(ctx, req.(*MsgCreateValidator))
+func (m *MsgTokenizeShares) Reset() { *m = MsgTokenizeShares{} }
+func (m *MsgTokenizeShares) String() string { return proto.CompactTextString(m) }
+func (*MsgTokenizeShares) ProtoMessage() {}
+func (*MsgTokenizeShares) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{14}
+}
+func (m *MsgTokenizeShares) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgTokenizeShares.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
+}
+func (m *MsgTokenizeShares) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgTokenizeShares.Merge(m, src)
+}
+func (m *MsgTokenizeShares) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgTokenizeShares) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgTokenizeShares.DiscardUnknown(m)
}
-func _Msg_EditValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MsgEditValidator)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).EditValidator(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Msg/EditValidator",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).EditValidator(ctx, req.(*MsgEditValidator))
- }
- return interceptor(ctx, in, info, handler)
+var xxx_messageInfo_MsgTokenizeShares proto.InternalMessageInfo
+
+// MsgTokenizeSharesResponse defines the Msg/MsgTokenizeShares response type.
+type MsgTokenizeSharesResponse struct {
+ Amount types1.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount"`
}
-func _Msg_Delegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MsgDelegate)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).Delegate(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Msg/Delegate",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).Delegate(ctx, req.(*MsgDelegate))
+func (m *MsgTokenizeSharesResponse) Reset() { *m = MsgTokenizeSharesResponse{} }
+func (m *MsgTokenizeSharesResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgTokenizeSharesResponse) ProtoMessage() {}
+func (*MsgTokenizeSharesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{15}
+}
+func (m *MsgTokenizeSharesResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgTokenizeSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgTokenizeSharesResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return interceptor(ctx, in, info, handler)
}
-
-func _Msg_BeginRedelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MsgBeginRedelegate)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).BeginRedelegate(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Msg/BeginRedelegate",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).BeginRedelegate(ctx, req.(*MsgBeginRedelegate))
- }
- return interceptor(ctx, in, info, handler)
+func (m *MsgTokenizeSharesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgTokenizeSharesResponse.Merge(m, src)
+}
+func (m *MsgTokenizeSharesResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgTokenizeSharesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgTokenizeSharesResponse.DiscardUnknown(m)
}
-func _Msg_Undelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
- in := new(MsgUndelegate)
- if err := dec(in); err != nil {
- return nil, err
- }
- if interceptor == nil {
- return srv.(MsgServer).Undelegate(ctx, in)
- }
- info := &grpc.UnaryServerInfo{
- Server: srv,
- FullMethod: "/cosmos.staking.v1beta1.Msg/Undelegate",
- }
- handler := func(ctx context.Context, req interface{}) (interface{}, error) {
- return srv.(MsgServer).Undelegate(ctx, req.(*MsgUndelegate))
+var xxx_messageInfo_MsgTokenizeSharesResponse proto.InternalMessageInfo
+
+func (m *MsgTokenizeSharesResponse) GetAmount() types1.Coin {
+ if m != nil {
+ return m.Amount
}
- return interceptor(ctx, in, info, handler)
+ return types1.Coin{}
}
-var _Msg_serviceDesc = grpc.ServiceDesc{
- ServiceName: "cosmos.staking.v1beta1.Msg",
- HandlerType: (*MsgServer)(nil),
- Methods: []grpc.MethodDesc{
- {
- MethodName: "CreateValidator",
- Handler: _Msg_CreateValidator_Handler,
- },
- {
- MethodName: "EditValidator",
- Handler: _Msg_EditValidator_Handler,
- },
- {
- MethodName: "Delegate",
- Handler: _Msg_Delegate_Handler,
- },
- {
- MethodName: "BeginRedelegate",
- Handler: _Msg_BeginRedelegate_Handler,
- },
- {
- MethodName: "Undelegate",
- Handler: _Msg_Undelegate_Handler,
- },
- },
- Streams: []grpc.StreamDesc{},
- Metadata: "cosmos/staking/v1beta1/tx.proto",
+// MsgRedeemTokensForShares redeems a tokenized share back into a native delegation
+type MsgRedeemTokensForShares struct {
+ DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
+ Amount types1.Coin `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount"`
}
-func (m *MsgCreateValidator) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+func (m *MsgRedeemTokensForShares) Reset() { *m = MsgRedeemTokensForShares{} }
+func (m *MsgRedeemTokensForShares) String() string { return proto.CompactTextString(m) }
+func (*MsgRedeemTokensForShares) ProtoMessage() {}
+func (*MsgRedeemTokensForShares) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{16}
+}
+func (m *MsgRedeemTokensForShares) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgRedeemTokensForShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgRedeemTokensForShares.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return dAtA[:n], nil
+}
+func (m *MsgRedeemTokensForShares) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgRedeemTokensForShares.Merge(m, src)
+}
+func (m *MsgRedeemTokensForShares) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgRedeemTokensForShares) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgRedeemTokensForShares.DiscardUnknown(m)
}
-func (m *MsgCreateValidator) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+var xxx_messageInfo_MsgRedeemTokensForShares proto.InternalMessageInfo
+
+// MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares response type.
+type MsgRedeemTokensForSharesResponse struct {
+ Amount types1.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount"`
}
-func (m *MsgCreateValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Value.MarshalToSizedBuffer(dAtA[:i])
+func (m *MsgRedeemTokensForSharesResponse) Reset() { *m = MsgRedeemTokensForSharesResponse{} }
+func (m *MsgRedeemTokensForSharesResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgRedeemTokensForSharesResponse) ProtoMessage() {}
+func (*MsgRedeemTokensForSharesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{17}
+}
+func (m *MsgRedeemTokensForSharesResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgRedeemTokensForSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgRedeemTokensForSharesResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x3a
- if m.Pubkey != nil {
- {
- size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
+ return nil, err
}
- i--
- dAtA[i] = 0x32
- }
- if len(m.ValidatorAddress) > 0 {
- i -= len(m.ValidatorAddress)
- copy(dAtA[i:], m.ValidatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
- i--
- dAtA[i] = 0x2a
- }
- if len(m.DelegatorAddress) > 0 {
- i -= len(m.DelegatorAddress)
- copy(dAtA[i:], m.DelegatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
- i--
- dAtA[i] = 0x22
+ return b[:n], nil
}
- {
- size := m.MinSelfDelegation.Size()
- i -= size
- if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- i = encodeVarintTx(dAtA, i, uint64(size))
+}
+func (m *MsgRedeemTokensForSharesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgRedeemTokensForSharesResponse.Merge(m, src)
+}
+func (m *MsgRedeemTokensForSharesResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgRedeemTokensForSharesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgRedeemTokensForSharesResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MsgRedeemTokensForSharesResponse proto.InternalMessageInfo
+
+func (m *MsgRedeemTokensForSharesResponse) GetAmount() types1.Coin {
+ if m != nil {
+ return m.Amount
}
- i--
- dAtA[i] = 0x1a
- {
- size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i])
+ return types1.Coin{}
+}
+
+// MsgTransferTokenizeShareRecord transfer a tokenize share record
+type MsgTransferTokenizeShareRecord struct {
+ TokenizeShareRecordId uint64 `protobuf:"varint,1,opt,name=tokenize_share_record_id,json=tokenizeShareRecordId,proto3" json:"tokenize_share_record_id,omitempty"`
+ Sender string `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"`
+ NewOwner string `protobuf:"bytes,3,opt,name=new_owner,json=newOwner,proto3" json:"new_owner,omitempty"`
+}
+
+func (m *MsgTransferTokenizeShareRecord) Reset() { *m = MsgTransferTokenizeShareRecord{} }
+func (m *MsgTransferTokenizeShareRecord) String() string { return proto.CompactTextString(m) }
+func (*MsgTransferTokenizeShareRecord) ProtoMessage() {}
+func (*MsgTransferTokenizeShareRecord) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{18}
+}
+func (m *MsgTransferTokenizeShareRecord) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgTransferTokenizeShareRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgTransferTokenizeShareRecord.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
if err != nil {
- return 0, err
+ return nil, err
}
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
+ return b[:n], nil
}
- i--
- dAtA[i] = 0x12
- {
- size, err := m.Description.MarshalToSizedBuffer(dAtA[:i])
+}
+func (m *MsgTransferTokenizeShareRecord) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgTransferTokenizeShareRecord.Merge(m, src)
+}
+func (m *MsgTransferTokenizeShareRecord) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgTransferTokenizeShareRecord) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgTransferTokenizeShareRecord.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_MsgTransferTokenizeShareRecord proto.InternalMessageInfo
+
+// MsgTransferTokenizeShareRecordResponse defines the Msg/MsgTransferTokenizeShareRecord response type.
+type MsgTransferTokenizeShareRecordResponse struct {
+}
+
+func (m *MsgTransferTokenizeShareRecordResponse) Reset() {
+ *m = MsgTransferTokenizeShareRecordResponse{}
+}
+func (m *MsgTransferTokenizeShareRecordResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgTransferTokenizeShareRecordResponse) ProtoMessage() {}
+func (*MsgTransferTokenizeShareRecordResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{19}
+}
+func (m *MsgTransferTokenizeShareRecordResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgTransferTokenizeShareRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgTransferTokenizeShareRecordResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
if err != nil {
- return 0, err
+ return nil, err
}
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
+ return b[:n], nil
}
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
}
-
-func (m *MsgCreateValidatorResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
+func (m *MsgTransferTokenizeShareRecordResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgTransferTokenizeShareRecordResponse.Merge(m, src)
}
-
-func (m *MsgCreateValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (m *MsgTransferTokenizeShareRecordResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgTransferTokenizeShareRecordResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgTransferTokenizeShareRecordResponse.DiscardUnknown(m)
}
-func (m *MsgCreateValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- return len(dAtA) - i, nil
+var xxx_messageInfo_MsgTransferTokenizeShareRecordResponse proto.InternalMessageInfo
+
+// MsgDisableTokenizeShares prevents the tokenization of shares for a given address
+type MsgDisableTokenizeShares struct {
+ DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
}
-func (m *MsgEditValidator) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+func (m *MsgDisableTokenizeShares) Reset() { *m = MsgDisableTokenizeShares{} }
+func (m *MsgDisableTokenizeShares) String() string { return proto.CompactTextString(m) }
+func (*MsgDisableTokenizeShares) ProtoMessage() {}
+func (*MsgDisableTokenizeShares) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{20}
+}
+func (m *MsgDisableTokenizeShares) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgDisableTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgDisableTokenizeShares.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return dAtA[:n], nil
+}
+func (m *MsgDisableTokenizeShares) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgDisableTokenizeShares.Merge(m, src)
+}
+func (m *MsgDisableTokenizeShares) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgDisableTokenizeShares) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgDisableTokenizeShares.DiscardUnknown(m)
}
-func (m *MsgEditValidator) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+var xxx_messageInfo_MsgDisableTokenizeShares proto.InternalMessageInfo
+
+// MsgDisableTokenizeSharesResponse defines the Msg/DisableTokenizeShares response type.
+type MsgDisableTokenizeSharesResponse struct {
}
-func (m *MsgEditValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- if m.MinSelfDelegation != nil {
- {
- size := m.MinSelfDelegation.Size()
- i -= size
- if _, err := m.MinSelfDelegation.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- i = encodeVarintTx(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- if m.CommissionRate != nil {
- {
- size := m.CommissionRate.Size()
- i -= size
- if _, err := m.CommissionRate.MarshalTo(dAtA[i:]); err != nil {
- return 0, err
- }
- i = encodeVarintTx(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- if len(m.ValidatorAddress) > 0 {
- i -= len(m.ValidatorAddress)
- copy(dAtA[i:], m.ValidatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
- i--
- dAtA[i] = 0x12
- }
- {
- size, err := m.Description.MarshalToSizedBuffer(dAtA[:i])
+func (m *MsgDisableTokenizeSharesResponse) Reset() { *m = MsgDisableTokenizeSharesResponse{} }
+func (m *MsgDisableTokenizeSharesResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgDisableTokenizeSharesResponse) ProtoMessage() {}
+func (*MsgDisableTokenizeSharesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{21}
+}
+func (m *MsgDisableTokenizeSharesResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgDisableTokenizeSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgDisableTokenizeSharesResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
if err != nil {
- return 0, err
+ return nil, err
}
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
+ return b[:n], nil
}
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
}
-
-func (m *MsgEditValidatorResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
+func (m *MsgDisableTokenizeSharesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgDisableTokenizeSharesResponse.Merge(m, src)
}
-
-func (m *MsgEditValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (m *MsgDisableTokenizeSharesResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgDisableTokenizeSharesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgDisableTokenizeSharesResponse.DiscardUnknown(m)
}
-func (m *MsgEditValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- return len(dAtA) - i, nil
+var xxx_messageInfo_MsgDisableTokenizeSharesResponse proto.InternalMessageInfo
+
+// MsgEnableTokenizeShares re-enables tokenization of shares for a given address
+type MsgEnableTokenizeShares struct {
+ DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
}
-func (m *MsgDelegate) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+func (m *MsgEnableTokenizeShares) Reset() { *m = MsgEnableTokenizeShares{} }
+func (m *MsgEnableTokenizeShares) String() string { return proto.CompactTextString(m) }
+func (*MsgEnableTokenizeShares) ProtoMessage() {}
+func (*MsgEnableTokenizeShares) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{22}
+}
+func (m *MsgEnableTokenizeShares) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgEnableTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgEnableTokenizeShares.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return dAtA[:n], nil
+}
+func (m *MsgEnableTokenizeShares) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgEnableTokenizeShares.Merge(m, src)
+}
+func (m *MsgEnableTokenizeShares) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgEnableTokenizeShares) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgEnableTokenizeShares.DiscardUnknown(m)
}
-func (m *MsgDelegate) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+var xxx_messageInfo_MsgEnableTokenizeShares proto.InternalMessageInfo
+
+// MsgEnableTokenizeSharesResponse defines the Msg/EnableTokenizeShares response type.
+type MsgEnableTokenizeSharesResponse struct {
+ CompletionTime time.Time `protobuf:"bytes,1,opt,name=completion_time,json=completionTime,proto3,stdtime" json:"completion_time"`
}
-func (m *MsgDelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+func (m *MsgEnableTokenizeSharesResponse) Reset() { *m = MsgEnableTokenizeSharesResponse{} }
+func (m *MsgEnableTokenizeSharesResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgEnableTokenizeSharesResponse) ProtoMessage() {}
+func (*MsgEnableTokenizeSharesResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{23}
+}
+func (m *MsgEnableTokenizeSharesResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgEnableTokenizeSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgEnableTokenizeSharesResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
if err != nil {
- return 0, err
+ return nil, err
}
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- if len(m.ValidatorAddress) > 0 {
- i -= len(m.ValidatorAddress)
- copy(dAtA[i:], m.ValidatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.DelegatorAddress) > 0 {
- i -= len(m.DelegatorAddress)
- copy(dAtA[i:], m.DelegatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
- i--
- dAtA[i] = 0xa
+ return b[:n], nil
}
- return len(dAtA) - i, nil
+}
+func (m *MsgEnableTokenizeSharesResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgEnableTokenizeSharesResponse.Merge(m, src)
+}
+func (m *MsgEnableTokenizeSharesResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgEnableTokenizeSharesResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgEnableTokenizeSharesResponse.DiscardUnknown(m)
}
-func (m *MsgDelegateResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+var xxx_messageInfo_MsgEnableTokenizeSharesResponse proto.InternalMessageInfo
+
+func (m *MsgEnableTokenizeSharesResponse) GetCompletionTime() time.Time {
+ if m != nil {
+ return m.CompletionTime
}
- return dAtA[:n], nil
+ return time.Time{}
}
-func (m *MsgDelegateResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+// MsgValidatorBond defines a SDK message for performing validator self-bond of delegated coins
+// from a delegator to a validator.
+type MsgValidatorBond struct {
+ DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"`
+ ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty" yaml:"validator_address"`
}
-func (m *MsgDelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- return len(dAtA) - i, nil
+func (m *MsgValidatorBond) Reset() { *m = MsgValidatorBond{} }
+func (m *MsgValidatorBond) String() string { return proto.CompactTextString(m) }
+func (*MsgValidatorBond) ProtoMessage() {}
+func (*MsgValidatorBond) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{24}
}
-
-func (m *MsgBeginRedelegate) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
+func (m *MsgValidatorBond) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgValidatorBond) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgValidatorBond.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
+ if err != nil {
+ return nil, err
+ }
+ return b[:n], nil
}
- return dAtA[:n], nil
+}
+func (m *MsgValidatorBond) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgValidatorBond.Merge(m, src)
+}
+func (m *MsgValidatorBond) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgValidatorBond) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgValidatorBond.DiscardUnknown(m)
}
-func (m *MsgBeginRedelegate) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+var xxx_messageInfo_MsgValidatorBond proto.InternalMessageInfo
+
+// MsgValidatorBondResponse defines the Msg/ValidatorBond response type.
+type MsgValidatorBondResponse struct {
}
-func (m *MsgBeginRedelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+func (m *MsgValidatorBondResponse) Reset() { *m = MsgValidatorBondResponse{} }
+func (m *MsgValidatorBondResponse) String() string { return proto.CompactTextString(m) }
+func (*MsgValidatorBondResponse) ProtoMessage() {}
+func (*MsgValidatorBondResponse) Descriptor() ([]byte, []int) {
+ return fileDescriptor_0926ef28816b35ab, []int{25}
+}
+func (m *MsgValidatorBondResponse) XXX_Unmarshal(b []byte) error {
+ return m.Unmarshal(b)
+}
+func (m *MsgValidatorBondResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+ if deterministic {
+ return xxx_messageInfo_MsgValidatorBondResponse.Marshal(b, m, deterministic)
+ } else {
+ b = b[:cap(b)]
+ n, err := m.MarshalToSizedBuffer(b)
if err != nil {
- return 0, err
+ return nil, err
}
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- if len(m.ValidatorDstAddress) > 0 {
- i -= len(m.ValidatorDstAddress)
- copy(dAtA[i:], m.ValidatorDstAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorDstAddress)))
- i--
- dAtA[i] = 0x1a
- }
- if len(m.ValidatorSrcAddress) > 0 {
- i -= len(m.ValidatorSrcAddress)
- copy(dAtA[i:], m.ValidatorSrcAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorSrcAddress)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.DelegatorAddress) > 0 {
- i -= len(m.DelegatorAddress)
- copy(dAtA[i:], m.DelegatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
- i--
- dAtA[i] = 0xa
+ return b[:n], nil
}
- return len(dAtA) - i, nil
+}
+func (m *MsgValidatorBondResponse) XXX_Merge(src proto.Message) {
+ xxx_messageInfo_MsgValidatorBondResponse.Merge(m, src)
+}
+func (m *MsgValidatorBondResponse) XXX_Size() int {
+ return m.Size()
+}
+func (m *MsgValidatorBondResponse) XXX_DiscardUnknown() {
+ xxx_messageInfo_MsgValidatorBondResponse.DiscardUnknown(m)
}
-func (m *MsgBeginRedelegateResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
- if err != nil {
- return nil, err
- }
- return dAtA[:n], nil
+var xxx_messageInfo_MsgValidatorBondResponse proto.InternalMessageInfo
+
+func init() {
+ proto.RegisterType((*MsgCreateValidator)(nil), "cosmos.staking.v1beta1.MsgCreateValidator")
+ proto.RegisterType((*MsgCreateValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgCreateValidatorResponse")
+ proto.RegisterType((*MsgEditValidator)(nil), "cosmos.staking.v1beta1.MsgEditValidator")
+ proto.RegisterType((*MsgEditValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgEditValidatorResponse")
+ proto.RegisterType((*MsgDelegate)(nil), "cosmos.staking.v1beta1.MsgDelegate")
+ proto.RegisterType((*MsgDelegateResponse)(nil), "cosmos.staking.v1beta1.MsgDelegateResponse")
+ proto.RegisterType((*MsgBeginRedelegate)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegate")
+ proto.RegisterType((*MsgBeginRedelegateResponse)(nil), "cosmos.staking.v1beta1.MsgBeginRedelegateResponse")
+ proto.RegisterType((*MsgUndelegate)(nil), "cosmos.staking.v1beta1.MsgUndelegate")
+ proto.RegisterType((*MsgUndelegateResponse)(nil), "cosmos.staking.v1beta1.MsgUndelegateResponse")
+ proto.RegisterType((*MsgUnbondValidator)(nil), "cosmos.staking.v1beta1.MsgUnbondValidator")
+ proto.RegisterType((*MsgUnbondValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgUnbondValidatorResponse")
+ proto.RegisterType((*MsgCancelUnbondingDelegation)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegation")
+ proto.RegisterType((*MsgCancelUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse")
+ proto.RegisterType((*MsgTokenizeShares)(nil), "cosmos.staking.v1beta1.MsgTokenizeShares")
+ proto.RegisterType((*MsgTokenizeSharesResponse)(nil), "cosmos.staking.v1beta1.MsgTokenizeSharesResponse")
+ proto.RegisterType((*MsgRedeemTokensForShares)(nil), "cosmos.staking.v1beta1.MsgRedeemTokensForShares")
+ proto.RegisterType((*MsgRedeemTokensForSharesResponse)(nil), "cosmos.staking.v1beta1.MsgRedeemTokensForSharesResponse")
+ proto.RegisterType((*MsgTransferTokenizeShareRecord)(nil), "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecord")
+ proto.RegisterType((*MsgTransferTokenizeShareRecordResponse)(nil), "cosmos.staking.v1beta1.MsgTransferTokenizeShareRecordResponse")
+ proto.RegisterType((*MsgDisableTokenizeShares)(nil), "cosmos.staking.v1beta1.MsgDisableTokenizeShares")
+ proto.RegisterType((*MsgDisableTokenizeSharesResponse)(nil), "cosmos.staking.v1beta1.MsgDisableTokenizeSharesResponse")
+ proto.RegisterType((*MsgEnableTokenizeShares)(nil), "cosmos.staking.v1beta1.MsgEnableTokenizeShares")
+ proto.RegisterType((*MsgEnableTokenizeSharesResponse)(nil), "cosmos.staking.v1beta1.MsgEnableTokenizeSharesResponse")
+ proto.RegisterType((*MsgValidatorBond)(nil), "cosmos.staking.v1beta1.MsgValidatorBond")
+ proto.RegisterType((*MsgValidatorBondResponse)(nil), "cosmos.staking.v1beta1.MsgValidatorBondResponse")
}
-func (m *MsgBeginRedelegateResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) }
+
+var fileDescriptor_0926ef28816b35ab = []byte{
+ // 1265 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6f, 0xe3, 0x44,
+ 0x14, 0x8f, 0x93, 0xb4, 0x74, 0xa7, 0x6c, 0xdb, 0x75, 0x3f, 0x48, 0xbd, 0x55, 0x5c, 0x79, 0x97,
+ 0x6e, 0x59, 0x68, 0x42, 0xcb, 0x47, 0x51, 0x85, 0x40, 0x9b, 0x0d, 0x15, 0xcb, 0x2a, 0x02, 0x79,
+ 0x5b, 0x0e, 0x80, 0x14, 0x39, 0xf6, 0xd4, 0xb5, 0x92, 0xcc, 0x64, 0x3d, 0x4e, 0xbb, 0xe1, 0x84,
+ 0xc4, 0x85, 0x1b, 0x7b, 0x01, 0x71, 0xa3, 0x12, 0x17, 0xce, 0x88, 0x3f, 0x62, 0xb5, 0xa7, 0xbd,
+ 0x20, 0x21, 0x0e, 0x01, 0xb5, 0x1c, 0x38, 0xf7, 0x2f, 0x40, 0x1e, 0xdb, 0x13, 0xdb, 0xb1, 0x47,
+ 0x69, 0xd9, 0x22, 0xd8, 0x53, 0xd3, 0x99, 0xdf, 0x7b, 0xf3, 0xde, 0xef, 0x7d, 0xcd, 0x18, 0xc8,
+ 0x3a, 0x26, 0x6d, 0x4c, 0xca, 0xc4, 0xd1, 0x9a, 0x16, 0x32, 0xcb, 0x07, 0xeb, 0x0d, 0xe8, 0x68,
+ 0xeb, 0x65, 0xe7, 0x41, 0xa9, 0x63, 0x63, 0x07, 0x8b, 0x0b, 0x1e, 0xa0, 0xe4, 0x03, 0x4a, 0x3e,
+ 0x40, 0x5a, 0x34, 0x31, 0x36, 0x5b, 0xb0, 0x4c, 0x51, 0x8d, 0xee, 0x5e, 0x59, 0x43, 0x3d, 0x4f,
+ 0x44, 0x92, 0xe3, 0x5b, 0x8e, 0xd5, 0x86, 0xc4, 0xd1, 0xda, 0x1d, 0x1f, 0x30, 0x67, 0x62, 0x13,
+ 0xd3, 0x9f, 0x65, 0xf7, 0x97, 0xbf, 0xba, 0xe8, 0x9d, 0x54, 0xf7, 0x36, 0xfc, 0x63, 0xbd, 0xad,
+ 0xa2, 0x6f, 0x65, 0x43, 0x23, 0x90, 0x99, 0xa8, 0x63, 0x0b, 0xf9, 0xfb, 0xd7, 0x53, 0xbc, 0x08,
+ 0x8c, 0xa6, 0x28, 0xe5, 0x97, 0x1c, 0x10, 0x6b, 0xc4, 0xbc, 0x6d, 0x43, 0xcd, 0x81, 0x1f, 0x6b,
+ 0x2d, 0xcb, 0xd0, 0x1c, 0x6c, 0x8b, 0x77, 0xc1, 0xa4, 0x01, 0x89, 0x6e, 0x5b, 0x1d, 0xc7, 0xc2,
+ 0xa8, 0x20, 0x2c, 0x0b, 0xab, 0x93, 0x1b, 0xd7, 0x4a, 0xc9, 0x7e, 0x97, 0xaa, 0x03, 0x68, 0x25,
+ 0xff, 0xa8, 0x2f, 0x67, 0xd4, 0xb0, 0xb4, 0x58, 0x03, 0x40, 0xc7, 0xed, 0xb6, 0x45, 0x88, 0xab,
+ 0x2b, 0x4b, 0x75, 0xdd, 0x48, 0xd3, 0x75, 0x9b, 0x21, 0x55, 0xcd, 0x81, 0xc4, 0xd7, 0x17, 0x52,
+ 0x20, 0xde, 0x01, 0x57, 0x0c, 0xd8, 0x82, 0xa6, 0x6b, 0x68, 0x5d, 0x33, 0x0c, 0x1b, 0x12, 0x52,
+ 0xc8, 0x2f, 0x0b, 0xab, 0x97, 0x2a, 0x4b, 0xa7, 0x7d, 0xb9, 0xd0, 0xd3, 0xda, 0xad, 0x2d, 0x65,
+ 0x08, 0xa2, 0xa8, 0x33, 0x6c, 0xed, 0x96, 0xb7, 0xe4, 0xaa, 0x3a, 0x08, 0x7c, 0x66, 0xaa, 0xc6,
+ 0xe2, 0xaa, 0x86, 0x20, 0x8a, 0x3a, 0xc3, 0xd6, 0x02, 0x55, 0xdb, 0x60, 0xbc, 0xd3, 0x6d, 0x34,
+ 0x61, 0xaf, 0x30, 0x4e, 0x1d, 0x9c, 0x2b, 0x79, 0x11, 0x2f, 0x05, 0x11, 0x2f, 0xdd, 0x42, 0xbd,
+ 0x4a, 0xe1, 0xf1, 0xcf, 0x6b, 0x73, 0xbe, 0xe7, 0xba, 0xdd, 0xeb, 0x38, 0xb8, 0xf4, 0x51, 0xb7,
+ 0x71, 0x17, 0xf6, 0x54, 0x5f, 0x5a, 0x7c, 0x03, 0x8c, 0x1d, 0x68, 0xad, 0x2e, 0x2c, 0x3c, 0x47,
+ 0xd5, 0x2c, 0x06, 0x3c, 0xb9, 0x61, 0x0e, 0x91, 0x64, 0x05, 0x4c, 0x7b, 0xe8, 0xad, 0x89, 0xaf,
+ 0x8e, 0xe4, 0xcc, 0x5f, 0x47, 0x72, 0xe6, 0x83, 0xfc, 0x44, 0x6e, 0x26, 0xaf, 0x2c, 0x01, 0x69,
+ 0x38, 0xac, 0x2a, 0x24, 0x1d, 0x8c, 0x08, 0x54, 0xbe, 0xcf, 0x82, 0x99, 0x1a, 0x31, 0xdf, 0x33,
+ 0x2c, 0xe7, 0x82, 0x62, 0xfe, 0x6e, 0x12, 0xb3, 0x59, 0xca, 0xac, 0x78, 0xda, 0x97, 0xa7, 0x3c,
+ 0x66, 0x39, 0x7c, 0xb6, 0xc1, 0xf4, 0x20, 0xe6, 0x75, 0x5b, 0x73, 0x60, 0x21, 0x47, 0xc5, 0xab,
+ 0xbf, 0xf5, 0xe5, 0x15, 0xd3, 0x72, 0xf6, 0xbb, 0x8d, 0x92, 0x8e, 0xdb, 0x7e, 0x51, 0xf8, 0x7f,
+ 0xd6, 0x88, 0xd1, 0x2c, 0x3b, 0xbd, 0x0e, 0x24, 0xa5, 0x2a, 0xd4, 0x4f, 0xfb, 0xf2, 0x82, 0x77,
+ 0x50, 0x4c, 0x95, 0xa2, 0x4e, 0xe9, 0x91, 0x3c, 0x8b, 0xf0, 0x97, 0x9f, 0x19, 0x53, 0x24, 0x50,
+ 0x88, 0x13, 0xc4, 0xd8, 0x3b, 0x16, 0xc0, 0x64, 0x8d, 0x98, 0x55, 0x2f, 0x9b, 0x60, 0x72, 0x42,
+ 0x0a, 0x4f, 0x2f, 0x21, 0xb3, 0xe7, 0x4a, 0xc8, 0x4d, 0x30, 0xae, 0xb5, 0x71, 0x17, 0x39, 0x94,
+ 0xb7, 0x11, 0x32, 0xc9, 0x87, 0x6f, 0xe5, 0x5d, 0x1a, 0x94, 0x79, 0x30, 0x1b, 0xf2, 0x91, 0xf9,
+ 0xfe, 0x38, 0x4b, 0xfb, 0x45, 0x05, 0x9a, 0x16, 0x52, 0xa1, 0x71, 0x01, 0x14, 0xec, 0x80, 0xf9,
+ 0x81, 0x7f, 0xc4, 0xd6, 0x63, 0x34, 0x2c, 0x9f, 0xf6, 0xe5, 0xa5, 0x38, 0x0d, 0x21, 0x98, 0xa2,
+ 0xce, 0xb2, 0xf5, 0x7b, 0xb6, 0x9e, 0xa8, 0xd5, 0x20, 0x0e, 0xd3, 0x9a, 0x4b, 0xd7, 0x1a, 0x82,
+ 0x85, 0xb5, 0x56, 0x89, 0x33, 0xcc, 0x71, 0xfe, 0x3c, 0x1c, 0x37, 0x69, 0x91, 0xc6, 0xb8, 0x0c,
+ 0xa8, 0x16, 0x6b, 0xb4, 0x02, 0x3a, 0x2d, 0xe8, 0x16, 0x54, 0xdd, 0x9d, 0x17, 0x7e, 0x4d, 0x4a,
+ 0x43, 0xad, 0x65, 0x27, 0x18, 0x26, 0x95, 0x09, 0xf7, 0x98, 0x87, 0xbf, 0xcb, 0x02, 0xcd, 0x70,
+ 0x5f, 0xd8, 0xdd, 0x56, 0xfe, 0x14, 0xc0, 0xe5, 0x1a, 0x31, 0x77, 0x91, 0xf1, 0x4c, 0xe7, 0xed,
+ 0x1e, 0x98, 0x8f, 0x78, 0x79, 0x51, 0x74, 0xee, 0xd2, 0x3a, 0xd8, 0x45, 0x0d, 0x8c, 0x8c, 0x41,
+ 0x0f, 0x4d, 0x6c, 0x7b, 0xc2, 0xe8, 0x6d, 0xcf, 0xef, 0xdb, 0x31, 0xb5, 0xac, 0xfa, 0xbe, 0xcd,
+ 0x82, 0x25, 0xb7, 0xad, 0x6b, 0x48, 0x87, 0x2d, 0x0f, 0x64, 0xa1, 0xa0, 0x48, 0x53, 0x67, 0xe3,
+ 0xff, 0x36, 0xa4, 0xe2, 0x0d, 0x30, 0xad, 0xbb, 0x23, 0xcc, 0x8d, 0xd8, 0x3e, 0xb4, 0xcc, 0x7d,
+ 0xaf, 0xd0, 0x72, 0xea, 0x54, 0xb0, 0xfc, 0x3e, 0x5d, 0x55, 0x56, 0xc0, 0x75, 0x1e, 0x2f, 0x8c,
+ 0xc0, 0xa3, 0x2c, 0xb8, 0x52, 0x23, 0xe6, 0x0e, 0x6e, 0x42, 0x64, 0x7d, 0x0e, 0xef, 0xed, 0x6b,
+ 0x36, 0x24, 0xcf, 0x1a, 0x6b, 0x1b, 0x60, 0xde, 0xf1, 0x1d, 0x34, 0xea, 0xc4, 0x75, 0xb1, 0x8e,
+ 0x0f, 0x11, 0xb4, 0xbd, 0x4b, 0x92, 0x3a, 0xcb, 0x36, 0xa9, 0xfb, 0x1f, 0xba, 0x5b, 0x83, 0xf9,
+ 0xa7, 0xec, 0x80, 0xc5, 0x21, 0x86, 0x58, 0x11, 0x0d, 0x6c, 0x12, 0xce, 0x64, 0x93, 0xf2, 0xa3,
+ 0x40, 0x07, 0xaa, 0xdb, 0xe6, 0x60, 0x9b, 0x2a, 0x27, 0xdb, 0xd8, 0x7e, 0xfa, 0xfc, 0x0f, 0x0c,
+ 0xcc, 0x9e, 0xad, 0x7b, 0x0c, 0x08, 0xf8, 0x14, 0x2c, 0xa7, 0x59, 0xfa, 0xcf, 0x79, 0xf8, 0x4e,
+ 0x00, 0x45, 0x97, 0x5e, 0x5b, 0x43, 0x64, 0x0f, 0xda, 0x11, 0x9a, 0x55, 0xa8, 0x63, 0xdb, 0x10,
+ 0x37, 0x41, 0x21, 0x88, 0x90, 0x1f, 0x3d, 0x9b, 0x6e, 0xd4, 0x2d, 0x83, 0x9e, 0x96, 0x57, 0x59,
+ 0x78, 0x43, 0x62, 0x77, 0x0c, 0x71, 0x01, 0x8c, 0x13, 0x88, 0x0c, 0x68, 0x7b, 0x09, 0xa7, 0xfa,
+ 0xff, 0x89, 0x57, 0xc1, 0x25, 0x04, 0x0f, 0xfd, 0x1c, 0xa0, 0xf3, 0x4e, 0x9d, 0x40, 0xf0, 0x30,
+ 0x1e, 0xf8, 0x55, 0xb0, 0xc2, 0xb7, 0x8c, 0x55, 0x11, 0xa6, 0xb1, 0xac, 0x5a, 0x44, 0x6b, 0xb4,
+ 0xe0, 0x85, 0xd5, 0x52, 0xc8, 0x34, 0x85, 0x86, 0x24, 0xf1, 0x40, 0x66, 0x14, 0x02, 0x2f, 0xb8,
+ 0x37, 0x36, 0xf4, 0x6f, 0xd9, 0xd4, 0x01, 0x72, 0xca, 0x79, 0x17, 0x35, 0x72, 0x7e, 0x12, 0xe8,
+ 0xad, 0x9d, 0x8d, 0x85, 0x0a, 0x46, 0xc6, 0x7f, 0xb3, 0x77, 0x85, 0x68, 0xf2, 0x2e, 0xd2, 0x11,
+ 0x9b, 0x03, 0x7e, 0x36, 0x7e, 0x78, 0x1e, 0xe4, 0x6a, 0xc4, 0x14, 0xef, 0x83, 0xe9, 0xf8, 0x03,
+ 0xf4, 0x66, 0xda, 0xbb, 0x63, 0xf8, 0x55, 0x23, 0x6d, 0x8c, 0x8e, 0x65, 0xa1, 0x69, 0x82, 0xcb,
+ 0xd1, 0xd7, 0xcf, 0x2a, 0x47, 0x49, 0x04, 0x29, 0xbd, 0x3a, 0x2a, 0x92, 0x1d, 0xf6, 0x19, 0x98,
+ 0x60, 0x8f, 0x85, 0x6b, 0x1c, 0xe9, 0x00, 0x24, 0xbd, 0x3c, 0x02, 0x88, 0x69, 0xbf, 0x0f, 0xa6,
+ 0xe3, 0xd7, 0x71, 0x1e, 0x7b, 0x31, 0x2c, 0x97, 0xbd, 0xb4, 0xab, 0x69, 0x03, 0x80, 0xd0, 0x3d,
+ 0xf2, 0x45, 0x8e, 0x86, 0x01, 0x4c, 0x5a, 0x1b, 0x09, 0x16, 0x76, 0x2b, 0x7e, 0xbb, 0xba, 0xc9,
+ 0xd5, 0x10, 0xc1, 0x72, 0xdd, 0x4a, 0xb9, 0x5e, 0x89, 0x5f, 0x0b, 0x60, 0x31, 0xfd, 0x6e, 0xf5,
+ 0x3a, 0x2f, 0xcd, 0xd2, 0xa4, 0xa4, 0xb7, 0xcf, 0x23, 0xc5, 0x2c, 0x42, 0x60, 0x2a, 0xd6, 0xcb,
+ 0x5e, 0xe2, 0xe8, 0x8b, 0x42, 0xa5, 0xf5, 0x91, 0xa1, 0xec, 0xbc, 0x2f, 0x05, 0x30, 0x9f, 0x3c,
+ 0xa3, 0x79, 0x59, 0x9f, 0x28, 0x21, 0xbd, 0x75, 0x56, 0x09, 0x66, 0xc5, 0x37, 0x02, 0xb8, 0xca,
+ 0x9b, 0x90, 0x6f, 0xf2, 0x1c, 0x4b, 0x97, 0x93, 0xde, 0x39, 0x9f, 0x5c, 0x84, 0x9d, 0xe4, 0xa9,
+ 0xc7, 0x63, 0x27, 0x51, 0x82, 0xcb, 0x0e, 0x77, 0xd0, 0x89, 0x5f, 0x08, 0x60, 0x2e, 0x71, 0xcc,
+ 0x95, 0x79, 0x8d, 0x29, 0x41, 0x40, 0xda, 0x3c, 0xa3, 0x40, 0xb8, 0x7b, 0x46, 0xa7, 0x10, 0xaf,
+ 0x7b, 0x46, 0x90, 0xdc, 0xee, 0x99, 0x38, 0x25, 0x2a, 0xdb, 0x8f, 0x8e, 0x8b, 0xc2, 0x93, 0xe3,
+ 0xa2, 0xf0, 0xc7, 0x71, 0x51, 0x78, 0x78, 0x52, 0xcc, 0x3c, 0x39, 0x29, 0x66, 0x7e, 0x3d, 0x29,
+ 0x66, 0x3e, 0x79, 0x85, 0xfb, 0x19, 0xe8, 0x01, 0xfb, 0xf4, 0x49, 0x3f, 0x08, 0x35, 0xc6, 0xe9,
+ 0xb0, 0x7d, 0xed, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0x59, 0xba, 0x17, 0xdf, 0x15, 0x00,
+ 0x00,
}
-func (m *MsgBeginRedelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):])
- if err8 != nil {
- return 0, err8
- }
- i -= n8
- i = encodeVarintTx(dAtA, i, uint64(n8))
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
+// Reference imports to suppress errors if they are not otherwise used.
+var _ context.Context
+var _ grpc.ClientConn
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+const _ = grpc.SupportPackageIsVersion4
+
+// MsgClient is the client API for Msg service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
+type MsgClient interface {
+ // CreateValidator defines a method for creating a new validator.
+ CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error)
+ // EditValidator defines a method for editing an existing validator.
+ EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error)
+ // Delegate defines a method for performing a delegation of coins
+ // from a delegator to a validator.
+ Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error)
+ // BeginRedelegate defines a method for performing a redelegation
+ // of coins from a delegator and source validator to a destination validator.
+ BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error)
+ // Undelegate defines a method for performing an undelegation from a
+ // delegate and a validator.
+ Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error)
+ // UnbondValidator defines a method for performing the status transition for a validator
+ // from bonded to unbonded
+ UnbondValidator(ctx context.Context, in *MsgUnbondValidator, opts ...grpc.CallOption) (*MsgUnbondValidatorResponse, error)
+ // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation
+ // and delegate back to previous validator.
+ //
+ // Since: cosmos-sdk 0.46
+ CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error)
+ // TokenizeShares defines a method for tokenizing shares from a validator.
+ TokenizeShares(ctx context.Context, in *MsgTokenizeShares, opts ...grpc.CallOption) (*MsgTokenizeSharesResponse, error)
+ // RedeemTokensForShares defines a method for redeeming tokens from a validator for
+ // shares.
+ RedeemTokensForShares(ctx context.Context, in *MsgRedeemTokensForShares, opts ...grpc.CallOption) (*MsgRedeemTokensForSharesResponse, error)
+ // TransferTokenizeShareRecord defines a method to transfer ownership of
+ // TokenizeShareRecord
+ TransferTokenizeShareRecord(ctx context.Context, in *MsgTransferTokenizeShareRecord, opts ...grpc.CallOption) (*MsgTransferTokenizeShareRecordResponse, error)
+ // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake
+ DisableTokenizeShares(ctx context.Context, in *MsgDisableTokenizeShares, opts ...grpc.CallOption) (*MsgDisableTokenizeSharesResponse, error)
+ // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake
+ // after it has been disabled
+ EnableTokenizeShares(ctx context.Context, in *MsgEnableTokenizeShares, opts ...grpc.CallOption) (*MsgEnableTokenizeSharesResponse, error)
+ // ValidatorBond defines a method for performing a validator self-bond
+ ValidatorBond(ctx context.Context, in *MsgValidatorBond, opts ...grpc.CallOption) (*MsgValidatorBondResponse, error)
}
-func (m *MsgUndelegate) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+type msgClient struct {
+ cc grpc1.ClientConn
+}
+
+func NewMsgClient(cc grpc1.ClientConn) MsgClient {
+ return &msgClient{cc}
+}
+
+func (c *msgClient) CreateValidator(ctx context.Context, in *MsgCreateValidator, opts ...grpc.CallOption) (*MsgCreateValidatorResponse, error) {
+ out := new(MsgCreateValidatorResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CreateValidator", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *MsgUndelegate) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *msgClient) EditValidator(ctx context.Context, in *MsgEditValidator, opts ...grpc.CallOption) (*MsgEditValidatorResponse, error) {
+ out := new(MsgEditValidatorResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EditValidator", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *MsgUndelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- {
- size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTx(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- if len(m.ValidatorAddress) > 0 {
- i -= len(m.ValidatorAddress)
- copy(dAtA[i:], m.ValidatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
- i--
- dAtA[i] = 0x12
- }
- if len(m.DelegatorAddress) > 0 {
- i -= len(m.DelegatorAddress)
- copy(dAtA[i:], m.DelegatorAddress)
- i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
- i--
- dAtA[i] = 0xa
+func (c *msgClient) Delegate(ctx context.Context, in *MsgDelegate, opts ...grpc.CallOption) (*MsgDelegateResponse, error) {
+ out := new(MsgDelegateResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Delegate", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return len(dAtA) - i, nil
+ return out, nil
}
-func (m *MsgUndelegateResponse) Marshal() (dAtA []byte, err error) {
- size := m.Size()
- dAtA = make([]byte, size)
- n, err := m.MarshalToSizedBuffer(dAtA[:size])
+func (c *msgClient) BeginRedelegate(ctx context.Context, in *MsgBeginRedelegate, opts ...grpc.CallOption) (*MsgBeginRedelegateResponse, error) {
+ out := new(MsgBeginRedelegateResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/BeginRedelegate", in, out, opts...)
if err != nil {
return nil, err
}
- return dAtA[:n], nil
+ return out, nil
}
-func (m *MsgUndelegateResponse) MarshalTo(dAtA []byte) (int, error) {
- size := m.Size()
- return m.MarshalToSizedBuffer(dAtA[:size])
+func (c *msgClient) Undelegate(ctx context.Context, in *MsgUndelegate, opts ...grpc.CallOption) (*MsgUndelegateResponse, error) {
+ out := new(MsgUndelegateResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/Undelegate", in, out, opts...)
+ if err != nil {
+ return nil, err
+ }
+ return out, nil
}
-func (m *MsgUndelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
- i := len(dAtA)
- _ = i
- var l int
- _ = l
- n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):])
- if err10 != nil {
- return 0, err10
+func (c *msgClient) UnbondValidator(ctx context.Context, in *MsgUnbondValidator, opts ...grpc.CallOption) (*MsgUnbondValidatorResponse, error) {
+ out := new(MsgUnbondValidatorResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/UnbondValidator", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- i -= n10
- i = encodeVarintTx(dAtA, i, uint64(n10))
- i--
- dAtA[i] = 0xa
- return len(dAtA) - i, nil
+ return out, nil
}
-func encodeVarintTx(dAtA []byte, offset int, v uint64) int {
- offset -= sovTx(v)
- base := offset
- for v >= 1<<7 {
- dAtA[offset] = uint8(v&0x7f | 0x80)
- v >>= 7
- offset++
+func (c *msgClient) CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) {
+ out := new(MsgCancelUnbondingDelegationResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- dAtA[offset] = uint8(v)
- return base
+ return out, nil
}
-func (m *MsgCreateValidator) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = m.Description.Size()
- n += 1 + l + sovTx(uint64(l))
- l = m.Commission.Size()
- n += 1 + l + sovTx(uint64(l))
- l = m.MinSelfDelegation.Size()
- n += 1 + l + sovTx(uint64(l))
- l = len(m.DelegatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- l = len(m.ValidatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- if m.Pubkey != nil {
- l = m.Pubkey.Size()
- n += 1 + l + sovTx(uint64(l))
+
+func (c *msgClient) TokenizeShares(ctx context.Context, in *MsgTokenizeShares, opts ...grpc.CallOption) (*MsgTokenizeSharesResponse, error) {
+ out := new(MsgTokenizeSharesResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/TokenizeShares", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- l = m.Value.Size()
- n += 1 + l + sovTx(uint64(l))
- return n
+ return out, nil
}
-func (m *MsgCreateValidatorResponse) Size() (n int) {
- if m == nil {
- return 0
+func (c *msgClient) RedeemTokensForShares(ctx context.Context, in *MsgRedeemTokensForShares, opts ...grpc.CallOption) (*MsgRedeemTokensForSharesResponse, error) {
+ out := new(MsgRedeemTokensForSharesResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/RedeemTokensForShares", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- var l int
- _ = l
- return n
+ return out, nil
}
-func (m *MsgEditValidator) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = m.Description.Size()
- n += 1 + l + sovTx(uint64(l))
- l = len(m.ValidatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- if m.CommissionRate != nil {
- l = m.CommissionRate.Size()
- n += 1 + l + sovTx(uint64(l))
- }
- if m.MinSelfDelegation != nil {
- l = m.MinSelfDelegation.Size()
- n += 1 + l + sovTx(uint64(l))
+func (c *msgClient) TransferTokenizeShareRecord(ctx context.Context, in *MsgTransferTokenizeShareRecord, opts ...grpc.CallOption) (*MsgTransferTokenizeShareRecordResponse, error) {
+ out := new(MsgTransferTokenizeShareRecordResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/TransferTokenizeShareRecord", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- return n
+ return out, nil
}
-func (m *MsgEditValidatorResponse) Size() (n int) {
- if m == nil {
- return 0
+func (c *msgClient) DisableTokenizeShares(ctx context.Context, in *MsgDisableTokenizeShares, opts ...grpc.CallOption) (*MsgDisableTokenizeSharesResponse, error) {
+ out := new(MsgDisableTokenizeSharesResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/DisableTokenizeShares", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- var l int
- _ = l
- return n
+ return out, nil
}
-func (m *MsgDelegate) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.DelegatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- l = len(m.ValidatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
+func (c *msgClient) EnableTokenizeShares(ctx context.Context, in *MsgEnableTokenizeShares, opts ...grpc.CallOption) (*MsgEnableTokenizeSharesResponse, error) {
+ out := new(MsgEnableTokenizeSharesResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/EnableTokenizeShares", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- l = m.Amount.Size()
- n += 1 + l + sovTx(uint64(l))
- return n
+ return out, nil
}
-func (m *MsgDelegateResponse) Size() (n int) {
- if m == nil {
- return 0
+func (c *msgClient) ValidatorBond(ctx context.Context, in *MsgValidatorBond, opts ...grpc.CallOption) (*MsgValidatorBondResponse, error) {
+ out := new(MsgValidatorBondResponse)
+ err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/ValidatorBond", in, out, opts...)
+ if err != nil {
+ return nil, err
}
- var l int
- _ = l
- return n
+ return out, nil
}
-func (m *MsgBeginRedelegate) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.DelegatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- l = len(m.ValidatorSrcAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- l = len(m.ValidatorDstAddress)
- if l > 0 {
+// MsgServer is the server API for Msg service.
+type MsgServer interface {
+ // CreateValidator defines a method for creating a new validator.
+ CreateValidator(context.Context, *MsgCreateValidator) (*MsgCreateValidatorResponse, error)
+ // EditValidator defines a method for editing an existing validator.
+ EditValidator(context.Context, *MsgEditValidator) (*MsgEditValidatorResponse, error)
+ // Delegate defines a method for performing a delegation of coins
+ // from a delegator to a validator.
+ Delegate(context.Context, *MsgDelegate) (*MsgDelegateResponse, error)
+ // BeginRedelegate defines a method for performing a redelegation
+ // of coins from a delegator and source validator to a destination validator.
+ BeginRedelegate(context.Context, *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error)
+ // Undelegate defines a method for performing an undelegation from a
+ // delegate and a validator.
+ Undelegate(context.Context, *MsgUndelegate) (*MsgUndelegateResponse, error)
+ // UnbondValidator defines a method for performing the status transition for a validator
+ // from bonded to unbonded
+ UnbondValidator(context.Context, *MsgUnbondValidator) (*MsgUnbondValidatorResponse, error)
+ // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation
+ // and delegate back to previous validator.
+ //
+ // Since: cosmos-sdk 0.46
+ CancelUnbondingDelegation(context.Context, *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error)
+ // TokenizeShares defines a method for tokenizing shares from a validator.
+ TokenizeShares(context.Context, *MsgTokenizeShares) (*MsgTokenizeSharesResponse, error)
+ // RedeemTokensForShares defines a method for redeeming tokens from a validator for
+ // shares.
+ RedeemTokensForShares(context.Context, *MsgRedeemTokensForShares) (*MsgRedeemTokensForSharesResponse, error)
+ // TransferTokenizeShareRecord defines a method to transfer ownership of
+ // TokenizeShareRecord
+ TransferTokenizeShareRecord(context.Context, *MsgTransferTokenizeShareRecord) (*MsgTransferTokenizeShareRecordResponse, error)
+ // DisableTokenizeShares defines a method to prevent the tokenization of an addresses stake
+ DisableTokenizeShares(context.Context, *MsgDisableTokenizeShares) (*MsgDisableTokenizeSharesResponse, error)
+ // EnableTokenizeShares defines a method to re-enable the tokenization of an addresseses stake
+ // after it has been disabled
+ EnableTokenizeShares(context.Context, *MsgEnableTokenizeShares) (*MsgEnableTokenizeSharesResponse, error)
+ // ValidatorBond defines a method for performing a validator self-bond
+ ValidatorBond(context.Context, *MsgValidatorBond) (*MsgValidatorBondResponse, error)
+}
+
+// UnimplementedMsgServer can be embedded to have forward compatible implementations.
+type UnimplementedMsgServer struct {
+}
+
+func (*UnimplementedMsgServer) CreateValidator(ctx context.Context, req *MsgCreateValidator) (*MsgCreateValidatorResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CreateValidator not implemented")
+}
+func (*UnimplementedMsgServer) EditValidator(ctx context.Context, req *MsgEditValidator) (*MsgEditValidatorResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method EditValidator not implemented")
+}
+func (*UnimplementedMsgServer) Delegate(ctx context.Context, req *MsgDelegate) (*MsgDelegateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Delegate not implemented")
+}
+func (*UnimplementedMsgServer) BeginRedelegate(ctx context.Context, req *MsgBeginRedelegate) (*MsgBeginRedelegateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method BeginRedelegate not implemented")
+}
+func (*UnimplementedMsgServer) Undelegate(ctx context.Context, req *MsgUndelegate) (*MsgUndelegateResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method Undelegate not implemented")
+}
+func (*UnimplementedMsgServer) UnbondValidator(ctx context.Context, req *MsgUnbondValidator) (*MsgUnbondValidatorResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method UnbondValidator not implemented")
+}
+func (*UnimplementedMsgServer) CancelUnbondingDelegation(ctx context.Context, req *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method CancelUnbondingDelegation not implemented")
+}
+func (*UnimplementedMsgServer) TokenizeShares(ctx context.Context, req *MsgTokenizeShares) (*MsgTokenizeSharesResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TokenizeShares not implemented")
+}
+func (*UnimplementedMsgServer) RedeemTokensForShares(ctx context.Context, req *MsgRedeemTokensForShares) (*MsgRedeemTokensForSharesResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method RedeemTokensForShares not implemented")
+}
+func (*UnimplementedMsgServer) TransferTokenizeShareRecord(ctx context.Context, req *MsgTransferTokenizeShareRecord) (*MsgTransferTokenizeShareRecordResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method TransferTokenizeShareRecord not implemented")
+}
+func (*UnimplementedMsgServer) DisableTokenizeShares(ctx context.Context, req *MsgDisableTokenizeShares) (*MsgDisableTokenizeSharesResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method DisableTokenizeShares not implemented")
+}
+func (*UnimplementedMsgServer) EnableTokenizeShares(ctx context.Context, req *MsgEnableTokenizeShares) (*MsgEnableTokenizeSharesResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method EnableTokenizeShares not implemented")
+}
+func (*UnimplementedMsgServer) ValidatorBond(ctx context.Context, req *MsgValidatorBond) (*MsgValidatorBondResponse, error) {
+ return nil, status.Errorf(codes.Unimplemented, "method ValidatorBond not implemented")
+}
+
+func RegisterMsgServer(s grpc1.Server, srv MsgServer) {
+ s.RegisterService(&_Msg_serviceDesc, srv)
+}
+
+func _Msg_CreateValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgCreateValidator)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).CreateValidator(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/CreateValidator",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).CreateValidator(ctx, req.(*MsgCreateValidator))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_EditValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgEditValidator)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).EditValidator(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/EditValidator",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).EditValidator(ctx, req.(*MsgEditValidator))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_Delegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgDelegate)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).Delegate(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/Delegate",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).Delegate(ctx, req.(*MsgDelegate))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_BeginRedelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgBeginRedelegate)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).BeginRedelegate(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/BeginRedelegate",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).BeginRedelegate(ctx, req.(*MsgBeginRedelegate))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_Undelegate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgUndelegate)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).Undelegate(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/Undelegate",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).Undelegate(ctx, req.(*MsgUndelegate))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_UnbondValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgUnbondValidator)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).UnbondValidator(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/UnbondValidator",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).UnbondValidator(ctx, req.(*MsgUnbondValidator))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_CancelUnbondingDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgCancelUnbondingDelegation)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).CancelUnbondingDelegation(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/CancelUnbondingDelegation",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).CancelUnbondingDelegation(ctx, req.(*MsgCancelUnbondingDelegation))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_TokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgTokenizeShares)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).TokenizeShares(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/TokenizeShares",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).TokenizeShares(ctx, req.(*MsgTokenizeShares))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_RedeemTokensForShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgRedeemTokensForShares)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).RedeemTokensForShares(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/RedeemTokensForShares",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).RedeemTokensForShares(ctx, req.(*MsgRedeemTokensForShares))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_TransferTokenizeShareRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgTransferTokenizeShareRecord)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).TransferTokenizeShareRecord(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/TransferTokenizeShareRecord",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).TransferTokenizeShareRecord(ctx, req.(*MsgTransferTokenizeShareRecord))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_DisableTokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgDisableTokenizeShares)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).DisableTokenizeShares(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/DisableTokenizeShares",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).DisableTokenizeShares(ctx, req.(*MsgDisableTokenizeShares))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_EnableTokenizeShares_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgEnableTokenizeShares)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).EnableTokenizeShares(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/EnableTokenizeShares",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).EnableTokenizeShares(ctx, req.(*MsgEnableTokenizeShares))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+func _Msg_ValidatorBond_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+ in := new(MsgValidatorBond)
+ if err := dec(in); err != nil {
+ return nil, err
+ }
+ if interceptor == nil {
+ return srv.(MsgServer).ValidatorBond(ctx, in)
+ }
+ info := &grpc.UnaryServerInfo{
+ Server: srv,
+ FullMethod: "/cosmos.staking.v1beta1.Msg/ValidatorBond",
+ }
+ handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+ return srv.(MsgServer).ValidatorBond(ctx, req.(*MsgValidatorBond))
+ }
+ return interceptor(ctx, in, info, handler)
+}
+
+var _Msg_serviceDesc = grpc.ServiceDesc{
+ ServiceName: "cosmos.staking.v1beta1.Msg",
+ HandlerType: (*MsgServer)(nil),
+ Methods: []grpc.MethodDesc{
+ {
+ MethodName: "CreateValidator",
+ Handler: _Msg_CreateValidator_Handler,
+ },
+ {
+ MethodName: "EditValidator",
+ Handler: _Msg_EditValidator_Handler,
+ },
+ {
+ MethodName: "Delegate",
+ Handler: _Msg_Delegate_Handler,
+ },
+ {
+ MethodName: "BeginRedelegate",
+ Handler: _Msg_BeginRedelegate_Handler,
+ },
+ {
+ MethodName: "Undelegate",
+ Handler: _Msg_Undelegate_Handler,
+ },
+ {
+ MethodName: "UnbondValidator",
+ Handler: _Msg_UnbondValidator_Handler,
+ },
+ {
+ MethodName: "CancelUnbondingDelegation",
+ Handler: _Msg_CancelUnbondingDelegation_Handler,
+ },
+ {
+ MethodName: "TokenizeShares",
+ Handler: _Msg_TokenizeShares_Handler,
+ },
+ {
+ MethodName: "RedeemTokensForShares",
+ Handler: _Msg_RedeemTokensForShares_Handler,
+ },
+ {
+ MethodName: "TransferTokenizeShareRecord",
+ Handler: _Msg_TransferTokenizeShareRecord_Handler,
+ },
+ {
+ MethodName: "DisableTokenizeShares",
+ Handler: _Msg_DisableTokenizeShares_Handler,
+ },
+ {
+ MethodName: "EnableTokenizeShares",
+ Handler: _Msg_EnableTokenizeShares_Handler,
+ },
+ {
+ MethodName: "ValidatorBond",
+ Handler: _Msg_ValidatorBond_Handler,
+ },
+ },
+ Streams: []grpc.StreamDesc{},
+ Metadata: "cosmos/staking/v1beta1/tx.proto",
+}
+
+func (m *MsgCreateValidator) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgCreateValidator) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgCreateValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Value.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x3a
+ if m.Pubkey != nil {
+ {
+ size, err := m.Pubkey.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x32
+ }
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x2a
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0x22
+ }
+ {
+ size, err := m.Commission.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ {
+ size, err := m.Description.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgCreateValidatorResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgCreateValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgCreateValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgEditValidator) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgEditValidator) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgEditValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.CommissionRate != nil {
+ {
+ size := m.CommissionRate.Size()
+ i -= size
+ if _, err := m.CommissionRate.MarshalTo(dAtA[i:]); err != nil {
+ return 0, err
+ }
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ {
+ size, err := m.Description.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgEditValidatorResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgEditValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgEditValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgDelegate) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgDelegate) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgDelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgDelegateResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgDelegateResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgDelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgBeginRedelegate) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgBeginRedelegate) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgBeginRedelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x22
+ if len(m.ValidatorDstAddress) > 0 {
+ i -= len(m.ValidatorDstAddress)
+ copy(dAtA[i:], m.ValidatorDstAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorDstAddress)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.ValidatorSrcAddress) > 0 {
+ i -= len(m.ValidatorSrcAddress)
+ copy(dAtA[i:], m.ValidatorSrcAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorSrcAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgBeginRedelegateResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgBeginRedelegateResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgBeginRedelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):])
+ if err8 != nil {
+ return 0, err8
+ }
+ i -= n8
+ i = encodeVarintTx(dAtA, i, uint64(n8))
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgUndelegate) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgUndelegate) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgUndelegate) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgUndelegateResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgUndelegateResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgUndelegateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):])
+ if err10 != nil {
+ return 0, err10
+ }
+ i -= n10
+ i = encodeVarintTx(dAtA, i, uint64(n10))
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgUnbondValidator) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgUnbondValidator) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgUnbondValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgUnbondValidatorResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgUnbondValidatorResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgUnbondValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgCancelUnbondingDelegation) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgCancelUnbondingDelegation) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgCancelUnbondingDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if m.CreationHeight != 0 {
+ i = encodeVarintTx(dAtA, i, uint64(m.CreationHeight))
+ i--
+ dAtA[i] = 0x20
+ }
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgCancelUnbondingDelegationResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgCancelUnbondingDelegationResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgCancelUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgTokenizeShares) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgTokenizeShares) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.TokenizedShareOwner) > 0 {
+ i -= len(m.TokenizedShareOwner)
+ copy(dAtA[i:], m.TokenizedShareOwner)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.TokenizedShareOwner)))
+ i--
+ dAtA[i] = 0x22
+ }
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x1a
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgTokenizeSharesResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgTokenizeSharesResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgTokenizeSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgRedeemTokensForShares) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgRedeemTokensForShares) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgRedeemTokensForShares) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0x12
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgRedeemTokensForSharesResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgRedeemTokensForSharesResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgRedeemTokensForSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ {
+ size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i])
+ if err != nil {
+ return 0, err
+ }
+ i -= size
+ i = encodeVarintTx(dAtA, i, uint64(size))
+ }
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgTransferTokenizeShareRecord) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgTransferTokenizeShareRecord) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgTransferTokenizeShareRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.NewOwner) > 0 {
+ i -= len(m.NewOwner)
+ copy(dAtA[i:], m.NewOwner)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.NewOwner)))
+ i--
+ dAtA[i] = 0x1a
+ }
+ if len(m.Sender) > 0 {
+ i -= len(m.Sender)
+ copy(dAtA[i:], m.Sender)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.Sender)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if m.TokenizeShareRecordId != 0 {
+ i = encodeVarintTx(dAtA, i, uint64(m.TokenizeShareRecordId))
+ i--
+ dAtA[i] = 0x8
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgTransferTokenizeShareRecordResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgTransferTokenizeShareRecordResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgTransferTokenizeShareRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgDisableTokenizeShares) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgDisableTokenizeShares) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgDisableTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgDisableTokenizeSharesResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgDisableTokenizeSharesResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgDisableTokenizeSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgEnableTokenizeShares) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgEnableTokenizeShares) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgEnableTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgEnableTokenizeSharesResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgEnableTokenizeSharesResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgEnableTokenizeSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ n16, err16 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):])
+ if err16 != nil {
+ return 0, err16
+ }
+ i -= n16
+ i = encodeVarintTx(dAtA, i, uint64(n16))
+ i--
+ dAtA[i] = 0xa
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgValidatorBond) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgValidatorBond) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgValidatorBond) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ if len(m.ValidatorAddress) > 0 {
+ i -= len(m.ValidatorAddress)
+ copy(dAtA[i:], m.ValidatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress)))
+ i--
+ dAtA[i] = 0x12
+ }
+ if len(m.DelegatorAddress) > 0 {
+ i -= len(m.DelegatorAddress)
+ copy(dAtA[i:], m.DelegatorAddress)
+ i = encodeVarintTx(dAtA, i, uint64(len(m.DelegatorAddress)))
+ i--
+ dAtA[i] = 0xa
+ }
+ return len(dAtA) - i, nil
+}
+
+func (m *MsgValidatorBondResponse) Marshal() (dAtA []byte, err error) {
+ size := m.Size()
+ dAtA = make([]byte, size)
+ n, err := m.MarshalToSizedBuffer(dAtA[:size])
+ if err != nil {
+ return nil, err
+ }
+ return dAtA[:n], nil
+}
+
+func (m *MsgValidatorBondResponse) MarshalTo(dAtA []byte) (int, error) {
+ size := m.Size()
+ return m.MarshalToSizedBuffer(dAtA[:size])
+}
+
+func (m *MsgValidatorBondResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
+ i := len(dAtA)
+ _ = i
+ var l int
+ _ = l
+ return len(dAtA) - i, nil
+}
+
+func encodeVarintTx(dAtA []byte, offset int, v uint64) int {
+ offset -= sovTx(v)
+ base := offset
+ for v >= 1<<7 {
+ dAtA[offset] = uint8(v&0x7f | 0x80)
+ v >>= 7
+ offset++
+ }
+ dAtA[offset] = uint8(v)
+ return base
+}
+func (m *MsgCreateValidator) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Description.Size()
+ n += 1 + l + sovTx(uint64(l))
+ l = m.Commission.Size()
+ n += 1 + l + sovTx(uint64(l))
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ if m.Pubkey != nil {
+ l = m.Pubkey.Size()
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Value.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgCreateValidatorResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgEditValidator) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Description.Size()
+ n += 1 + l + sovTx(uint64(l))
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ if m.CommissionRate != nil {
+ l = m.CommissionRate.Size()
+ n += 1 + l + sovTx(uint64(l))
+ }
+ return n
+}
+
+func (m *MsgEditValidatorResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgDelegate) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgDelegateResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgBeginRedelegate) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorSrcAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorDstAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgBeginRedelegateResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime)
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgUndelegate) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgUndelegateResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime)
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgUnbondValidator) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ return n
+}
+
+func (m *MsgUnbondValidatorResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgCancelUnbondingDelegation) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ if m.CreationHeight != 0 {
+ n += 1 + sovTx(uint64(m.CreationHeight))
+ }
+ return n
+}
+
+func (m *MsgCancelUnbondingDelegationResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgTokenizeShares) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ l = len(m.TokenizedShareOwner)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ return n
+}
+
+func (m *MsgTokenizeSharesResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgRedeemTokensForShares) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgRedeemTokensForSharesResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = m.Amount.Size()
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgTransferTokenizeShareRecord) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ if m.TokenizeShareRecordId != 0 {
+ n += 1 + sovTx(uint64(m.TokenizeShareRecordId))
+ }
+ l = len(m.Sender)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.NewOwner)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ return n
+}
+
+func (m *MsgTransferTokenizeShareRecordResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgDisableTokenizeShares) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ return n
+}
+
+func (m *MsgDisableTokenizeSharesResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func (m *MsgEnableTokenizeShares) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ return n
+}
+
+func (m *MsgEnableTokenizeSharesResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime)
+ n += 1 + l + sovTx(uint64(l))
+ return n
+}
+
+func (m *MsgValidatorBond) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ l = len(m.DelegatorAddress)
+ if l > 0 {
+ n += 1 + l + sovTx(uint64(l))
+ }
+ l = len(m.ValidatorAddress)
+ if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
- l = m.Amount.Size()
- n += 1 + l + sovTx(uint64(l))
- return n
-}
+ return n
+}
+
+func (m *MsgValidatorBondResponse) Size() (n int) {
+ if m == nil {
+ return 0
+ }
+ var l int
+ _ = l
+ return n
+}
+
+func sovTx(x uint64) (n int) {
+ return (math_bits.Len64(x|1) + 6) / 7
+}
+func sozTx(x uint64) (n int) {
+ return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+}
+func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgCreateValidator: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgCreateValidator: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 5:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 6:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Pubkey", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if m.Pubkey == nil {
+ m.Pubkey = &types.Any{}
+ }
+ if err := m.Pubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 7:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgCreateValidatorResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgCreateValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgEditValidator: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgEditValidator: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CommissionRate", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ var v github_com_cosmos_cosmos_sdk_types.Dec
+ m.CommissionRate = &v
+ if err := m.CommissionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgEditValidatorResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgEditValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgDelegate) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgDelegate: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgDelegate: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgDelegateResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgDelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgBeginRedelegate: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgBeginRedelegate: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorSrcAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorSrcAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorDstAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorDstAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 4:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgBeginRedelegateResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgBeginRedelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgUndelegate) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgUndelegate: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgUndelegate: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgUndelegateResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgUndelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgUnbondValidator) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgUnbondValidator: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgUnbondValidator: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
-func (m *MsgBeginRedelegateResponse) Size() (n int) {
- if m == nil {
- return 0
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
}
- var l int
- _ = l
- l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime)
- n += 1 + l + sovTx(uint64(l))
- return n
+ return nil
}
-
-func (m *MsgUndelegate) Size() (n int) {
- if m == nil {
- return 0
- }
- var l int
- _ = l
- l = len(m.DelegatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
- }
- l = len(m.ValidatorAddress)
- if l > 0 {
- n += 1 + l + sovTx(uint64(l))
+func (m *MsgUnbondValidatorResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgUnbondValidatorResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgUnbondValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
}
- l = m.Amount.Size()
- n += 1 + l + sovTx(uint64(l))
- return n
-}
-func (m *MsgUndelegateResponse) Size() (n int) {
- if m == nil {
- return 0
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
}
- var l int
- _ = l
- l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime)
- n += 1 + l + sovTx(uint64(l))
- return n
-}
-
-func sovTx(x uint64) (n int) {
- return (math_bits.Len64(x|1) + 6) / 7
-}
-func sozTx(x uint64) (n int) {
- return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63))))
+ return nil
}
-func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
+func (m *MsgCancelUnbondingDelegation) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -1467,17 +4538,17 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgCreateValidator: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgCancelUnbondingDelegation: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgCreateValidator: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgCancelUnbondingDelegation: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
@@ -1487,28 +4558,59 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return ErrInvalidLengthTx
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTx
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Commission", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 3:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -1535,13 +4637,132 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Commission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 3:
+ case 4:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field CreationHeight", wireType)
+ }
+ m.CreationHeight = 0
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ m.CreationHeight |= int64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgCancelUnbondingDelegationResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgCancelUnbondingDelegationResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgCancelUnbondingDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
+ }
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgTokenizeShares) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgTokenizeShares: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -1569,13 +4790,11 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -1603,13 +4822,13 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
+ m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 5:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
}
- var stringLen uint64
+ var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
@@ -1619,29 +4838,30 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
+ if msglen < 0 {
return ErrInvalidLengthTx
}
- postIndex := iNdEx + intStringLen
+ postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthTx
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
iNdEx = postIndex
- case 6:
+ case 4:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Pubkey", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field TokenizedShareOwner", wireType)
}
- var msglen int
+ var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
@@ -1651,31 +4871,77 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- msglen |= int(b&0x7F) << shift
+ stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- if msglen < 0 {
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
return ErrInvalidLengthTx
}
- postIndex := iNdEx + msglen
+ postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTx
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if m.Pubkey == nil {
- m.Pubkey = &types.Any{}
- }
- if err := m.Pubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ m.TokenizedShareOwner = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
return err
}
- iNdEx = postIndex
- case 7:
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgTokenizeSharesResponse) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgTokenizeSharesResponse: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -1702,7 +4968,7 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Value.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
@@ -1727,7 +4993,7 @@ func (m *MsgCreateValidator) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error {
+func (m *MsgRedeemTokensForShares) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -1750,12 +5016,77 @@ func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgCreateValidatorResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgRedeemTokensForShares: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgCreateValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgRedeemTokensForShares: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
+ case 1:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType)
+ }
+ var stringLen uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ stringLen |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ intStringLen := int(stringLen)
+ if intStringLen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + intStringLen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
+ case 2:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
+ }
+ var msglen int
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ msglen |= int(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ if msglen < 0 {
+ return ErrInvalidLengthTx
+ }
+ postIndex := iNdEx + msglen
+ if postIndex < 0 {
+ return ErrInvalidLengthTx
+ }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ return err
+ }
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
@@ -1777,7 +5108,7 @@ func (m *MsgCreateValidatorResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
+func (m *MsgRedeemTokensForSharesResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -1800,15 +5131,15 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgEditValidator: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgEditValidator: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
@@ -1835,15 +5166,65 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- if err := m.Description.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
+ if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
+ default:
+ iNdEx = preIndex
+ skippy, err := skipTx(dAtA[iNdEx:])
+ if err != nil {
+ return err
}
- var stringLen uint64
+ if (skippy < 0) || (iNdEx+skippy) < 0 {
+ return ErrInvalidLengthTx
+ }
+ if (iNdEx + skippy) > l {
+ return io.ErrUnexpectedEOF
+ }
+ iNdEx += skippy
+ }
+ }
+
+ if iNdEx > l {
+ return io.ErrUnexpectedEOF
+ }
+ return nil
+}
+func (m *MsgTransferTokenizeShareRecord) Unmarshal(dAtA []byte) error {
+ l := len(dAtA)
+ iNdEx := 0
+ for iNdEx < l {
+ preIndex := iNdEx
+ var wire uint64
+ for shift := uint(0); ; shift += 7 {
+ if shift >= 64 {
+ return ErrIntOverflowTx
+ }
+ if iNdEx >= l {
+ return io.ErrUnexpectedEOF
+ }
+ b := dAtA[iNdEx]
+ iNdEx++
+ wire |= uint64(b&0x7F) << shift
+ if b < 0x80 {
+ break
+ }
+ }
+ fieldNum := int32(wire >> 3)
+ wireType := int(wire & 0x7)
+ if wireType == 4 {
+ return fmt.Errorf("proto: MsgTransferTokenizeShareRecord: wiretype end group for non-group")
+ }
+ if fieldNum <= 0 {
+ return fmt.Errorf("proto: MsgTransferTokenizeShareRecord: illegal tag %d (wire type %d)", fieldNum, wire)
+ }
+ switch fieldNum {
+ case 1:
+ if wireType != 0 {
+ return fmt.Errorf("proto: wrong wireType = %d for field TokenizeShareRecordId", wireType)
+ }
+ m.TokenizeShareRecordId = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
@@ -1853,27 +5234,14 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
- stringLen |= uint64(b&0x7F) << shift
+ m.TokenizeShareRecordId |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
+ case 2:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field CommissionRate", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -1898,18 +5266,14 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
if postIndex < 0 {
return ErrInvalidLengthTx
}
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- var v github_com_cosmos_cosmos_sdk_types.Dec
- m.CommissionRate = &v
- if err := m.CommissionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ if postIndex > l {
+ return io.ErrUnexpectedEOF
+ }
+ m.Sender = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 4:
+ case 3:
if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field MinSelfDelegation", wireType)
+ return fmt.Errorf("proto: wrong wireType = %d for field NewOwner", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@@ -1937,11 +5301,7 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
- var v github_com_cosmos_cosmos_sdk_types.Int
- m.MinSelfDelegation = &v
- if err := m.MinSelfDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
+ m.NewOwner = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
@@ -1964,7 +5324,7 @@ func (m *MsgEditValidator) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error {
+func (m *MsgTransferTokenizeShareRecordResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -1987,10 +5347,10 @@ func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgEditValidatorResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgTransferTokenizeShareRecordResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgEditValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgTransferTokenizeShareRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
@@ -2014,7 +5374,7 @@ func (m *MsgEditValidatorResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgDelegate) Unmarshal(dAtA []byte) error {
+func (m *MsgDisableTokenizeShares) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -2037,10 +5397,10 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgDelegate: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgDisableTokenizeShares: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgDelegate: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgDisableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -2075,71 +5435,6 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error {
}
m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
@@ -2161,7 +5456,7 @@ func (m *MsgDelegate) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error {
+func (m *MsgDisableTokenizeSharesResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -2184,10 +5479,10 @@ func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgDelegateResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgDisableTokenizeSharesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgDelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgDisableTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
default:
@@ -2211,7 +5506,7 @@ func (m *MsgDelegateResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error {
+func (m *MsgEnableTokenizeShares) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -2234,10 +5529,10 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgBeginRedelegate: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgEnableTokenizeShares: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgBeginRedelegate: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgEnableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -2272,103 +5567,6 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error {
}
m.DelegatorAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorSrcAddress", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorSrcAddress = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorDstAddress", wireType)
- }
- var stringLen uint64
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- stringLen |= uint64(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- intStringLen := int(stringLen)
- if intStringLen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + intStringLen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorDstAddress = string(dAtA[iNdEx:postIndex])
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
@@ -2390,7 +5588,7 @@ func (m *MsgBeginRedelegate) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error {
+func (m *MsgEnableTokenizeSharesResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -2413,10 +5611,10 @@ func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgBeginRedelegateResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgEnableTokenizeSharesResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgBeginRedelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgEnableTokenizeSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -2473,7 +5671,7 @@ func (m *MsgBeginRedelegateResponse) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgUndelegate) Unmarshal(dAtA []byte) error {
+func (m *MsgValidatorBond) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -2496,10 +5694,10 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgUndelegate: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgValidatorBond: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgUndelegate: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgValidatorBond: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
@@ -2566,39 +5764,6 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error {
}
m.ValidatorAddress = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
@@ -2620,7 +5785,7 @@ func (m *MsgUndelegate) Unmarshal(dAtA []byte) error {
}
return nil
}
-func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error {
+func (m *MsgValidatorBondResponse) Unmarshal(dAtA []byte) error {
l := len(dAtA)
iNdEx := 0
for iNdEx < l {
@@ -2643,45 +5808,12 @@ func (m *MsgUndelegateResponse) Unmarshal(dAtA []byte) error {
fieldNum := int32(wire >> 3)
wireType := int(wire & 0x7)
if wireType == 4 {
- return fmt.Errorf("proto: MsgUndelegateResponse: wiretype end group for non-group")
+ return fmt.Errorf("proto: MsgValidatorBondResponse: wiretype end group for non-group")
}
if fieldNum <= 0 {
- return fmt.Errorf("proto: MsgUndelegateResponse: illegal tag %d (wire type %d)", fieldNum, wire)
+ return fmt.Errorf("proto: MsgValidatorBondResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
- case 1:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field CompletionTime", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTx
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTx
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTx
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CompletionTime, dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go
index 02da27fec73..5f88d0b992c 100644
--- a/x/staking/types/validator.go
+++ b/x/staking/types/validator.go
@@ -47,18 +47,19 @@ func NewValidator(operator sdk.ValAddress, pubKey cryptotypes.PubKey, descriptio
}
return Validator{
- OperatorAddress: operator.String(),
- ConsensusPubkey: pkAny,
- Jailed: false,
- Status: Unbonded,
- Tokens: sdk.ZeroInt(),
- DelegatorShares: sdk.ZeroDec(),
- Description: description,
- UnbondingHeight: int64(0),
- UnbondingTime: time.Unix(0, 0).UTC(),
- Commission: NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
- MinSelfDelegation: sdk.OneInt(),
- UnbondingOnHoldRefCount: 0,
+ OperatorAddress: operator.String(),
+ ConsensusPubkey: pkAny,
+ Jailed: false,
+ Status: Unbonded,
+ Tokens: sdk.ZeroInt(),
+ DelegatorShares: sdk.ZeroDec(),
+ Description: description,
+ UnbondingHeight: int64(0),
+ UnbondingTime: time.Unix(0, 0).UTC(),
+ Commission: NewCommission(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()),
+ UnbondingOnHoldRefCount: 0,
+ TotalValidatorBondShares: sdk.ZeroDec(),
+ TotalLiquidShares: sdk.ZeroDec(),
}, nil
}
@@ -444,7 +445,6 @@ func (v *Validator) MinEqual(other *Validator) bool {
v.Description.Equal(other.Description) &&
v.Commission.Equal(other.Commission) &&
v.Jailed == other.Jailed &&
- v.MinSelfDelegation.Equal(other.MinSelfDelegation) &&
v.ConsensusPubkey.Equal(other.ConsensusPubkey)
}
@@ -510,8 +510,9 @@ func (v Validator) GetConsensusPower(r sdk.Int) int64 {
return v.ConsensusPower(r)
}
func (v Validator) GetCommission() sdk.Dec { return v.Commission.Rate }
-func (v Validator) GetMinSelfDelegation() sdk.Int { return v.MinSelfDelegation }
+func (v Validator) GetMinSelfDelegation() sdk.Int { return sdk.ZeroInt() }
func (v Validator) GetDelegatorShares() sdk.Dec { return v.DelegatorShares }
+func (v Validator) GetTotalLiquidShares() sdk.Dec { return v.TotalLiquidShares }
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
func (v Validator) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {