From 9d0054802ce5a44270113c1655db7e0c7098ea31 Mon Sep 17 00:00:00 2001 From: Danny Delott Date: Tue, 11 Feb 2025 08:45:39 -0800 Subject: [PATCH 1/2] Only request miles for gnosis --- .../src/ui/portfolio/rewards/RewardsTableDesktop.tsx | 6 ++++-- .../src/ui/rewards/hooks/useClaimableRewards.ts | 11 ++++++----- .../src/ui/rewards/hooks/useClaimedRewards.ts | 3 +++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/apps/hyperdrive-trading/src/ui/portfolio/rewards/RewardsTableDesktop.tsx b/apps/hyperdrive-trading/src/ui/portfolio/rewards/RewardsTableDesktop.tsx index 19aad9c21..5d0256fd6 100644 --- a/apps/hyperdrive-trading/src/ui/portfolio/rewards/RewardsTableDesktop.tsx +++ b/apps/hyperdrive-trading/src/ui/portfolio/rewards/RewardsTableDesktop.tsx @@ -247,6 +247,7 @@ function ClaimRewardsButton({ rewardTokenAddress: reward.rewardTokenAddress, claimContractAddress: reward.claimContractAddress, account, + chainId: reward.chainId, }); const appConfig = useAppConfigForConnectedChain({ strict: false }); @@ -273,7 +274,7 @@ function ClaimRewardsButton({ disabled className="daisy-btn daisy-btn-disabled daisy-btn-ghost rounded-full bg-gray-600 font-inter" > - Claim Reward + Claim Rewards ); } @@ -300,7 +301,7 @@ function ClaimRewardsButton({ )} onClick={claim} > - Claim Reward + Claim Rewards ); } @@ -323,6 +324,7 @@ function ClaimableAmount({ rewardTokenAddress: reward.rewardTokenAddress, claimContractAddress: reward.claimContractAddress, account, + chainId: reward.chainId, }); return ( diff --git a/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts b/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts index e74b7f24e..9ac7134ea 100644 --- a/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts +++ b/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts @@ -2,12 +2,13 @@ import { parseFixed } from "@delvtech/fixed-point-wasm"; import { MerklApi } from "@merkl/api"; import { useQuery } from "@tanstack/react-query"; import { makeQueryKey2 } from "src/base/makeQueryKey"; +import { rewardsFork } from "src/chains/rewardsFork"; import { HyperdriveRewardsApi, Reward, } from "src/rewards/generated/HyperdriveRewardsApi"; import { Address, Hash } from "viem"; -import { base, gnosis, linea, mainnet } from "viem/chains"; +import { gnosis } from "viem/chains"; import { usePublicClient } from "wagmi"; export function useClaimableRewards({ @@ -58,6 +59,7 @@ async function fetchHyperdriveRewardApi(account: Address): Promise { // TODO: Remove this once claimbableAmount is no longer formatted server side return response.rewards.map((r) => ({ ...r, + chainId: rewardsFork.id, claimableAmount: parseFixed(r.claimableAmount).bigint.toString(), })); } catch (error: any) { @@ -84,14 +86,13 @@ const merkl = MerklApi("https://api.merkl.xyz").v4; * See: https://app.merkl.xyz/status */ const MerklDistributorsByChain: Record = { - [mainnet.id]: "0x3Ef3D8bA38EBe18DB133cEc108f4D14CE00Dd9Ae", [gnosis.id]: "0x3Ef3D8bA38EBe18DB133cEc108f4D14CE00Dd9Ae", - [base.id]: "0x3Ef3D8bA38EBe18DB133cEc108f4D14CE00Dd9Ae", - [linea.id]: "0x3Ef3D8bA38EBe18DB133cEc108f4D14CE00Dd9Ae", }; async function fetchMileRewards(account: Address): Promise { - const chainIds = [mainnet.id, gnosis.id, linea.id, base.id]; + // Merkl.xyz distributes Miles on Gnosis chain only. They do a calculation + // across every hyperdrive to make sure points are counted across all chains. + const chainIds = [gnosis.id]; // Request miles earned on each chain. We have to call this once per chain // since the merkl api is buggy, despite accepting an array of chain ids. If diff --git a/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimedRewards.ts b/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimedRewards.ts index 9d791e800..2fa768b1b 100644 --- a/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimedRewards.ts +++ b/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimedRewards.ts @@ -5,10 +5,12 @@ import { useReadContract } from "wagmi"; export function useClaimedRewards({ rewardTokenAddress, claimContractAddress, + chainId, account, }: { rewardTokenAddress: Address | undefined; claimContractAddress: Address | undefined; + chainId: number | undefined; account: Address | undefined; }): { claimed: bigint | undefined; status: "loading" | "error" | "success" } { const enabled = !!rewardTokenAddress && !!account; @@ -16,6 +18,7 @@ export function useClaimedRewards({ address: claimContractAddress, abi: hyperdriveRewardsAbi, functionName: "claimed", + chainId, args: enabled ? [account, rewardTokenAddress] : undefined, query: { enabled, From 951f0be7acc5e32e80027e0bea5a80bebfda36ee Mon Sep 17 00:00:00 2001 From: Danny Delott Date: Tue, 11 Feb 2025 08:47:37 -0800 Subject: [PATCH 2/2] Fix copy on miles tooltip --- .../src/ui/rewards/hooks/useClaimableRewards.ts | 5 +++-- .../src/rewards/resolvers/hypervueMiles.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts b/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts index 9ac7134ea..ce2dcfb72 100644 --- a/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts +++ b/apps/hyperdrive-trading/src/ui/rewards/hooks/useClaimableRewards.ts @@ -90,8 +90,9 @@ const MerklDistributorsByChain: Record = { }; async function fetchMileRewards(account: Address): Promise { - // Merkl.xyz distributes Miles on Gnosis chain only. They do a calculation - // across every hyperdrive to make sure points are counted across all chains. + // Merkl.xyz accumulates Miles across all chains and hyperdrives onto Gnosis + // chain only. This makes things easier for turning them into HD later if + // they're all just on one chain. const chainIds = [gnosis.id]; // Request miles earned on each chain. We have to call this once per chain diff --git a/packages/hyperdrive-appconfig/src/rewards/resolvers/hypervueMiles.ts b/packages/hyperdrive-appconfig/src/rewards/resolvers/hypervueMiles.ts index 324d31bb5..47cbdceb4 100644 --- a/packages/hyperdrive-appconfig/src/rewards/resolvers/hypervueMiles.ts +++ b/packages/hyperdrive-appconfig/src/rewards/resolvers/hypervueMiles.ts @@ -9,7 +9,7 @@ export const fetchHypervueMilesRewards: RewardResolver = async () => { { type: "info", iconUrl: HyperVueMilesIconUrl, - message: "Earns 1 Mile per day for every $1 supplied", + message: "Earns 1 Mile per year for every $1 supplied", }, ]; };