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
); }