From 63cfaad9e8c7d31899c159134944af3ff567e85c Mon Sep 17 00:00:00 2001 From: keupsonite Date: Wed, 23 Nov 2022 16:48:15 +0100 Subject: [PATCH] Fix protoDecimalToJson 0 fractional part --- packages/stargate/src/modules/index.ts | 1 + .../src/modules/staking/aminomessages.spec.ts | 33 +++++++++++++++++++ .../src/modules/staking/aminomessages.ts | 4 +-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/stargate/src/modules/index.ts b/packages/stargate/src/modules/index.ts index 3a63f0b0..ac3166b4 100644 --- a/packages/stargate/src/modules/index.ts +++ b/packages/stargate/src/modules/index.ts @@ -82,6 +82,7 @@ export { isAminoMsgDelegate, isAminoMsgEditValidator, isAminoMsgUndelegate, + protoDecimalToJson, } from "./staking/aminomessages"; export { isMsgBeginRedelegateEncodeObject, diff --git a/packages/stargate/src/modules/staking/aminomessages.spec.ts b/packages/stargate/src/modules/staking/aminomessages.spec.ts index 53927b24..0c4a7e54 100644 --- a/packages/stargate/src/modules/staking/aminomessages.spec.ts +++ b/packages/stargate/src/modules/staking/aminomessages.spec.ts @@ -18,10 +18,43 @@ import { AminoMsgEditValidator, AminoMsgUndelegate, createStakingAminoConverters, + protoDecimalToJson, } from "./aminomessages"; describe("AminoTypes", () => { describe("toAmino", () => { + it("works for protoDecimalToJson", () => { + const testSet = [ + { + decimal: "0", + expected: "0.000000000000000000", + }, + { + decimal: "1", + expected: "0.000000000000000001", + }, + { + decimal: "2497", + expected: "0.000000000000002497", + }, + { + decimal: "987000000000000000", + expected: "0.987000000000000000", + }, + { + decimal: "123987000000000000000", + expected: "123.987000000000000000", + }, + { + decimal: "4872000000000000000000", + expected: "4872.000000000000000000", + }, + ]; + for (let i = 0; i < testSet.length; i++) { + expect(protoDecimalToJson(testSet[i].decimal)).toEqual(testSet[i].expected); + } + }); + it("works for MsgBeginRedelegate", () => { const msg: MsgBeginRedelegate = { delegatorAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6", diff --git a/packages/stargate/src/modules/staking/aminomessages.ts b/packages/stargate/src/modules/staking/aminomessages.ts index 5b46ec4b..c4e4adc5 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}.${(typeof fractional !== "undefined" ? fractional : "").padEnd(18, "0")}`; } function jsonDecimalToProto(decimal: string): string {