Skip to content

Commit

Permalink
Merge pull request #1 from oraichain/hotfix/apr_orai
Browse files Browse the repository at this point in the history
fix: apr orai
  • Loading branch information
quangdz1704 authored May 28, 2024
2 parents 0629e87 + 942f3d6 commit ec816f1
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 5 deletions.
10 changes: 7 additions & 3 deletions src/pages/UniversalSwap/Component/StakeSummary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { SCORAI_TOKEN_INFO, USDC_TOKEN_INFO } from 'pages/GpuStaking/constants';
import { USDC_CONTRACT, toDisplay } from '@oraichain/oraidex-common';
import { calcAPY } from 'pages/GpuStaking/helpers';

export const StakeSummary: FC<{ data: any }> = ({ data: dataSummary }) => {
export const StakeSummary: FC<{ data: any; aprOrai: number }> = ({ data: dataSummary, aprOrai }) => {
const { data: prices } = useCoinGeckoPrices();
const amounts = useSelector((state: RootState) => state.token.amounts);
const [address] = useConfigReducer('address');
Expand Down Expand Up @@ -109,7 +109,11 @@ export const StakeSummary: FC<{ data: any }> = ({ data: dataSummary }) => {
apy: {
name: 'CURRENT APR',
width: '30%',
accessor: (data) => <div className={styles.apy}>{Number(data.apr.toFixed(2))}%</div>,
accessor: (data) => (
<div title="Inflation rate needed to guarantee ~29% APR with 3% commission" className={styles.apy}>
{Number(data.apr.toFixed(2))}%
</div>
),
align: 'left'
},
total: {
Expand Down Expand Up @@ -139,7 +143,7 @@ export const StakeSummary: FC<{ data: any }> = ({ data: dataSummary }) => {
{
iconLight: OraiLightIcon,
icon: OraiIcon,
apr: Number(dataSummary?.ratio_bonded) || 0,
apr: Number(aprOrai) || 0,
total: dataSummary?.total_delegated || 0,
asset: 'ORAI'
}
Expand Down
34 changes: 34 additions & 0 deletions src/pages/UniversalSwap/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,3 +373,37 @@ export const calcMaxAmount = ({

return finalAmount;
};

export const calculateInflationFromApr = async () => {
const fetchData = async (endpoint) => {
return fetch(`https://lcd.orai.io/${endpoint}`).then((data) => data.json());
};

const VAL_VOTING_POWER = 1000;
const DAYS_IN_YEARS = 365.2425;
const APR = 28.5;
const RATE = 0.03;
const { block_time } = await fetch('https://api.scan.orai.io/v1/status').then((data) => data.json());
const delegatorsRewardPerDay = APR / ((DAYS_IN_YEARS / VAL_VOTING_POWER) * 100);
const numBlocksPerDay = (60 / block_time) * 60 * 24;
const delegatorsRewardPerBlock = delegatorsRewardPerDay / numBlocksPerDay;

const valRewardPerBlock = delegatorsRewardPerBlock / (1 - RATE);

let { bonded_tokens } = (await fetchData('cosmos/staking/v1beta1/pool')).pool;
const { community_tax, base_proposer_reward, bonus_proposer_reward } = (
await fetchData('cosmos/distribution/v1beta1/params')
).params;
const voteMultiplier =
1 - parseFloat(community_tax) - (parseFloat(base_proposer_reward) + parseFloat(bonus_proposer_reward));
const blockRevision = valRewardPerBlock / ((VAL_VOTING_POWER / bonded_tokens) * voteMultiplier);

const totalSupply = (await fetchData('cosmos/bank/v1beta1/supply/orai')).amount.amount;
const { blocks_per_year } = (await fetchData('cosmos/mint/v1beta1/params')).params;
const inflationRate = blockRevision / (totalSupply / blocks_per_year);

return {
inflationRate: inflationRate * 100,
bonded_tokens
}; // display in percentage
};
26 changes: 24 additions & 2 deletions src/pages/UniversalSwap/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import Feature from './Component/Feature';
import StakeSummary from './Component/StakeSummary';
import SwapComponent from './Swap';
import { initPairSwap } from './Swap/hooks/useFillToken';
import { NetworkFilter, initNetworkFilter } from './helpers';
import { NetworkFilter, calculateInflationFromApr, initNetworkFilter } from './helpers';
import styles from './index.module.scss';
const cx = cn.bind(styles);

Expand Down Expand Up @@ -46,6 +46,19 @@ const getInfoOraichain = async () => {
}
};

const getInfoStakeOraichain = async () => {
try {
const inflation = await calculateInflationFromApr();
return inflation;
} catch (e) {
console.error('getInfoStakeOraichain', e);
return {
inflationRate: 0,
bonded_tokens: 0
};
}
};

export const useGetInfoOraichain = () => {
const { data } = useQuery(['info_oraichain'], () => getInfoOraichain(), {
refetchOnWindowFocus: true,
Expand All @@ -54,13 +67,22 @@ export const useGetInfoOraichain = () => {
return data;
};

export const useGetInfoStakeOraichain = () => {
const { data } = useQuery(['info_oraichain_stake'], () => getInfoStakeOraichain(), {
refetchOnWindowFocus: true,
staleTime: 30 * 1000
});
return data;
};

const Swap: React.FC = () => {
const [[fromTokenDenom, toTokenDenom], setSwapTokens] = useState<[string, string]>(initPairSwap);
const [networkFilter, setNetworkFilter] = useState<NetworkFilter>(initNetworkFilter);

const [isLoadedIframe, setIsLoadedIframe] = useState(false); // check iframe data loaded
const [openBuy, setOpenBuy] = useState(false);
const data = useGetInfoOraichain();
const dataStake = useGetInfoStakeOraichain();

return (
<Content nonBackground>
Expand All @@ -85,7 +107,7 @@ const Swap: React.FC = () => {
</div>
</div>
<div className={styles.looking}>You are looking for...</div>
<StakeSummary data={data?.controlCenter} />
<StakeSummary data={data?.controlCenter} aprOrai={dataStake?.inflationRate || 0} />
<Feature />
</div>

Expand Down

0 comments on commit ec816f1

Please sign in to comment.