From 5070eb6c74a273edba042d31a8a4dd235492eb7c Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 12 Aug 2022 21:55:23 +0200 Subject: [PATCH 1/2] Organize asset code --- components/chainSelect/ChainSelect.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/components/chainSelect/ChainSelect.tsx b/components/chainSelect/ChainSelect.tsx index ed495b3..7ea3e7a 100644 --- a/components/chainSelect/ChainSelect.tsx +++ b/components/chainSelect/ChainSelect.tsx @@ -127,24 +127,25 @@ const ChainSelect = () => { const chainDisplayName = chainData["pretty_name"]; const registryName = chainOption.name; const explorerLink = getExplorerFromArray(chainData.explorers); - let asset = null; - let denom = ""; - let displayDenom = ""; - const displayDenomExponent = 6; - let gasPrice = ""; + let denom: string; + let displayDenom: string; + let displayDenomExponent: number; + let gasPrice: string; if (assetData.assets.length > 1) { denom = ""; displayDenom = ""; gasPrice = ""; + displayDenomExponent = 0; setChainError("Multiple token denoms available, enter manually"); setShowSettings(true); } else { - asset = assetData.assets[0]; + const asset = assetData.assets[0]; denom = asset.base; displayDenom = asset.symbol; gasPrice = `0.03${asset.base}`; + displayDenomExponent = 6; // TODO: determine dynamically } // test client connection From b95d88b10efa6316301e363d74874b77df5ca01c Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 12 Aug 2022 22:07:42 +0200 Subject: [PATCH 2/2] Get displayDenomExponent from chain registry --- components/chainSelect/ChainSelect.tsx | 6 ++++-- components/chainSelect/chainregistry.ts | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 components/chainSelect/chainregistry.ts diff --git a/components/chainSelect/ChainSelect.tsx b/components/chainSelect/ChainSelect.tsx index 7ea3e7a..0882bf1 100644 --- a/components/chainSelect/ChainSelect.tsx +++ b/components/chainSelect/ChainSelect.tsx @@ -9,6 +9,7 @@ import { useAppContext } from "../../context/AppContext"; import Select from "../inputs/Select"; import StackableContainer from "../layout/StackableContainer"; import { assert } from "@cosmjs/utils"; +import { ChainRegistryAsset } from "./chainregistry"; interface ChainOption { label: string; @@ -141,11 +142,12 @@ const ChainSelect = () => { setChainError("Multiple token denoms available, enter manually"); setShowSettings(true); } else { - const asset = assetData.assets[0]; + const asset: ChainRegistryAsset = assetData.assets[0]; denom = asset.base; displayDenom = asset.symbol; gasPrice = `0.03${asset.base}`; - displayDenomExponent = 6; // TODO: determine dynamically + const displayUnit = asset.denom_units.find((u) => u.denom == asset.display); + displayDenomExponent = displayUnit?.exponent ?? 6; } // test client connection diff --git a/components/chainSelect/chainregistry.ts b/components/chainSelect/chainregistry.ts new file mode 100644 index 0000000..ef1aa4a --- /dev/null +++ b/components/chainSelect/chainregistry.ts @@ -0,0 +1,25 @@ +/** + * See https://github.com/cosmos/chain-registry/blob/1e9ecde770951cab90f0853a624411d79af90b83/provenance/assetlist.json#L8-L12 + */ +export interface ChainRegistryDemonUnit { + denom: string; + exponent: number; + aliases: string[]; +} + +/** + * See https://github.com/cosmos/chain-registry/blob/1e9ecde770951cab90f0853a624411d79af90b83/provenance/assetlist.json#L5-L28 + */ +export interface ChainRegistryAsset { + description: string; + denom_units: ChainRegistryDemonUnit[]; + base: string; + name: string; + display: string; + symbol: string; + logo_URIs: { + png: string; + svg: string; + }; + coingecko_id: string; +}