From 09d0ca5fe3b072befd25e29f450b53a4a28b6975 Mon Sep 17 00:00:00 2001 From: chaojun Date: Wed, 3 Jun 2026 14:17:36 +0800 Subject: [PATCH 1/2] Add HOLLAR balance to collectives fellowship finance treasury --- .../assets/icons/assethub/Hollar.svg | 9 +++ .../assethubMigrationAssets/known/polkadot.js | 6 ++ .../overview/fellowship/finance/treasury.jsx | 80 +++++++++++++++---- 3 files changed, 79 insertions(+), 16 deletions(-) create mode 100644 packages/next-common/assets/icons/assethub/Hollar.svg diff --git a/packages/next-common/assets/icons/assethub/Hollar.svg b/packages/next-common/assets/icons/assethub/Hollar.svg new file mode 100644 index 0000000000..c46ad7950c --- /dev/null +++ b/packages/next-common/assets/icons/assethub/Hollar.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/packages/next-common/components/assethubMigrationAssets/known/polkadot.js b/packages/next-common/components/assethubMigrationAssets/known/polkadot.js index ab6785fd8a..7f3e952548 100644 --- a/packages/next-common/components/assethubMigrationAssets/known/polkadot.js +++ b/packages/next-common/components/assethubMigrationAssets/known/polkadot.js @@ -1,4 +1,5 @@ import dynamic from "next/dynamic"; +import HollarSvg from "next-common/assets/icons/assethub/Hollar.svg"; const AssetIconDed = dynamic(() => import("@osn/icons/subsquare/AssetIconDed")); const AssetIconDota = dynamic(() => @@ -40,6 +41,11 @@ const knownPolkadotAssetHubAssets = [ assetId: 23, icon: AssetIconPink, }, + { + symbol: "HOLLAR", + assetId: 222, + icon: HollarSvg, + }, ]; export default knownPolkadotAssetHubAssets; diff --git a/packages/next-common/components/overview/fellowship/finance/treasury.jsx b/packages/next-common/components/overview/fellowship/finance/treasury.jsx index 097429a36c..12b092faa3 100644 --- a/packages/next-common/components/overview/fellowship/finance/treasury.jsx +++ b/packages/next-common/components/overview/fellowship/finance/treasury.jsx @@ -1,11 +1,22 @@ import SummaryItem from "next-common/components/summary/layout/item"; -import Link from "next-common/components/link"; import LoadableContent from "next-common/components/common/loadableContent"; import NativeTokenSymbolAsset from "next-common/components/summary/polkadotTreasurySummary/common/nativeTokenSymbolAsset"; import FiatPriceLabel from "next-common/components/summary/polkadotTreasurySummary/common/fiatPriceLabel"; import { StatemintFellowShipTreasuryAccount } from "next-common/hooks/treasury/useAssetHubTreasuryBalance"; import { useAssetHubApi } from "next-common/hooks/chain/useAssetHubApi"; import useSubStorage from "next-common/hooks/common/useSubStorage"; +import { toPrecision } from "next-common/utils"; +import TokenSymbolAsset from "next-common/components/summary/polkadotTreasurySummary/common/tokenSymbolAsset"; +import { useAsync } from "react-use"; + +const HOLLAR_FOREIGN_ASSET_KEY = { + parents: 1, + interior: { + X2: [{ Parachain: 2034 }, { GeneralIndex: "222" }], + }, +}; + +const HOLLAR_DECIMALS = 18; function useFetchFellowshipTreasuryBalance() { const api = useAssetHubApi(); @@ -21,31 +32,68 @@ function useFetchFellowshipTreasuryBalance() { return { balance: result?.data?.free?.toString() || 0, loading }; } +function useFetchFellowshipTreasuryHollarBalance() { + const api = useAssetHubApi(); + + const { loading, value } = useAsync(async () => { + if (!api) { + return; + } + + const result = await api?.query?.foreignAssets?.account( + HOLLAR_FOREIGN_ASSET_KEY, + StatemintFellowShipTreasuryAccount, + ); + + return result?.toJSON()?.balance || "0"; + }, [api]); + + return { balance: value || "0", loading }; +} + +function ExternalLink({ href, children }) { + return ( + + {children} + + ); +} + export default function FellowshipTreasury() { - const { balance, loading } = useFetchFellowshipTreasuryBalance(); + const { balance: dotBalance, loading: dotLoading } = + useFetchFellowshipTreasuryBalance(); + const { balance: hollarBalance, loading: hollarLoading } = + useFetchFellowshipTreasuryHollarBalance(); const Title = ( - <> - - Treasury ↗ - - + + Treasury ↗ + ); return ( - +
- + +
+
+
-
- +
+
From e3cdd6f6633f73e415f777838fabb5f0a8298fda Mon Sep 17 00:00:00 2001 From: chaojun Date: Wed, 3 Jun 2026 14:52:35 +0800 Subject: [PATCH 2/2] feat: add HOLLAR to fellowship finance salary --- .../overview/fellowship/finance/common.js | 44 +++++++++++++++++ .../overview/fellowship/finance/salary.jsx | 40 +++++++++------- .../overview/fellowship/finance/treasury.jsx | 47 ++----------------- .../common/fiatPriceLabel.jsx | 4 +- packages/next-common/utils/consts/asset.js | 1 + 5 files changed, 75 insertions(+), 61 deletions(-) create mode 100644 packages/next-common/components/overview/fellowship/finance/common.js diff --git a/packages/next-common/components/overview/fellowship/finance/common.js b/packages/next-common/components/overview/fellowship/finance/common.js new file mode 100644 index 0000000000..065085e7d0 --- /dev/null +++ b/packages/next-common/components/overview/fellowship/finance/common.js @@ -0,0 +1,44 @@ +import { useAssetHubApi } from "next-common/hooks/chain/useAssetHubApi"; +import { SYMBOL_DECIMALS } from "next-common/utils/consts/asset"; +import { useAsync } from "react-use"; + +export const HOLLAR_FOREIGN_ASSET_KEY = { + parents: 1, + interior: { + X2: [{ Parachain: 2034 }, { GeneralIndex: "222" }], + }, +}; + +export const HOLLAR_DECIMALS = SYMBOL_DECIMALS.HOLLAR; + +export function useFetchHollarBalance(address) { + const api = useAssetHubApi(); + + const { loading, value } = useAsync(async () => { + if (!api) { + return; + } + + const result = await api?.query?.foreignAssets?.account( + HOLLAR_FOREIGN_ASSET_KEY, + address, + ); + + return result?.toJSON()?.balance || "0"; + }, [api, address]); + + return { balance: value || "0", loading }; +} + +export function ExternalLink({ href, children }) { + return ( + + {children} + + ); +} diff --git a/packages/next-common/components/overview/fellowship/finance/salary.jsx b/packages/next-common/components/overview/fellowship/finance/salary.jsx index 12c3bf5b49..336152de18 100644 --- a/packages/next-common/components/overview/fellowship/finance/salary.jsx +++ b/packages/next-common/components/overview/fellowship/finance/salary.jsx @@ -1,5 +1,4 @@ import SummaryItem from "next-common/components/summary/layout/item"; -import Link from "next-common/components/link"; import LoadableContent from "next-common/components/common/loadableContent"; import FiatPriceLabel from "next-common/components/summary/polkadotTreasurySummary/common/fiatPriceLabel"; import useQueryFellowshipSalaryBalance, { @@ -8,36 +7,45 @@ import useQueryFellowshipSalaryBalance, { import { toPrecision } from "next-common/utils"; import { SYMBOL_DECIMALS } from "next-common/utils/consts/asset"; import TokenSymbolAsset from "next-common/components/summary/polkadotTreasurySummary/common/tokenSymbolAsset"; +import { HOLLAR_DECIMALS, useFetchHollarBalance, ExternalLink } from "./common"; export default function FellowshipSalary() { - const { balance, isLoading } = useQueryFellowshipSalaryBalance("USDT"); + const { balance: usdtBalance, isLoading: usdtLoading } = + useQueryFellowshipSalaryBalance("USDT"); + const { balance: hollarBalance, loading: hollarLoading } = + useFetchHollarBalance(StatemintFellowShipSalaryAccount); const Title = ( - <> - - Salary ↗ - - + + Salary ↗ + ); return ( - +
- +
-
+
+
+ +
diff --git a/packages/next-common/components/overview/fellowship/finance/treasury.jsx b/packages/next-common/components/overview/fellowship/finance/treasury.jsx index 12b092faa3..cee61134c2 100644 --- a/packages/next-common/components/overview/fellowship/finance/treasury.jsx +++ b/packages/next-common/components/overview/fellowship/finance/treasury.jsx @@ -7,16 +7,7 @@ import { useAssetHubApi } from "next-common/hooks/chain/useAssetHubApi"; import useSubStorage from "next-common/hooks/common/useSubStorage"; import { toPrecision } from "next-common/utils"; import TokenSymbolAsset from "next-common/components/summary/polkadotTreasurySummary/common/tokenSymbolAsset"; -import { useAsync } from "react-use"; - -const HOLLAR_FOREIGN_ASSET_KEY = { - parents: 1, - interior: { - X2: [{ Parachain: 2034 }, { GeneralIndex: "222" }], - }, -}; - -const HOLLAR_DECIMALS = 18; +import { HOLLAR_DECIMALS, useFetchHollarBalance, ExternalLink } from "./common"; function useFetchFellowshipTreasuryBalance() { const api = useAssetHubApi(); @@ -32,43 +23,11 @@ function useFetchFellowshipTreasuryBalance() { return { balance: result?.data?.free?.toString() || 0, loading }; } -function useFetchFellowshipTreasuryHollarBalance() { - const api = useAssetHubApi(); - - const { loading, value } = useAsync(async () => { - if (!api) { - return; - } - - const result = await api?.query?.foreignAssets?.account( - HOLLAR_FOREIGN_ASSET_KEY, - StatemintFellowShipTreasuryAccount, - ); - - return result?.toJSON()?.balance || "0"; - }, [api]); - - return { balance: value || "0", loading }; -} - -function ExternalLink({ href, children }) { - return ( - - {children} - - ); -} - export default function FellowshipTreasury() { const { balance: dotBalance, loading: dotLoading } = useFetchFellowshipTreasuryBalance(); const { balance: hollarBalance, loading: hollarLoading } = - useFetchFellowshipTreasuryHollarBalance(); + useFetchHollarBalance(StatemintFellowShipTreasuryAccount); const Title = (
- +
diff --git a/packages/next-common/components/summary/polkadotTreasurySummary/common/fiatPriceLabel.jsx b/packages/next-common/components/summary/polkadotTreasurySummary/common/fiatPriceLabel.jsx index a1d24688eb..682351861a 100644 --- a/packages/next-common/components/summary/polkadotTreasurySummary/common/fiatPriceLabel.jsx +++ b/packages/next-common/components/summary/polkadotTreasurySummary/common/fiatPriceLabel.jsx @@ -10,6 +10,7 @@ export default function FiatPriceLabel({ free = 0, usdcBalance = 0, usdtBalance = 0, + hollarBalance = 0, }) { const { price: fiatPrice } = useFiatPriceSnapshot(); const { decimals } = useChainSettings(); @@ -18,7 +19,8 @@ export default function FiatPriceLabel({ .dividedBy(Math.pow(10, decimals)) .multipliedBy(fiatPrice) .plus(toPrecision(usdcBalance, SYMBOL_DECIMALS.USDC)) - .plus(toPrecision(usdtBalance, SYMBOL_DECIMALS.USDT)); + .plus(toPrecision(usdtBalance, SYMBOL_DECIMALS.USDT)) + .plus(toPrecision(hollarBalance, SYMBOL_DECIMALS.HOLLAR)); return (
diff --git a/packages/next-common/utils/consts/asset.js b/packages/next-common/utils/consts/asset.js index c74946daac..2f74ee46b8 100644 --- a/packages/next-common/utils/consts/asset.js +++ b/packages/next-common/utils/consts/asset.js @@ -2,6 +2,7 @@ export const SYMBOL_DECIMALS = { DOT: 10, USDT: 6, USDC: 6, + HOLLAR: 18, }; export const ASSET_DETAIL_LINKS = {