diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e632cda..e174a45d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ and this project adheres to ## [Unreleased] +### Fixed + +- @cosmjs/stargate: Add missing memo field to `fromAmino` implementation for + `MsgTransfer`. ([#1493]) + +[#1493]: https://github.com/cosmos/cosmjs/issues/1493 + ## [0.31.2] - 2023-10-24 ### Fixed diff --git a/packages/stargate/src/modules/ibc/aminomessages.spec.ts b/packages/stargate/src/modules/ibc/aminomessages.spec.ts index 420690cd..0334fc6e 100644 --- a/packages/stargate/src/modules/ibc/aminomessages.spec.ts +++ b/packages/stargate/src/modules/ibc/aminomessages.spec.ts @@ -153,6 +153,43 @@ describe("AminoTypes", () => { }); }); + it("works for MsgTransfer with memo", () => { + const aminoMsg: AminoMsgTransfer = { + type: "cosmos-sdk/MsgTransfer", + value: { + source_port: "testport", + source_channel: "testchannel", + token: coin(1234, "utest"), + sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", + receiver: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5", + timeout_height: { + revision_height: "123", + revision_number: "456", + }, + timeout_timestamp: "789", + memo: "Hack me", + }, + }; + const msg = new AminoTypes(createIbcAminoConverters()).fromAmino(aminoMsg); + const expectedValue: MsgTransfer = { + sourcePort: "testport", + sourceChannel: "testchannel", + token: coin(1234, "utest"), + sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", + receiver: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5", + timeoutHeight: { + revisionHeight: Long.fromString("123", true), + revisionNumber: Long.fromString("456", true), + }, + timeoutTimestamp: Long.fromString("789", true), + memo: "Hack me", + }; + expect(msg).toEqual({ + typeUrl: "/ibc.applications.transfer.v1.MsgTransfer", + value: expectedValue, + }); + }); + it("works for MsgTransfer with default values", () => { const aminoMsg: AminoMsgTransfer = { type: "cosmos-sdk/MsgTransfer", @@ -167,6 +204,7 @@ describe("AminoTypes", () => { // revision_number omitted }, // timeout_timestamp omitted + // memo omitted }, }; const msg = new AminoTypes(createIbcAminoConverters()).fromAmino(aminoMsg); diff --git a/packages/stargate/src/modules/ibc/aminomessages.ts b/packages/stargate/src/modules/ibc/aminomessages.ts index 4073c521..5719bbef 100644 --- a/packages/stargate/src/modules/ibc/aminomessages.ts +++ b/packages/stargate/src/modules/ibc/aminomessages.ts @@ -98,6 +98,7 @@ export function createIbcAminoConverters(): AminoConverters { receiver, timeout_height, timeout_timestamp, + memo, }: AminoMsgTransfer["value"]): MsgTransfer => MsgTransfer.fromPartial({ sourcePort: source_port, @@ -112,6 +113,7 @@ export function createIbcAminoConverters(): AminoConverters { } : undefined, timeoutTimestamp: Long.fromString(timeout_timestamp || "0", true), + memo: memo ?? "", }), }, };