diff --git a/CHANGELOG.md b/CHANGELOG.md index 8efd05b81a..08279b5bc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,14 @@ and this project adheres to ## [Unreleased] +### Fixed + +- @cosmjs/stargate: Fix `protoDecimalToJson` for values with a 0 fractional + part, such as `0.000000000000000000`, `1.000000000000000000` or + `42.000000000000000000` ([#1326]). + +[#1326] : https://github.com/cosmos/cosmjs/pull/1326 + ### Deprecated - @cosmjs/stargate: Deprecate `QueryClient.queryUnverified` in favour of newly diff --git a/packages/stargate/src/modules/staking/aminomessages.spec.ts b/packages/stargate/src/modules/staking/aminomessages.spec.ts index 53927b2451..25024d716c 100644 --- a/packages/stargate/src/modules/staking/aminomessages.spec.ts +++ b/packages/stargate/src/modules/staking/aminomessages.spec.ts @@ -18,9 +18,21 @@ import { AminoMsgEditValidator, AminoMsgUndelegate, createStakingAminoConverters, + protoDecimalToJson, } from "./aminomessages"; describe("AminoTypes", () => { + describe("protoDecimalToJson", () => { + it("works", () => { + expect(protoDecimalToJson("0")).toEqual("0.000000000000000000"); + expect(protoDecimalToJson("1")).toEqual("0.000000000000000001"); + expect(protoDecimalToJson("2497")).toEqual("0.000000000000002497"); + expect(protoDecimalToJson("987000000000000000")).toEqual("0.987000000000000000"); + expect(protoDecimalToJson("123987000000000000000")).toEqual("123.987000000000000000"); + expect(protoDecimalToJson("4872000000000000000000")).toEqual("4872.000000000000000000"); + }); + }); + describe("toAmino", () => { it("works for MsgBeginRedelegate", () => { const msg: MsgBeginRedelegate = { diff --git a/packages/stargate/src/modules/staking/aminomessages.ts b/packages/stargate/src/modules/staking/aminomessages.ts index 5b46ec4ba6..38f3131f80 100644 --- a/packages/stargate/src/modules/staking/aminomessages.ts +++ b/packages/stargate/src/modules/staking/aminomessages.ts @@ -29,10 +29,10 @@ interface Description { readonly details: string; } -function protoDecimalToJson(decimal: string): string { +export function protoDecimalToJson(decimal: string): string { const parsed = Decimal.fromAtomics(decimal, 18); const [whole, fractional] = parsed.toString().split("."); - return `${whole}.${fractional.padEnd(18, "0")}`; + return `${whole}.${(fractional ?? "").padEnd(18, "0")}`; } function jsonDecimalToProto(decimal: string): string {