From 14b3b96c4bf4553d26ed6c572b093239317d5053 Mon Sep 17 00:00:00 2001 From: Bobo Date: Mon, 2 Dec 2024 16:15:08 +0100 Subject: [PATCH] Release hotfix to main (#1420) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update polkadot chain icon (#1415) * Inflation chart fix (#1417) * Inflation chart fix * Current inflation calculation and cleanup * Minor bug fixes * Division by zero fix * Enable governance section for Astar (#1418) * docs: update zh translation from #1385 (#1413) * docs: update zh translation * fix format issue * remove useless import --------- Co-authored-by: coin98team002 * Enable governance section on Astar --------- Co-authored-by: Taegeon Alan Go Co-authored-by: coin98team002 * Transferable balance fix (#1423) * Transferable balance fix * Existential deposit * Referendum state fix (#1424) --------- Co-authored-by: Taegeon Alan Go Co-authored-by: coin98team002 Co-authored-by: Saša Pul <4625220+codespool@users.noreply.github.com> --- src/assets/img/chain/polkadot.png | Bin 45950 -> 26741 bytes src/components/assets/NativeAssetList.vue | 38 +++- .../dashboard/InflationRateChart.vue | 28 +-- src/components/governance/GovernanceLink.vue | 4 - src/components/governance/GovernanceLinks.vue | 19 +- src/hooks/useBalance.ts | 46 ++--- src/hooks/useGovernance.ts | 18 +- src/hooks/useInflation.ts | 168 +++++++----------- src/i18n/en-US/index.ts | 2 + src/staking-v3/components/data/DataList.vue | 6 +- src/v2/repositories/ITokenApiRepository.ts | 12 ++ .../AccountUnificationRepository.ts | 1 - .../implementations/AssetsRepository.ts | 6 +- .../implementations/TokenApiRepository.ts | 12 +- 14 files changed, 187 insertions(+), 173 deletions(-) diff --git a/src/assets/img/chain/polkadot.png b/src/assets/img/chain/polkadot.png index 15da3eda0f642351a3976a752e88d45dc77c1e9e..5675d61d5f1ee0ac6adb0163a6c3e66c890dcfc0 100644 GIT binary patch literal 26741 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 literal 45950 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

- {{ $n(truncate(lockInDappStaking + vestingTtl + reservedTtl, 3)) }} + {{ $n(truncate(lockedAmount, 3)) }}
{{ nativeTokenSymbol }} @@ -252,6 +252,28 @@
+ + +
+
+
{{ $t('governance.governance') }}
+
+ + +
+
+
@@ -310,6 +332,7 @@ export default defineComponent({ const vestingTtl = ref(0); const reservedTtl = ref(0); const lockInDappStaking = ref(0); + const lockInDemocracy = ref(0); const isRocstar = ref(false); const isShibuya = ref(false); const isFaucet = ref(false); @@ -369,6 +392,10 @@ export default defineComponent({ } }; + const lockedAmount = computed(() => + Math.max(vestingTtl.value, lockInDappStaking.value, lockInDemocracy.value, reservedTtl.value) + ); + watch([nativeTokenSymbol, balance, props], setBalanceData, { immediate: false }); watchEffect(() => { @@ -377,11 +404,14 @@ export default defineComponent({ // Memo: `vesting ` -> there has been inputted 1 space here const vesting = accountDataRef.locks.find((it) => u8aToString(it.id) === 'vesting '); const dappStake = accountDataRef.locks.find((it) => u8aToString(it.id) === 'dapstake'); + const democracy = accountDataRef.locks.find((it) => u8aToString(it.id) === 'democrac'); const reserved = accountDataRef.reserved; + if (vesting) { const amount = String(vesting.amount); vestingTtl.value = Number(ethers.utils.formatEther(amount)); } + if (dappStake) { const amount = String(dappStake.amount); lockInDappStaking.value = Number(ethers.utils.formatEther(amount)); @@ -393,6 +423,10 @@ export default defineComponent({ const amount = reserved.toString(); reservedTtl.value = Number(ethers.utils.formatEther(amount)); } + + if (democracy) { + lockInDemocracy.value = Number(ethers.utils.formatEther(democracy.amount.toString())); + } }); // Ref: https://stackoverflow.com/questions/48143381/css-expand-contract-animation-to-show-hide-content @@ -414,6 +448,7 @@ export default defineComponent({ isShibuya, vestingTtl, lockInDappStaking, + lockInDemocracy, isFaucet, transferableBalance, isModalTransfer, @@ -437,6 +472,7 @@ export default defineComponent({ handleModalFaucet, handleModalEvmWithdraw, expandAsset, + lockedAmount, }; }, }); diff --git a/src/components/dashboard/InflationRateChart.vue b/src/components/dashboard/InflationRateChart.vue index 64c411dda..bc555c320 100644 --- a/src/components/dashboard/InflationRateChart.vue +++ b/src/components/dashboard/InflationRateChart.vue @@ -11,7 +11,7 @@
- {{ estimatedInflation?.toFixed(1) }}% + {{ estimatedInflation?.toFixed(2) }}%
@@ -22,7 +22,7 @@ diff --git a/src/hooks/useBalance.ts b/src/hooks/useBalance.ts index 8bc1844f1..9bdb7804b 100644 --- a/src/hooks/useBalance.ts +++ b/src/hooks/useBalance.ts @@ -9,7 +9,7 @@ import { useStore } from 'src/store'; import { computed, onUnmounted, ref, Ref, watch } from 'vue'; import { isValidEvmAddress } from '@astar-network/astar-sdk-core'; import { useDapps } from 'src/staking-v3'; -import { Option, Vec, u32 } from '@polkadot/types'; +import { Option, Vec, u128, u32 } from '@polkadot/types'; // Temporarily moved here until uplift polkadot js for astar.js export const getVested = ({ @@ -223,11 +223,20 @@ export class AccountData { } public getUsableTransactionBalance(): BN { - return this.free.sub(this.frozen); + // refs. + // https://wiki.polkadot.network/docs/learn-account-balances + // https://github.com/paritytech/polkadot-sdk/blob/e8da320734ae44803f89dd2b35b3cfea0e1ecca1/substrate/frame/balances/src/impl_fungible.rs#L44 + const existentialDeposit = $api?.consts.balances.existentialDeposit; + if (!existentialDeposit) { + return new BN(0); + } + + const untouchable = BN.max(this.frozen.sub(this.reserved), existentialDeposit); + return this.free.sub(untouchable); } public getUsableFeeBalance(): BN { - return this.free.sub(this.frozen); + return this.getUsableTransactionBalance(); } public free: BN; @@ -241,26 +250,19 @@ export class AccountData { public locks: (PalletBalancesBalanceLock | BalanceLockTo212)[]; } -// FIXME: the class might be inherited by AccountData -export class AccountDataH160 { +export class AccountDataH160 extends AccountData { constructor( - public free: BN, - public reserved: BN, - public frozen: BN, - public flags: BN, - public vested: BN, - public vesting: ExtendedVestingInfo[], - public vestedClaimable: BN, - public remainingVests: BN, - public locks: (PalletBalancesBalanceLock | BalanceLockTo212)[] - ) {} - - public getUsableTransactionBalance(): BN { - return this.free.sub(this.frozen); - } - - public getUsableFeeBalance(): BN { - return this.free.sub(this.flags); + free: BN, + reserved: BN, + frozen: BN, + flags: BN, + vested: BN, + vesting: ExtendedVestingInfo[], + vestedClaimable: BN, + remainingVests: BN, + locks: (PalletBalancesBalanceLock | BalanceLockTo212)[] + ) { + super(free, reserved, frozen, flags, vested, vesting, vestedClaimable, remainingVests, locks); } } diff --git a/src/hooks/useGovernance.ts b/src/hooks/useGovernance.ts index a543e662d..1b4c741b8 100644 --- a/src/hooks/useGovernance.ts +++ b/src/hooks/useGovernance.ts @@ -1,6 +1,7 @@ import { computed, ref, onMounted } from 'vue'; import { useNetworkInfo } from './useNetworkInfo'; import axios from 'axios'; +import { endpointKey } from 'src/config/chainEndpoints'; export type GovernanceData = { title: string; @@ -11,6 +12,7 @@ export type GovernanceData = { const proposals = ref([]); const ongoingReferenda = ref(); +const hasProposals = computed(() => proposals.value.length > 0); const fetchProposals = async (network: string): Promise => { try { @@ -43,15 +45,11 @@ const fetchOngoingReferenda = async (network: string): Promise { + (referenda: { title: string; referendumIndex: number; state: string }) => { return { title: referenda.title, index: referenda.referendumIndex, - state: referenda.referendumState.state, + state: referenda.state ?? 'Unknown', url: `https://${network}.subsquare.io/democracy/referenda/${referenda.referendumIndex}`, }; } @@ -67,14 +65,17 @@ const fetchOngoingReferenda = async (network: string): Promise(() => { return networkNameSubstrate.value.toLowerCase(); }); const isGovernanceEnabled = computed(() => { - return networkLowercase.value === 'shibuya'; + return ( + currentNetworkIdx.value === endpointKey.ASTAR || + currentNetworkIdx.value === endpointKey.SHIBUYA + ); }); const governanceUrl = computed(() => { @@ -98,5 +99,6 @@ export function useGovernance() { proposals, ongoingReferenda, governanceUrl, + hasProposals, }; } diff --git a/src/hooks/useInflation.ts b/src/hooks/useInflation.ts index 7010cac7b..fc551d690 100644 --- a/src/hooks/useInflation.ts +++ b/src/hooks/useInflation.ts @@ -1,9 +1,8 @@ -import { computed, watch, ref, Ref, ComputedRef } from 'vue'; +import { computed, ref, Ref, ComputedRef, watch } from 'vue'; import { useI18n } from 'vue-i18n'; import { useStore } from 'src/store'; import { container } from 'src/v2/common'; import { - BurnEvent, IBalancesRepository, IInflationRepository, ITokenApiRepository, @@ -28,15 +27,20 @@ type UseInflation = { estimateRealizedInflation: () => Promise; }; +const estimatedInflation = ref(undefined); +const maximumInflationData = ref<[number, number][]>([]); +const realizedInflationData = ref<[number, number][]>([]); +const realizedAdjustableStakersPart = ref(0); + export function useInflation(): UseInflation { const store = useStore(); const { t } = useI18n(); const { eraLengths, currentEraInfo } = useDappStaking(); const { networkNameSubstrate } = useNetworkInfo(); - const estimatedInflation = ref(undefined); - const maximumInflationData = ref<[number, number][]>([]); - const realizedInflationData = ref<[number, number][]>([]); - const realizedAdjustableStakersPart = ref(0); + // const estimatedInflation = ref(undefined); + // const maximumInflationData = ref<[number, number][]>([]); + // const realizedInflationData = ref<[number, number][]>([]); + // const realizedAdjustableStakersPart = ref(0); const activeInflationConfiguration = computed( () => store.getters['general/getActiveInflationConfiguration'] @@ -63,23 +67,6 @@ export function useInflation(): UseInflation { return await inflationRepository.getInflationParams(); }; - const getBurnEvents = async (): Promise => { - // Ignore burn events with less than 1M ASTAR. They are not impacting charts a lot small burn amounts - // could be a spam. - const minBurn = BigInt('1000000000000000000000000'); - const tokenApiRepository = container.get(Symbols.TokenApiRepository); - const burnEvents = await tokenApiRepository.getBurnEvents( - networkNameSubstrate.value.toLowerCase() - ); - - return burnEvents.filter((item) => item.amount >= minBurn); - }; - - /** - * Estimates the realized inflation rate percentage based on the actual total issuance at the beginning - * and estimated total issuance at the end of the current cycle. - * According to the https://github.com/AstarNetwork/astar-apps/issues/1259 - */ const estimateRealizedInflation = async (): Promise => { let inflation: number | undefined; @@ -97,25 +84,6 @@ export function useInflation(): UseInflation { const initialTotalIssuance = await balancesRepository.getTotalIssuance(period1StartBlock - 1); // - const realizedTotalIssuance = await balancesRepository.getTotalIssuance(); - const burnEvents = await getBurnEvents(); - // Add first and last block so charts can be easily drawn. - burnEvents.splice(0, 0, { - blockNumber: period1StartBlock, - amount: BigInt(0), - user: '', - timestamp: 0, - }); - burnEvents.push({ - blockNumber: currentBlock.value, - amount: BigInt(0), - user: '', - timestamp: 0, - }); - - const totalBurn = burnEvents.reduce((acc, item) => acc + item.amount, BigInt(0)); - // Used to calculate inflation rate. - const initialTotalIssuanceWithoutBurn = initialTotalIssuance - totalBurn; - const { periodsPerCycle, standardEraLength, @@ -126,25 +94,13 @@ export function useInflation(): UseInflation { standardEraLength * periodsPerCycle * (standardErasPerBuildAndEarnPeriod + standardErasPerVotingPeriod); - const blockDifference = BigInt(currentBlock.value - period1StartBlock); - const slope = - BigInt((realizedTotalIssuance - initialTotalIssuanceWithoutBurn).toString()) / - blockDifference; // Estimate total issuance at the end of the current cycle. - const endOfCycleBlock = period1StartBlock + cycleLengthInBlocks; - const endOfCycleTotalIssuance = Number( - ethers.utils.formatEther( - slope * BigInt(endOfCycleBlock - period1StartBlock) + initialTotalIssuanceWithoutBurn - ) - ); + const endOfCycleBlock = Math.max(period1StartBlock + cycleLengthInBlocks, currentBlock.value); - // Estimated inflation at the end of the current cycle. + // Calculate realized inflation. inflation = - (100 * - (endOfCycleTotalIssuance - - Number(ethers.utils.formatEther(initialTotalIssuanceWithoutBurn.toString())))) / - endOfCycleTotalIssuance; + 100 * (Number(realizedTotalIssuance - initialTotalIssuance) / Number(initialTotalIssuance)); // Calculate maximum and realized inflation for each era in the cycle. calculateMaximumInflationData( @@ -154,16 +110,8 @@ export function useInflation(): UseInflation { cycleLengthInBlocks, inflationParameters.value?.maxInflationRate ?? 0, eraLengths.value.standardEraLength, - burnEvents - ); - - calculateRealizedInflationData( - period1StartBlock, - currentBlock.value, - slope, - eraLengths.value.standardEraLength, - initialTotalIssuance, - burnEvents + eraLengths.value.standardErasPerVotingPeriod, + eraLengths.value.standardErasPerBuildAndEarnPeriod ); calculateAdjustableStakerRewards( @@ -172,6 +120,8 @@ export function useInflation(): UseInflation { inflationParameters.value.adjustableStakersPart, inflationParameters.value.idealStakingRate ); + + fetchRealizedInflationData(currentBlock.value, realizedTotalIssuance); } catch (error) { console.error('Error calculating realized inflation', error); } @@ -185,60 +135,53 @@ export function useInflation(): UseInflation { firstBlockIssuance: bigint, cycleLengthInBlocks: number, maxInflation: number, - eraLength: number, - burnEvents: BurnEvent[] + standardEraLength: number, + standardErasPerVotingPeriod: number, + standardErasPerBuildAndEarnPeriod: number ): void => { const result: [number, number][] = []; const inflation = BigInt(Math.floor(maxInflation * 100)) * BigInt('10000000000000000'); const cycleProgression = (firstBlockIssuance * inflation) / BigInt('1000000000000000000'); const cycleLength = BigInt(cycleLengthInBlocks); - // One sample per era. - for (let j = 0; j < burnEvents.length - 1; j++) { - for ( - let i = burnEvents[j].blockNumber; - i <= burnEvents[j + 1].blockNumber + eraLength; - i += eraLength - ) { - const inflation = - (cycleProgression * BigInt(i - firstBlock)) / cycleLength + - firstBlockIssuance - - burnEvents[j].amount; + // One sample per era (take into consideration that voting era takes multiple standard era lengths). + let era = 0; + const getEraLength = (era: number, block: number): number => + era === 1 || era % (standardErasPerBuildAndEarnPeriod + 2) === 0 + ? standardEraLength * standardErasPerVotingPeriod + : standardEraLength; - result.push([i, Number(ethers.utils.formatEther(inflation.toString()))]); - } + for (let i = firstBlock - 1; i <= lastBlock; i += getEraLength(era, i)) { + const inflation = + (cycleProgression * BigInt(i - firstBlock)) / cycleLength + firstBlockIssuance; + + result.push([i, Number(ethers.utils.formatEther(inflation.toString()))]); + era++; } maximumInflationData.value = result; }; - const calculateRealizedInflationData = ( - firstBlock: number, - lastBlock: number, - slope: bigint, - eraLength: number, - firstBlockIssuance: bigint, - burnEvents: BurnEvent[] - ): void => { - const result: [number, number][] = []; - - for (let j = 0; j < burnEvents.length - 1; j++) { - for ( - let i = burnEvents[j].blockNumber; - i <= burnEvents[j + 1].blockNumber + eraLength; - i += eraLength - ) { - const currentBlockIssuance = Number( - ethers.utils.formatEther( - slope * BigInt(i - firstBlock) + firstBlockIssuance - burnEvents[j].amount - ) - ); - - result.push([i, currentBlockIssuance]); - } - } + const fetchRealizedInflationData = async ( + currentBlock: number, + totalIssuance: bigint + ): Promise => { + const tokenApiRepository = container.get(Symbols.TokenApiRepository); + const issuanceHistory = await tokenApiRepository.getTokeIssuanceHistory( + networkNameSubstrate.value.toLowerCase() + ); - realizedInflationData.value = result; + // Current issuance is not included in the history yet. + issuanceHistory.push({ + block: currentBlock, + timestamp: Date.now(), + balance: totalIssuance, + }); + + realizedInflationData.value = issuanceHistory.map((item) => [ + item.block, + Number(ethers.utils.formatEther(item.balance.toString())), + ]); }; const calculateAdjustableStakerRewards = ( @@ -256,6 +199,15 @@ export function useInflation(): UseInflation { realizedAdjustableStakersPart.value = Number(result.toFixed(3)); }; + watch(eraLengths, async () => { + if ( + (eraLengths.value && maximumInflationData.value.length === 0) || + realizedInflationData.value.length === 0 + ) { + estimateRealizedInflation(); + } + }); + return { activeInflationConfiguration: activeInflationConfiguration, estimatedInflation, diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index 5bb25d63c..126bf4689 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -1146,5 +1146,7 @@ export default { governance: { newProposals: 'New proposals', ongoingReferenda: 'Ongoing referenda', + governance: 'Governance', + noProposals: 'No proposals at this time. Visit Subsquare to create a new one.', }, }; diff --git a/src/staking-v3/components/data/DataList.vue b/src/staking-v3/components/data/DataList.vue index 841e6dc92..05f355997 100644 --- a/src/staking-v3/components/data/DataList.vue +++ b/src/staking-v3/components/data/DataList.vue @@ -127,7 +127,7 @@