From 8743000e2a9ccb8daccae02e033f91f003a39785 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 11 Mar 2021 11:17:46 +0100 Subject: [PATCH] Update Cosmos SDK codecs to 0.42.0 --- packages/cosmwasm-stargate/package.json | 2 +- .../cosmwasm-stargate/scripts/get-proto.sh | 6 +- packages/proto-signing/package.json | 2 +- packages/proto-signing/scripts/get-proto.sh | 6 +- packages/stargate/package.json | 2 +- packages/stargate/scripts/get-proto.sh | 6 +- .../src/codec/cosmos/bank/v1beta1/query.ts | 297 +++++++++++++++++- .../codec/cosmos/staking/v1beta1/staking.ts | 46 ++- 8 files changed, 352 insertions(+), 15 deletions(-) diff --git a/packages/cosmwasm-stargate/package.json b/packages/cosmwasm-stargate/package.json index d560760b..3b7a35ee 100644 --- a/packages/cosmwasm-stargate/package.json +++ b/packages/cosmwasm-stargate/package.json @@ -37,7 +37,7 @@ "coverage": "nyc --reporter=text --reporter=lcov yarn test --quiet", "pack-web": "yarn build-or-skip && webpack --mode development --config webpack.web.config.js", "preget-proto": "shx rm -rf proto", - "get-proto": "WASM_REF=v0.16.0-alpha1 COSMOS_REF=v0.42.0 ./scripts/get-proto.sh", + "get-proto": "WASM_REF=v0.16.0-alpha1 COSMOS_SDK_REF=v0.42.0 ./scripts/get-proto.sh", "define-proto": "./scripts/define-proto.sh", "postdefine-proto": "prettier --write \"src/codec/**/*.ts\"" }, diff --git a/packages/cosmwasm-stargate/scripts/get-proto.sh b/packages/cosmwasm-stargate/scripts/get-proto.sh index c12a45c6..77dd0725 100755 --- a/packages/cosmwasm-stargate/scripts/get-proto.sh +++ b/packages/cosmwasm-stargate/scripts/get-proto.sh @@ -7,8 +7,8 @@ PROTO_DIR="./proto" COSMOS_DIR="$PROTO_DIR/cosmos" COSMOS_SDK_DIR="$COSMOS_DIR/cosmos-sdk" COSMOS_SDK_ZIP_FILE="$COSMOS_DIR/tmp.zip" -COSMOS_REF=${COSMOS_REF:-"master"} -COSMOS_SUFFIX=${COSMOS_REF} +COSMOS_SDK_REF=${COSMOS_SDK_REF:-"master"} +COSMOS_SUFFIX=${COSMOS_SDK_REF} [[ $COSMOS_SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]] && COSMOS_SUFFIX=${COSMOS_SUFFIX#v} COSMWASM_DIR="$PROTO_DIR/cosmwasm" @@ -19,7 +19,7 @@ WASM_SUFFIX=${WASM_REF} [[ $WASM_SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]] && WASM_SUFFIX=${WASM_SUFFIX#v} mkdir -p "$COSMOS_DIR" -wget -qO "$COSMOS_SDK_ZIP_FILE" "https://github.com/cosmos/cosmos-sdk/archive/$COSMOS_REF.zip" +wget -qO "$COSMOS_SDK_ZIP_FILE" "https://github.com/cosmos/cosmos-sdk/archive/$COSMOS_SDK_REF.zip" unzip "$COSMOS_SDK_ZIP_FILE" "*.proto" -d "$COSMOS_DIR" mv "$COSMOS_SDK_DIR-$COSMOS_SUFFIX" "$COSMOS_SDK_DIR" rm "$COSMOS_SDK_ZIP_FILE" diff --git a/packages/proto-signing/package.json b/packages/proto-signing/package.json index dc3736f4..88188e72 100644 --- a/packages/proto-signing/package.json +++ b/packages/proto-signing/package.json @@ -38,7 +38,7 @@ "coverage": "nyc --reporter=text --reporter=lcov yarn test --quiet", "pack-web": "yarn build-or-skip && webpack --mode development --config webpack.web.config.js", "preget-proto": "shx rm -rf proto", - "get-proto": "REF=v0.40.0 ./scripts/get-proto.sh", + "get-proto": "COSMOS_SDK_REF=v0.42.0 ./scripts/get-proto.sh", "define-proto": "./scripts/define-proto.sh", "postdefine-proto": "prettier --write \"src/codec/**/*.ts\"" }, diff --git a/packages/proto-signing/scripts/get-proto.sh b/packages/proto-signing/scripts/get-proto.sh index 64688843..c938d933 100755 --- a/packages/proto-signing/scripts/get-proto.sh +++ b/packages/proto-signing/scripts/get-proto.sh @@ -6,14 +6,14 @@ PROTO_DIR="./proto" COSMOS_DIR="$PROTO_DIR/cosmos" COSMOS_SDK_DIR="$COSMOS_DIR/cosmos-sdk" ZIP_FILE="$COSMOS_DIR/tmp.zip" -REF=${REF:-"master"} -SUFFIX=${REF} +COSMOS_SDK_REF=${COSMOS_SDK_REF:-"master"} +SUFFIX=${COSMOS_SDK_REF} [[ $SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]] && SUFFIX=${SUFFIX#v} mkdir -p "$COSMOS_DIR" -wget -qO "$ZIP_FILE" "https://github.com/cosmos/cosmos-sdk/archive/$REF.zip" +wget -qO "$ZIP_FILE" "https://github.com/cosmos/cosmos-sdk/archive/$COSMOS_SDK_REF.zip" unzip "$ZIP_FILE" "*.proto" -d "$COSMOS_DIR" mv "$COSMOS_SDK_DIR-$SUFFIX" "$COSMOS_SDK_DIR" rm "$ZIP_FILE" diff --git a/packages/stargate/package.json b/packages/stargate/package.json index 27578fd2..fc204019 100644 --- a/packages/stargate/package.json +++ b/packages/stargate/package.json @@ -37,7 +37,7 @@ "coverage": "nyc --reporter=text --reporter=lcov yarn test --quiet", "pack-web": "yarn build-or-skip && webpack --mode development --config webpack.web.config.js", "preget-proto": "shx rm -rf proto", - "get-proto": "REF=v0.40.0 ./scripts/get-proto.sh", + "get-proto": "COSMOS_SDK_REF=v0.42.0 ./scripts/get-proto.sh", "define-proto": "./scripts/define-proto.sh", "postdefine-proto": "prettier --write \"src/codec/**/*.ts\"" }, diff --git a/packages/stargate/scripts/get-proto.sh b/packages/stargate/scripts/get-proto.sh index 64688843..c938d933 100755 --- a/packages/stargate/scripts/get-proto.sh +++ b/packages/stargate/scripts/get-proto.sh @@ -6,14 +6,14 @@ PROTO_DIR="./proto" COSMOS_DIR="$PROTO_DIR/cosmos" COSMOS_SDK_DIR="$COSMOS_DIR/cosmos-sdk" ZIP_FILE="$COSMOS_DIR/tmp.zip" -REF=${REF:-"master"} -SUFFIX=${REF} +COSMOS_SDK_REF=${COSMOS_SDK_REF:-"master"} +SUFFIX=${COSMOS_SDK_REF} [[ $SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]] && SUFFIX=${SUFFIX#v} mkdir -p "$COSMOS_DIR" -wget -qO "$ZIP_FILE" "https://github.com/cosmos/cosmos-sdk/archive/$REF.zip" +wget -qO "$ZIP_FILE" "https://github.com/cosmos/cosmos-sdk/archive/$COSMOS_SDK_REF.zip" unzip "$ZIP_FILE" "*.proto" -d "$COSMOS_DIR" mv "$COSMOS_SDK_DIR-$SUFFIX" "$COSMOS_SDK_DIR" rm "$ZIP_FILE" diff --git a/packages/stargate/src/codec/cosmos/bank/v1beta1/query.ts b/packages/stargate/src/codec/cosmos/bank/v1beta1/query.ts index b1e07e2f..4e4e81b9 100644 --- a/packages/stargate/src/codec/cosmos/bank/v1beta1/query.ts +++ b/packages/stargate/src/codec/cosmos/bank/v1beta1/query.ts @@ -1,7 +1,7 @@ /* eslint-disable */ import { Coin } from "../../../cosmos/base/v1beta1/coin"; import { PageRequest, PageResponse } from "../../../cosmos/base/query/v1beta1/pagination"; -import { Params } from "../../../cosmos/bank/v1beta1/bank"; +import { Params, Metadata } from "../../../cosmos/bank/v1beta1/bank"; import _m0 from "protobufjs/minimal"; import Long from "long"; @@ -75,6 +75,38 @@ export interface QueryParamsResponse { params?: Params; } +/** QueryDenomsMetadataRequest is the request type for the Query/DenomsMetadata RPC method. */ +export interface QueryDenomsMetadataRequest { + /** pagination defines an optional pagination for the request. */ + pagination?: PageRequest; +} + +/** + * QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC + * method. + */ +export interface QueryDenomsMetadataResponse { + /** metadata provides the client information for all the registered tokens. */ + metadatas: Metadata[]; + /** pagination defines the pagination in the response. */ + pagination?: PageResponse; +} + +/** QueryDenomMetadataRequest is the request type for the Query/DenomMetadata RPC method. */ +export interface QueryDenomMetadataRequest { + /** denom is the coin denom to query the metadata for. */ + denom: string; +} + +/** + * QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC + * method. + */ +export interface QueryDenomMetadataResponse { + /** metadata describes and provides all the client information for the requested token. */ + metadata?: Metadata; +} + const baseQueryBalanceRequest: object = { address: "", denom: "" }; export const QueryBalanceRequest = { @@ -659,6 +691,253 @@ export const QueryParamsResponse = { }, }; +const baseQueryDenomsMetadataRequest: object = {}; + +export const QueryDenomsMetadataRequest = { + encode(message: QueryDenomsMetadataRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.pagination !== undefined) { + PageRequest.encode(message.pagination, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryDenomsMetadataRequest { + const reader = input instanceof Uint8Array ? new _m0.Reader(input) : input; + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryDenomsMetadataRequest } as QueryDenomsMetadataRequest; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.pagination = PageRequest.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): QueryDenomsMetadataRequest { + const message = { ...baseQueryDenomsMetadataRequest } as QueryDenomsMetadataRequest; + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageRequest.fromJSON(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, + + toJSON(message: QueryDenomsMetadataRequest): unknown { + const obj: any = {}; + message.pagination !== undefined && + (obj.pagination = message.pagination ? PageRequest.toJSON(message.pagination) : undefined); + return obj; + }, + + fromPartial(object: DeepPartial): QueryDenomsMetadataRequest { + const message = { ...baseQueryDenomsMetadataRequest } as QueryDenomsMetadataRequest; + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageRequest.fromPartial(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, +}; + +const baseQueryDenomsMetadataResponse: object = {}; + +export const QueryDenomsMetadataResponse = { + encode(message: QueryDenomsMetadataResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.metadatas) { + Metadata.encode(v!, writer.uint32(10).fork()).ldelim(); + } + if (message.pagination !== undefined) { + PageResponse.encode(message.pagination, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryDenomsMetadataResponse { + const reader = input instanceof Uint8Array ? new _m0.Reader(input) : input; + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryDenomsMetadataResponse } as QueryDenomsMetadataResponse; + message.metadatas = []; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.metadatas.push(Metadata.decode(reader, reader.uint32())); + break; + case 2: + message.pagination = PageResponse.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): QueryDenomsMetadataResponse { + const message = { ...baseQueryDenomsMetadataResponse } as QueryDenomsMetadataResponse; + message.metadatas = []; + if (object.metadatas !== undefined && object.metadatas !== null) { + for (const e of object.metadatas) { + message.metadatas.push(Metadata.fromJSON(e)); + } + } + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageResponse.fromJSON(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, + + toJSON(message: QueryDenomsMetadataResponse): unknown { + const obj: any = {}; + if (message.metadatas) { + obj.metadatas = message.metadatas.map((e) => (e ? Metadata.toJSON(e) : undefined)); + } else { + obj.metadatas = []; + } + message.pagination !== undefined && + (obj.pagination = message.pagination ? PageResponse.toJSON(message.pagination) : undefined); + return obj; + }, + + fromPartial(object: DeepPartial): QueryDenomsMetadataResponse { + const message = { ...baseQueryDenomsMetadataResponse } as QueryDenomsMetadataResponse; + message.metadatas = []; + if (object.metadatas !== undefined && object.metadatas !== null) { + for (const e of object.metadatas) { + message.metadatas.push(Metadata.fromPartial(e)); + } + } + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageResponse.fromPartial(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, +}; + +const baseQueryDenomMetadataRequest: object = { denom: "" }; + +export const QueryDenomMetadataRequest = { + encode(message: QueryDenomMetadataRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.denom !== "") { + writer.uint32(10).string(message.denom); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryDenomMetadataRequest { + const reader = input instanceof Uint8Array ? new _m0.Reader(input) : input; + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryDenomMetadataRequest } as QueryDenomMetadataRequest; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.denom = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): QueryDenomMetadataRequest { + const message = { ...baseQueryDenomMetadataRequest } as QueryDenomMetadataRequest; + if (object.denom !== undefined && object.denom !== null) { + message.denom = String(object.denom); + } else { + message.denom = ""; + } + return message; + }, + + toJSON(message: QueryDenomMetadataRequest): unknown { + const obj: any = {}; + message.denom !== undefined && (obj.denom = message.denom); + return obj; + }, + + fromPartial(object: DeepPartial): QueryDenomMetadataRequest { + const message = { ...baseQueryDenomMetadataRequest } as QueryDenomMetadataRequest; + if (object.denom !== undefined && object.denom !== null) { + message.denom = object.denom; + } else { + message.denom = ""; + } + return message; + }, +}; + +const baseQueryDenomMetadataResponse: object = {}; + +export const QueryDenomMetadataResponse = { + encode(message: QueryDenomMetadataResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.metadata !== undefined) { + Metadata.encode(message.metadata, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryDenomMetadataResponse { + const reader = input instanceof Uint8Array ? new _m0.Reader(input) : input; + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryDenomMetadataResponse } as QueryDenomMetadataResponse; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.metadata = Metadata.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): QueryDenomMetadataResponse { + const message = { ...baseQueryDenomMetadataResponse } as QueryDenomMetadataResponse; + if (object.metadata !== undefined && object.metadata !== null) { + message.metadata = Metadata.fromJSON(object.metadata); + } else { + message.metadata = undefined; + } + return message; + }, + + toJSON(message: QueryDenomMetadataResponse): unknown { + const obj: any = {}; + message.metadata !== undefined && + (obj.metadata = message.metadata ? Metadata.toJSON(message.metadata) : undefined); + return obj; + }, + + fromPartial(object: DeepPartial): QueryDenomMetadataResponse { + const message = { ...baseQueryDenomMetadataResponse } as QueryDenomMetadataResponse; + if (object.metadata !== undefined && object.metadata !== null) { + message.metadata = Metadata.fromPartial(object.metadata); + } else { + message.metadata = undefined; + } + return message; + }, +}; + /** Query defines the gRPC querier service. */ export interface Query { /** Balance queries the balance of a single coin for a single account. */ @@ -671,6 +950,10 @@ export interface Query { SupplyOf(request: QuerySupplyOfRequest): Promise; /** Params queries the parameters of x/bank module. */ Params(request: QueryParamsRequest): Promise; + /** DenomsMetadata queries the client metadata of a given coin denomination. */ + DenomMetadata(request: QueryDenomMetadataRequest): Promise; + /** DenomsMetadata queries the client metadata for all registered coin denominations. */ + DenomsMetadata(request: QueryDenomsMetadataRequest): Promise; } export class QueryClientImpl implements Query { @@ -707,6 +990,18 @@ export class QueryClientImpl implements Query { const promise = this.rpc.request("cosmos.bank.v1beta1.Query", "Params", data); return promise.then((data) => QueryParamsResponse.decode(new _m0.Reader(data))); } + + DenomMetadata(request: QueryDenomMetadataRequest): Promise { + const data = QueryDenomMetadataRequest.encode(request).finish(); + const promise = this.rpc.request("cosmos.bank.v1beta1.Query", "DenomMetadata", data); + return promise.then((data) => QueryDenomMetadataResponse.decode(new _m0.Reader(data))); + } + + DenomsMetadata(request: QueryDenomsMetadataRequest): Promise { + const data = QueryDenomsMetadataRequest.encode(request).finish(); + const promise = this.rpc.request("cosmos.bank.v1beta1.Query", "DenomsMetadata", data); + return promise.then((data) => QueryDenomsMetadataResponse.decode(new _m0.Reader(data))); + } } interface Rpc { diff --git a/packages/stargate/src/codec/cosmos/staking/v1beta1/staking.ts b/packages/stargate/src/codec/cosmos/staking/v1beta1/staking.ts index 24944a9e..7756de3f 100644 --- a/packages/stargate/src/codec/cosmos/staking/v1beta1/staking.ts +++ b/packages/stargate/src/codec/cosmos/staking/v1beta1/staking.ts @@ -74,23 +74,33 @@ export interface HistoricalInfo { * a validator. */ export interface CommissionRates { + /** rate is the commission rate charged to delegators, as a fraction. */ rate: string; + /** max_rate defines the maximum commission rate which validator can ever charge, as a fraction. */ maxRate: string; + /** max_change_rate defines the maximum daily increase of the validator commission, as a fraction. */ maxChangeRate: string; } /** Commission defines commission parameters for a given validator. */ export interface Commission { + /** commission_rates defines the initial commission rates to be used for creating a validator. */ commissionRates?: CommissionRates; + /** update_time is the last time the commission rate was changed. */ updateTime?: Date; } /** Description defines a validator description. */ export interface Description { + /** moniker defines a human-readable name for the validator. */ moniker: string; + /** identity defines an optional identity signature (ex. UPort or Keybase). */ identity: string; + /** website defines an optional website link. */ website: string; + /** security_contact defines an optional email for security contact. */ securityContact: string; + /** details define other optional details. */ details: string; } @@ -105,16 +115,27 @@ export interface Description { * multiplied by exchange rate. */ export interface Validator { + /** operator_address defines the address of the validator's operator; bech encoded in JSON. */ operatorAddress: string; + /** consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. */ consensusPubkey?: Any; + /** jailed defined whether the validator has been jailed from bonded status or not. */ jailed: boolean; + /** status is the validator status (bonded/unbonding/unbonded). */ status: BondStatus; + /** tokens define the delegated tokens (incl. self-delegation). */ tokens: string; + /** delegator_shares defines total shares issued to a validator's delegators. */ delegatorShares: string; + /** description defines the description terms for the validator. */ description?: Description; + /** unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. */ unbondingHeight: Long; + /** unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. */ unbondingTime?: Date; + /** commission defines the commission parameters. */ commission?: Commission; + /** min_self_delegation is the validator's self declared minimum self delegation. */ minSelfDelegation: string; } @@ -161,8 +182,11 @@ export interface DVVTriplets { * validator. */ export interface Delegation { + /** delegator_address is the bech32-encoded address of the delegator. */ delegatorAddress: string; + /** validator_address is the bech32-encoded address of the validator. */ validatorAddress: string; + /** shares define the delegation shares received. */ shares: string; } @@ -171,25 +195,35 @@ export interface Delegation { * for a single validator in an time-ordered list. */ export interface UnbondingDelegation { + /** delegator_address is the bech32-encoded address of the delegator. */ delegatorAddress: string; + /** validator_address is the bech32-encoded address of the validator. */ validatorAddress: string; - /** unbonding delegation entries */ + /** entries are the unbonding delegation entries. */ entries: UnbondingDelegationEntry[]; } /** UnbondingDelegationEntry defines an unbonding object with relevant metadata. */ export interface UnbondingDelegationEntry { + /** creation_height is the height which the unbonding took place. */ creationHeight: Long; + /** completion_time is the unix time for unbonding completion. */ completionTime?: Date; + /** initial_balance defines the tokens initially scheduled to receive at completion. */ initialBalance: string; + /** balance defines the tokens to receive at completion. */ balance: string; } /** RedelegationEntry defines a redelegation object with relevant metadata. */ export interface RedelegationEntry { + /** creation_height defines the height which the redelegation took place. */ creationHeight: Long; + /** completion_time defines the unix time for redelegation completion. */ completionTime?: Date; + /** initial_balance defines the initial balance when redelegation started. */ initialBalance: string; + /** shares_dst is the amount of destination-validator shares created by redelegation. */ sharesDst: string; } @@ -198,19 +232,27 @@ export interface RedelegationEntry { * from a particular source validator to a particular destination validator. */ export interface Redelegation { + /** delegator_address is the bech32-encoded address of the delegator. */ delegatorAddress: string; + /** validator_src_address is the validator redelegation source operator address. */ validatorSrcAddress: string; + /** validator_dst_address is the validator redelegation destination operator address. */ validatorDstAddress: string; - /** redelegation entries */ + /** entries are the redelegation entries. */ entries: RedelegationEntry[]; } /** Params defines the parameters for the staking module. */ export interface Params { + /** unbonding_time is the time duration of unbonding. */ unbondingTime?: Duration; + /** max_validators is the maximum number of validators. */ maxValidators: number; + /** max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). */ maxEntries: number; + /** historical_entries is the number of historical entries to persist. */ historicalEntries: number; + /** bond_denom defines the bondable coin denomination. */ bondDenom: string; }