From 6a48b3ebceb0778a82da0ffffd121e0081cad587 Mon Sep 17 00:00:00 2001 From: nick134 <76399455+nick134-bit@users.noreply.github.com> Date: Tue, 3 Sep 2024 16:55:49 +0200 Subject: [PATCH] fix: claim rewards in ampluna (#586) * fix: claim rewards in ampluna --- .../Pages/Trade/Liquidity/hooks/useClaim.ts | 61 ++++++++++++------- .../hooks/useLiquidityAlliancePositions.ts | 21 +++++-- .../Pages/Trade/Liquidity/hooks/useRewards.ts | 8 +-- .../Trade/Liquidity/hooks/useStakePosition.ts | 2 - constants/tokens.ts | 6 +- 5 files changed, 63 insertions(+), 35 deletions(-) diff --git a/components/Pages/Trade/Liquidity/hooks/useClaim.ts b/components/Pages/Trade/Liquidity/hooks/useClaim.ts index c3675570..7932eb5e 100644 --- a/components/Pages/Trade/Liquidity/hooks/useClaim.ts +++ b/components/Pages/Trade/Liquidity/hooks/useClaim.ts @@ -12,10 +12,10 @@ import { createGasFee } from 'services/treasuryService' import { chainState } from 'state/chainState' import { createExecuteMessage } from 'util/messages/index' -import { useFetchLiquidityAlliances } from './useLiquidityAlliancePositions' +import { useAllianceRewards, useFetchLiquidityAlliances } from './useLiquidityAlliancePositions' export const useClaim = (pool: PoolEntityType) => { - console.log('Pool: ', pool) + const { data: allianceRewards } = useAllianceRewards() const { walletChainName } = useRecoilValue(chainState) const { address } = useChain(walletChainName) const { signingClient, injectiveSigningClient } = useClients(walletChainName) @@ -29,46 +29,65 @@ export const useClaim = (pool: PoolEntityType) => { if (isLoading || !position?.length) { return null } - return position[0]?.bribeMarket + const reward_asset = position[0]?.config.reward_info.native + return { + reward_asset, + reward_address: reward_asset?.split('/')[1], + config: position[0]?.config, + bribeMarket: position[0]?.bribeMarket + } }, [position, isLoading]) - let msg = null + let msg = [] if (!bribeMarket) { - msg = - createExecuteMessage({ - message: { - claim: {}, - }, - senderAddress: address, - contractAddress: pool.staking_address, - funds: [], - }) + msg.push( + createExecuteMessage({ + message: { + claim: {}, + }, + senderAddress: address, + contractAddress: pool.staking_address, + funds: [], + })) } else { - msg = createExecuteMessage({ + msg.push(createExecuteMessage({ message: { claim_reward: { native: pool.lp_token, }, }, senderAddress: address, - contractAddress: bribeMarket, + contractAddress: bribeMarket.bribeMarket, funds: [], - }) + })) } const { mutate: submit, ...state } = useMutation({ mutationFn: async () => { + if (bribeMarket) { + const reward = allianceRewards?.find((reward) => reward.staked_asset_share.info.native === pool.lp_token) + const balance = await signingClient.getBalance(address, bribeMarket.reward_asset) + const amount = { amount: String(Number(balance.amount) + Number(reward?.reward_asset.amount)), denom: balance.denom} + msg.push(createExecuteMessage({ + message: { + withdraw: {}, + }, + senderAddress: address, + contractAddress: bribeMarket.reward_address, + funds: [amount], + })) + } if (injectiveSigningClient && await signingClient.getChainId() === ChainId.injective) { const injectiveTxData = await injectiveSigningClient.sign( - address, [msg], await createGasFee( - injectiveSigningClient, address, [msg], + address, msg, await createGasFee( + injectiveSigningClient, address, msg, ), ADV_MEMO, ) return await signingClient.broadcastTx(TxRaw.encode(injectiveTxData).finish()) } return await signingClient.signAndBroadcast( - address, [msg], await createGasFee( - signingClient, address, [msg], + address, msg, await createGasFee( + signingClient, address, msg, ), ADV_MEMO, ) }, @@ -81,5 +100,5 @@ export const useClaim = (pool: PoolEntityType) => { ...state, ...tx, }), - [tx, state, submit]) + [tx, state, submit]) } diff --git a/components/Pages/Trade/Liquidity/hooks/useLiquidityAlliancePositions.ts b/components/Pages/Trade/Liquidity/hooks/useLiquidityAlliancePositions.ts index 227d1fc2..f42e4d93 100644 --- a/components/Pages/Trade/Liquidity/hooks/useLiquidityAlliancePositions.ts +++ b/components/Pages/Trade/Liquidity/hooks/useLiquidityAlliancePositions.ts @@ -89,9 +89,15 @@ const fetchWhitelistedAllianceTokens = async ( const assets = await cosmWasmClient?.queryContractSmart(bribeMarket, { whitelisted_assets: {}, }) + const config = await cosmWasmClient?.queryContractSmart(bribeMarket, { + config: {}, + }) return assets.map((asset) => ({ + reward_asset: config.reward_info.native, + reward_contract: config.reward_info.native.split('/')[1], token: asset?.cw20 || asset?.native, bribeMarket, + config, })) })) @@ -110,8 +116,10 @@ export const useFetchLiquidityAlliances = (searchForToken?: string) => { cosmWasmClient, chainId, searchForToken, ), { - refetchInterval: 9000, + refetchInterval: 1 * 60 * 1000, enabled: chainId === 'phoenix-1', + cacheTime: 12 * 60 * 60 * 1000, + staleTime: 6 * 60 * 1000, }, ) } @@ -128,10 +136,13 @@ export const fetchAllAllianceRewards = async ( all_pending_rewards: { address }, }) for (const asset of assets) { - if (asset.reward_asset.info.native == 'factory/terra16l43xt2uq09yvz4axg73n8rtm0qte9lremdwm6ph0e35r2jnm43qnl8h53/zluna') { - asset.reward_asset.info.denom = 'uluna' - } asset.reward_asset.bribe_market = bribeMarket + if (asset.reward_asset.info.native.endsWith('zluna')) { + const claimAddress = asset.reward_asset.info.native.split('/')[1] + //ampLuna + asset.reward_asset.info.contract_addr = 'terra1ecgazyd0waaj3g7l9cmy5gulhxkps2gmxu9ghducvuypjq68mq2s5lvsct' + asset.reward_asset.info.claim_addr = claimAddress + } } return assets })) @@ -149,7 +160,7 @@ export const useAllianceRewards = () => { cosmWasmClient, address, chainId, ), { - refetchInterval: 9000, + refetchInterval: 10000, enabled: chainId === 'phoenix-1' && Boolean(address), }, ) diff --git a/components/Pages/Trade/Liquidity/hooks/useRewards.ts b/components/Pages/Trade/Liquidity/hooks/useRewards.ts index 80a485aa..18018516 100644 --- a/components/Pages/Trade/Liquidity/hooks/useRewards.ts +++ b/components/Pages/Trade/Liquidity/hooks/useRewards.ts @@ -111,7 +111,6 @@ const useRewards = (pool: PoolEntityType): RewardsResult => { return useMemo(() => { const rewardsWithToken: RewardData[] = [] aggregatedRewards?.forEach((reward) => { - console.log('Reward: ', reward) // Cw20 token if (reward.info?.token) { const t = tokenList?.tokens.find((token) => token.denom === reward.info.token.contract_addr) @@ -142,12 +141,12 @@ const useRewards = (pool: PoolEntityType): RewardsResult => { dollarValue, }) } - if (reward.info?.native && reward.bribe_market) { - const t = tokenList?.tokens.find((token) => token.denom === reward.info.denom) + if (reward.info?.contract_addr && reward.bribe_market) { + const t = tokenList?.tokens.find((token) => token.denom === reward.info.contract_addr) const amount = fromChainAmount(reward.amount, t?.decimals) const dollarValue = num(amount). times(prices?.[t?.symbol] || 0). - dp(4). + dp(2). toNumber() rewardsWithToken.push({ ...t, @@ -157,7 +156,6 @@ const useRewards = (pool: PoolEntityType): RewardsResult => { }) } }) - console.log('Rewards with token: ', rewardsWithToken) return { rewards: rewardsWithToken, totalValue: rewardsWithToken?. diff --git a/components/Pages/Trade/Liquidity/hooks/useStakePosition.ts b/components/Pages/Trade/Liquidity/hooks/useStakePosition.ts index b86bfd71..9b0c7478 100644 --- a/components/Pages/Trade/Liquidity/hooks/useStakePosition.ts +++ b/components/Pages/Trade/Liquidity/hooks/useStakePosition.ts @@ -62,8 +62,6 @@ const useStake = ({ amount, contract }: StakeProps) => { return useStakeTransaction({ enabled: Boolean(msgs.length && bribeMarket), msgs, - encodedMsgs: [], - amount, senderAddress: address, signingClient, }) diff --git a/constants/tokens.ts b/constants/tokens.ts index 7ed88b8a..f99425e0 100644 --- a/constants/tokens.ts +++ b/constants/tokens.ts @@ -2,7 +2,9 @@ export const B_WHALE_TOKEN_SYMBOL = 'bWHALE' export const AMP_WHALE_TOKEN_SYMBOL = 'ampWHALE' export const WHALE_TOKEN_SYMBOL = 'WHALE' -export const TERRA2_BRIBE_MARKETS = { project: 'terra1awq6t7jfakg9wfjn40fk3wzwmd57mvrqtt3a39z9rmet7wdjj3ysgw3lpa', +export const TERRA2_BRIBE_MARKETS = { + project: 'terra1awq6t7jfakg9wfjn40fk3wzwmd57mvrqtt3a39z9rmet7wdjj3ysgw3lpa', bluechip: 'terra14mmvqn0kthw6sre75vku263lafn5655mkjdejqjedjga4cw0qx2qlf4arv', - stable: 'terra1v399cx9drllm70wxfsgvfe694tdsd9x96p9ha36w7muffe4znlusqswspq' } + stable: 'terra1v399cx9drllm70wxfsgvfe694tdsd9x96p9ha36w7muffe4znlusqswspq' +} export const POOL_TOKENS_DECIMALS = 6