Fix decimal handling for Amino JSON of MsgCreateValidator and MsgEditValidator
This commit is contained in:
parent
e92534dcbf
commit
dbd54f9e24
@ -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",
|
||||
@ -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",
|
||||
@ -133,7 +133,7 @@ describe("AminoTypes", () => {
|
||||
securityContact: "Hamburglar",
|
||||
details: "...",
|
||||
},
|
||||
commissionRate: "0.2",
|
||||
commissionRate: "21000000000000000", // 0.021
|
||||
minSelfDelegation: "123",
|
||||
validatorAddress: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||
};
|
||||
@ -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",
|
||||
},
|
||||
@ -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",
|
||||
@ -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",
|
||||
@ -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",
|
||||
},
|
||||
@ -308,7 +308,7 @@ describe("AminoTypes", () => {
|
||||
securityContact: "Hamburglar",
|
||||
details: "...",
|
||||
},
|
||||
commissionRate: "0.2",
|
||||
commissionRate: "50000000000000000", // 0.05
|
||||
minSelfDelegation: "123",
|
||||
validatorAddress: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
|
||||
};
|
||||
|
||||
@ -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,
|
||||
@ -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";
|
||||
@ -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,
|
||||
@ -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,
|
||||
@ -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,
|
||||
};
|
||||
@ -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,
|
||||
}),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user