import React, { useState, useEffect } from 'react' import { useSelector } from 'react-redux'; import { VictoryPie } from 'victory'; import Winner from '../components/WinnerStat'; import { getOrchestratorScores } from "../actions/livepeer"; const WinnerMonth = (obj) => { const livepeer = useSelector((state) => state.livepeerstate); const [thisScores, setThisScores] = useState(null); useEffect(() => { const setScore = async () => { if (!obj.data.testScores) { const freshScore = await getOrchestratorScores(obj.data.year, obj.data.month); if (freshScore) { setThisScores(freshScore); } } else { setThisScores(obj.data.testScores); } } setScore(); }, [obj.data.testScores]); const getName = (address) => { let thisDomain = null; // Lookup domain in cache if (livepeer.ensDomainMapping) { for (const thisAddr of livepeer.ensDomainMapping) { if (thisAddr.address === address) { thisDomain = thisAddr; break; } } } // Lookup current info in cache only if this addr has a mapped ENS domain if (thisDomain && thisDomain.domain) { for (const thisAddr of livepeer.ensInfoMapping) { if (thisAddr.domain === thisDomain.domain) { return thisAddr.domain; } } } if (livepeer.threeBoxInfo) { for (const thisAddr of livepeer.threeBoxInfo) { if (thisAddr.address === address) { if (thisAddr.name) { return thisAddr.name; } else { return (address.substring(0, 14) + ".."); } break; } } } return (address.substring(0, 14) + ".."); } // Show all orchs (if latestTotalStake exists) or show only those in winningTicketsReceived let orchList; let ticketList = obj.data.winningTicketsReceived || []; let commissionList = obj.data.latestCommission || []; let stakeList = obj.data.latestTotalStake || []; // Pies for stake overview, if have stake data for that month saved let stakeObj; let totalStakeSum = 0; if (obj.data.latestTotalStake && obj.data.latestTotalStake.length) { orchList = [...obj.data.latestTotalStake]; let pieList = []; let otherSum = 0; let ticketIdx = obj.data.latestTotalStake.length - 1; // Calc total stake at that time while (ticketIdx >= 0) { const thisTicket = obj.data.latestTotalStake[ticketIdx]; ticketIdx -= 1; totalStakeSum += thisTicket.totalStake; } ticketIdx = obj.data.latestTotalStake.length - 1; // Create pie chart while (ticketIdx >= 0) { const thisTicket = obj.data.latestTotalStake[ticketIdx]; ticketIdx -= 1; if ((thisTicket.totalStake / totalStakeSum) < 0.04) { otherSum += thisTicket.totalStake; } else { pieList.push({ address: getName(thisTicket.address), sum: thisTicket.totalStake }); } } pieList.push({ address: "Other", sum: otherSum }); stakeObj =
🔌 {obj.data.reactivationCount} Orchestrators reactivated
🔧 {obj.data.activationCount} Orchestrator joined with an initial stake of {obj.data.activationInitialSum.toFixed(2)} LPT
📉 {obj.data.unbondCount} delegators unbonded {obj.data.unbondStakeSum.toFixed(2)} LPT
⌛ {obj.data.rewardCount} reward calls were made worth {obj.data.rewardAmountSum.toFixed(2)} LPT
💸 {obj.data.claimRewardSum.toFixed(2)} LPT and {obj.data.claimFeeSum.toFixed(2)} ETH rewards were claimed by {obj.data.claimCount} delegators
🏦 {obj.data.withdrawStakeAmountSum.toFixed(2)} LPT worth of staking rewards were withdrawn by {obj.data.withdrawStakeCount} delegators
🏦 {obj.data.withdrawFeesAmountSum.toFixed(2)} ETH worth of transcoding fees were withdrawn by {obj.data.withdrawFeesCount} delegators
📈 {obj.data.bondCount} accounts delegated for the first time for a total of {obj.data.bondStakeSum.toFixed(2)} LPT
🔄 {obj.data.moveStakeSum.toFixed(2)} LPT stake got moved around in {obj.data.moveStakeCount} transactions
🎫 {obj.data.winningTicketsReceivedCount} winning tickets were sent out worth {obj.data.winningTicketsReceivedSum.toFixed(2)} ETH
🎟️ {obj.data.winningTicketsRedeemedCount} winning tickets were redeemed worth {obj.data.winningTicketsRedeemedSum.toFixed(2)} ETH