import React from "react";
import { Account, useFetchAccountInfo } from "providers/accounts";
import {
SysvarAccount,
SysvarClockAccount,
SysvarEpochScheduleAccount,
SysvarFeesAccount,
SysvarRecentBlockhashesAccount,
SysvarRentAccount,
SysvarRewardsAccount,
SysvarSlotHashesAccount,
SysvarSlotHistoryAccount,
SysvarStakeHistoryAccount,
} from "validators/accounts/sysvar";
import { TableCardBody } from "components/common/TableCardBody";
import {
AccountHeader,
AccountAddressRow,
AccountBalanceRow,
} from "components/common/Account";
import { displayTimestamp } from "utils/date";
import { Slot } from "components/common/Slot";
import { Epoch } from "components/common/Epoch";
export function SysvarAccountSection({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarAccount;
}) {
switch (sysvarAccount.type) {
case "clock":
return (
);
case "rent":
return (
);
case "rewards":
return (
);
case "epochSchedule":
return (
);
case "fees":
return (
);
case "recentBlockhashes":
return (
);
case "slotHashes":
return (
);
case "slotHistory":
return (
);
case "stakeHistory":
return (
);
}
}
function SysvarAccountRecentBlockhashesCard({
account,
}: {
account: Account;
sysvarAccount: SysvarRecentBlockhashesAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
);
}
function SysvarAccountSlotHashes({
account,
}: {
account: Account;
sysvarAccount: SysvarSlotHashesAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
);
}
function SysvarAccountSlotHistory({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarSlotHistoryAccount;
}) {
const refresh = useFetchAccountInfo();
const history = Array.from(
{
length: 100,
},
(v, k) => sysvarAccount.info.nextSlot - k
);
return (
refresh(account.pubkey, "parsed")}
/>
Slot History{" "}
(previous 100 slots)
|
{history.map((val) => (
))}
|
);
}
function SysvarAccountStakeHistory({
account,
}: {
account: Account;
sysvarAccount: SysvarStakeHistoryAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
);
}
function SysvarAccountFeesCard({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarFeesAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
Lamports Per Signature |
{sysvarAccount.info.feeCalculator.lamportsPerSignature}
|
);
}
function SysvarAccountEpochScheduleCard({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarEpochScheduleAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
Slots Per Epoch |
{sysvarAccount.info.slotsPerEpoch} |
Leader Schedule Slot Offset |
{sysvarAccount.info.leaderScheduleSlotOffset}
|
Epoch Warmup Enabled |
{sysvarAccount.info.warmup ? "true" : "false"}
|
First Normal Epoch |
{sysvarAccount.info.firstNormalEpoch} |
First Normal Slot |
|
);
}
function SysvarAccountClockCard({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarClockAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
Timestamp |
{displayTimestamp(sysvarAccount.info.unixTimestamp * 1000)}
|
Epoch |
|
Leader Schedule Epoch |
|
Slot |
|
);
}
function SysvarAccountRentCard({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarRentAccount;
}) {
const refresh = useFetchAccountInfo();
return (
refresh(account.pubkey, "parsed")}
/>
Burn Percent |
{sysvarAccount.info.burnPercent + "%"}
|
Exemption Threshold |
{sysvarAccount.info.exemptionThreshold} years
|
Lamports Per Byte Year |
{sysvarAccount.info.lamportsPerByteYear}
|
);
}
function SysvarAccountRewardsCard({
account,
sysvarAccount,
}: {
account: Account;
sysvarAccount: SysvarRewardsAccount;
}) {
const refresh = useFetchAccountInfo();
const validatorPointValueFormatted = new Intl.NumberFormat("en-US", {
maximumSignificantDigits: 20,
}).format(sysvarAccount.info.validatorPointValue);
return (
refresh(account.pubkey, "parsed")}
/>
Validator Point Value |
{validatorPointValueFormatted} lamports
|
);
}