mirror of
https://github.com/cosmos/cosmjs.git
synced 2025-03-10 21:49:15 +00:00
stargate: Simplify Amino type checks
This commit is contained in:
parent
4624e68590
commit
6433173303
@ -1,7 +1,6 @@
|
|||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
import { fromBase64, toBase64 } from "@cosmjs/encoding";
|
import { fromBase64, toBase64 } from "@cosmjs/encoding";
|
||||||
import {
|
import {
|
||||||
Coin,
|
|
||||||
decodeBech32Pubkey,
|
decodeBech32Pubkey,
|
||||||
encodeBech32Pubkey,
|
encodeBech32Pubkey,
|
||||||
Msg,
|
Msg,
|
||||||
@ -14,11 +13,11 @@ import {
|
|||||||
MsgUndelegate,
|
MsgUndelegate,
|
||||||
} from "@cosmjs/launchpad";
|
} from "@cosmjs/launchpad";
|
||||||
import { EncodeObject } from "@cosmjs/proto-signing";
|
import { EncodeObject } from "@cosmjs/proto-signing";
|
||||||
import { assert } from "@cosmjs/utils";
|
import { assertDefinedAndNotNull } from "@cosmjs/utils";
|
||||||
|
|
||||||
import { cosmos } from "./codec";
|
import { cosmos } from "./codec";
|
||||||
|
import { coinFromProto } from "./stargateclient";
|
||||||
|
|
||||||
type ICoin = cosmos.base.v1beta1.ICoin;
|
|
||||||
type IMsgSend = cosmos.bank.v1beta1.IMsgSend;
|
type IMsgSend = cosmos.bank.v1beta1.IMsgSend;
|
||||||
type IMsgMultiSend = cosmos.bank.v1beta1.IMsgMultiSend;
|
type IMsgMultiSend = cosmos.bank.v1beta1.IMsgMultiSend;
|
||||||
type IMsgBeginRedelegate = cosmos.staking.v1beta1.IMsgBeginRedelegate;
|
type IMsgBeginRedelegate = cosmos.staking.v1beta1.IMsgBeginRedelegate;
|
||||||
@ -33,29 +32,18 @@ export interface AminoConverter {
|
|||||||
readonly fromAmino: (value: any) => any;
|
readonly fromAmino: (value: any) => any;
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkAmount(amount: readonly ICoin[] | undefined | null): readonly Coin[] {
|
|
||||||
assert(amount, "missing amount");
|
|
||||||
return amount.map((a) => {
|
|
||||||
assert(a.amount, "missing amount");
|
|
||||||
assert(a.denom, "missing denom");
|
|
||||||
return {
|
|
||||||
amount: a.amount,
|
|
||||||
denom: a.denom,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
||||||
return {
|
return {
|
||||||
"/cosmos.bank.v1beta1.MsgSend": {
|
"/cosmos.bank.v1beta1.MsgSend": {
|
||||||
aminoType: "cosmos-sdk/MsgSend",
|
aminoType: "cosmos-sdk/MsgSend",
|
||||||
toAmino: ({ fromAddress, toAddress, amount }: IMsgSend): MsgSend["value"] => {
|
toAmino: ({ fromAddress, toAddress, amount }: IMsgSend): MsgSend["value"] => {
|
||||||
assert(fromAddress, "missing fromAddress");
|
assertDefinedAndNotNull(fromAddress, "missing fromAddress");
|
||||||
assert(toAddress, "missing toAddress");
|
assertDefinedAndNotNull(toAddress, "missing toAddress");
|
||||||
|
assertDefinedAndNotNull(amount, "missing amount");
|
||||||
return {
|
return {
|
||||||
from_address: fromAddress,
|
from_address: fromAddress,
|
||||||
to_address: toAddress,
|
to_address: toAddress,
|
||||||
amount: checkAmount(amount),
|
amount: amount.map(coinFromProto),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
fromAmino: ({ from_address, to_address, amount }: MsgSend["value"]): IMsgSend => ({
|
fromAmino: ({ from_address, to_address, amount }: MsgSend["value"]): IMsgSend => ({
|
||||||
@ -67,21 +55,23 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
"/cosmos.bank.v1beta1.MsgMultiSend": {
|
"/cosmos.bank.v1beta1.MsgMultiSend": {
|
||||||
aminoType: "cosmos-sdk/MsgMultiSend",
|
aminoType: "cosmos-sdk/MsgMultiSend",
|
||||||
toAmino: ({ inputs, outputs }: IMsgMultiSend): MsgMultiSend["value"] => {
|
toAmino: ({ inputs, outputs }: IMsgMultiSend): MsgMultiSend["value"] => {
|
||||||
assert(inputs, "missing inputs");
|
assertDefinedAndNotNull(inputs, "missing inputs");
|
||||||
assert(outputs, "missing outputs");
|
assertDefinedAndNotNull(outputs, "missing outputs");
|
||||||
return {
|
return {
|
||||||
inputs: inputs.map((input) => {
|
inputs: inputs.map((input) => {
|
||||||
assert(input.address, "missing input.address");
|
assertDefinedAndNotNull(input.address, "missing input.address");
|
||||||
|
assertDefinedAndNotNull(input.coins, "missing input.amount");
|
||||||
return {
|
return {
|
||||||
address: input.address,
|
address: input.address,
|
||||||
coins: checkAmount(input.coins),
|
coins: input.coins.map(coinFromProto),
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
outputs: outputs.map((output) => {
|
outputs: outputs.map((output) => {
|
||||||
assert(output.address, "missing output.address");
|
assertDefinedAndNotNull(output.address, "missing output.address");
|
||||||
|
assertDefinedAndNotNull(output.coins, "missing output.coins");
|
||||||
return {
|
return {
|
||||||
address: output.address,
|
address: output.address,
|
||||||
coins: checkAmount(output.coins),
|
coins: output.coins.map(coinFromProto),
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
@ -105,20 +95,15 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
validatorDstAddress,
|
validatorDstAddress,
|
||||||
amount,
|
amount,
|
||||||
}: IMsgBeginRedelegate): MsgBeginRedelegate["value"] => {
|
}: IMsgBeginRedelegate): MsgBeginRedelegate["value"] => {
|
||||||
assert(delegatorAddress, "missing delegatorAddress");
|
assertDefinedAndNotNull(delegatorAddress, "missing delegatorAddress");
|
||||||
assert(validatorSrcAddress, "missing validatorSrcAddress");
|
assertDefinedAndNotNull(validatorSrcAddress, "missing validatorSrcAddress");
|
||||||
assert(validatorDstAddress, "missing validatorDstAddress");
|
assertDefinedAndNotNull(validatorDstAddress, "missing validatorDstAddress");
|
||||||
assert(amount, "missing amount");
|
assertDefinedAndNotNull(amount, "missing amount");
|
||||||
assert(amount.amount, "missing amount.amount");
|
|
||||||
assert(amount.denom, "missing amount.denom");
|
|
||||||
return {
|
return {
|
||||||
delegator_address: delegatorAddress,
|
delegator_address: delegatorAddress,
|
||||||
validator_src_address: validatorSrcAddress,
|
validator_src_address: validatorSrcAddress,
|
||||||
validator_dst_address: validatorDstAddress,
|
validator_dst_address: validatorDstAddress,
|
||||||
amount: {
|
amount: coinFromProto(amount),
|
||||||
amount: amount.amount,
|
|
||||||
denom: amount.denom,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
fromAmino: ({
|
fromAmino: ({
|
||||||
@ -144,24 +129,22 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
pubkey,
|
pubkey,
|
||||||
value,
|
value,
|
||||||
}: IMsgCreateValidator): MsgCreateValidator["value"] => {
|
}: IMsgCreateValidator): MsgCreateValidator["value"] => {
|
||||||
assert(description, "missing description");
|
assertDefinedAndNotNull(description, "missing description");
|
||||||
assert(description.moniker, "missing description.moniker");
|
assertDefinedAndNotNull(description.moniker, "missing description.moniker");
|
||||||
assert(description.identity, "missing description.identity");
|
assertDefinedAndNotNull(description.identity, "missing description.identity");
|
||||||
assert(description.website, "missing description.website");
|
assertDefinedAndNotNull(description.website, "missing description.website");
|
||||||
assert(description.securityContact, "missing description.securityContact");
|
assertDefinedAndNotNull(description.securityContact, "missing description.securityContact");
|
||||||
assert(description.details, "missing description.details");
|
assertDefinedAndNotNull(description.details, "missing description.details");
|
||||||
assert(commission, "missing commission");
|
assertDefinedAndNotNull(commission, "missing commission");
|
||||||
assert(commission.rate, "missing commission.rate");
|
assertDefinedAndNotNull(commission.rate, "missing commission.rate");
|
||||||
assert(commission.maxRate, "missing commission.maxRate");
|
assertDefinedAndNotNull(commission.maxRate, "missing commission.maxRate");
|
||||||
assert(commission.maxChangeRate, "missing commission.maxChangeRate");
|
assertDefinedAndNotNull(commission.maxChangeRate, "missing commission.maxChangeRate");
|
||||||
assert(minSelfDelegation, "missing minSelfDelegation");
|
assertDefinedAndNotNull(minSelfDelegation, "missing minSelfDelegation");
|
||||||
assert(delegatorAddress, "missing delegatorAddress");
|
assertDefinedAndNotNull(delegatorAddress, "missing delegatorAddress");
|
||||||
assert(validatorAddress, "missing validatorAddress");
|
assertDefinedAndNotNull(validatorAddress, "missing validatorAddress");
|
||||||
assert(pubkey, "missing pubkey");
|
assertDefinedAndNotNull(pubkey, "missing pubkey");
|
||||||
assert(pubkey.value, "missing pubkey.value");
|
assertDefinedAndNotNull(pubkey.value, "missing pubkey.value");
|
||||||
assert(value, "missing value");
|
assertDefinedAndNotNull(value, "missing value");
|
||||||
assert(value.amount, "missing value.amount");
|
|
||||||
assert(value.denom, "missing value.denom");
|
|
||||||
return {
|
return {
|
||||||
description: {
|
description: {
|
||||||
moniker: description.moniker,
|
moniker: description.moniker,
|
||||||
@ -185,10 +168,7 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
},
|
},
|
||||||
prefix,
|
prefix,
|
||||||
),
|
),
|
||||||
value: {
|
value: coinFromProto(value),
|
||||||
amount: value.amount,
|
|
||||||
denom: value.denom,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
fromAmino: ({
|
fromAmino: ({
|
||||||
@ -231,18 +211,13 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
"/cosmos.staking.v1beta1.MsgDelegate": {
|
"/cosmos.staking.v1beta1.MsgDelegate": {
|
||||||
aminoType: "cosmos-sdk/MsgDelegate",
|
aminoType: "cosmos-sdk/MsgDelegate",
|
||||||
toAmino: ({ delegatorAddress, validatorAddress, amount }: IMsgDelegate): MsgDelegate["value"] => {
|
toAmino: ({ delegatorAddress, validatorAddress, amount }: IMsgDelegate): MsgDelegate["value"] => {
|
||||||
assert(delegatorAddress, "missing delegatorAddress");
|
assertDefinedAndNotNull(delegatorAddress, "missing delegatorAddress");
|
||||||
assert(validatorAddress, "missing validatorAddress");
|
assertDefinedAndNotNull(validatorAddress, "missing validatorAddress");
|
||||||
assert(amount, "missing amount");
|
assertDefinedAndNotNull(amount, "missing amount");
|
||||||
assert(amount.amount, "missing amount.amount");
|
|
||||||
assert(amount.denom, "missing amount.denom");
|
|
||||||
return {
|
return {
|
||||||
delegator_address: delegatorAddress,
|
delegator_address: delegatorAddress,
|
||||||
validator_address: validatorAddress,
|
validator_address: validatorAddress,
|
||||||
amount: {
|
amount: coinFromProto(amount),
|
||||||
amount: amount.amount,
|
|
||||||
denom: amount.denom,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
fromAmino: ({ delegator_address, validator_address, amount }: MsgDelegate["value"]): IMsgDelegate => ({
|
fromAmino: ({ delegator_address, validator_address, amount }: MsgDelegate["value"]): IMsgDelegate => ({
|
||||||
@ -259,15 +234,15 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
minSelfDelegation,
|
minSelfDelegation,
|
||||||
validatorAddress,
|
validatorAddress,
|
||||||
}: IMsgEditValidator): MsgEditValidator["value"] => {
|
}: IMsgEditValidator): MsgEditValidator["value"] => {
|
||||||
assert(description, "missing description");
|
assertDefinedAndNotNull(description, "missing description");
|
||||||
assert(description.moniker, "missing description.moniker");
|
assertDefinedAndNotNull(description.moniker, "missing description.moniker");
|
||||||
assert(description.identity, "missing description.identity");
|
assertDefinedAndNotNull(description.identity, "missing description.identity");
|
||||||
assert(description.website, "missing description.website");
|
assertDefinedAndNotNull(description.website, "missing description.website");
|
||||||
assert(description.securityContact, "missing description.securityContact");
|
assertDefinedAndNotNull(description.securityContact, "missing description.securityContact");
|
||||||
assert(description.details, "missing description.details");
|
assertDefinedAndNotNull(description.details, "missing description.details");
|
||||||
assert(commissionRate, "missing commissionRate");
|
assertDefinedAndNotNull(commissionRate, "missing commissionRate");
|
||||||
assert(minSelfDelegation, "missing minSelfDelegation");
|
assertDefinedAndNotNull(minSelfDelegation, "missing minSelfDelegation");
|
||||||
assert(validatorAddress, "missing validatorAddress");
|
assertDefinedAndNotNull(validatorAddress, "missing validatorAddress");
|
||||||
return {
|
return {
|
||||||
description: {
|
description: {
|
||||||
moniker: description.moniker,
|
moniker: description.moniker,
|
||||||
@ -302,18 +277,13 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
"/cosmos.staking.v1beta1.MsgUndelegate": {
|
"/cosmos.staking.v1beta1.MsgUndelegate": {
|
||||||
aminoType: "cosmos-sdk/MsgUndelegate",
|
aminoType: "cosmos-sdk/MsgUndelegate",
|
||||||
toAmino: ({ delegatorAddress, validatorAddress, amount }: IMsgUndelegate): MsgUndelegate["value"] => {
|
toAmino: ({ delegatorAddress, validatorAddress, amount }: IMsgUndelegate): MsgUndelegate["value"] => {
|
||||||
assert(delegatorAddress, "missing delegatorAddress");
|
assertDefinedAndNotNull(delegatorAddress, "missing delegatorAddress");
|
||||||
assert(validatorAddress, "missing validatorAddress");
|
assertDefinedAndNotNull(validatorAddress, "missing validatorAddress");
|
||||||
assert(amount, "missing amount");
|
assertDefinedAndNotNull(amount, "missing amount");
|
||||||
assert(amount.amount, "missing amount.amount");
|
|
||||||
assert(amount.denom, "missing amount.denom");
|
|
||||||
return {
|
return {
|
||||||
delegator_address: delegatorAddress,
|
delegator_address: delegatorAddress,
|
||||||
validator_address: validatorAddress,
|
validator_address: validatorAddress,
|
||||||
amount: {
|
amount: coinFromProto(amount),
|
||||||
amount: amount.amount,
|
|
||||||
denom: amount.denom,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
fromAmino: ({
|
fromAmino: ({
|
||||||
|
Loading…
x
Reference in New Issue
Block a user