mirror of
https://github.com/cosmos/cosmjs.git
synced 2025-03-11 14:09:15 +00:00
Merge pull request #871 from cosmos/MsgDeposit-and-amino
Add MsgDeposit support as well as Amino JSON signing for gov messages
This commit is contained in:
commit
0ee110bef3
@ -26,7 +26,8 @@ and this project adheres to
|
|||||||
configure the HD path of the faucet accounts ([#832]).
|
configure the HD path of the faucet accounts ([#832]).
|
||||||
- @cosmjs/cosmwasm-stargate: Add field `ibcPortId` to `Contract` ([#836]).
|
- @cosmjs/cosmwasm-stargate: Add field `ibcPortId` to `Contract` ([#836]).
|
||||||
- @cosmjs/stargate: Add `GovExtension` for query client.
|
- @cosmjs/stargate: Add `GovExtension` for query client.
|
||||||
- @cosmjs/stargate: Add support for `MsgSubmitProposal` and `MsgVote`.
|
- @cosmjs/stargate: Add support for `MsgDeposit`, `MsgSubmitProposal` and
|
||||||
|
`MsgVote`.
|
||||||
|
|
||||||
[#832]: https://github.com/cosmos/cosmjs/issues/832
|
[#832]: https://github.com/cosmos/cosmjs/issues/832
|
||||||
[#836]: https://github.com/cosmos/cosmjs/issues/836
|
[#836]: https://github.com/cosmos/cosmjs/issues/836
|
||||||
|
@ -155,7 +155,23 @@ export function isAminoMsgSubmitEvidence(msg: AminoMsg): msg is AminoMsgSubmitEv
|
|||||||
export interface AminoMsgSubmitProposal extends AminoMsg {
|
export interface AminoMsgSubmitProposal extends AminoMsg {
|
||||||
readonly type: "cosmos-sdk/MsgSubmitProposal";
|
readonly type: "cosmos-sdk/MsgSubmitProposal";
|
||||||
readonly value: {
|
readonly value: {
|
||||||
readonly content: Any;
|
/**
|
||||||
|
* A proposal structure, e.g.
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* {
|
||||||
|
* type: 'cosmos-sdk/TextProposal',
|
||||||
|
* value: {
|
||||||
|
* description: 'This proposal proposes to test whether this proposal passes',
|
||||||
|
* title: 'Test Proposal'
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
readonly content: {
|
||||||
|
readonly type: string;
|
||||||
|
readonly value: any;
|
||||||
|
};
|
||||||
readonly initial_deposit: readonly Coin[];
|
readonly initial_deposit: readonly Coin[];
|
||||||
/** Bech32 account address */
|
/** Bech32 account address */
|
||||||
readonly proposer: string;
|
readonly proposer: string;
|
||||||
@ -166,14 +182,6 @@ export function isAminoMsgSubmitProposal(msg: AminoMsg): msg is AminoMsgSubmitPr
|
|||||||
return msg.type === "cosmos-sdk/MsgSubmitProposal";
|
return msg.type === "cosmos-sdk/MsgSubmitProposal";
|
||||||
}
|
}
|
||||||
|
|
||||||
enum VoteOption {
|
|
||||||
VoteOptionUnspecified,
|
|
||||||
VoteOptionYes,
|
|
||||||
VoteOptionAbstain,
|
|
||||||
VoteOptionNo,
|
|
||||||
VoteOptionNoWithVeto,
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Casts a vote */
|
/** Casts a vote */
|
||||||
export interface AminoMsgVote extends AminoMsg {
|
export interface AminoMsgVote extends AminoMsg {
|
||||||
readonly type: "cosmos-sdk/MsgVote";
|
readonly type: "cosmos-sdk/MsgVote";
|
||||||
@ -181,7 +189,12 @@ export interface AminoMsgVote extends AminoMsg {
|
|||||||
readonly proposal_id: string;
|
readonly proposal_id: string;
|
||||||
/** Bech32 account address */
|
/** Bech32 account address */
|
||||||
readonly voter: string;
|
readonly voter: string;
|
||||||
readonly option: VoteOption;
|
/**
|
||||||
|
* VoteOption as integer from 0 to 4 🤷
|
||||||
|
*
|
||||||
|
* @see https://github.com/cosmos/cosmos-sdk/blob/v0.42.9/x/gov/types/gov.pb.go#L38-L49
|
||||||
|
*/
|
||||||
|
readonly option: number;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ import {
|
|||||||
MsgWithdrawDelegatorReward,
|
MsgWithdrawDelegatorReward,
|
||||||
MsgWithdrawValidatorCommission,
|
MsgWithdrawValidatorCommission,
|
||||||
} from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
} from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
||||||
|
import { TextProposal, VoteOption } from "cosmjs-types/cosmos/gov/v1beta1/gov";
|
||||||
|
import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx";
|
||||||
import {
|
import {
|
||||||
MsgBeginRedelegate,
|
MsgBeginRedelegate,
|
||||||
MsgCreateValidator,
|
MsgCreateValidator,
|
||||||
@ -23,13 +25,16 @@ import {
|
|||||||
AminoMsgBeginRedelegate,
|
AminoMsgBeginRedelegate,
|
||||||
AminoMsgCreateValidator,
|
AminoMsgCreateValidator,
|
||||||
AminoMsgDelegate,
|
AminoMsgDelegate,
|
||||||
|
AminoMsgDeposit,
|
||||||
AminoMsgEditValidator,
|
AminoMsgEditValidator,
|
||||||
AminoMsgFundCommunityPool,
|
AminoMsgFundCommunityPool,
|
||||||
AminoMsgMultiSend,
|
AminoMsgMultiSend,
|
||||||
AminoMsgSend,
|
AminoMsgSend,
|
||||||
AminoMsgSetWithdrawAddress,
|
AminoMsgSetWithdrawAddress,
|
||||||
|
AminoMsgSubmitProposal,
|
||||||
AminoMsgTransfer,
|
AminoMsgTransfer,
|
||||||
AminoMsgUndelegate,
|
AminoMsgUndelegate,
|
||||||
|
AminoMsgVote,
|
||||||
AminoMsgWithdrawDelegatorReward,
|
AminoMsgWithdrawDelegatorReward,
|
||||||
AminoMsgWithdrawValidatorCommission,
|
AminoMsgWithdrawValidatorCommission,
|
||||||
} from "./aminomsgs";
|
} from "./aminomsgs";
|
||||||
@ -37,6 +42,8 @@ import { AminoTypes } from "./aminotypes";
|
|||||||
|
|
||||||
describe("AminoTypes", () => {
|
describe("AminoTypes", () => {
|
||||||
describe("toAmino", () => {
|
describe("toAmino", () => {
|
||||||
|
// bank
|
||||||
|
|
||||||
it("works for MsgSend", () => {
|
it("works for MsgSend", () => {
|
||||||
const msg: MsgSend = {
|
const msg: MsgSend = {
|
||||||
fromAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
|
fromAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
|
||||||
@ -89,6 +96,85 @@ describe("AminoTypes", () => {
|
|||||||
expect(aminoMsg).toEqual(expected);
|
expect(aminoMsg).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// gov
|
||||||
|
|
||||||
|
it("works for MsgDeposit", () => {
|
||||||
|
const msg: MsgDeposit = {
|
||||||
|
amount: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
depositor: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
proposalId: Long.fromNumber(5),
|
||||||
|
};
|
||||||
|
const aminoMsg = new AminoTypes().toAmino({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.MsgDeposit",
|
||||||
|
value: msg,
|
||||||
|
});
|
||||||
|
const expected: AminoMsgDeposit = {
|
||||||
|
type: "cosmos-sdk/MsgDeposit",
|
||||||
|
value: {
|
||||||
|
amount: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
depositor: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
proposal_id: "5",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
expect(aminoMsg).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("works for MsgSubmitProposal", () => {
|
||||||
|
const msg: MsgSubmitProposal = {
|
||||||
|
initialDeposit: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
proposer: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
content: {
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.TextProposal",
|
||||||
|
value: TextProposal.encode({
|
||||||
|
description: "This proposal proposes to test whether this proposal passes",
|
||||||
|
title: "Test Proposal",
|
||||||
|
}).finish(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const aminoMsg = new AminoTypes().toAmino({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal",
|
||||||
|
value: msg,
|
||||||
|
});
|
||||||
|
const expected: AminoMsgSubmitProposal = {
|
||||||
|
type: "cosmos-sdk/MsgSubmitProposal",
|
||||||
|
value: {
|
||||||
|
initial_deposit: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
proposer: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
content: {
|
||||||
|
type: "cosmos-sdk/TextProposal",
|
||||||
|
value: {
|
||||||
|
description: "This proposal proposes to test whether this proposal passes",
|
||||||
|
title: "Test Proposal",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
expect(aminoMsg).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("works for MsgVote", () => {
|
||||||
|
const msg: MsgVote = {
|
||||||
|
option: VoteOption.VOTE_OPTION_NO_WITH_VETO,
|
||||||
|
proposalId: Long.fromNumber(5),
|
||||||
|
voter: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k",
|
||||||
|
};
|
||||||
|
const aminoMsg = new AminoTypes().toAmino({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.MsgVote",
|
||||||
|
value: msg,
|
||||||
|
});
|
||||||
|
const expected: AminoMsgVote = {
|
||||||
|
type: "cosmos-sdk/MsgVote",
|
||||||
|
value: {
|
||||||
|
option: 4,
|
||||||
|
proposal_id: "5",
|
||||||
|
voter: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
expect(aminoMsg).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
// distribution
|
||||||
|
|
||||||
it("works for MsgFundCommunityPool", async () => {
|
it("works for MsgFundCommunityPool", async () => {
|
||||||
const msg: MsgFundCommunityPool = {
|
const msg: MsgFundCommunityPool = {
|
||||||
amount: coins(1234, "ucosm"),
|
amount: coins(1234, "ucosm"),
|
||||||
@ -163,6 +249,8 @@ describe("AminoTypes", () => {
|
|||||||
expect(aminoMsg).toEqual(expected);
|
expect(aminoMsg).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// staking
|
||||||
|
|
||||||
it("works for MsgBeginRedelegate", () => {
|
it("works for MsgBeginRedelegate", () => {
|
||||||
const msg: MsgBeginRedelegate = {
|
const msg: MsgBeginRedelegate = {
|
||||||
delegatorAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
|
delegatorAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
|
||||||
@ -318,6 +406,8 @@ describe("AminoTypes", () => {
|
|||||||
expect(aminoMsg).toEqual(expected);
|
expect(aminoMsg).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ibc
|
||||||
|
|
||||||
it("works for MsgTransfer", () => {
|
it("works for MsgTransfer", () => {
|
||||||
const msg: MsgTransfer = {
|
const msg: MsgTransfer = {
|
||||||
sourcePort: "testport",
|
sourcePort: "testport",
|
||||||
@ -417,6 +507,8 @@ describe("AminoTypes", () => {
|
|||||||
expect(aminoMsg).toEqual(expected);
|
expect(aminoMsg).toEqual(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// other
|
||||||
|
|
||||||
it("works with custom type url", () => {
|
it("works with custom type url", () => {
|
||||||
const msg = {
|
const msg = {
|
||||||
foo: "bar",
|
foo: "bar",
|
||||||
@ -483,6 +575,8 @@ describe("AminoTypes", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("fromAmino", () => {
|
describe("fromAmino", () => {
|
||||||
|
// bank
|
||||||
|
|
||||||
it("works for MsgSend", () => {
|
it("works for MsgSend", () => {
|
||||||
const aminoMsg: AminoMsgSend = {
|
const aminoMsg: AminoMsgSend = {
|
||||||
type: "cosmos-sdk/MsgSend",
|
type: "cosmos-sdk/MsgSend",
|
||||||
@ -535,6 +629,92 @@ describe("AminoTypes", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// gov
|
||||||
|
|
||||||
|
it("works for MsgDeposit", () => {
|
||||||
|
const aminoMsg: AminoMsgDeposit = {
|
||||||
|
type: "cosmos-sdk/MsgDeposit",
|
||||||
|
value: {
|
||||||
|
amount: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
depositor: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
proposal_id: "5",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const msg = new AminoTypes().fromAmino(aminoMsg);
|
||||||
|
const expectedValue: MsgDeposit = {
|
||||||
|
amount: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
depositor: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
proposalId: Long.fromNumber(5),
|
||||||
|
};
|
||||||
|
expect(msg).toEqual({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.MsgDeposit",
|
||||||
|
value: expectedValue,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("works for MsgSubmitProposal", () => {
|
||||||
|
const aminoMsg: AminoMsgSubmitProposal = {
|
||||||
|
type: "cosmos-sdk/MsgSubmitProposal",
|
||||||
|
value: {
|
||||||
|
initial_deposit: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
proposer: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
content: {
|
||||||
|
type: "cosmos-sdk/TextProposal",
|
||||||
|
value: {
|
||||||
|
description: "This proposal proposes to test whether this proposal passes",
|
||||||
|
title: "Test Proposal",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const msg = new AminoTypes().fromAmino(aminoMsg);
|
||||||
|
const expectedValue: MsgSubmitProposal = {
|
||||||
|
initialDeposit: [{ amount: "12300000", denom: "ustake" }],
|
||||||
|
proposer: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||||
|
content: {
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.TextProposal",
|
||||||
|
value: TextProposal.encode({
|
||||||
|
description: "This proposal proposes to test whether this proposal passes",
|
||||||
|
title: "Test Proposal",
|
||||||
|
}).finish(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
expect(msg).toEqual({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal",
|
||||||
|
value: expectedValue,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("works for MsgVote", () => {
|
||||||
|
const aminoMsg: AminoMsgVote = {
|
||||||
|
type: "cosmos-sdk/MsgVote",
|
||||||
|
value: {
|
||||||
|
option: 4,
|
||||||
|
proposal_id: "5",
|
||||||
|
voter: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const msg = new AminoTypes().fromAmino(aminoMsg);
|
||||||
|
const expectedValue: MsgVote = {
|
||||||
|
option: VoteOption.VOTE_OPTION_NO_WITH_VETO,
|
||||||
|
proposalId: Long.fromNumber(5),
|
||||||
|
voter: "cosmos1xy4yqngt0nlkdcenxymg8tenrghmek4nmqm28k",
|
||||||
|
};
|
||||||
|
expect(msg).toEqual({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.MsgVote",
|
||||||
|
value: expectedValue,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// distribution
|
||||||
|
|
||||||
|
// TODO: MsgFundCommunityPool
|
||||||
|
// TODO: MsgSetWithdrawAddress
|
||||||
|
// TODO: MsgWithdrawDelegatorReward
|
||||||
|
// TODO: MsgWithdrawValidatorCommission
|
||||||
|
|
||||||
|
// staking
|
||||||
|
|
||||||
it("works for MsgBeginRedelegate", () => {
|
it("works for MsgBeginRedelegate", () => {
|
||||||
const aminoMsg: AminoMsgBeginRedelegate = {
|
const aminoMsg: AminoMsgBeginRedelegate = {
|
||||||
type: "cosmos-sdk/MsgBeginRedelegate",
|
type: "cosmos-sdk/MsgBeginRedelegate",
|
||||||
@ -690,6 +870,8 @@ describe("AminoTypes", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ibc
|
||||||
|
|
||||||
it("works for MsgTransfer", () => {
|
it("works for MsgTransfer", () => {
|
||||||
const aminoMsg: AminoMsgTransfer = {
|
const aminoMsg: AminoMsgTransfer = {
|
||||||
type: "cosmos-sdk/MsgTransfer",
|
type: "cosmos-sdk/MsgTransfer",
|
||||||
@ -760,6 +942,8 @@ describe("AminoTypes", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// other
|
||||||
|
|
||||||
it("works for custom type url", () => {
|
it("works for custom type url", () => {
|
||||||
const aminoMsg = {
|
const aminoMsg = {
|
||||||
type: "my-sdk/CustomType",
|
type: "my-sdk/CustomType",
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import { AminoMsg, decodeBech32Pubkey, encodeBech32Pubkey } from "@cosmjs/amino";
|
import { AminoMsg, decodeBech32Pubkey, encodeBech32Pubkey } from "@cosmjs/amino";
|
||||||
import { fromBase64, toBase64 } from "@cosmjs/encoding";
|
import { fromBase64, toBase64 } from "@cosmjs/encoding";
|
||||||
import { EncodeObject } from "@cosmjs/proto-signing";
|
import { EncodeObject } from "@cosmjs/proto-signing";
|
||||||
import { assertDefinedAndNotNull } from "@cosmjs/utils";
|
import { assert, assertDefinedAndNotNull, isNonNullObject } from "@cosmjs/utils";
|
||||||
import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx";
|
import { MsgMultiSend, MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx";
|
||||||
import {
|
import {
|
||||||
MsgFundCommunityPool,
|
MsgFundCommunityPool,
|
||||||
@ -10,6 +10,8 @@ import {
|
|||||||
MsgWithdrawDelegatorReward,
|
MsgWithdrawDelegatorReward,
|
||||||
MsgWithdrawValidatorCommission,
|
MsgWithdrawValidatorCommission,
|
||||||
} from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
} from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
||||||
|
import { TextProposal, voteOptionFromJSON } from "cosmjs-types/cosmos/gov/v1beta1/gov";
|
||||||
|
import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx";
|
||||||
import {
|
import {
|
||||||
MsgBeginRedelegate,
|
MsgBeginRedelegate,
|
||||||
MsgCreateValidator,
|
MsgCreateValidator,
|
||||||
@ -17,6 +19,7 @@ import {
|
|||||||
MsgEditValidator,
|
MsgEditValidator,
|
||||||
MsgUndelegate,
|
MsgUndelegate,
|
||||||
} from "cosmjs-types/cosmos/staking/v1beta1/tx";
|
} from "cosmjs-types/cosmos/staking/v1beta1/tx";
|
||||||
|
import { Any } from "cosmjs-types/google/protobuf/any";
|
||||||
import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx";
|
import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx";
|
||||||
import Long from "long";
|
import Long from "long";
|
||||||
|
|
||||||
@ -24,13 +27,16 @@ import {
|
|||||||
AminoMsgBeginRedelegate,
|
AminoMsgBeginRedelegate,
|
||||||
AminoMsgCreateValidator,
|
AminoMsgCreateValidator,
|
||||||
AminoMsgDelegate,
|
AminoMsgDelegate,
|
||||||
|
AminoMsgDeposit,
|
||||||
AminoMsgEditValidator,
|
AminoMsgEditValidator,
|
||||||
AminoMsgFundCommunityPool,
|
AminoMsgFundCommunityPool,
|
||||||
AminoMsgMultiSend,
|
AminoMsgMultiSend,
|
||||||
AminoMsgSend,
|
AminoMsgSend,
|
||||||
AminoMsgSetWithdrawAddress,
|
AminoMsgSetWithdrawAddress,
|
||||||
|
AminoMsgSubmitProposal,
|
||||||
AminoMsgTransfer,
|
AminoMsgTransfer,
|
||||||
AminoMsgUndelegate,
|
AminoMsgUndelegate,
|
||||||
|
AminoMsgVote,
|
||||||
AminoMsgWithdrawDelegatorReward,
|
AminoMsgWithdrawDelegatorReward,
|
||||||
AminoMsgWithdrawValidatorCommission,
|
AminoMsgWithdrawValidatorCommission,
|
||||||
} from "./aminomsgs";
|
} from "./aminomsgs";
|
||||||
@ -59,6 +65,8 @@ function omitDefault<T extends string | number | Long>(input: T): T | undefined
|
|||||||
|
|
||||||
function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
||||||
return {
|
return {
|
||||||
|
// bank
|
||||||
|
|
||||||
"/cosmos.bank.v1beta1.MsgSend": {
|
"/cosmos.bank.v1beta1.MsgSend": {
|
||||||
aminoType: "cosmos-sdk/MsgSend",
|
aminoType: "cosmos-sdk/MsgSend",
|
||||||
toAmino: ({ fromAddress, toAddress, amount }: MsgSend): AminoMsgSend["value"] => ({
|
toAmino: ({ fromAddress, toAddress, amount }: MsgSend): AminoMsgSend["value"] => ({
|
||||||
@ -95,6 +103,9 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
})),
|
})),
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// distribution
|
||||||
|
|
||||||
"/cosmos.distribution.v1beta1.MsgFundCommunityPool": {
|
"/cosmos.distribution.v1beta1.MsgFundCommunityPool": {
|
||||||
aminoType: "cosmos-sdk/MsgFundCommunityPool",
|
aminoType: "cosmos-sdk/MsgFundCommunityPool",
|
||||||
toAmino: ({ amount, depositor }: MsgFundCommunityPool): AminoMsgFundCommunityPool["value"] => ({
|
toAmino: ({ amount, depositor }: MsgFundCommunityPool): AminoMsgFundCommunityPool["value"] => ({
|
||||||
@ -153,6 +164,110 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
validatorAddress: validator_address,
|
validatorAddress: validator_address,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// gov
|
||||||
|
|
||||||
|
"/cosmos.gov.v1beta1.MsgDeposit": {
|
||||||
|
aminoType: "cosmos-sdk/MsgDeposit",
|
||||||
|
toAmino: ({ amount, depositor, proposalId }: MsgDeposit): AminoMsgDeposit["value"] => {
|
||||||
|
return {
|
||||||
|
amount,
|
||||||
|
depositor,
|
||||||
|
proposal_id: proposalId.toString(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
fromAmino: ({ amount, depositor, proposal_id }: AminoMsgDeposit["value"]): MsgDeposit => {
|
||||||
|
return {
|
||||||
|
amount: Array.from(amount),
|
||||||
|
depositor,
|
||||||
|
proposalId: Long.fromString(proposal_id),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"/cosmos.gov.v1beta1.MsgVote": {
|
||||||
|
aminoType: "cosmos-sdk/MsgVote",
|
||||||
|
toAmino: ({ option, proposalId, voter }: MsgVote): AminoMsgVote["value"] => {
|
||||||
|
return {
|
||||||
|
option: option,
|
||||||
|
proposal_id: proposalId.toString(),
|
||||||
|
voter: voter,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
fromAmino: ({ option, proposal_id, voter }: AminoMsgVote["value"]): MsgVote => {
|
||||||
|
return {
|
||||||
|
option: voteOptionFromJSON(option),
|
||||||
|
proposalId: Long.fromString(proposal_id),
|
||||||
|
voter: voter,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"/cosmos.gov.v1beta1.MsgSubmitProposal": {
|
||||||
|
aminoType: "cosmos-sdk/MsgSubmitProposal",
|
||||||
|
toAmino: ({
|
||||||
|
initialDeposit,
|
||||||
|
proposer,
|
||||||
|
content,
|
||||||
|
}: MsgSubmitProposal): AminoMsgSubmitProposal["value"] => {
|
||||||
|
assertDefinedAndNotNull(content);
|
||||||
|
let proposal: any;
|
||||||
|
switch (content.typeUrl) {
|
||||||
|
case "/cosmos.gov.v1beta1.TextProposal": {
|
||||||
|
const textProposal = TextProposal.decode(content.value);
|
||||||
|
proposal = {
|
||||||
|
type: "cosmos-sdk/TextProposal",
|
||||||
|
value: {
|
||||||
|
description: textProposal.description,
|
||||||
|
title: textProposal.title,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
throw new Error(`Unsupported proposal type: '${content.typeUrl}'`);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
initial_deposit: initialDeposit,
|
||||||
|
proposer: proposer,
|
||||||
|
content: proposal,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
fromAmino: ({
|
||||||
|
initial_deposit,
|
||||||
|
proposer,
|
||||||
|
content,
|
||||||
|
}: AminoMsgSubmitProposal["value"]): MsgSubmitProposal => {
|
||||||
|
let any_content: Any;
|
||||||
|
switch (content.type) {
|
||||||
|
case "cosmos-sdk/TextProposal": {
|
||||||
|
const { value } = content;
|
||||||
|
assert(isNonNullObject(value));
|
||||||
|
const { title, description } = value as any;
|
||||||
|
assert(typeof title === "string");
|
||||||
|
assert(typeof description === "string");
|
||||||
|
any_content = Any.fromPartial({
|
||||||
|
typeUrl: "/cosmos.gov.v1beta1.TextProposal",
|
||||||
|
value: TextProposal.encode(
|
||||||
|
TextProposal.fromPartial({
|
||||||
|
title: title,
|
||||||
|
description: description,
|
||||||
|
}),
|
||||||
|
).finish(),
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
throw new Error(`Unsupported proposal type: '${content.type}'`);
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
initialDeposit: Array.from(initial_deposit),
|
||||||
|
proposer: proposer,
|
||||||
|
content: any_content,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// staking
|
||||||
|
|
||||||
"/cosmos.staking.v1beta1.MsgBeginRedelegate": {
|
"/cosmos.staking.v1beta1.MsgBeginRedelegate": {
|
||||||
aminoType: "cosmos-sdk/MsgBeginRedelegate",
|
aminoType: "cosmos-sdk/MsgBeginRedelegate",
|
||||||
toAmino: ({
|
toAmino: ({
|
||||||
@ -343,6 +458,9 @@ function createDefaultTypes(prefix: string): Record<string, AminoConverter> {
|
|||||||
amount: amount,
|
amount: amount,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// ibc
|
||||||
|
|
||||||
"/ibc.applications.transfer.v1.MsgTransfer": {
|
"/ibc.applications.transfer.v1.MsgTransfer": {
|
||||||
aminoType: "cosmos-sdk/MsgTransfer",
|
aminoType: "cosmos-sdk/MsgTransfer",
|
||||||
toAmino: ({
|
toAmino: ({
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { EncodeObject } from "@cosmjs/proto-signing";
|
import { EncodeObject } from "@cosmjs/proto-signing";
|
||||||
import { MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx";
|
import { MsgSend } from "cosmjs-types/cosmos/bank/v1beta1/tx";
|
||||||
import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
||||||
import { MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx";
|
import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx";
|
||||||
import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx";
|
import { MsgDelegate, MsgUndelegate } from "cosmjs-types/cosmos/staking/v1beta1/tx";
|
||||||
import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx";
|
import { MsgTransfer } from "cosmjs-types/ibc/applications/transfer/v1/tx";
|
||||||
|
|
||||||
@ -61,6 +61,17 @@ export function isMsgTransferEncodeObject(
|
|||||||
return (encodeObject as MsgTransferEncodeObject).typeUrl === "/ibc.applications.transfer.v1.MsgTransfer";
|
return (encodeObject as MsgTransferEncodeObject).typeUrl === "/ibc.applications.transfer.v1.MsgTransfer";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface MsgDepositEncodeObject extends EncodeObject {
|
||||||
|
readonly typeUrl: "/cosmos.gov.v1beta1.MsgDeposit";
|
||||||
|
readonly value: Partial<MsgDeposit>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isMsgDepositEncodeObject(
|
||||||
|
encodeObject: EncodeObject,
|
||||||
|
): encodeObject is MsgSubmitProposalEncodeObject {
|
||||||
|
return (encodeObject as MsgDepositEncodeObject).typeUrl === "/cosmos.gov.v1beta1.MsgDeposit";
|
||||||
|
}
|
||||||
|
|
||||||
export interface MsgSubmitProposalEncodeObject extends EncodeObject {
|
export interface MsgSubmitProposalEncodeObject extends EncodeObject {
|
||||||
readonly typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal";
|
readonly typeUrl: "/cosmos.gov.v1beta1.MsgSubmitProposal";
|
||||||
readonly value: Partial<MsgSubmitProposal>;
|
readonly value: Partial<MsgSubmitProposal>;
|
||||||
|
@ -41,6 +41,7 @@ export {
|
|||||||
export { AminoConverter, AminoTypes } from "./aminotypes";
|
export { AminoConverter, AminoTypes } from "./aminotypes";
|
||||||
export {
|
export {
|
||||||
isMsgDelegateEncodeObject,
|
isMsgDelegateEncodeObject,
|
||||||
|
isMsgDepositEncodeObject,
|
||||||
isMsgSendEncodeObject,
|
isMsgSendEncodeObject,
|
||||||
isMsgSubmitProposalEncodeObject,
|
isMsgSubmitProposalEncodeObject,
|
||||||
isMsgTransferEncodeObject,
|
isMsgTransferEncodeObject,
|
||||||
@ -48,6 +49,7 @@ export {
|
|||||||
isMsgVoteEncodeObject,
|
isMsgVoteEncodeObject,
|
||||||
isMsgWithdrawDelegatorRewardEncodeObject,
|
isMsgWithdrawDelegatorRewardEncodeObject,
|
||||||
MsgDelegateEncodeObject,
|
MsgDelegateEncodeObject,
|
||||||
|
MsgDepositEncodeObject,
|
||||||
MsgSendEncodeObject,
|
MsgSendEncodeObject,
|
||||||
MsgSubmitProposalEncodeObject,
|
MsgSubmitProposalEncodeObject,
|
||||||
MsgTransferEncodeObject,
|
MsgTransferEncodeObject,
|
||||||
|
@ -46,7 +46,7 @@ describe("GovExtension", () => {
|
|||||||
const delegationVoter2 = coin(777, "ustake");
|
const delegationVoter2 = coin(777, "ustake");
|
||||||
const voter1Address = faucet.address1;
|
const voter1Address = faucet.address1;
|
||||||
const voter2Address = faucet.address2;
|
const voter2Address = faucet.address2;
|
||||||
let proposalId: string;
|
let proposalId: string | undefined;
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
if (simappEnabled()) {
|
if (simappEnabled()) {
|
||||||
@ -83,6 +83,7 @@ describe("GovExtension", () => {
|
|||||||
proposalId = logs[0].events
|
proposalId = logs[0].events
|
||||||
.find(({ type }: any) => type === "submit_proposal")
|
.find(({ type }: any) => type === "submit_proposal")
|
||||||
.attributes.find(({ key }: any) => key === "proposal_id").value;
|
.attributes.find(({ key }: any) => key === "proposal_id").value;
|
||||||
|
assert(proposalId, "Proposal ID not found in events");
|
||||||
assert(proposalId.match(nonNegativeIntegerMatcher));
|
assert(proposalId.match(nonNegativeIntegerMatcher));
|
||||||
|
|
||||||
// Voter 1
|
// Voter 1
|
||||||
@ -210,6 +211,7 @@ describe("GovExtension", () => {
|
|||||||
describe("proposals", () => {
|
describe("proposals", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.proposals(
|
const response = await client.gov.proposals(
|
||||||
@ -240,6 +242,7 @@ describe("GovExtension", () => {
|
|||||||
describe("proposal", () => {
|
describe("proposal", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.proposal(proposalId);
|
const response = await client.gov.proposal(proposalId);
|
||||||
@ -265,6 +268,7 @@ describe("GovExtension", () => {
|
|||||||
describe("deposits", () => {
|
describe("deposits", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.deposits(proposalId);
|
const response = await client.gov.deposits(proposalId);
|
||||||
@ -283,6 +287,7 @@ describe("GovExtension", () => {
|
|||||||
describe("deposit", () => {
|
describe("deposit", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.deposit(proposalId, voter1Address);
|
const response = await client.gov.deposit(proposalId, voter1Address);
|
||||||
@ -299,6 +304,7 @@ describe("GovExtension", () => {
|
|||||||
describe("tally", () => {
|
describe("tally", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.tally(proposalId);
|
const response = await client.gov.tally(proposalId);
|
||||||
@ -316,6 +322,7 @@ describe("GovExtension", () => {
|
|||||||
describe("votes", () => {
|
describe("votes", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.votes(proposalId);
|
const response = await client.gov.votes(proposalId);
|
||||||
@ -340,6 +347,7 @@ describe("GovExtension", () => {
|
|||||||
describe("vote", () => {
|
describe("vote", () => {
|
||||||
it("works", async () => {
|
it("works", async () => {
|
||||||
pendingWithoutSimapp();
|
pendingWithoutSimapp();
|
||||||
|
assert(proposalId, "Missing proposal ID");
|
||||||
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
const [client, tmClient] = await makeClientWithGov(simapp.tendermintUrl);
|
||||||
|
|
||||||
const response = await client.gov.vote(proposalId, voter1Address);
|
const response = await client.gov.vote(proposalId, voter1Address);
|
||||||
|
@ -22,7 +22,7 @@ import {
|
|||||||
MsgWithdrawDelegatorReward,
|
MsgWithdrawDelegatorReward,
|
||||||
MsgWithdrawValidatorCommission,
|
MsgWithdrawValidatorCommission,
|
||||||
} from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
} from "cosmjs-types/cosmos/distribution/v1beta1/tx";
|
||||||
import { MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx";
|
import { MsgDeposit, MsgSubmitProposal, MsgVote } from "cosmjs-types/cosmos/gov/v1beta1/tx";
|
||||||
import {
|
import {
|
||||||
MsgBeginRedelegate,
|
MsgBeginRedelegate,
|
||||||
MsgCreateValidator,
|
MsgCreateValidator,
|
||||||
@ -76,6 +76,7 @@ export const defaultRegistryTypes: ReadonlyArray<[string, GeneratedType]> = [
|
|||||||
["/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", MsgSetWithdrawAddress],
|
["/cosmos.distribution.v1beta1.MsgSetWithdrawAddress", MsgSetWithdrawAddress],
|
||||||
["/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", MsgWithdrawDelegatorReward],
|
["/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward", MsgWithdrawDelegatorReward],
|
||||||
["/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission", MsgWithdrawValidatorCommission],
|
["/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission", MsgWithdrawValidatorCommission],
|
||||||
|
["/cosmos.gov.v1beta1.MsgDeposit", MsgDeposit],
|
||||||
["/cosmos.gov.v1beta1.MsgSubmitProposal", MsgSubmitProposal],
|
["/cosmos.gov.v1beta1.MsgSubmitProposal", MsgSubmitProposal],
|
||||||
["/cosmos.gov.v1beta1.MsgVote", MsgVote],
|
["/cosmos.gov.v1beta1.MsgVote", MsgVote],
|
||||||
["/cosmos.staking.v1beta1.MsgBeginRedelegate", MsgBeginRedelegate],
|
["/cosmos.staking.v1beta1.MsgBeginRedelegate", MsgBeginRedelegate],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user