Skip to content

Commit

Permalink
Fix decimal handling for Amino JSON of MsgCreateValidator and MsgEdit…
Browse files Browse the repository at this point in the history
…Validator
  • Loading branch information
webmaster128 committed Oct 13, 2022
1 parent e92534d commit dbd54f9
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 24 deletions.
32 changes: 16 additions & 16 deletions packages/stargate/src/modules/staking/aminomessages.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ describe("AminoTypes", () => {
details: "...",
},
commission: {
rate: "0.2",
maxRate: "0.3",
maxChangeRate: "0.1",
rate: "200000000000000000", // 0.2
maxRate: "300000000000000000", // 0.3
maxChangeRate: "100000000000000000", // 0.1
},
minSelfDelegation: "123",
delegatorAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
Expand All @@ -85,9 +85,9 @@ describe("AminoTypes", () => {
details: "...",
},
commission: {
rate: "0.2",
max_rate: "0.3",
max_change_rate: "0.1",
rate: "0.200000000000000000",
max_rate: "0.300000000000000000",
max_change_rate: "0.100000000000000000",
},
min_self_delegation: "123",
delegator_address: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
Expand Down Expand Up @@ -133,7 +133,7 @@ describe("AminoTypes", () => {
securityContact: "Hamburglar",
details: "...",
},
commissionRate: "0.2",
commissionRate: "21000000000000000", // 0.021
minSelfDelegation: "123",
validatorAddress: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
};
Expand All @@ -152,7 +152,7 @@ describe("AminoTypes", () => {
security_contact: "Hamburglar",
details: "...",
},
commission_rate: "0.2",
commission_rate: "0.021000000000000000",
min_self_delegation: "123",
validator_address: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
},
Expand Down Expand Up @@ -219,9 +219,9 @@ describe("AminoTypes", () => {
details: "...",
},
commission: {
rate: "0.2",
max_rate: "0.3",
max_change_rate: "0.1",
rate: "0.200000000000000000",
max_rate: "0.300000000000000000",
max_change_rate: "0.100000000000000000",
},
min_self_delegation: "123",
delegator_address: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
Expand All @@ -243,9 +243,9 @@ describe("AminoTypes", () => {
details: "...",
},
commission: {
rate: "0.2",
maxRate: "0.3",
maxChangeRate: "0.1",
rate: "200000000000000000", // 0.2
maxRate: "300000000000000000", // 0.3
maxChangeRate: "100000000000000000", // 0.1
},
minSelfDelegation: "123",
delegatorAddress: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
Expand Down Expand Up @@ -294,7 +294,7 @@ describe("AminoTypes", () => {
security_contact: "Hamburglar",
details: "...",
},
commission_rate: "0.2",
commission_rate: "0.050000000000000000", // 0.05
min_self_delegation: "123",
validator_address: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
},
Expand All @@ -308,7 +308,7 @@ describe("AminoTypes", () => {
securityContact: "Hamburglar",
details: "...",
},
commissionRate: "0.2",
commissionRate: "50000000000000000", // 0.05
minSelfDelegation: "123",
validatorAddress: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
};
Expand Down
28 changes: 20 additions & 8 deletions packages/stargate/src/modules/staking/aminomessages.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/naming-convention */
import { AminoMsg, Coin, decodeBech32Pubkey, encodeBech32Pubkey } from "@cosmjs/amino";
import { fromBase64, toBase64 } from "@cosmjs/encoding";
import { Decimal } from "@cosmjs/math";
import { assertDefinedAndNotNull } from "@cosmjs/utils";
import {
MsgBeginRedelegate,
Expand Down Expand Up @@ -28,6 +29,17 @@ interface Description {
readonly details: string;
}

function protoDecimalToJson(decimal: string): string {
const parsed = Decimal.fromAtomics(decimal, 18);
const [whole, fractional] = parsed.toString().split(".");
return `${whole}.${fractional.padEnd(18, "0")}`;
}

function jsonDecimalToProto(decimal: string): string {
const parsed = Decimal.fromUserInput(decimal, 18);
return parsed.atomics;
}

/** Creates a new validator. */
export interface AminoMsgCreateValidator extends AminoMsg {
readonly type: "cosmos-sdk/MsgCreateValidator";
Expand Down Expand Up @@ -175,9 +187,9 @@ export function createStakingAminoConverters(
details: description.details,
},
commission: {
rate: commission.rate,
max_rate: commission.maxRate,
max_change_rate: commission.maxChangeRate,
rate: protoDecimalToJson(commission.rate),
max_rate: protoDecimalToJson(commission.maxRate),
max_change_rate: protoDecimalToJson(commission.maxChangeRate),
},
min_self_delegation: minSelfDelegation,
delegator_address: delegatorAddress,
Expand Down Expand Up @@ -214,9 +226,9 @@ export function createStakingAminoConverters(
details: description.details,
},
commission: {
rate: commission.rate,
maxRate: commission.max_rate,
maxChangeRate: commission.max_change_rate,
rate: jsonDecimalToProto(commission.rate),
maxRate: jsonDecimalToProto(commission.max_rate),
maxChangeRate: jsonDecimalToProto(commission.max_change_rate),
},
minSelfDelegation: min_self_delegation,
delegatorAddress: delegator_address,
Expand Down Expand Up @@ -266,7 +278,7 @@ export function createStakingAminoConverters(
security_contact: description.securityContact,
details: description.details,
},
commission_rate: commissionRate,
commission_rate: protoDecimalToJson(commissionRate),
min_self_delegation: minSelfDelegation,
validator_address: validatorAddress,
};
Expand All @@ -284,7 +296,7 @@ export function createStakingAminoConverters(
securityContact: description.security_contact,
details: description.details,
},
commissionRate: commission_rate,
commissionRate: jsonDecimalToProto(commission_rate),
minSelfDelegation: min_self_delegation,
validatorAddress: validator_address,
}),
Expand Down

0 comments on commit dbd54f9

Please sign in to comment.