Skip to content

Commit 2f4f662

Browse files
fix: displaying housefire nam in mainnet osmosis assets (#2182)
1 parent 97232e7 commit 2f4f662

File tree

2 files changed

+44
-20
lines changed

2 files changed

+44
-20
lines changed

apps/namadillo/src/atoms/integrations/atoms.ts

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { AssetList, Chain } from "@chain-registry/types";
22
import { DeliverTxResponse, SigningStargateClient } from "@cosmjs/stargate";
33
import { ExtensionKey } from "@namada/types";
44
import { defaultAccountAtom } from "atoms/accounts";
5-
import { chainAtom, chainTokensAtom } from "atoms/chain";
5+
import { chainAtom, chainParametersAtom, chainTokensAtom } from "atoms/chain";
66
import { defaultServerConfigAtom, settingsAtom } from "atoms/settings";
77
import { queryDependentFn } from "atoms/utils";
88
import BigNumber from "bignumber.js";
@@ -79,19 +79,28 @@ export const broadcastIbcTransactionAtom = atomWithMutation(() => {
7979

8080
export const assetBalanceAtomFamily = atomFamily(
8181
({ chain, walletAddress, assets }: AssetBalanceAtomParams) => {
82-
return atomWithQuery<AddressWithAssetAndAmountMap>(() => ({
83-
queryKey: ["assets", walletAddress, chain?.chain_id, assets],
84-
...queryDependentFn(async () => {
85-
return await queryAndStoreRpc(chain!, async (rpc: string) => {
86-
const assetsBalances = await queryAssetBalances(walletAddress!, rpc);
87-
return await mapCoinsToAssets(
88-
assetsBalances,
89-
chain!.chain_id,
90-
ibcAddressToDenomTrace(rpc)
91-
);
92-
});
93-
}, [!!walletAddress, !!chain]),
94-
}));
82+
return atomWithQuery<AddressWithAssetAndAmountMap>((get) => {
83+
const chainParametersQuery = get(chainParametersAtom);
84+
85+
return {
86+
queryKey: ["assets", walletAddress, chain?.chain_id, assets],
87+
...queryDependentFn(async () => {
88+
return await queryAndStoreRpc(chain!, async (rpc: string) => {
89+
const assetsBalances = await queryAssetBalances(
90+
walletAddress!,
91+
rpc
92+
);
93+
94+
return await mapCoinsToAssets(
95+
assetsBalances,
96+
chain!.chain_id,
97+
chainParametersQuery.data!.chainId,
98+
ibcAddressToDenomTrace(rpc)
99+
);
100+
});
101+
}, [!!walletAddress, !!chain, chainParametersQuery.isSuccess]),
102+
};
103+
});
95104
},
96105
(prev, current) => {
97106
return Boolean(

apps/namadillo/src/atoms/integrations/functions.ts

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,8 @@ const findCounterpartChainName = (
162162
const tryDenomToIbcAsset = async (
163163
denom: string,
164164
ibcAddressToDenomTrace: (address: string) => Promise<DenomTrace | undefined>,
165-
chainName: string
165+
chainName: string,
166+
namadaChainName: string
166167
): Promise<Asset | undefined> => {
167168
const denomTrace = await ibcAddressToDenomTrace(denom);
168169
if (typeof denomTrace === "undefined") {
@@ -171,10 +172,14 @@ const tryDenomToIbcAsset = async (
171172

172173
const { path, baseDenom } = denomTrace;
173174

174-
const assetOnRegistry = tryDenomToRegistryAsset(
175-
baseDenom,
176-
registry.assets.map((assetListEl) => assetListEl.assets).flat()
177-
);
175+
// We only check assets for the selected chain i.e. osmosis and current namada chain,
176+
// this prevents displaying housefire produced nam on mainnet namada
177+
const assets = assetLookup(chainName) || [];
178+
const namadaAssets = assetLookup(namadaChainName) || [];
179+
const assetOnRegistry = tryDenomToRegistryAsset(baseDenom, [
180+
...assets,
181+
...namadaAssets,
182+
]);
178183

179184
if (assetOnRegistry) {
180185
return assetOnRegistry;
@@ -220,6 +225,7 @@ const findOriginalAsset = async (
220225
coin: Coin,
221226
assets: Asset[],
222227
ibcAddressToDenomTrace: (address: string) => Promise<DenomTrace | undefined>,
228+
namadaChainName: string,
223229
chainName?: string
224230
): Promise<AddressWithAssetAndAmount> => {
225231
const { minDenomAmount, denom } = coin;
@@ -230,7 +236,12 @@ const findOriginalAsset = async (
230236
}
231237

232238
if (!asset && chainName) {
233-
asset = await tryDenomToIbcAsset(denom, ibcAddressToDenomTrace, chainName);
239+
asset = await tryDenomToIbcAsset(
240+
denom,
241+
ibcAddressToDenomTrace,
242+
chainName,
243+
namadaChainName
244+
);
234245
}
235246

236247
if (!asset) {
@@ -257,9 +268,12 @@ export const findChainById = (chainId: string): Chain | undefined => {
257268
export const mapCoinsToAssets = async (
258269
coins: Coin[],
259270
chainId: string,
271+
namadaChainId: string,
260272
ibcAddressToDenomTrace: (address: string) => Promise<DenomTrace | undefined>
261273
): Promise<AddressWithAssetAndAmountMap> => {
262274
const chainName = findChainById(chainId)?.chain_name;
275+
// Namada chain name should be always available
276+
const namadaChainName = findChainById(namadaChainId)?.chain_name as string;
263277
const assets = mapUndefined(assetLookup, chainName);
264278
const results = await Promise.allSettled(
265279
coins.map(
@@ -268,6 +282,7 @@ export const mapCoinsToAssets = async (
268282
coin,
269283
assets || [],
270284
ibcAddressToDenomTrace,
285+
namadaChainName,
271286
chainName
272287
)
273288
)

0 commit comments

Comments
 (0)