diff --git a/.gitmodules b/.gitmodules index 987a2282..d275af28 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "wasmd-0.18"] path = wasmd-0.18 url = https://github.com/CosmWasm/wasmd.git +[submodule "cosmos-sdk-0.43"] + path = cosmos-sdk-0.43 + url = https://github.com/cosmos/cosmos-sdk diff --git a/cosmos-sdk-0.43 b/cosmos-sdk-0.43 new file mode 160000 index 00000000..0ab5726a --- /dev/null +++ b/cosmos-sdk-0.43 @@ -0,0 +1 @@ +Subproject commit 0ab5726a7aa5c2d66916b14becb696e6e19a1efb diff --git a/package.json b/package.json index 8fbff148..6f679166 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ ], "scripts": { "format": "prettier --write --loglevel warn \"./src/**/*.ts\"", - "define-proto": "./scripts/define-proto.sh && yarn format", + "define-proto": "./scripts/define-proto.sh && ./scripts/define-proto-cosmos-sdk.sh && yarn format", "prepare": "./scripts/prepare.sh", "build": "rm -rf ./build && tsc && yarn prepare" }, diff --git a/scripts/define-proto-cosmos-sdk.sh b/scripts/define-proto-cosmos-sdk.sh new file mode 100755 index 00000000..47b7bad5 --- /dev/null +++ b/scripts/define-proto-cosmos-sdk.sh @@ -0,0 +1,75 @@ +#!/bin/bash +set -o errexit -o nounset -o pipefail +command -v shellcheck >/dev/null && shellcheck "$0" + +OUT_DIR="./src" +COSMOS_SDK_DIR="./cosmos-sdk-0.43/proto" +COSMOS_SDK_THIRD_PARTY_DIR="./cosmos-sdk-0.43/third_party/proto" + +PLUGIN_PATH="$(realpath ./bin)/protoc-gen-ts_proto_yarn_2" + +mkdir -p "$OUT_DIR" + +protoc \ + --plugin="$PLUGIN_PATH" \ + --ts_proto_yarn_2_out="$OUT_DIR" \ + --proto_path="$COSMOS_SDK_DIR" \ + --proto_path="$COSMOS_SDK_THIRD_PARTY_DIR" \ + --ts_proto_yarn_2_opt="esModuleInterop=true,forceLong=long,useOptionals=true" \ + "$COSMOS_SDK_DIR/cosmos/auth/v1beta1/auth.proto" \ + "$COSMOS_SDK_DIR/cosmos/auth/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/auth/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/bank/v1beta1/bank.proto" \ + "$COSMOS_SDK_DIR/cosmos/bank/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/bank/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/bank/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/abci/v1beta1/abci.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/kv/v1beta1/kv.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/query/v1beta1/pagination.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/reflection/v1beta1/reflection.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/snapshots/v1beta1/snapshot.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/store/v1beta1/commit_info.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/store/v1beta1/snapshot.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/tendermint/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/base/v1beta1/coin.proto" \ + "$COSMOS_SDK_DIR/cosmos/capability/v1beta1/capability.proto" \ + "$COSMOS_SDK_DIR/cosmos/capability/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/crisis/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/crisis/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/crypto/ed25519/keys.proto" \ + "$COSMOS_SDK_DIR/cosmos/crypto/multisig/keys.proto" \ + "$COSMOS_SDK_DIR/cosmos/crypto/multisig/v1beta1/multisig.proto" \ + "$COSMOS_SDK_DIR/cosmos/crypto/secp256k1/keys.proto" \ + "$COSMOS_SDK_DIR/cosmos/distribution/v1beta1/distribution.proto" \ + "$COSMOS_SDK_DIR/cosmos/distribution/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/distribution/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/distribution/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/evidence/v1beta1/evidence.proto" \ + "$COSMOS_SDK_DIR/cosmos/evidence/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/evidence/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/evidence/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/genutil/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/gov/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/gov/v1beta1/gov.proto" \ + "$COSMOS_SDK_DIR/cosmos/gov/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/gov/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/mint/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/mint/v1beta1/mint.proto" \ + "$COSMOS_SDK_DIR/cosmos/mint/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/params/v1beta1/params.proto" \ + "$COSMOS_SDK_DIR/cosmos/params/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/slashing/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/slashing/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/slashing/v1beta1/slashing.proto" \ + "$COSMOS_SDK_DIR/cosmos/slashing/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/staking/v1beta1/genesis.proto" \ + "$COSMOS_SDK_DIR/cosmos/staking/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/staking/v1beta1/staking.proto" \ + "$COSMOS_SDK_DIR/cosmos/staking/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/tx/signing/v1beta1/signing.proto" \ + "$COSMOS_SDK_DIR/cosmos/tx/v1beta1/service.proto" \ + "$COSMOS_SDK_DIR/cosmos/tx/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/upgrade/v1beta1/query.proto" \ + "$COSMOS_SDK_DIR/cosmos/upgrade/v1beta1/upgrade.proto" \ + "$COSMOS_SDK_DIR/cosmos/vesting/v1beta1/tx.proto" \ + "$COSMOS_SDK_DIR/cosmos/vesting/v1beta1/vesting.proto" diff --git a/src/cosmos/auth/v1beta1/query.ts b/src/cosmos/auth/v1beta1/query.ts index f3277047..c00e49f1 100644 --- a/src/cosmos/auth/v1beta1/query.ts +++ b/src/cosmos/auth/v1beta1/query.ts @@ -1,11 +1,26 @@ /* eslint-disable */ import Long from "long"; import _m0 from "protobufjs/minimal"; +import { PageRequest, PageResponse } from "../../../cosmos/base/query/v1beta1/pagination"; import { Any } from "../../../google/protobuf/any"; import { Params } from "../../../cosmos/auth/v1beta1/auth"; export const protobufPackage = "cosmos.auth.v1beta1"; +/** QueryAccountsRequest is the request type for the Query/Accounts RPC method. */ +export interface QueryAccountsRequest { + /** pagination defines an optional pagination for the request. */ + pagination?: PageRequest; +} + +/** QueryAccountsResponse is the response type for the Query/Accounts RPC method. */ +export interface QueryAccountsResponse { + /** accounts are the existing accounts */ + accounts: Any[]; + /** pagination defines the pagination in the response. */ + pagination?: PageResponse; +} + /** QueryAccountRequest is the request type for the Query/Account RPC method. */ export interface QueryAccountRequest { /** address defines the address to query for. */ @@ -27,6 +42,142 @@ export interface QueryParamsResponse { params?: Params; } +const baseQueryAccountsRequest: object = {}; + +export const QueryAccountsRequest = { + encode(message: QueryAccountsRequest, 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): QueryAccountsRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryAccountsRequest } as QueryAccountsRequest; + 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): QueryAccountsRequest { + const message = { ...baseQueryAccountsRequest } as QueryAccountsRequest; + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageRequest.fromJSON(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, + + toJSON(message: QueryAccountsRequest): unknown { + const obj: any = {}; + message.pagination !== undefined && + (obj.pagination = message.pagination ? PageRequest.toJSON(message.pagination) : undefined); + return obj; + }, + + fromPartial(object: DeepPartial): QueryAccountsRequest { + const message = { ...baseQueryAccountsRequest } as QueryAccountsRequest; + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageRequest.fromPartial(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, +}; + +const baseQueryAccountsResponse: object = {}; + +export const QueryAccountsResponse = { + encode(message: QueryAccountsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.accounts) { + Any.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): QueryAccountsResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryAccountsResponse } as QueryAccountsResponse; + message.accounts = []; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.accounts.push(Any.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): QueryAccountsResponse { + const message = { ...baseQueryAccountsResponse } as QueryAccountsResponse; + message.accounts = []; + if (object.accounts !== undefined && object.accounts !== null) { + for (const e of object.accounts) { + message.accounts.push(Any.fromJSON(e)); + } + } + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageResponse.fromJSON(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, + + toJSON(message: QueryAccountsResponse): unknown { + const obj: any = {}; + if (message.accounts) { + obj.accounts = message.accounts.map((e) => (e ? Any.toJSON(e) : undefined)); + } else { + obj.accounts = []; + } + message.pagination !== undefined && + (obj.pagination = message.pagination ? PageResponse.toJSON(message.pagination) : undefined); + return obj; + }, + + fromPartial(object: DeepPartial): QueryAccountsResponse { + const message = { ...baseQueryAccountsResponse } as QueryAccountsResponse; + message.accounts = []; + if (object.accounts !== undefined && object.accounts !== null) { + for (const e of object.accounts) { + message.accounts.push(Any.fromPartial(e)); + } + } + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageResponse.fromPartial(object.pagination); + } else { + message.pagination = undefined; + } + return message; + }, +}; + const baseQueryAccountRequest: object = { address: "" }; export const QueryAccountRequest = { @@ -233,6 +384,8 @@ export const QueryParamsResponse = { /** Query defines the gRPC querier service. */ export interface Query { + /** Accounts returns all the existing accounts */ + Accounts(request: QueryAccountsRequest): Promise; /** Account returns account details based on address. */ Account(request: QueryAccountRequest): Promise; /** Params queries all parameters. */ @@ -243,9 +396,16 @@ export class QueryClientImpl implements Query { private readonly rpc: Rpc; constructor(rpc: Rpc) { this.rpc = rpc; + this.Accounts = this.Accounts.bind(this); this.Account = this.Account.bind(this); this.Params = this.Params.bind(this); } + Accounts(request: QueryAccountsRequest): Promise { + const data = QueryAccountsRequest.encode(request).finish(); + const promise = this.rpc.request("cosmos.auth.v1beta1.Query", "Accounts", data); + return promise.then((data) => QueryAccountsResponse.decode(new _m0.Reader(data))); + } + Account(request: QueryAccountRequest): Promise { const data = QueryAccountRequest.encode(request).finish(); const promise = this.rpc.request("cosmos.auth.v1beta1.Query", "Account", data); diff --git a/src/cosmos/bank/v1beta1/bank.ts b/src/cosmos/bank/v1beta1/bank.ts index e80a6c3c..6a25e2d5 100644 --- a/src/cosmos/bank/v1beta1/bank.ts +++ b/src/cosmos/bank/v1beta1/bank.ts @@ -35,6 +35,9 @@ export interface Output { /** * Supply represents a struct that passively keeps track of the total supply * amounts in the network. + * This message is deprecated now that supply is indexed by denom. + * + * @deprecated */ export interface Supply { total: Coin[]; @@ -74,6 +77,13 @@ export interface Metadata { * displayed in clients. */ display: string; + /** name defines the name of the token (eg: Cosmos Atom) */ + name: string; + /** + * symbol is the token symbol usually shown on exchanges (eg: ATOM). This can + * be the same as the display. + */ + symbol: string; } const baseParams: object = { defaultSendEnabled: false }; @@ -543,7 +553,7 @@ export const DenomUnit = { }, }; -const baseMetadata: object = { description: "", base: "", display: "" }; +const baseMetadata: object = { description: "", base: "", display: "", name: "", symbol: "" }; export const Metadata = { encode(message: Metadata, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { @@ -559,6 +569,12 @@ export const Metadata = { if (message.display !== "") { writer.uint32(34).string(message.display); } + if (message.name !== "") { + writer.uint32(42).string(message.name); + } + if (message.symbol !== "") { + writer.uint32(50).string(message.symbol); + } return writer; }, @@ -582,6 +598,12 @@ export const Metadata = { case 4: message.display = reader.string(); break; + case 5: + message.name = reader.string(); + break; + case 6: + message.symbol = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -613,6 +635,16 @@ export const Metadata = { } else { message.display = ""; } + if (object.name !== undefined && object.name !== null) { + message.name = String(object.name); + } else { + message.name = ""; + } + if (object.symbol !== undefined && object.symbol !== null) { + message.symbol = String(object.symbol); + } else { + message.symbol = ""; + } return message; }, @@ -626,6 +658,8 @@ export const Metadata = { } message.base !== undefined && (obj.base = message.base); message.display !== undefined && (obj.display = message.display); + message.name !== undefined && (obj.name = message.name); + message.symbol !== undefined && (obj.symbol = message.symbol); return obj; }, @@ -652,6 +686,16 @@ export const Metadata = { } else { message.display = ""; } + if (object.name !== undefined && object.name !== null) { + message.name = object.name; + } else { + message.name = ""; + } + if (object.symbol !== undefined && object.symbol !== null) { + message.symbol = object.symbol; + } else { + message.symbol = ""; + } return message; }, }; diff --git a/src/cosmos/bank/v1beta1/genesis.ts b/src/cosmos/bank/v1beta1/genesis.ts index 4b2db401..452821a6 100644 --- a/src/cosmos/bank/v1beta1/genesis.ts +++ b/src/cosmos/bank/v1beta1/genesis.ts @@ -12,7 +12,10 @@ export interface GenesisState { params?: Params; /** balances is an array containing the balances of all the accounts. */ balances: Balance[]; - /** supply represents the total supply. */ + /** + * supply represents the total supply. If it is left empty, then supply will be calculated based on the provided + * balances. Otherwise, it will be used to validate that the sum of the balances equals this amount. + */ supply: Coin[]; /** denom_metadata defines the metadata of the differents coins. */ denomMetadata: Metadata[]; diff --git a/src/cosmos/bank/v1beta1/query.ts b/src/cosmos/bank/v1beta1/query.ts index 013b8ea4..0d905796 100644 --- a/src/cosmos/bank/v1beta1/query.ts +++ b/src/cosmos/bank/v1beta1/query.ts @@ -44,7 +44,10 @@ export interface QueryAllBalancesResponse { * QueryTotalSupplyRequest is the request type for the Query/TotalSupply RPC * method. */ -export interface QueryTotalSupplyRequest {} +export interface QueryTotalSupplyRequest { + /** pagination defines an optional pagination for the request. */ + pagination?: PageRequest; +} /** * QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC @@ -53,6 +56,8 @@ export interface QueryTotalSupplyRequest {} export interface QueryTotalSupplyResponse { /** supply is the supply of the coins */ supply: Coin[]; + /** pagination defines the pagination in the response. */ + pagination?: PageResponse; } /** QuerySupplyOfRequest is the request type for the Query/SupplyOf RPC method. */ @@ -391,7 +396,10 @@ export const QueryAllBalancesResponse = { const baseQueryTotalSupplyRequest: object = {}; export const QueryTotalSupplyRequest = { - encode(_: QueryTotalSupplyRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + encode(message: QueryTotalSupplyRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.pagination !== undefined) { + PageRequest.encode(message.pagination, writer.uint32(10).fork()).ldelim(); + } return writer; }, @@ -402,6 +410,9 @@ export const QueryTotalSupplyRequest = { 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; @@ -410,18 +421,30 @@ export const QueryTotalSupplyRequest = { return message; }, - fromJSON(_: any): QueryTotalSupplyRequest { + fromJSON(object: any): QueryTotalSupplyRequest { const message = { ...baseQueryTotalSupplyRequest } as QueryTotalSupplyRequest; + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageRequest.fromJSON(object.pagination); + } else { + message.pagination = undefined; + } return message; }, - toJSON(_: QueryTotalSupplyRequest): unknown { + toJSON(message: QueryTotalSupplyRequest): unknown { const obj: any = {}; + message.pagination !== undefined && + (obj.pagination = message.pagination ? PageRequest.toJSON(message.pagination) : undefined); return obj; }, - fromPartial(_: DeepPartial): QueryTotalSupplyRequest { + fromPartial(object: DeepPartial): QueryTotalSupplyRequest { const message = { ...baseQueryTotalSupplyRequest } as QueryTotalSupplyRequest; + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageRequest.fromPartial(object.pagination); + } else { + message.pagination = undefined; + } return message; }, }; @@ -433,6 +456,9 @@ export const QueryTotalSupplyResponse = { for (const v of message.supply) { Coin.encode(v!, writer.uint32(10).fork()).ldelim(); } + if (message.pagination !== undefined) { + PageResponse.encode(message.pagination, writer.uint32(18).fork()).ldelim(); + } return writer; }, @@ -447,6 +473,9 @@ export const QueryTotalSupplyResponse = { case 1: message.supply.push(Coin.decode(reader, reader.uint32())); break; + case 2: + message.pagination = PageResponse.decode(reader, reader.uint32()); + break; default: reader.skipType(tag & 7); break; @@ -463,6 +492,11 @@ export const QueryTotalSupplyResponse = { message.supply.push(Coin.fromJSON(e)); } } + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageResponse.fromJSON(object.pagination); + } else { + message.pagination = undefined; + } return message; }, @@ -473,6 +507,8 @@ export const QueryTotalSupplyResponse = { } else { obj.supply = []; } + message.pagination !== undefined && + (obj.pagination = message.pagination ? PageResponse.toJSON(message.pagination) : undefined); return obj; }, @@ -484,6 +520,11 @@ export const QueryTotalSupplyResponse = { message.supply.push(Coin.fromPartial(e)); } } + if (object.pagination !== undefined && object.pagination !== null) { + message.pagination = PageResponse.fromPartial(object.pagination); + } else { + message.pagination = undefined; + } return message; }, }; diff --git a/src/cosmos/base/query/v1beta1/pagination.ts b/src/cosmos/base/query/v1beta1/pagination.ts index 722addf7..7e2aaf1f 100644 --- a/src/cosmos/base/query/v1beta1/pagination.ts +++ b/src/cosmos/base/query/v1beta1/pagination.ts @@ -38,6 +38,8 @@ export interface PageRequest { * is set. */ countTotal: boolean; + /** reverse is set to true if results are to be returned in the descending order. */ + reverse: boolean; } /** @@ -62,7 +64,7 @@ export interface PageResponse { total: Long; } -const basePageRequest: object = { offset: Long.UZERO, limit: Long.UZERO, countTotal: false }; +const basePageRequest: object = { offset: Long.UZERO, limit: Long.UZERO, countTotal: false, reverse: false }; export const PageRequest = { encode(message: PageRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { @@ -78,6 +80,9 @@ export const PageRequest = { if (message.countTotal === true) { writer.uint32(32).bool(message.countTotal); } + if (message.reverse === true) { + writer.uint32(40).bool(message.reverse); + } return writer; }, @@ -101,6 +106,9 @@ export const PageRequest = { case 4: message.countTotal = reader.bool(); break; + case 5: + message.reverse = reader.bool(); + break; default: reader.skipType(tag & 7); break; @@ -130,6 +138,11 @@ export const PageRequest = { } else { message.countTotal = false; } + if (object.reverse !== undefined && object.reverse !== null) { + message.reverse = Boolean(object.reverse); + } else { + message.reverse = false; + } return message; }, @@ -140,6 +153,7 @@ export const PageRequest = { message.offset !== undefined && (obj.offset = (message.offset || Long.UZERO).toString()); message.limit !== undefined && (obj.limit = (message.limit || Long.UZERO).toString()); message.countTotal !== undefined && (obj.countTotal = message.countTotal); + message.reverse !== undefined && (obj.reverse = message.reverse); return obj; }, @@ -165,6 +179,11 @@ export const PageRequest = { } else { message.countTotal = false; } + if (object.reverse !== undefined && object.reverse !== null) { + message.reverse = object.reverse; + } else { + message.reverse = false; + } return message; }, }; diff --git a/src/cosmos/base/tendermint/v1beta1/query.ts b/src/cosmos/base/tendermint/v1beta1/query.ts index 6a8f0d0e..c747df15 100644 --- a/src/cosmos/base/tendermint/v1beta1/query.ts +++ b/src/cosmos/base/tendermint/v1beta1/query.ts @@ -92,6 +92,7 @@ export interface VersionInfo { buildTags: string; goVersion: string; buildDeps: Module[]; + cosmosSdkVersion: string; } /** Module is the type for VersionInfo */ @@ -989,6 +990,7 @@ const baseVersionInfo: object = { gitCommit: "", buildTags: "", goVersion: "", + cosmosSdkVersion: "", }; export const VersionInfo = { @@ -1014,6 +1016,9 @@ export const VersionInfo = { for (const v of message.buildDeps) { Module.encode(v!, writer.uint32(58).fork()).ldelim(); } + if (message.cosmosSdkVersion !== "") { + writer.uint32(66).string(message.cosmosSdkVersion); + } return writer; }, @@ -1046,6 +1051,9 @@ export const VersionInfo = { case 7: message.buildDeps.push(Module.decode(reader, reader.uint32())); break; + case 8: + message.cosmosSdkVersion = reader.string(); + break; default: reader.skipType(tag & 7); break; @@ -1092,6 +1100,11 @@ export const VersionInfo = { message.buildDeps.push(Module.fromJSON(e)); } } + if (object.cosmosSdkVersion !== undefined && object.cosmosSdkVersion !== null) { + message.cosmosSdkVersion = String(object.cosmosSdkVersion); + } else { + message.cosmosSdkVersion = ""; + } return message; }, @@ -1108,6 +1121,7 @@ export const VersionInfo = { } else { obj.buildDeps = []; } + message.cosmosSdkVersion !== undefined && (obj.cosmosSdkVersion = message.cosmosSdkVersion); return obj; }, @@ -1149,6 +1163,11 @@ export const VersionInfo = { message.buildDeps.push(Module.fromPartial(e)); } } + if (object.cosmosSdkVersion !== undefined && object.cosmosSdkVersion !== null) { + message.cosmosSdkVersion = object.cosmosSdkVersion; + } else { + message.cosmosSdkVersion = ""; + } return message; }, }; diff --git a/src/cosmos/crypto/ed25519/keys.ts b/src/cosmos/crypto/ed25519/keys.ts index 8f39bd7a..c5d1360a 100644 --- a/src/cosmos/crypto/ed25519/keys.ts +++ b/src/cosmos/crypto/ed25519/keys.ts @@ -5,17 +5,20 @@ import _m0 from "protobufjs/minimal"; export const protobufPackage = "cosmos.crypto.ed25519"; /** - * PubKey defines a ed25519 public key - * Key is the compressed form of the pubkey. The first byte depends is a 0x02 byte - * if the y-coordinate is the lexicographically largest of the two associated with - * the x-coordinate. Otherwise the first byte is a 0x03. - * This prefix is followed with the x-coordinate. + * PubKey is an ed25519 public key for handling Tendermint keys in SDK. + * It's needed for Any serialization and SDK compatibility. + * It must not be used in a non Tendermint key context because it doesn't implement + * ADR-28. Nevertheless, you will like to use ed25519 in app user level + * then you must create a new proto message and follow ADR-28 for Address construction. */ export interface PubKey { key: Uint8Array; } -/** PrivKey defines a ed25519 private key. */ +/** + * Deprecated: PrivKey defines a ed25519 private key. + * NOTE: ed25519 keys must not be used in SDK apps except in a tendermint validator context. + */ export interface PrivKey { key: Uint8Array; } diff --git a/src/cosmos/gov/v1beta1/gov.ts b/src/cosmos/gov/v1beta1/gov.ts index 08971dc1..102b971b 100644 --- a/src/cosmos/gov/v1beta1/gov.ts +++ b/src/cosmos/gov/v1beta1/gov.ts @@ -142,6 +142,12 @@ export function proposalStatusToJSON(object: ProposalStatus): string { } } +/** WeightedVoteOption defines a unit of vote for vote split. */ +export interface WeightedVoteOption { + option: VoteOption; + weight: string; +} + /** * TextProposal defines a standard text proposal whose changes need to be * manually updated in case of approval. @@ -189,7 +195,15 @@ export interface TallyResult { export interface Vote { proposalId: Long; voter: string; + /** + * Deprecated: Prefer to use `options` instead. This field is set in queries + * if and only if `len(options) == 1` and that option has weight 1. In all + * other cases, this field will default to VOTE_OPTION_UNSPECIFIED. + * + * @deprecated + */ option: VoteOption; + options: WeightedVoteOption[]; } /** DepositParams defines the params for deposits on governance proposals. */ @@ -225,6 +239,78 @@ export interface TallyParams { vetoThreshold: Uint8Array; } +const baseWeightedVoteOption: object = { option: 0, weight: "" }; + +export const WeightedVoteOption = { + encode(message: WeightedVoteOption, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.option !== 0) { + writer.uint32(8).int32(message.option); + } + if (message.weight !== "") { + writer.uint32(18).string(message.weight); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): WeightedVoteOption { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseWeightedVoteOption } as WeightedVoteOption; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.option = reader.int32() as any; + break; + case 2: + message.weight = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): WeightedVoteOption { + const message = { ...baseWeightedVoteOption } as WeightedVoteOption; + if (object.option !== undefined && object.option !== null) { + message.option = voteOptionFromJSON(object.option); + } else { + message.option = 0; + } + if (object.weight !== undefined && object.weight !== null) { + message.weight = String(object.weight); + } else { + message.weight = ""; + } + return message; + }, + + toJSON(message: WeightedVoteOption): unknown { + const obj: any = {}; + message.option !== undefined && (obj.option = voteOptionToJSON(message.option)); + message.weight !== undefined && (obj.weight = message.weight); + return obj; + }, + + fromPartial(object: DeepPartial): WeightedVoteOption { + const message = { ...baseWeightedVoteOption } as WeightedVoteOption; + if (object.option !== undefined && object.option !== null) { + message.option = object.option; + } else { + message.option = 0; + } + if (object.weight !== undefined && object.weight !== null) { + message.weight = object.weight; + } else { + message.weight = ""; + } + return message; + }, +}; + const baseTextProposal: object = { title: "", description: "" }; export const TextProposal = { @@ -714,6 +800,9 @@ export const Vote = { if (message.option !== 0) { writer.uint32(24).int32(message.option); } + for (const v of message.options) { + WeightedVoteOption.encode(v!, writer.uint32(34).fork()).ldelim(); + } return writer; }, @@ -721,6 +810,7 @@ export const Vote = { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = { ...baseVote } as Vote; + message.options = []; while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -733,6 +823,9 @@ export const Vote = { case 3: message.option = reader.int32() as any; break; + case 4: + message.options.push(WeightedVoteOption.decode(reader, reader.uint32())); + break; default: reader.skipType(tag & 7); break; @@ -743,6 +836,7 @@ export const Vote = { fromJSON(object: any): Vote { const message = { ...baseVote } as Vote; + message.options = []; if (object.proposalId !== undefined && object.proposalId !== null) { message.proposalId = Long.fromString(object.proposalId); } else { @@ -758,6 +852,11 @@ export const Vote = { } else { message.option = 0; } + if (object.options !== undefined && object.options !== null) { + for (const e of object.options) { + message.options.push(WeightedVoteOption.fromJSON(e)); + } + } return message; }, @@ -766,11 +865,17 @@ export const Vote = { message.proposalId !== undefined && (obj.proposalId = (message.proposalId || Long.UZERO).toString()); message.voter !== undefined && (obj.voter = message.voter); message.option !== undefined && (obj.option = voteOptionToJSON(message.option)); + if (message.options) { + obj.options = message.options.map((e) => (e ? WeightedVoteOption.toJSON(e) : undefined)); + } else { + obj.options = []; + } return obj; }, fromPartial(object: DeepPartial): Vote { const message = { ...baseVote } as Vote; + message.options = []; if (object.proposalId !== undefined && object.proposalId !== null) { message.proposalId = object.proposalId as Long; } else { @@ -786,6 +891,11 @@ export const Vote = { } else { message.option = 0; } + if (object.options !== undefined && object.options !== null) { + for (const e of object.options) { + message.options.push(WeightedVoteOption.fromPartial(e)); + } + } return message; }, }; diff --git a/src/cosmos/gov/v1beta1/tx.ts b/src/cosmos/gov/v1beta1/tx.ts index 3ebd14d3..6bd37bfa 100644 --- a/src/cosmos/gov/v1beta1/tx.ts +++ b/src/cosmos/gov/v1beta1/tx.ts @@ -2,7 +2,12 @@ import Long from "long"; import _m0 from "protobufjs/minimal"; import { Any } from "../../../google/protobuf/any"; -import { VoteOption, voteOptionFromJSON, voteOptionToJSON } from "../../../cosmos/gov/v1beta1/gov"; +import { + VoteOption, + WeightedVoteOption, + voteOptionFromJSON, + voteOptionToJSON, +} from "../../../cosmos/gov/v1beta1/gov"; import { Coin } from "../../../cosmos/base/v1beta1/coin"; export const protobufPackage = "cosmos.gov.v1beta1"; @@ -32,6 +37,16 @@ export interface MsgVote { /** MsgVoteResponse defines the Msg/Vote response type. */ export interface MsgVoteResponse {} +/** MsgVoteWeighted defines a message to cast a vote. */ +export interface MsgVoteWeighted { + proposalId: Long; + voter: string; + options: WeightedVoteOption[]; +} + +/** MsgVoteWeightedResponse defines the Msg/VoteWeighted response type. */ +export interface MsgVoteWeightedResponse {} + /** MsgDeposit defines a message to submit a deposit to an existing proposal. */ export interface MsgDeposit { proposalId: Long; @@ -321,6 +336,140 @@ export const MsgVoteResponse = { }, }; +const baseMsgVoteWeighted: object = { proposalId: Long.UZERO, voter: "" }; + +export const MsgVoteWeighted = { + encode(message: MsgVoteWeighted, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (!message.proposalId.isZero()) { + writer.uint32(8).uint64(message.proposalId); + } + if (message.voter !== "") { + writer.uint32(18).string(message.voter); + } + for (const v of message.options) { + WeightedVoteOption.encode(v!, writer.uint32(26).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgVoteWeighted { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseMsgVoteWeighted } as MsgVoteWeighted; + message.options = []; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.proposalId = reader.uint64() as Long; + break; + case 2: + message.voter = reader.string(); + break; + case 3: + message.options.push(WeightedVoteOption.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): MsgVoteWeighted { + const message = { ...baseMsgVoteWeighted } as MsgVoteWeighted; + message.options = []; + if (object.proposalId !== undefined && object.proposalId !== null) { + message.proposalId = Long.fromString(object.proposalId); + } else { + message.proposalId = Long.UZERO; + } + if (object.voter !== undefined && object.voter !== null) { + message.voter = String(object.voter); + } else { + message.voter = ""; + } + if (object.options !== undefined && object.options !== null) { + for (const e of object.options) { + message.options.push(WeightedVoteOption.fromJSON(e)); + } + } + return message; + }, + + toJSON(message: MsgVoteWeighted): unknown { + const obj: any = {}; + message.proposalId !== undefined && (obj.proposalId = (message.proposalId || Long.UZERO).toString()); + message.voter !== undefined && (obj.voter = message.voter); + if (message.options) { + obj.options = message.options.map((e) => (e ? WeightedVoteOption.toJSON(e) : undefined)); + } else { + obj.options = []; + } + return obj; + }, + + fromPartial(object: DeepPartial): MsgVoteWeighted { + const message = { ...baseMsgVoteWeighted } as MsgVoteWeighted; + message.options = []; + if (object.proposalId !== undefined && object.proposalId !== null) { + message.proposalId = object.proposalId as Long; + } else { + message.proposalId = Long.UZERO; + } + if (object.voter !== undefined && object.voter !== null) { + message.voter = object.voter; + } else { + message.voter = ""; + } + if (object.options !== undefined && object.options !== null) { + for (const e of object.options) { + message.options.push(WeightedVoteOption.fromPartial(e)); + } + } + return message; + }, +}; + +const baseMsgVoteWeightedResponse: object = {}; + +export const MsgVoteWeightedResponse = { + encode(_: MsgVoteWeightedResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MsgVoteWeightedResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseMsgVoteWeightedResponse } as MsgVoteWeightedResponse; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(_: any): MsgVoteWeightedResponse { + const message = { ...baseMsgVoteWeightedResponse } as MsgVoteWeightedResponse; + return message; + }, + + toJSON(_: MsgVoteWeightedResponse): unknown { + const obj: any = {}; + return obj; + }, + + fromPartial(_: DeepPartial): MsgVoteWeightedResponse { + const message = { ...baseMsgVoteWeightedResponse } as MsgVoteWeightedResponse; + return message; + }, +}; + const baseMsgDeposit: object = { proposalId: Long.UZERO, depositor: "" }; export const MsgDeposit = { @@ -461,6 +610,8 @@ export interface Msg { SubmitProposal(request: MsgSubmitProposal): Promise; /** Vote defines a method to add a vote on a specific proposal. */ Vote(request: MsgVote): Promise; + /** VoteWeighted defines a method to add a weighted vote on a specific proposal. */ + VoteWeighted(request: MsgVoteWeighted): Promise; /** Deposit defines a method to add deposit on a specific proposal. */ Deposit(request: MsgDeposit): Promise; } @@ -471,6 +622,7 @@ export class MsgClientImpl implements Msg { this.rpc = rpc; this.SubmitProposal = this.SubmitProposal.bind(this); this.Vote = this.Vote.bind(this); + this.VoteWeighted = this.VoteWeighted.bind(this); this.Deposit = this.Deposit.bind(this); } SubmitProposal(request: MsgSubmitProposal): Promise { @@ -485,6 +637,12 @@ export class MsgClientImpl implements Msg { return promise.then((data) => MsgVoteResponse.decode(new _m0.Reader(data))); } + VoteWeighted(request: MsgVoteWeighted): Promise { + const data = MsgVoteWeighted.encode(request).finish(); + const promise = this.rpc.request("cosmos.gov.v1beta1.Msg", "VoteWeighted", data); + return promise.then((data) => MsgVoteWeightedResponse.decode(new _m0.Reader(data))); + } + Deposit(request: MsgDeposit): Promise { const data = MsgDeposit.encode(request).finish(); const promise = this.rpc.request("cosmos.gov.v1beta1.Msg", "Deposit", data); diff --git a/src/cosmos/slashing/v1beta1/genesis.ts b/src/cosmos/slashing/v1beta1/genesis.ts index f19921e7..2afa1f1f 100644 --- a/src/cosmos/slashing/v1beta1/genesis.ts +++ b/src/cosmos/slashing/v1beta1/genesis.ts @@ -15,7 +15,7 @@ export interface GenesisState { */ signingInfos: SigningInfo[]; /** - * signing_infos represents a map between validator addresses and their + * missed_blocks represents a map between validator addresses and their * missed blocks. */ missedBlocks: ValidatorMissedBlocks[]; diff --git a/src/cosmos/slashing/v1beta1/slashing.ts b/src/cosmos/slashing/v1beta1/slashing.ts index 99228fa2..714b99a5 100644 --- a/src/cosmos/slashing/v1beta1/slashing.ts +++ b/src/cosmos/slashing/v1beta1/slashing.ts @@ -12,18 +12,25 @@ export const protobufPackage = "cosmos.slashing.v1beta1"; */ export interface ValidatorSigningInfo { address: string; - /** height at which validator was first a candidate OR was unjailed */ + /** Height at which validator was first a candidate OR was unjailed */ startHeight: Long; - /** index offset into signed block bit array */ + /** + * Index which is incremented each time the validator was a bonded + * in a block and may have signed a precommit or not. This in conjunction with the + * `SignedBlocksWindow` param determines the index in the `MissedBlocksBitArray`. + */ indexOffset: Long; - /** timestamp validator cannot be unjailed until */ + /** Timestamp until which the validator is jailed due to liveness downtime. */ jailedUntil?: Date; /** - * whether or not a validator has been tombstoned (killed out of validator - * set) + * Whether or not a validator has been tombstoned (killed out of validator set). It is set + * once the validator commits an equivocation or for any other configured misbehiavor. */ tombstoned: boolean; - /** missed blocks counter (to avoid scanning the array every time) */ + /** + * A counter kept to avoid unnecessary array reads. + * Note that `Sum(MissedBlocksBitArray)` always equals `MissedBlocksCounter`. + */ missedBlocksCounter: Long; } diff --git a/src/cosmos/tx/v1beta1/service.ts b/src/cosmos/tx/v1beta1/service.ts index f7bfc5e4..ad1cdabc 100644 --- a/src/cosmos/tx/v1beta1/service.ts +++ b/src/cosmos/tx/v1beta1/service.ts @@ -7,6 +7,48 @@ import { Tx } from "../../../cosmos/tx/v1beta1/tx"; export const protobufPackage = "cosmos.tx.v1beta1"; +/** OrderBy defines the sorting order */ +export enum OrderBy { + /** ORDER_BY_UNSPECIFIED - ORDER_BY_UNSPECIFIED specifies an unknown sorting order. OrderBy defaults to ASC in this case. */ + ORDER_BY_UNSPECIFIED = 0, + /** ORDER_BY_ASC - ORDER_BY_ASC defines ascending order */ + ORDER_BY_ASC = 1, + /** ORDER_BY_DESC - ORDER_BY_DESC defines descending order */ + ORDER_BY_DESC = 2, + UNRECOGNIZED = -1, +} + +export function orderByFromJSON(object: any): OrderBy { + switch (object) { + case 0: + case "ORDER_BY_UNSPECIFIED": + return OrderBy.ORDER_BY_UNSPECIFIED; + case 1: + case "ORDER_BY_ASC": + return OrderBy.ORDER_BY_ASC; + case 2: + case "ORDER_BY_DESC": + return OrderBy.ORDER_BY_DESC; + case -1: + case "UNRECOGNIZED": + default: + return OrderBy.UNRECOGNIZED; + } +} + +export function orderByToJSON(object: OrderBy): string { + switch (object) { + case OrderBy.ORDER_BY_UNSPECIFIED: + return "ORDER_BY_UNSPECIFIED"; + case OrderBy.ORDER_BY_ASC: + return "ORDER_BY_ASC"; + case OrderBy.ORDER_BY_DESC: + return "ORDER_BY_DESC"; + default: + return "UNKNOWN"; + } +} + /** BroadcastMode specifies the broadcast mode for the TxService.Broadcast RPC method. */ export enum BroadcastMode { /** BROADCAST_MODE_UNSPECIFIED - zero-value for mode ordering */ @@ -74,6 +116,7 @@ export interface GetTxsEventRequest { events: string[]; /** pagination defines an pagination for the request. */ pagination?: PageRequest; + orderBy: OrderBy; } /** @@ -113,8 +156,15 @@ export interface BroadcastTxResponse { * RPC method. */ export interface SimulateRequest { - /** tx is the transaction to simulate. */ + /** + * tx is the transaction to simulate. + * Deprecated. Send raw tx bytes instead. + * + * @deprecated + */ tx?: Tx; + /** tx_bytes is the raw transaction. */ + txBytes: Uint8Array; } /** @@ -145,7 +195,7 @@ export interface GetTxResponse { txResponse?: TxResponse; } -const baseGetTxsEventRequest: object = { events: "" }; +const baseGetTxsEventRequest: object = { events: "", orderBy: 0 }; export const GetTxsEventRequest = { encode(message: GetTxsEventRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { @@ -155,6 +205,9 @@ export const GetTxsEventRequest = { if (message.pagination !== undefined) { PageRequest.encode(message.pagination, writer.uint32(18).fork()).ldelim(); } + if (message.orderBy !== 0) { + writer.uint32(24).int32(message.orderBy); + } return writer; }, @@ -172,6 +225,9 @@ export const GetTxsEventRequest = { case 2: message.pagination = PageRequest.decode(reader, reader.uint32()); break; + case 3: + message.orderBy = reader.int32() as any; + break; default: reader.skipType(tag & 7); break; @@ -193,6 +249,11 @@ export const GetTxsEventRequest = { } else { message.pagination = undefined; } + if (object.orderBy !== undefined && object.orderBy !== null) { + message.orderBy = orderByFromJSON(object.orderBy); + } else { + message.orderBy = 0; + } return message; }, @@ -205,6 +266,7 @@ export const GetTxsEventRequest = { } message.pagination !== undefined && (obj.pagination = message.pagination ? PageRequest.toJSON(message.pagination) : undefined); + message.orderBy !== undefined && (obj.orderBy = orderByToJSON(message.orderBy)); return obj; }, @@ -221,6 +283,11 @@ export const GetTxsEventRequest = { } else { message.pagination = undefined; } + if (object.orderBy !== undefined && object.orderBy !== null) { + message.orderBy = object.orderBy; + } else { + message.orderBy = 0; + } return message; }, }; @@ -465,6 +532,9 @@ export const SimulateRequest = { if (message.tx !== undefined) { Tx.encode(message.tx, writer.uint32(10).fork()).ldelim(); } + if (message.txBytes.length !== 0) { + writer.uint32(18).bytes(message.txBytes); + } return writer; }, @@ -472,12 +542,16 @@ export const SimulateRequest = { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = { ...baseSimulateRequest } as SimulateRequest; + message.txBytes = new Uint8Array(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { case 1: message.tx = Tx.decode(reader, reader.uint32()); break; + case 2: + message.txBytes = reader.bytes(); + break; default: reader.skipType(tag & 7); break; @@ -488,17 +562,23 @@ export const SimulateRequest = { fromJSON(object: any): SimulateRequest { const message = { ...baseSimulateRequest } as SimulateRequest; + message.txBytes = new Uint8Array(); if (object.tx !== undefined && object.tx !== null) { message.tx = Tx.fromJSON(object.tx); } else { message.tx = undefined; } + if (object.txBytes !== undefined && object.txBytes !== null) { + message.txBytes = bytesFromBase64(object.txBytes); + } return message; }, toJSON(message: SimulateRequest): unknown { const obj: any = {}; message.tx !== undefined && (obj.tx = message.tx ? Tx.toJSON(message.tx) : undefined); + message.txBytes !== undefined && + (obj.txBytes = base64FromBytes(message.txBytes !== undefined ? message.txBytes : new Uint8Array())); return obj; }, @@ -509,6 +589,11 @@ export const SimulateRequest = { } else { message.tx = undefined; } + if (object.txBytes !== undefined && object.txBytes !== null) { + message.txBytes = object.txBytes; + } else { + message.txBytes = new Uint8Array(); + } return message; }, }; diff --git a/src/cosmos/tx/v1beta1/tx.ts b/src/cosmos/tx/v1beta1/tx.ts index cc9d5af6..07394ce6 100644 --- a/src/cosmos/tx/v1beta1/tx.ts +++ b/src/cosmos/tx/v1beta1/tx.ts @@ -85,7 +85,11 @@ export interface TxBody { * transaction. */ messages: Any[]; - /** memo is any arbitrary memo to be added to the transaction */ + /** + * memo is any arbitrary note/comment to be added to the transaction. + * WARNING: in clients, any publicly exposed text should not be called memo, + * but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122). + */ memo: string; /** * timeout is the block height after which this transaction will not diff --git a/src/cosmos/upgrade/v1beta1/query.ts b/src/cosmos/upgrade/v1beta1/query.ts index a4cf7e45..3036033c 100644 --- a/src/cosmos/upgrade/v1beta1/query.ts +++ b/src/cosmos/upgrade/v1beta1/query.ts @@ -1,8 +1,7 @@ /* eslint-disable */ import Long from "long"; import _m0 from "protobufjs/minimal"; -import { Plan } from "../../../cosmos/upgrade/v1beta1/upgrade"; -import { Any } from "../../../google/protobuf/any"; +import { Plan, ModuleVersion } from "../../../cosmos/upgrade/v1beta1/upgrade"; export const protobufPackage = "cosmos.upgrade.v1beta1"; @@ -56,7 +55,29 @@ export interface QueryUpgradedConsensusStateRequest { * RPC method. */ export interface QueryUpgradedConsensusStateResponse { - upgradedConsensusState?: Any; + upgradedConsensusState: Uint8Array; +} + +/** + * QueryModuleVersionsRequest is the request type for the Query/ModuleVersions + * RPC method. + */ +export interface QueryModuleVersionsRequest { + /** + * module_name is a field to query a specific module + * consensus version from state. Leaving this empty will + * fetch the full list of module versions from state + */ + moduleName: string; +} + +/** + * QueryModuleVersionsResponse is the response type for the Query/ModuleVersions + * RPC method. + */ +export interface QueryModuleVersionsResponse { + /** module_versions is a list of module names with their consensus versions. */ + moduleVersions: ModuleVersion[]; } const baseQueryCurrentPlanRequest: object = {}; @@ -321,8 +342,8 @@ const baseQueryUpgradedConsensusStateResponse: object = {}; export const QueryUpgradedConsensusStateResponse = { encode(message: QueryUpgradedConsensusStateResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { - if (message.upgradedConsensusState !== undefined) { - Any.encode(message.upgradedConsensusState, writer.uint32(10).fork()).ldelim(); + if (message.upgradedConsensusState.length !== 0) { + writer.uint32(18).bytes(message.upgradedConsensusState); } return writer; }, @@ -331,11 +352,12 @@ export const QueryUpgradedConsensusStateResponse = { const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); let end = length === undefined ? reader.len : reader.pos + length; const message = { ...baseQueryUpgradedConsensusStateResponse } as QueryUpgradedConsensusStateResponse; + message.upgradedConsensusState = new Uint8Array(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { - case 1: - message.upgradedConsensusState = Any.decode(reader, reader.uint32()); + case 2: + message.upgradedConsensusState = reader.bytes(); break; default: reader.skipType(tag & 7); @@ -347,10 +369,9 @@ export const QueryUpgradedConsensusStateResponse = { fromJSON(object: any): QueryUpgradedConsensusStateResponse { const message = { ...baseQueryUpgradedConsensusStateResponse } as QueryUpgradedConsensusStateResponse; + message.upgradedConsensusState = new Uint8Array(); if (object.upgradedConsensusState !== undefined && object.upgradedConsensusState !== null) { - message.upgradedConsensusState = Any.fromJSON(object.upgradedConsensusState); - } else { - message.upgradedConsensusState = undefined; + message.upgradedConsensusState = bytesFromBase64(object.upgradedConsensusState); } return message; }, @@ -358,18 +379,135 @@ export const QueryUpgradedConsensusStateResponse = { toJSON(message: QueryUpgradedConsensusStateResponse): unknown { const obj: any = {}; message.upgradedConsensusState !== undefined && - (obj.upgradedConsensusState = message.upgradedConsensusState - ? Any.toJSON(message.upgradedConsensusState) - : undefined); + (obj.upgradedConsensusState = base64FromBytes( + message.upgradedConsensusState !== undefined ? message.upgradedConsensusState : new Uint8Array(), + )); return obj; }, fromPartial(object: DeepPartial): QueryUpgradedConsensusStateResponse { const message = { ...baseQueryUpgradedConsensusStateResponse } as QueryUpgradedConsensusStateResponse; if (object.upgradedConsensusState !== undefined && object.upgradedConsensusState !== null) { - message.upgradedConsensusState = Any.fromPartial(object.upgradedConsensusState); + message.upgradedConsensusState = object.upgradedConsensusState; + } else { + message.upgradedConsensusState = new Uint8Array(); + } + return message; + }, +}; + +const baseQueryModuleVersionsRequest: object = { moduleName: "" }; + +export const QueryModuleVersionsRequest = { + encode(message: QueryModuleVersionsRequest, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.moduleName !== "") { + writer.uint32(10).string(message.moduleName); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryModuleVersionsRequest { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryModuleVersionsRequest } as QueryModuleVersionsRequest; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.moduleName = reader.string(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): QueryModuleVersionsRequest { + const message = { ...baseQueryModuleVersionsRequest } as QueryModuleVersionsRequest; + if (object.moduleName !== undefined && object.moduleName !== null) { + message.moduleName = String(object.moduleName); + } else { + message.moduleName = ""; + } + return message; + }, + + toJSON(message: QueryModuleVersionsRequest): unknown { + const obj: any = {}; + message.moduleName !== undefined && (obj.moduleName = message.moduleName); + return obj; + }, + + fromPartial(object: DeepPartial): QueryModuleVersionsRequest { + const message = { ...baseQueryModuleVersionsRequest } as QueryModuleVersionsRequest; + if (object.moduleName !== undefined && object.moduleName !== null) { + message.moduleName = object.moduleName; } else { - message.upgradedConsensusState = undefined; + message.moduleName = ""; + } + return message; + }, +}; + +const baseQueryModuleVersionsResponse: object = {}; + +export const QueryModuleVersionsResponse = { + encode(message: QueryModuleVersionsResponse, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.moduleVersions) { + ModuleVersion.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): QueryModuleVersionsResponse { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseQueryModuleVersionsResponse } as QueryModuleVersionsResponse; + message.moduleVersions = []; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.moduleVersions.push(ModuleVersion.decode(reader, reader.uint32())); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): QueryModuleVersionsResponse { + const message = { ...baseQueryModuleVersionsResponse } as QueryModuleVersionsResponse; + message.moduleVersions = []; + if (object.moduleVersions !== undefined && object.moduleVersions !== null) { + for (const e of object.moduleVersions) { + message.moduleVersions.push(ModuleVersion.fromJSON(e)); + } + } + return message; + }, + + toJSON(message: QueryModuleVersionsResponse): unknown { + const obj: any = {}; + if (message.moduleVersions) { + obj.moduleVersions = message.moduleVersions.map((e) => (e ? ModuleVersion.toJSON(e) : undefined)); + } else { + obj.moduleVersions = []; + } + return obj; + }, + + fromPartial(object: DeepPartial): QueryModuleVersionsResponse { + const message = { ...baseQueryModuleVersionsResponse } as QueryModuleVersionsResponse; + message.moduleVersions = []; + if (object.moduleVersions !== undefined && object.moduleVersions !== null) { + for (const e of object.moduleVersions) { + message.moduleVersions.push(ModuleVersion.fromPartial(e)); + } } return message; }, @@ -390,6 +528,8 @@ export interface Query { UpgradedConsensusState( request: QueryUpgradedConsensusStateRequest, ): Promise; + /** ModuleVersions queries the list of module versions from state. */ + ModuleVersions(request: QueryModuleVersionsRequest): Promise; } export class QueryClientImpl implements Query { @@ -399,6 +539,7 @@ export class QueryClientImpl implements Query { this.CurrentPlan = this.CurrentPlan.bind(this); this.AppliedPlan = this.AppliedPlan.bind(this); this.UpgradedConsensusState = this.UpgradedConsensusState.bind(this); + this.ModuleVersions = this.ModuleVersions.bind(this); } CurrentPlan(request: QueryCurrentPlanRequest): Promise { const data = QueryCurrentPlanRequest.encode(request).finish(); @@ -419,12 +560,49 @@ export class QueryClientImpl implements Query { const promise = this.rpc.request("cosmos.upgrade.v1beta1.Query", "UpgradedConsensusState", data); return promise.then((data) => QueryUpgradedConsensusStateResponse.decode(new _m0.Reader(data))); } + + ModuleVersions(request: QueryModuleVersionsRequest): Promise { + const data = QueryModuleVersionsRequest.encode(request).finish(); + const promise = this.rpc.request("cosmos.upgrade.v1beta1.Query", "ModuleVersions", data); + return promise.then((data) => QueryModuleVersionsResponse.decode(new _m0.Reader(data))); + } } interface Rpc { request(service: string, method: string, data: Uint8Array): Promise; } +declare var self: any | undefined; +declare var window: any | undefined; +var globalThis: any = (() => { + if (typeof globalThis !== "undefined") return globalThis; + if (typeof self !== "undefined") return self; + if (typeof window !== "undefined") return window; + if (typeof global !== "undefined") return global; + throw "Unable to locate global object"; +})(); + +const atob: (b64: string) => string = + globalThis.atob || ((b64) => globalThis.Buffer.from(b64, "base64").toString("binary")); +function bytesFromBase64(b64: string): Uint8Array { + const bin = atob(b64); + const arr = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; ++i) { + arr[i] = bin.charCodeAt(i); + } + return arr; +} + +const btoa: (bin: string) => string = + globalThis.btoa || ((bin) => globalThis.Buffer.from(bin, "binary").toString("base64")); +function base64FromBytes(arr: Uint8Array): string { + const bin: string[] = []; + for (let i = 0; i < arr.byteLength; ++i) { + bin.push(String.fromCharCode(arr[i])); + } + return btoa(bin.join("")); +} + type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined | Long; export type DeepPartial = T extends Builtin ? T diff --git a/src/cosmos/upgrade/v1beta1/upgrade.ts b/src/cosmos/upgrade/v1beta1/upgrade.ts index c2606dec..58569b09 100644 --- a/src/cosmos/upgrade/v1beta1/upgrade.ts +++ b/src/cosmos/upgrade/v1beta1/upgrade.ts @@ -19,8 +19,11 @@ export interface Plan { */ name: string; /** - * The time after which the upgrade must be performed. - * Leave set to its zero value to use a pre-defined Height instead. + * Deprecated: Time based upgrades have been deprecated. Time based upgrade logic + * has been removed from the SDK. + * If this field is not empty, an error will be thrown. + * + * @deprecated */ time?: Date; /** @@ -34,11 +37,11 @@ export interface Plan { */ info: string; /** - * IBC-enabled chains can opt-in to including the upgraded client state in its upgrade plan - * This will make the chain commit to the correct upgraded (self) client state before the upgrade occurs, - * so that connecting chains can verify that the new upgraded client is valid by verifying a proof on the - * previous version of the chain. - * This will allow IBC connections to persist smoothly across planned chain upgrades + * Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been + * moved to the IBC module in the sub module 02-client. + * If this field is not empty, an error will be thrown. + * + * @deprecated */ upgradedClientState?: Any; } @@ -62,6 +65,14 @@ export interface CancelSoftwareUpgradeProposal { description: string; } +/** ModuleVersion specifies a module and its consensus version. */ +export interface ModuleVersion { + /** name of the app module */ + name: string; + /** consensus version of the app module */ + version: Long; +} + const basePlan: object = { name: "", height: Long.ZERO, info: "" }; export const Plan = { @@ -349,6 +360,78 @@ export const CancelSoftwareUpgradeProposal = { }, }; +const baseModuleVersion: object = { name: "", version: Long.UZERO }; + +export const ModuleVersion = { + encode(message: ModuleVersion, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (!message.version.isZero()) { + writer.uint32(16).uint64(message.version); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ModuleVersion { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...baseModuleVersion } as ModuleVersion; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.name = reader.string(); + break; + case 2: + message.version = reader.uint64() as Long; + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): ModuleVersion { + const message = { ...baseModuleVersion } as ModuleVersion; + if (object.name !== undefined && object.name !== null) { + message.name = String(object.name); + } else { + message.name = ""; + } + if (object.version !== undefined && object.version !== null) { + message.version = Long.fromString(object.version); + } else { + message.version = Long.UZERO; + } + return message; + }, + + toJSON(message: ModuleVersion): unknown { + const obj: any = {}; + message.name !== undefined && (obj.name = message.name); + message.version !== undefined && (obj.version = (message.version || Long.UZERO).toString()); + return obj; + }, + + fromPartial(object: DeepPartial): ModuleVersion { + const message = { ...baseModuleVersion } as ModuleVersion; + if (object.name !== undefined && object.name !== null) { + message.name = object.name; + } else { + message.name = ""; + } + if (object.version !== undefined && object.version !== null) { + message.version = object.version as Long; + } else { + message.version = Long.UZERO; + } + return message; + }, +}; + type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined | Long; export type DeepPartial = T extends Builtin ? T diff --git a/src/cosmos/vesting/v1beta1/vesting.ts b/src/cosmos/vesting/v1beta1/vesting.ts index 229046cd..450a6da2 100644 --- a/src/cosmos/vesting/v1beta1/vesting.ts +++ b/src/cosmos/vesting/v1beta1/vesting.ts @@ -52,6 +52,15 @@ export interface PeriodicVestingAccount { vestingPeriods: Period[]; } +/** + * PermanentLockedAccount implements the VestingAccount interface. It does + * not ever release coins, locking them indefinitely. Coins in this account can + * still be used for delegating and for governance votes even while locked. + */ +export interface PermanentLockedAccount { + baseVestingAccount?: BaseVestingAccount; +} + const baseBaseVestingAccount: object = { endTime: Long.ZERO }; export const BaseVestingAccount = { @@ -508,6 +517,64 @@ export const PeriodicVestingAccount = { }, }; +const basePermanentLockedAccount: object = {}; + +export const PermanentLockedAccount = { + encode(message: PermanentLockedAccount, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.baseVestingAccount !== undefined) { + BaseVestingAccount.encode(message.baseVestingAccount, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): PermanentLockedAccount { + const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = { ...basePermanentLockedAccount } as PermanentLockedAccount; + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.baseVestingAccount = BaseVestingAccount.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }, + + fromJSON(object: any): PermanentLockedAccount { + const message = { ...basePermanentLockedAccount } as PermanentLockedAccount; + if (object.baseVestingAccount !== undefined && object.baseVestingAccount !== null) { + message.baseVestingAccount = BaseVestingAccount.fromJSON(object.baseVestingAccount); + } else { + message.baseVestingAccount = undefined; + } + return message; + }, + + toJSON(message: PermanentLockedAccount): unknown { + const obj: any = {}; + message.baseVestingAccount !== undefined && + (obj.baseVestingAccount = message.baseVestingAccount + ? BaseVestingAccount.toJSON(message.baseVestingAccount) + : undefined); + return obj; + }, + + fromPartial(object: DeepPartial): PermanentLockedAccount { + const message = { ...basePermanentLockedAccount } as PermanentLockedAccount; + if (object.baseVestingAccount !== undefined && object.baseVestingAccount !== null) { + message.baseVestingAccount = BaseVestingAccount.fromPartial(object.baseVestingAccount); + } else { + message.baseVestingAccount = undefined; + } + return message; + }, +}; + type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined | Long; export type DeepPartial = T extends Builtin ? T