diff --git a/packages/neuron-ui/src/components/CustomRows/DAORecordRow.tsx b/packages/neuron-ui/src/components/CustomRows/DAORecordRow.tsx
index c42b0450bc..0f96f58c7f 100644
--- a/packages/neuron-ui/src/components/CustomRows/DAORecordRow.tsx
+++ b/packages/neuron-ui/src/components/CustomRows/DAORecordRow.tsx
@@ -3,7 +3,7 @@ import { DefaultButton } from 'office-ui-fabric-react'
import { useTranslation } from 'react-i18next'
import { ckbCore, getBlockByNumber } from 'services/chain'
import { showMessage } from 'services/remote'
-import calculateAPC from 'utils/calculateAPC'
+import calculateGlobalAPC from 'utils/calculateGlobalAPC'
import { shannonToCKBFormatter, uniformTimeFormatter, localNumberFormatter } from 'utils/formatters'
import calculateClaimEpochNumber from 'utils/calculateClaimEpochNumber'
import { epochParser } from 'utils/parsers'
@@ -35,6 +35,13 @@ const DAORecord = ({
const [t] = useTranslation()
const [withdrawingEpoch, setWithdrawingEpoch] = useState('')
const [depositEpoch, setDepositEpoch] = useState('')
+ const [apc, setApc] = useState(0)
+
+ useEffect(() => {
+ calculateGlobalAPC(+(depositTimestamp || timestamp)).then(res => {
+ setApc(res)
+ })
+ })
useEffect(() => {
if (!depositOutPoint) {
@@ -143,13 +150,7 @@ const DAORecord = ({
-
- {`APC: ~${calculateAPC(
- compensation.toString(),
- capacity,
- `${Date.now() - +(depositTimestamp || timestamp)}`
- )}%`}
-
+ {`APC: ~${apc}%`}
{uniformTimeFormatter(+timestamp)}
{metaInfo}
diff --git a/packages/neuron-ui/src/utils/calculateAPC.ts b/packages/neuron-ui/src/utils/calculateAPC.ts
deleted file mode 100644
index cae67e4206..0000000000
--- a/packages/neuron-ui/src/utils/calculateAPC.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-const YEAR = 365 * 24 * 60 * 60 * 1000
-const BASE = 10000000
-
-export default (compensation: string, amount: string, duration: string) => {
- const v = (BigInt(compensation) * BigInt(YEAR) * BigInt(BASE)) / (BigInt(amount) * BigInt(duration))
- return `${(Number(v) / (BASE / 100)).toFixed(2)}`
-}
diff --git a/packages/neuron-ui/src/utils/calculateGlobalAPC.ts b/packages/neuron-ui/src/utils/calculateGlobalAPC.ts
index b80971bec1..1bbc771df6 100644
--- a/packages/neuron-ui/src/utils/calculateGlobalAPC.ts
+++ b/packages/neuron-ui/src/utils/calculateGlobalAPC.ts
@@ -8,7 +8,7 @@ const PERIOD_LENGTH = DAYS_PER_PERIOD * MILLI_SECONDS_PER_DAY
let cachedGenesisTimestamp: number | undefined
-export default async (now: number, initialTimestamp: number | undefined = cachedGenesisTimestamp) => {
+export default async (checkPointTimestamp: number, initialTimestamp: number | undefined = cachedGenesisTimestamp) => {
let genesisTimestamp = initialTimestamp
if (genesisTimestamp === undefined) {
genesisTimestamp = await getBlockByNumber('0x0')
@@ -18,12 +18,12 @@ export default async (now: number, initialTimestamp: number | undefined = cached
})
.catch(() => undefined)
}
- if (genesisTimestamp === undefined || now <= genesisTimestamp) {
+ if (genesisTimestamp === undefined || checkPointTimestamp <= genesisTimestamp) {
return 0
}
- const pastPeriods = BigInt(now - genesisTimestamp) / BigInt(PERIOD_LENGTH)
- const pastDays = Math.ceil(((now - genesisTimestamp) % PERIOD_LENGTH) / MILLI_SECONDS_PER_DAY)
+ const pastPeriods = BigInt(checkPointTimestamp - genesisTimestamp) / BigInt(PERIOD_LENGTH)
+ const pastDays = Math.ceil(((checkPointTimestamp - genesisTimestamp) % PERIOD_LENGTH) / MILLI_SECONDS_PER_DAY)
const realSecondaryOffer =
BigInt(4) * SECONDARY_OFFER * pastPeriods +