Merge pull request #574 from amimart/fix/staking-apr-formula

fix(staking): correct APR computation formula
This commit is contained in:
ping 2024-06-20 07:52:17 +08:00 committed by GitHub
commit 57ad32e37a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 7 deletions

View File

@ -1,7 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { parseCoins } from '@cosmjs/stargate'; import { parseCoins } from '@cosmjs/stargate';
import { import {
useBankStore,
useBlockchain, useBlockchain,
useDistributionStore,
useFormatter, useFormatter,
useMintStore, useMintStore,
useStakingStore, useStakingStore,
@ -64,12 +66,12 @@ blockchain.rpc.getTxsBySender(addresses.value.account).then((x) => {
}); });
const apr = computed(() => { const apr = computed(() => {
const rate = v.value.commission?.commission_rates.rate || 0; const rate = Number(v.value.commission?.commission_rates.rate || 0);
const inflation = useMintStore().inflation; const inflation = useMintStore().inflation;
if (Number(inflation)) { const communityTax = Number(useDistributionStore().params.community_tax);
return format.percent((1 - Number(rate)) * Number(inflation)); const bondedRatio = Number(staking.pool.bonded_tokens) / Number(useBankStore().supply.amount);
}
return '-'; return format.percent((1 - communityTax) * (1 - rate) * Number(inflation) / bondedRatio);
}); });
const selfRate = computed(() => { const selfRate = computed(() => {

View File

@ -16,10 +16,11 @@ import { CosmosRestClient } from '@/libs/client';
import { import {
useBankStore, useBankStore,
useBaseStore, useBaseStore,
useDistributionStore,
useGovStore, useGovStore,
useMintStore, useMintStore,
useStakingStore, useStakingStore,
useWalletStore, useWalletStore
} from '.'; } from '.';
import { useBlockModule } from '@/modules/[chain]/block/block'; import { useBlockModule } from '@/modules/[chain]/block/block';
import { DEFAULT } from '@/libs'; import { DEFAULT } from '@/libs';
@ -151,6 +152,7 @@ export const useBlockchain = defineStore('blockchain', {
useGovStore().initial(); useGovStore().initial();
useMintStore().initial(); useMintStore().initial();
useBlockModule().initial(); useBlockModule().initial();
useDistributionStore().initial();
}, },
randomEndpoint(chainName: string) : Endpoint | undefined { randomEndpoint(chainName: string) : Endpoint | undefined {

View File

@ -3,7 +3,14 @@ import { useBlockchain } from './useBlockchain';
export const useDistributionStore = defineStore('distributionStore', { export const useDistributionStore = defineStore('distributionStore', {
state: () => { state: () => {
return {}; return {
params: {} as {
community_tax: string;
base_proposer_reward: string;
bonus_proposer_reward: string;
withdraw_addr_enabled: boolean;
},
};
}, },
getters: { getters: {
blockchain() { blockchain() {
@ -11,6 +18,14 @@ export const useDistributionStore = defineStore('distributionStore', {
}, },
}, },
actions: { actions: {
initial() {
this.fetchParams();
},
async fetchParams() {
const response = await this.blockchain.rpc?.getDistributionParams();
if (response?.params) this.params = response.params;
return this.params;
},
async fetchCommunityPool() { async fetchCommunityPool() {
return this.blockchain.rpc?.getDistributionCommunityPool(); return this.blockchain.rpc?.getDistributionCommunityPool();
}, },