Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Things that don't scale #1440

Open
webmaster128 opened this issue Jun 22, 2023 · 2 comments
Open

Things that don't scale #1440

webmaster128 opened this issue Jun 22, 2023 · 2 comments

Comments

@webmaster128
Copy link
Member

webmaster128 commented Jun 22, 2023

CosmJS made a few design decisions early on that are not great anymore. Part of the reason is that the protobuf API is getting more and more usable directly due to improvements in both Cosmos SDK and proto -> .ts code generation with Telescope. The other part is that the amount of messages and queries is getting a lot.

The group module alone adds 14 message types, more than all relevant modules combined when this was designed.

Instead of trying to catch up here, we should conceptually rething how those things should be done better.

Encode objects

We maintain types like

export interface MsgDepositEncodeObject extends EncodeObject {
  readonly typeUrl: "/cosmos.gov.v1beta1.MsgDeposit";
  readonly value: Partial<MsgDeposit>;
}

to combine the message type and the typeUrl in a type-safe way. We have 20 of them right now already but I am sure a lot of message types are missing

git grep "extends EncodeObject" | cat -n
     1  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgStoreCodeEncodeObject extends EncodeObject {
     2  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgInstantiateContractEncodeObject extends EncodeObject {
     3  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgInstantiateContract2EncodeObject extends EncodeObject {
     4  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgUpdateAdminEncodeObject extends EncodeObject {
     5  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgClearAdminEncodeObject extends EncodeObject {
     6  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgMigrateContractEncodeObject extends EncodeObject {
     7  packages/cosmwasm-stargate/src/modules/wasm/messages.ts:export interface MsgExecuteContractEncodeObject extends EncodeObject {
     8  packages/proto-signing/src/registry.ts:export interface TxBodyEncodeObject extends EncodeObject {
     9  packages/stargate/src/modules/bank/messages.ts:export interface MsgSendEncodeObject extends EncodeObject {
    10  packages/stargate/src/modules/distribution/messages.ts:export interface MsgWithdrawDelegatorRewardEncodeObject extends EncodeObject {
    11  packages/stargate/src/modules/gov/messages.ts:export interface MsgDepositEncodeObject extends EncodeObject {
    12  packages/stargate/src/modules/gov/messages.ts:export interface MsgSubmitProposalEncodeObject extends EncodeObject {
    13  packages/stargate/src/modules/gov/messages.ts:export interface MsgVoteEncodeObject extends EncodeObject {
    14  packages/stargate/src/modules/gov/messages.ts:export interface MsgVoteWeightedEncodeObject extends EncodeObject {
    15  packages/stargate/src/modules/ibc/messages.ts:export interface MsgTransferEncodeObject extends EncodeObject {
    16  packages/stargate/src/modules/staking/messages.ts:export interface MsgBeginRedelegateEncodeObject extends EncodeObject {
    17  packages/stargate/src/modules/staking/messages.ts:export interface MsgCreateValidatorEncodeObject extends EncodeObject {
    18  packages/stargate/src/modules/staking/messages.ts:export interface MsgDelegateEncodeObject extends EncodeObject {
    19  packages/stargate/src/modules/staking/messages.ts:export interface MsgEditValidatorEncodeObject extends EncodeObject {
    20  packages/stargate/src/modules/staking/messages.ts:export interface MsgUndelegateEncodeObject extends EncodeObject {

Amino converters

The fromAmino/toAmino have to be written by hand (and ideally tested) for every message type supported.

We have those types right now but not for all of them the converters are actually implemented:

git grep "extends AminoMsg" | cat -n
     1  packages/stargate/src/modules/bank/aminomessages.ts:export interface AminoMsgSend extends AminoMsg {
     2  packages/stargate/src/modules/bank/aminomessages.ts:export interface AminoMsgMultiSend extends AminoMsg {
     3  packages/stargate/src/modules/crisis/aminomessages.ts:export interface AminoMsgVerifyInvariant extends AminoMsg {
     4  packages/stargate/src/modules/distribution/aminomessages.ts:export interface AminoMsgSetWithdrawAddress extends AminoMsg {
     5  packages/stargate/src/modules/distribution/aminomessages.ts:export interface AminoMsgWithdrawDelegatorReward extends AminoMsg {
     6  packages/stargate/src/modules/distribution/aminomessages.ts:export interface AminoMsgWithdrawValidatorCommission extends AminoMsg {
     7  packages/stargate/src/modules/distribution/aminomessages.ts:export interface AminoMsgFundCommunityPool extends AminoMsg {
     8  packages/stargate/src/modules/evidence/aminomessages.ts:export interface AminoMsgSubmitEvidence extends AminoMsg {
     9  packages/stargate/src/modules/gov/aminomessages.ts:export interface AminoMsgSubmitProposal extends AminoMsg {
    10  packages/stargate/src/modules/gov/aminomessages.ts:export interface AminoMsgVote extends AminoMsg {
    11  packages/stargate/src/modules/gov/aminomessages.ts:export interface AminoMsgVoteWeighted extends AminoMsg {
    12  packages/stargate/src/modules/gov/aminomessages.ts:export interface AminoMsgDeposit extends AminoMsg {
    13  packages/stargate/src/modules/ibc/aminomessages.ts:export interface AminoMsgTransfer extends AminoMsg {
    14  packages/stargate/src/modules/slashing/aminomessages.ts:export interface AminoMsgUnjail extends AminoMsg {
    15  packages/stargate/src/modules/staking/aminomessages.ts:export interface AminoMsgCreateValidator extends AminoMsg {
    16  packages/stargate/src/modules/staking/aminomessages.ts:export interface AminoMsgEditValidator extends AminoMsg {
    17  packages/stargate/src/modules/staking/aminomessages.ts:export interface AminoMsgDelegate extends AminoMsg {
    18  packages/stargate/src/modules/staking/aminomessages.ts:export interface AminoMsgBeginRedelegate extends AminoMsg {
    19  packages/stargate/src/modules/staking/aminomessages.ts:export interface AminoMsgUndelegate extends AminoMsg {
    20  packages/stargate/src/modules/vesting/aminomessages.ts:export interface AminoMsgCreateVestingAccount extends AminoMsg {

Query wrappers

The extensible QueryClient is a nice idea in general, but someone has to write query wrappers for each query. Missing queries have been a source of frustration for users before. Also limited access to advanced setting like query height or pagination settings is an issue.

@pyramation
Copy link

example for Telescope-generated objects

@pyramation
Copy link

pyramation commented Jun 28, 2023

for decimal issues, we've added an option into Telescope

prototypes.typingsFormat.customTypes.useCosmosSDKDec is the option, that will get embedded into decode so RPC queries get fixed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants