Mp 3105 build rewards center for v 2 (#389)
* MP-3105: finished rewards center * tidy: refactor * fix: rerolled generated types * fix: revert types to before * refactor: addressed feedback
This commit is contained in:
parent
78bf3068b4
commit
160f8da6aa
24
src/api/incentives/getUnclaimedRewards.ts
Normal file
24
src/api/incentives/getUnclaimedRewards.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { getIncentivesQueryClient } from 'api/cosmwasm-client'
|
||||||
|
import { BNCoin } from 'types/classes/BNCoin'
|
||||||
|
|
||||||
|
export default async function getUnclaimedRewards(
|
||||||
|
user: string,
|
||||||
|
accountId: string,
|
||||||
|
): Promise<BNCoin[]> {
|
||||||
|
try {
|
||||||
|
const client = await getIncentivesQueryClient()
|
||||||
|
const unclaimedRewards = await client.userUnclaimedRewards({
|
||||||
|
user,
|
||||||
|
accountId,
|
||||||
|
limit: 100,
|
||||||
|
})
|
||||||
|
|
||||||
|
if (unclaimedRewards.length === 0) return []
|
||||||
|
|
||||||
|
return await Promise.all(
|
||||||
|
unclaimedRewards.map((reward) => new BNCoin({ denom: reward.denom, amount: reward.amount })),
|
||||||
|
)
|
||||||
|
} catch (ex) {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import { isDesktop } from 'react-device-detect'
|
|||||||
import AccountMenu from 'components/Account/AccountMenu'
|
import AccountMenu from 'components/Account/AccountMenu'
|
||||||
import EscButton from 'components/Button/EscButton'
|
import EscButton from 'components/Button/EscButton'
|
||||||
import DesktopNavigation from 'components/Navigation/DesktopNavigation'
|
import DesktopNavigation from 'components/Navigation/DesktopNavigation'
|
||||||
|
import RewardsCenter from 'components/RewardsCenter'
|
||||||
import Settings from 'components/Settings'
|
import Settings from 'components/Settings'
|
||||||
import Wallet from 'components/Wallet'
|
import Wallet from 'components/Wallet'
|
||||||
import useStore from 'store'
|
import useStore from 'store'
|
||||||
@ -50,6 +51,7 @@ export default function DesktopHeader() {
|
|||||||
) : (
|
) : (
|
||||||
<div className='flex gap-4'>
|
<div className='flex gap-4'>
|
||||||
{address && <AccountMenu />}
|
{address && <AccountMenu />}
|
||||||
|
<RewardsCenter />
|
||||||
<Wallet />
|
<Wallet />
|
||||||
<Settings />
|
<Settings />
|
||||||
</div>
|
</div>
|
||||||
|
@ -19,7 +19,7 @@ export default function Overlay(props: Props) {
|
|||||||
<>
|
<>
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
'max-w-screen absolute isolate z-50 rounded-sm shadow-overlay backdrop-blur-lg',
|
'max-w-screen absolute isolate z-50 rounded-base shadow-overlay backdrop-blur-lg',
|
||||||
props.hasBackdropIsolation ? 'bg-body' : 'gradient-popover',
|
props.hasBackdropIsolation ? 'bg-body' : 'gradient-popover',
|
||||||
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-base before:p-[1px] before:border-glas',
|
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-base before:p-[1px] before:border-glas',
|
||||||
props.className,
|
props.className,
|
||||||
@ -28,7 +28,7 @@ export default function Overlay(props: Props) {
|
|||||||
{props.children ? props.children : props.content}
|
{props.children ? props.children : props.content}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className='fixed left-0 top-0 z-40 block h-full w-full hover:cursor-pointer'
|
className='fixed top-0 left-0 z-40 block w-full h-full hover:cursor-pointer'
|
||||||
onClick={onClickAway}
|
onClick={onClickAway}
|
||||||
role='button'
|
role='button'
|
||||||
/>
|
/>
|
||||||
|
135
src/components/RewardsCenter.tsx
Normal file
135
src/components/RewardsCenter.tsx
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
import { useCallback, useEffect, useMemo, useState } from 'react'
|
||||||
|
|
||||||
|
import AssetBalanceRow from 'components/AssetBalanceRow'
|
||||||
|
import Button from 'components/Button'
|
||||||
|
import DisplayCurrency from 'components/DisplayCurrency'
|
||||||
|
import Divider from 'components/Divider'
|
||||||
|
import { Logo } from 'components/Icons'
|
||||||
|
import Overlay from 'components/Overlay'
|
||||||
|
import Text from 'components/Text'
|
||||||
|
import { ASSETS } from 'constants/assets'
|
||||||
|
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
||||||
|
import { DISPLAY_CURRENCY_KEY } from 'constants/localStore'
|
||||||
|
import useCurrentAccount from 'hooks/useCurrentAccount'
|
||||||
|
import useLocalStorage from 'hooks/useLocalStorage'
|
||||||
|
import usePrices from 'hooks/usePrices'
|
||||||
|
import useToggle from 'hooks/useToggle'
|
||||||
|
import useUnclaimedRewards from 'hooks/useUnclaimedRewards'
|
||||||
|
import useStore from 'store'
|
||||||
|
import { BNCoin } from 'types/classes/BNCoin'
|
||||||
|
import { byDenom } from 'utils/array'
|
||||||
|
import { defaultFee } from 'utils/constants'
|
||||||
|
import { convertToDisplayAmount, formatAmountWithSymbol } from 'utils/formatters'
|
||||||
|
|
||||||
|
const renderIncentives = (unclaimedRewards: BNCoin[]) => {
|
||||||
|
if (unclaimedRewards.length === 0)
|
||||||
|
return (
|
||||||
|
<Text className='w-full px-4 text-center' size='sm'>
|
||||||
|
You have no claimable rewards.
|
||||||
|
</Text>
|
||||||
|
)
|
||||||
|
|
||||||
|
return unclaimedRewards.map((reward, index) => {
|
||||||
|
const asset = ASSETS.find(byDenom(reward.denom))
|
||||||
|
if (!asset) return null
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{index !== 0 && <Divider />}
|
||||||
|
<AssetBalanceRow key={reward.denom} coin={reward} asset={asset} />
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function RewardsCenter() {
|
||||||
|
const account = useCurrentAccount()
|
||||||
|
const accountId = account?.id
|
||||||
|
const [isConfirming, setIsConfirming] = useState(false)
|
||||||
|
const [estimatedFee, setEstimatedFee] = useState(defaultFee)
|
||||||
|
const [showRewardsCenter, setShowRewardsCenter] = useToggle()
|
||||||
|
const [displayCurrency] = useLocalStorage<string>(
|
||||||
|
DISPLAY_CURRENCY_KEY,
|
||||||
|
DEFAULT_SETTINGS.displayCurrency,
|
||||||
|
)
|
||||||
|
const claimRewards = useStore((s) => s.claimRewards)
|
||||||
|
const { data: prices } = usePrices()
|
||||||
|
const { data: unclaimedRewards } = useUnclaimedRewards()
|
||||||
|
|
||||||
|
const totalRewardsCoin = useMemo(() => {
|
||||||
|
let total = 0
|
||||||
|
unclaimedRewards.forEach((reward) => {
|
||||||
|
total = total + convertToDisplayAmount(reward, displayCurrency, prices).toNumber()
|
||||||
|
})
|
||||||
|
|
||||||
|
return new BNCoin({
|
||||||
|
denom: displayCurrency,
|
||||||
|
amount: total.toString(),
|
||||||
|
})
|
||||||
|
}, [displayCurrency, prices, unclaimedRewards])
|
||||||
|
|
||||||
|
const hasIncentives = unclaimedRewards.length > 0
|
||||||
|
|
||||||
|
const claimTx = useMemo(() => {
|
||||||
|
return claimRewards({
|
||||||
|
accountId: accountId || '',
|
||||||
|
})
|
||||||
|
}, [accountId, claimRewards])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
claimTx.estimateFee().then(setEstimatedFee)
|
||||||
|
}, [claimTx])
|
||||||
|
|
||||||
|
const handleClaim = useCallback(async () => {
|
||||||
|
if (accountId) {
|
||||||
|
setIsConfirming(true)
|
||||||
|
|
||||||
|
await claimTx.execute()
|
||||||
|
setIsConfirming(false)
|
||||||
|
}
|
||||||
|
}, [accountId, claimTx])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={'relative'}>
|
||||||
|
<Button
|
||||||
|
variant='solid'
|
||||||
|
color='tertiary'
|
||||||
|
leftIcon={<Logo />}
|
||||||
|
onClick={() => {
|
||||||
|
setShowRewardsCenter(!showRewardsCenter)
|
||||||
|
}}
|
||||||
|
hasFocus={showRewardsCenter}
|
||||||
|
>
|
||||||
|
<div className='relative flex items-center h-fullx'>
|
||||||
|
<DisplayCurrency coin={totalRewardsCoin} />
|
||||||
|
</div>
|
||||||
|
</Button>
|
||||||
|
<Overlay className={'mt-2 right-0'} show={showRewardsCenter} setShow={setShowRewardsCenter}>
|
||||||
|
<div className='flex w-[402px] flex-wrap'>
|
||||||
|
<Text size='lg' className='w-full px-4 py-5 rounded-t-base bg-white/10'>
|
||||||
|
Rewards Center
|
||||||
|
</Text>
|
||||||
|
<div className='w-full p-4'>
|
||||||
|
<div className='flex flex-wrap w-full gap-4 pb-4'>
|
||||||
|
{renderIncentives(unclaimedRewards)}
|
||||||
|
</div>
|
||||||
|
{hasIncentives && (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
variant='solid'
|
||||||
|
color='secondary'
|
||||||
|
className='w-full py-2'
|
||||||
|
showProgressIndicator={isConfirming}
|
||||||
|
text={'Claim total account rewards'}
|
||||||
|
onClick={handleClaim}
|
||||||
|
/>
|
||||||
|
<Text className='w-full py-4 text-center text-white/50' size='sm'>
|
||||||
|
Tx Fee: {formatAmountWithSymbol(estimatedFee.amount[0])}
|
||||||
|
</Text>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Overlay>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
@ -4,7 +4,7 @@ import getAccount from 'api/accounts/getAccount'
|
|||||||
|
|
||||||
export default function useAccounts(accountId?: string) {
|
export default function useAccounts(accountId?: string) {
|
||||||
return useSWR(`account${accountId}`, () => getAccount(accountId || ''), {
|
return useSWR(`account${accountId}`, () => getAccount(accountId || ''), {
|
||||||
refreshInterval: 30000,
|
refreshInterval: 30_000,
|
||||||
revalidateOnFocus: false,
|
revalidateOnFocus: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ import getPrices from 'api/prices/getPrices'
|
|||||||
export default function usePrices() {
|
export default function usePrices() {
|
||||||
return useSWR('prices', getPrices, {
|
return useSWR('prices', getPrices, {
|
||||||
fallbackData: [],
|
fallbackData: [],
|
||||||
refreshInterval: 30000,
|
refreshInterval: 30_000,
|
||||||
revalidateOnFocus: false,
|
revalidateOnFocus: false,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
22
src/hooks/useUnclaimedRewards.tsx
Normal file
22
src/hooks/useUnclaimedRewards.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import useSWR from 'swr'
|
||||||
|
|
||||||
|
import getUnclaimedRewards from 'api/incentives/getUnclaimedRewards'
|
||||||
|
import useCurrentAccount from 'hooks/useCurrentAccount'
|
||||||
|
import useStore from 'store'
|
||||||
|
import { BNCoin } from 'types/classes/BNCoin'
|
||||||
|
|
||||||
|
export default function useUserUnclaimedRewards() {
|
||||||
|
const user = useStore((s) => s.address)
|
||||||
|
const account = useCurrentAccount()
|
||||||
|
|
||||||
|
return useSWR(
|
||||||
|
`userUnclaimedRewards-${account?.id}`,
|
||||||
|
() => getUnclaimedRewards(user ?? '', account?.id ?? ''),
|
||||||
|
{
|
||||||
|
fallbackData: [] as BNCoin[],
|
||||||
|
refreshInterval: 10_000,
|
||||||
|
isPaused: () => !account?.id || !user,
|
||||||
|
revalidateOnFocus: false,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
@ -11,13 +11,13 @@ import {
|
|||||||
Action as CreditManagerAction,
|
Action as CreditManagerAction,
|
||||||
ExecuteMsg as CreditManagerExecuteMsg,
|
ExecuteMsg as CreditManagerExecuteMsg,
|
||||||
} from 'types/generated/mars-credit-manager/MarsCreditManager.types'
|
} from 'types/generated/mars-credit-manager/MarsCreditManager.types'
|
||||||
|
import { getAssetByDenom } from 'utils/assets'
|
||||||
import { getSingleValueFromBroadcastResult } from 'utils/broadcast'
|
import { getSingleValueFromBroadcastResult } from 'utils/broadcast'
|
||||||
|
import checkAutoLendEnabled from 'utils/checkAutoLendEnabled'
|
||||||
import { defaultFee } from 'utils/constants'
|
import { defaultFee } from 'utils/constants'
|
||||||
import { formatAmountWithSymbol } from 'utils/formatters'
|
import { formatAmountWithSymbol } from 'utils/formatters'
|
||||||
import checkAutoLendEnabled from 'utils/checkAutoLendEnabled'
|
|
||||||
import getTokenOutFromSwapResponse from 'utils/getTokenOutFromSwapResponse'
|
import getTokenOutFromSwapResponse from 'utils/getTokenOutFromSwapResponse'
|
||||||
import { BN } from 'utils/helpers'
|
import { BN } from 'utils/helpers'
|
||||||
import { getAssetByDenom } from 'utils/assets'
|
|
||||||
|
|
||||||
function generateExecutionMessage(
|
function generateExecutionMessage(
|
||||||
sender: string | undefined = '',
|
sender: string | undefined = '',
|
||||||
@ -178,6 +178,36 @@ export default function createBroadcastSlice(
|
|||||||
|
|
||||||
return !!response.result
|
return !!response.result
|
||||||
},
|
},
|
||||||
|
claimRewards: (options: { accountId: string }) => {
|
||||||
|
const msg: CreditManagerExecuteMsg = {
|
||||||
|
update_credit_account: {
|
||||||
|
account_id: options.accountId,
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
claim_rewards: {},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const messages = [
|
||||||
|
generateExecutionMessage(get().address, ENV.ADDRESS_CREDIT_MANAGER, msg, []),
|
||||||
|
]
|
||||||
|
const estimateFee = () => getEstimatedFee(messages)
|
||||||
|
|
||||||
|
const execute = async () => {
|
||||||
|
const response = await get().executeMsg({
|
||||||
|
messages,
|
||||||
|
})
|
||||||
|
|
||||||
|
const successMessage = `Claimed rewards for, ${options.accountId}`
|
||||||
|
|
||||||
|
handleResponseMessages(response, successMessage)
|
||||||
|
return !!response.result
|
||||||
|
}
|
||||||
|
|
||||||
|
return { estimateFee, execute }
|
||||||
|
},
|
||||||
deposit: async (options: { accountId: string; coins: BNCoin[] }) => {
|
deposit: async (options: { accountId: string; coins: BNCoin[] }) => {
|
||||||
const msg: CreditManagerExecuteMsg = {
|
const msg: CreditManagerExecuteMsg = {
|
||||||
update_credit_account: {
|
update_credit_account: {
|
||||||
|
@ -5,27 +5,28 @@
|
|||||||
* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
|
* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { CosmWasmClient, SigningCosmWasmClient, ExecuteResult } from '@cosmjs/cosmwasm-stargate'
|
import { CosmWasmClient, ExecuteResult, SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate'
|
||||||
import { StdFee } from '@cosmjs/amino'
|
import { StdFee } from '@cosmjs/amino'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
InstantiateMsg,
|
|
||||||
ExecuteMsg,
|
|
||||||
Uint128,
|
|
||||||
Addr,
|
|
||||||
OwnerUpdate,
|
|
||||||
WhitelistEntry,
|
|
||||||
QueryMsg,
|
|
||||||
ArrayOfActiveEmission,
|
|
||||||
ActiveEmission,
|
ActiveEmission,
|
||||||
ConfigResponse,
|
Addr,
|
||||||
ArrayOfEmissionResponse,
|
ArrayOfActiveEmission,
|
||||||
EmissionResponse,
|
|
||||||
Decimal,
|
|
||||||
IncentiveStateResponse,
|
|
||||||
ArrayOfIncentiveStateResponse,
|
|
||||||
ArrayOfCoin,
|
ArrayOfCoin,
|
||||||
Coin,
|
ArrayOfEmissionResponse,
|
||||||
|
ArrayOfIncentiveStateResponse,
|
||||||
ArrayOfWhitelistEntry,
|
ArrayOfWhitelistEntry,
|
||||||
|
Coin,
|
||||||
|
ConfigResponse,
|
||||||
|
Decimal,
|
||||||
|
EmissionResponse,
|
||||||
|
ExecuteMsg,
|
||||||
|
IncentiveStateResponse,
|
||||||
|
InstantiateMsg,
|
||||||
|
OwnerUpdate,
|
||||||
|
QueryMsg,
|
||||||
|
Uint128,
|
||||||
|
WhitelistEntry,
|
||||||
} from './MarsIncentives.types'
|
} from './MarsIncentives.types'
|
||||||
export interface MarsIncentivesReadOnlyInterface {
|
export interface MarsIncentivesReadOnlyInterface {
|
||||||
contractAddress: string
|
contractAddress: string
|
||||||
@ -72,11 +73,13 @@ export interface MarsIncentivesReadOnlyInterface {
|
|||||||
startAfterTimestamp?: number
|
startAfterTimestamp?: number
|
||||||
}) => Promise<ArrayOfEmissionResponse>
|
}) => Promise<ArrayOfEmissionResponse>
|
||||||
userUnclaimedRewards: ({
|
userUnclaimedRewards: ({
|
||||||
|
accountId,
|
||||||
limit,
|
limit,
|
||||||
startAfterCollateralDenom,
|
startAfterCollateralDenom,
|
||||||
startAfterIncentiveDenom,
|
startAfterIncentiveDenom,
|
||||||
user,
|
user,
|
||||||
}: {
|
}: {
|
||||||
|
accountId?: string
|
||||||
limit?: number
|
limit?: number
|
||||||
startAfterCollateralDenom?: string
|
startAfterCollateralDenom?: string
|
||||||
startAfterIncentiveDenom?: string
|
startAfterIncentiveDenom?: string
|
||||||
@ -186,11 +189,13 @@ export class MarsIncentivesQueryClient implements MarsIncentivesReadOnlyInterfac
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
userUnclaimedRewards = async ({
|
userUnclaimedRewards = async ({
|
||||||
|
accountId,
|
||||||
limit,
|
limit,
|
||||||
startAfterCollateralDenom,
|
startAfterCollateralDenom,
|
||||||
startAfterIncentiveDenom,
|
startAfterIncentiveDenom,
|
||||||
user,
|
user,
|
||||||
}: {
|
}: {
|
||||||
|
accountId?: string
|
||||||
limit?: number
|
limit?: number
|
||||||
startAfterCollateralDenom?: string
|
startAfterCollateralDenom?: string
|
||||||
startAfterIncentiveDenom?: string
|
startAfterIncentiveDenom?: string
|
||||||
@ -198,6 +203,7 @@ export class MarsIncentivesQueryClient implements MarsIncentivesReadOnlyInterfac
|
|||||||
}): Promise<ArrayOfCoin> => {
|
}): Promise<ArrayOfCoin> => {
|
||||||
return this.client.queryContractSmart(this.contractAddress, {
|
return this.client.queryContractSmart(this.contractAddress, {
|
||||||
user_unclaimed_rewards: {
|
user_unclaimed_rewards: {
|
||||||
|
account_id: accountId,
|
||||||
limit,
|
limit,
|
||||||
start_after_collateral_denom: startAfterCollateralDenom,
|
start_after_collateral_denom: startAfterCollateralDenom,
|
||||||
start_after_incentive_denom: startAfterIncentiveDenom,
|
start_after_incentive_denom: startAfterIncentiveDenom,
|
||||||
@ -246,11 +252,13 @@ export interface MarsIncentivesInterface extends MarsIncentivesReadOnlyInterface
|
|||||||
) => Promise<ExecuteResult>
|
) => Promise<ExecuteResult>
|
||||||
balanceChange: (
|
balanceChange: (
|
||||||
{
|
{
|
||||||
|
accountId,
|
||||||
denom,
|
denom,
|
||||||
totalAmountScaledBefore,
|
totalAmountScaledBefore,
|
||||||
userAddr,
|
userAddr,
|
||||||
userAmountScaledBefore,
|
userAmountScaledBefore,
|
||||||
}: {
|
}: {
|
||||||
|
accountId?: string
|
||||||
denom: string
|
denom: string
|
||||||
totalAmountScaledBefore: Uint128
|
totalAmountScaledBefore: Uint128
|
||||||
userAddr: Addr
|
userAddr: Addr
|
||||||
@ -262,10 +270,12 @@ export interface MarsIncentivesInterface extends MarsIncentivesReadOnlyInterface
|
|||||||
) => Promise<ExecuteResult>
|
) => Promise<ExecuteResult>
|
||||||
claimRewards: (
|
claimRewards: (
|
||||||
{
|
{
|
||||||
|
accountId,
|
||||||
limit,
|
limit,
|
||||||
startAfterCollateralDenom,
|
startAfterCollateralDenom,
|
||||||
startAfterIncentiveDenom,
|
startAfterIncentiveDenom,
|
||||||
}: {
|
}: {
|
||||||
|
accountId?: string
|
||||||
limit?: number
|
limit?: number
|
||||||
startAfterCollateralDenom?: string
|
startAfterCollateralDenom?: string
|
||||||
startAfterIncentiveDenom?: string
|
startAfterIncentiveDenom?: string
|
||||||
@ -377,11 +387,13 @@ export class MarsIncentivesClient
|
|||||||
}
|
}
|
||||||
balanceChange = async (
|
balanceChange = async (
|
||||||
{
|
{
|
||||||
|
accountId,
|
||||||
denom,
|
denom,
|
||||||
totalAmountScaledBefore,
|
totalAmountScaledBefore,
|
||||||
userAddr,
|
userAddr,
|
||||||
userAmountScaledBefore,
|
userAmountScaledBefore,
|
||||||
}: {
|
}: {
|
||||||
|
accountId?: string
|
||||||
denom: string
|
denom: string
|
||||||
totalAmountScaledBefore: Uint128
|
totalAmountScaledBefore: Uint128
|
||||||
userAddr: Addr
|
userAddr: Addr
|
||||||
@ -396,6 +408,7 @@ export class MarsIncentivesClient
|
|||||||
this.contractAddress,
|
this.contractAddress,
|
||||||
{
|
{
|
||||||
balance_change: {
|
balance_change: {
|
||||||
|
account_id: accountId,
|
||||||
denom,
|
denom,
|
||||||
total_amount_scaled_before: totalAmountScaledBefore,
|
total_amount_scaled_before: totalAmountScaledBefore,
|
||||||
user_addr: userAddr,
|
user_addr: userAddr,
|
||||||
@ -409,10 +422,12 @@ export class MarsIncentivesClient
|
|||||||
}
|
}
|
||||||
claimRewards = async (
|
claimRewards = async (
|
||||||
{
|
{
|
||||||
|
accountId,
|
||||||
limit,
|
limit,
|
||||||
startAfterCollateralDenom,
|
startAfterCollateralDenom,
|
||||||
startAfterIncentiveDenom,
|
startAfterIncentiveDenom,
|
||||||
}: {
|
}: {
|
||||||
|
accountId?: string
|
||||||
limit?: number
|
limit?: number
|
||||||
startAfterCollateralDenom?: string
|
startAfterCollateralDenom?: string
|
||||||
startAfterIncentiveDenom?: string
|
startAfterIncentiveDenom?: string
|
||||||
@ -426,6 +441,7 @@ export class MarsIncentivesClient
|
|||||||
this.contractAddress,
|
this.contractAddress,
|
||||||
{
|
{
|
||||||
claim_rewards: {
|
claim_rewards: {
|
||||||
|
account_id: accountId,
|
||||||
limit,
|
limit,
|
||||||
start_after_collateral_denom: startAfterCollateralDenom,
|
start_after_collateral_denom: startAfterCollateralDenom,
|
||||||
start_after_incentive_denom: startAfterIncentiveDenom,
|
start_after_incentive_denom: startAfterIncentiveDenom,
|
||||||
|
@ -5,30 +5,31 @@
|
|||||||
* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
|
* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { UseQueryOptions, useQuery, useMutation, UseMutationOptions } from '@tanstack/react-query'
|
import { useMutation, UseMutationOptions, useQuery, UseQueryOptions } from '@tanstack/react-query'
|
||||||
import { ExecuteResult } from '@cosmjs/cosmwasm-stargate'
|
import { ExecuteResult } from '@cosmjs/cosmwasm-stargate'
|
||||||
import { StdFee } from '@cosmjs/amino'
|
import { StdFee } from '@cosmjs/amino'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
InstantiateMsg,
|
|
||||||
ExecuteMsg,
|
|
||||||
Uint128,
|
|
||||||
Addr,
|
|
||||||
OwnerUpdate,
|
|
||||||
WhitelistEntry,
|
|
||||||
QueryMsg,
|
|
||||||
ArrayOfActiveEmission,
|
|
||||||
ActiveEmission,
|
ActiveEmission,
|
||||||
ConfigResponse,
|
Addr,
|
||||||
ArrayOfEmissionResponse,
|
ArrayOfActiveEmission,
|
||||||
EmissionResponse,
|
|
||||||
Decimal,
|
|
||||||
IncentiveStateResponse,
|
|
||||||
ArrayOfIncentiveStateResponse,
|
|
||||||
ArrayOfCoin,
|
ArrayOfCoin,
|
||||||
Coin,
|
ArrayOfEmissionResponse,
|
||||||
|
ArrayOfIncentiveStateResponse,
|
||||||
ArrayOfWhitelistEntry,
|
ArrayOfWhitelistEntry,
|
||||||
|
Coin,
|
||||||
|
ConfigResponse,
|
||||||
|
Decimal,
|
||||||
|
EmissionResponse,
|
||||||
|
ExecuteMsg,
|
||||||
|
IncentiveStateResponse,
|
||||||
|
InstantiateMsg,
|
||||||
|
OwnerUpdate,
|
||||||
|
QueryMsg,
|
||||||
|
Uint128,
|
||||||
|
WhitelistEntry,
|
||||||
} from './MarsIncentives.types'
|
} from './MarsIncentives.types'
|
||||||
import { MarsIncentivesQueryClient, MarsIncentivesClient } from './MarsIncentives.client'
|
import { MarsIncentivesClient, MarsIncentivesQueryClient } from './MarsIncentives.client'
|
||||||
export const marsIncentivesQueryKeys = {
|
export const marsIncentivesQueryKeys = {
|
||||||
contract: [
|
contract: [
|
||||||
{
|
{
|
||||||
@ -94,6 +95,7 @@ export function useMarsIncentivesWhitelistQuery<TData = ArrayOfWhitelistEntry>({
|
|||||||
export interface MarsIncentivesUserUnclaimedRewardsQuery<TData>
|
export interface MarsIncentivesUserUnclaimedRewardsQuery<TData>
|
||||||
extends MarsIncentivesReactQuery<ArrayOfCoin, TData> {
|
extends MarsIncentivesReactQuery<ArrayOfCoin, TData> {
|
||||||
args: {
|
args: {
|
||||||
|
accountId?: string
|
||||||
limit?: number
|
limit?: number
|
||||||
startAfterCollateralDenom?: string
|
startAfterCollateralDenom?: string
|
||||||
startAfterIncentiveDenom?: string
|
startAfterIncentiveDenom?: string
|
||||||
@ -110,6 +112,7 @@ export function useMarsIncentivesUserUnclaimedRewardsQuery<TData = ArrayOfCoin>(
|
|||||||
() =>
|
() =>
|
||||||
client
|
client
|
||||||
? client.userUnclaimedRewards({
|
? client.userUnclaimedRewards({
|
||||||
|
accountId: args.accountId,
|
||||||
limit: args.limit,
|
limit: args.limit,
|
||||||
startAfterCollateralDenom: args.startAfterCollateralDenom,
|
startAfterCollateralDenom: args.startAfterCollateralDenom,
|
||||||
startAfterIncentiveDenom: args.startAfterIncentiveDenom,
|
startAfterIncentiveDenom: args.startAfterIncentiveDenom,
|
||||||
@ -304,6 +307,7 @@ export function useMarsIncentivesUpdateConfigMutation(
|
|||||||
export interface MarsIncentivesClaimRewardsMutation {
|
export interface MarsIncentivesClaimRewardsMutation {
|
||||||
client: MarsIncentivesClient
|
client: MarsIncentivesClient
|
||||||
msg: {
|
msg: {
|
||||||
|
accountId?: string
|
||||||
limit?: number
|
limit?: number
|
||||||
startAfterCollateralDenom?: string
|
startAfterCollateralDenom?: string
|
||||||
startAfterIncentiveDenom?: string
|
startAfterIncentiveDenom?: string
|
||||||
@ -329,6 +333,7 @@ export function useMarsIncentivesClaimRewardsMutation(
|
|||||||
export interface MarsIncentivesBalanceChangeMutation {
|
export interface MarsIncentivesBalanceChangeMutation {
|
||||||
client: MarsIncentivesClient
|
client: MarsIncentivesClient
|
||||||
msg: {
|
msg: {
|
||||||
|
accountId?: string
|
||||||
denom: string
|
denom: string
|
||||||
totalAmountScaledBefore: Uint128
|
totalAmountScaledBefore: Uint128
|
||||||
userAddr: Addr
|
userAddr: Addr
|
||||||
|
@ -29,6 +29,7 @@ export type ExecuteMsg =
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
balance_change: {
|
balance_change: {
|
||||||
|
account_id?: string | null
|
||||||
denom: string
|
denom: string
|
||||||
total_amount_scaled_before: Uint128
|
total_amount_scaled_before: Uint128
|
||||||
user_addr: Addr
|
user_addr: Addr
|
||||||
@ -37,6 +38,7 @@ export type ExecuteMsg =
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
claim_rewards: {
|
claim_rewards: {
|
||||||
|
account_id?: string | null
|
||||||
limit?: number | null
|
limit?: number | null
|
||||||
start_after_collateral_denom?: string | null
|
start_after_collateral_denom?: string | null
|
||||||
start_after_incentive_denom?: string | null
|
start_after_incentive_denom?: string | null
|
||||||
@ -111,6 +113,7 @@ export type QueryMsg =
|
|||||||
}
|
}
|
||||||
| {
|
| {
|
||||||
user_unclaimed_rewards: {
|
user_unclaimed_rewards: {
|
||||||
|
account_id?: string | null
|
||||||
limit?: number | null
|
limit?: number | null
|
||||||
start_after_collateral_denom?: string | null
|
start_after_collateral_denom?: string | null
|
||||||
start_after_incentive_denom?: string | null
|
start_after_incentive_denom?: string | null
|
||||||
|
19
src/types/interfaces/store/broadcast.d.ts
vendored
19
src/types/interfaces/store/broadcast.d.ts
vendored
@ -11,20 +11,13 @@ interface ExecutableTx {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface BroadcastSlice {
|
interface BroadcastSlice {
|
||||||
toast: { message: string; isError?: boolean; title?: string } | null
|
|
||||||
executeMsg: (options: { messages: MsgExecuteContract[] }) => Promise<BroadcastResult>
|
|
||||||
borrow: (options: { accountId: string; coin: Coin; borrowToWallet: boolean }) => Promise<boolean>
|
borrow: (options: { accountId: string; coin: Coin; borrowToWallet: boolean }) => Promise<boolean>
|
||||||
|
claimRewards: (options: { accountId: string }) => ExecutableTx
|
||||||
createAccount: () => Promise<string | null>
|
createAccount: () => Promise<string | null>
|
||||||
deleteAccount: (options: { accountId: string; lends: BNCoin[] }) => Promise<boolean>
|
deleteAccount: (options: { accountId: string; lends: BNCoin[] }) => Promise<boolean>
|
||||||
deposit: (options: { accountId: string; coins: BNCoin[] }) => Promise<boolean>
|
deposit: (options: { accountId: string; coins: BNCoin[] }) => Promise<boolean>
|
||||||
unlock: (options: {
|
|
||||||
accountId: string
|
|
||||||
vault: DepositedVault
|
|
||||||
amount: string
|
|
||||||
}) => Promise<boolean>
|
|
||||||
withdrawFromVaults: (options: { accountId: string; vaults: DepositedVault[] }) => Promise<boolean>
|
|
||||||
depositIntoVault: (options: { accountId: string; actions: Action[] }) => Promise<boolean>
|
depositIntoVault: (options: { accountId: string; actions: Action[] }) => Promise<boolean>
|
||||||
withdraw: (options: { accountId: string; coins: BNCoin[]; borrow: BNCoin[] }) => Promise<boolean>
|
executeMsg: (options: { messages: MsgExecuteContract[] }) => Promise<BroadcastResult>
|
||||||
lend: (options: { accountId: string; coin: BNCoin; isMax?: boolean }) => Promise<boolean>
|
lend: (options: { accountId: string; coin: BNCoin; isMax?: boolean }) => Promise<boolean>
|
||||||
reclaim: (options: { accountId: string; coin: BNCoin; isMax?: boolean }) => Promise<boolean>
|
reclaim: (options: { accountId: string; coin: BNCoin; isMax?: boolean }) => Promise<boolean>
|
||||||
repay: (options: {
|
repay: (options: {
|
||||||
@ -39,4 +32,12 @@ interface BroadcastSlice {
|
|||||||
denomOut: string
|
denomOut: string
|
||||||
slippage: number
|
slippage: number
|
||||||
}) => ExecutableTx
|
}) => ExecutableTx
|
||||||
|
toast: { message: string; isError?: boolean; title?: string } | null
|
||||||
|
unlock: (options: {
|
||||||
|
accountId: string
|
||||||
|
vault: DepositedVault
|
||||||
|
amount: string
|
||||||
|
}) => Promise<boolean>
|
||||||
|
withdrawFromVaults: (options: { accountId: string; vaults: DepositedVault[] }) => Promise<boolean>
|
||||||
|
withdraw: (options: { accountId: string; coins: BNCoin[]; borrow: BNCoin[] }) => Promise<boolean>
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user