Skip to content

Commit

Permalink
Fix collator power (#73)
Browse files Browse the repository at this point in the history
* Fix active collator power

* Calculate the collator's power by its staked
  • Loading branch information
JayJay1024 authored Dec 14, 2023
1 parent 62749e4 commit 8f84479
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 26 deletions.
4 changes: 2 additions & 2 deletions src/components/collator-select-modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import Image from "next/image";
import { useAccount } from "wagmi";
import Table, { ColumnType } from "./table";
import Jazzicon from "./jazzicon";
import { commissionWeightedPower, prettyNumber } from "@/utils";
import { prettyNumber } from "@/utils";
import { notification } from "./notification";
import DisplayAccountName from "./display-account-name";
import { useStaking } from "@/hooks";
Expand Down Expand Up @@ -100,7 +100,7 @@ const columns: ColumnType<DataSource>[] = [
</div>
</div>
),
render: (row) => <span>{prettyNumber(commissionWeightedPower(row.power, row.commission))}</span>,
render: (row) => <span>{prettyNumber(row.power)}</span>,
},
{
key: "commission",
Expand Down
51 changes: 27 additions & 24 deletions src/hooks/use-collator-power.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useEffect, useState } from "react";
import { from, of, forkJoin, switchMap, Subscription } from "rxjs";
import { useApi } from "./use-api";
import { DarwiniaStakingLedger } from "@/types";
import { stakingToPower } from "@/utils";
import { commissionWeightedPower, stakingToPower } from "@/utils";

interface DepositJson {
id: number;
Expand Down Expand Up @@ -46,6 +46,7 @@ function formatExposuresData(data: unknown) {

export const useCollatorPower = (
collatorNominators: { [collator: string]: string[] | undefined },
collatorCommission: { [collator: string]: string | undefined },
ringPool: bigint,
ktonPool: bigint,
defaultValue: DefaultValue
Expand Down Expand Up @@ -104,28 +105,30 @@ export const useCollatorPower = (
}

const nominators = collatorNominators[cur] || [];
const power = nominators.reduce((acc, cur) => {
const ledger = parsedLedgers[cur];
const deposits = parsedDeposits[cur] || [];

if (ledger) {
const stakedDeposit = deposits
.filter(({ id }) => ledger.stakedDeposits?.includes(id))
.reduce((acc, cur) => acc + BigInt(cur.value), 0n);
return (
acc +
stakingToPower(
BigInt(ledger.stakedRing) + stakedDeposit,
BigInt(ledger.stakedKton),
ringPool,
ktonPool
)
);
}
return acc;
}, 0n);

return { ...acc, [cur]: power };
const { stakedDeposit, stakedRing, stakedKton } = nominators.reduce(
(acc, cur) => {
const ledger = parsedLedgers[cur];
const deposits = parsedDeposits[cur] || [];

if (ledger) {
const stakedDeposit = deposits
.filter(({ id }) => ledger.stakedDeposits?.includes(id))
.reduce((acc, cur) => acc + BigInt(cur.value), 0n);

return {
stakedDeposit: acc.stakedDeposit + stakedDeposit,
stakedRing: acc.stakedRing + BigInt(ledger.stakedRing),
stakedKton: acc.stakedKton + BigInt(ledger.stakedKton),
};
}
return acc;
},
{ stakedDeposit: 0n, stakedRing: 0n, stakedKton: 0n }
);
const power = stakingToPower(stakedRing + stakedDeposit, stakedKton, ringPool, ktonPool);

const commission = collatorCommission[cur] || "0.00%";
return { ...acc, [cur]: commissionWeightedPower(power, commission) };
}, {} as { [collator: string]: bigint | undefined })
);
},
Expand All @@ -137,7 +140,7 @@ export const useCollatorPower = (
}

return () => sub$$?.unsubscribe();
}, [polkadotApi, collatorNominators, ringPool, ktonPool]);
}, [polkadotApi, collatorNominators, collatorCommission, ringPool, ktonPool]);

return { collatorPower, isCollatorPowerInitialized };
};
1 change: 1 addition & 0 deletions src/providers/staking-provider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ export function StakingProvider({ children }: PropsWithChildren<unknown>) {
const { collatorNominators, isCollatorNominatorsInitialized } = useCollatorNominators(defaultValue);
const { collatorPower, isCollatorPowerInitialized } = useCollatorPower(
collatorNominators,
collatorCommission,
ringPool,
ktonPool,
defaultValue
Expand Down

0 comments on commit 8f84479

Please sign in to comment.