diff --git a/blocks/index.ts b/blocks/index.ts index 1e9565c..9232fad 100644 --- a/blocks/index.ts +++ b/blocks/index.ts @@ -6,10 +6,9 @@ import { hexToAscii } from "../utils.ts"; export interface IBlock { height: number; - // hash: string; signals: boolean | undefined; - coinbase: string | undefined; miner: string | undefined; + minerWebsite: string | undefined; } let blocks: IBlock[] = []; @@ -23,16 +22,16 @@ async function createBlock(height: number): Promise { const payoutAddress = generationTransaction.vout[0]?.scriptPubKey?.addresses?.[0] ?? ""; const coinbase = hexToAscii(generationTransaction.vin?.[0]?.coinbase ?? ""); - const miner = (() => { + const minerData = (() => { for (const [tag, minerInfo] of Object.entries(miners.coinbase_tags)) { if (coinbase.includes(tag)) { - return minerInfo.name; + return { name: minerInfo.name, website: minerInfo.link }; } } for (const [tag, minerInfo] of Object.entries(miners.payout_addresses)) { if (payoutAddress == tag) { - return minerInfo.name; + return { name: minerInfo.name, website: minerInfo.link }; } } @@ -40,10 +39,9 @@ async function createBlock(height: number): Promise { })(); return { - coinbase, - miner, + miner: minerData?.name, + minerWebsite: minerData?.website, height: block.height, - // hash: blockheader.hash, signals: (block.version & (config.fork.versionBit + 1)) === config.fork.versionBit + 1, }; } @@ -56,8 +54,8 @@ async function setupPeriod(blockCount: number, startHeight: number, endHeight: n blocks.push({ height: i, signals: undefined, - coinbase: undefined, miner: undefined, + minerWebsite: undefined, }); continue; } diff --git a/frontend/pages/miners.tsx b/frontend/pages/miners.tsx index 8633435..bdb8ab3 100644 --- a/frontend/pages/miners.tsx +++ b/frontend/pages/miners.tsx @@ -50,6 +50,9 @@ const TableHeader = styled.th` const Cell = styled.td` color: #f0f0f0; + > a { + color: #f0f0f0; + } padding: 17px; `; @@ -62,6 +65,8 @@ interface IMinerData { [key: string]: { name: string; signals: boolean; + website: string | undefined; + numBlocks: number; }; } @@ -86,8 +91,11 @@ export default function Miners() { prev[currBlock.miner] = { name: currBlock.miner, signals: currBlock.signals ?? false, + website: currBlock.minerWebsite, + numBlocks: 1, }; } + prev[currBlock.miner].numBlocks++; return prev; }, {} as IMinerData); }, [blocks]); @@ -104,15 +112,25 @@ export default function Miners() { Miner name + Share Signals {Object.entries(miners).map(([_, miner]) => { + console.log(miner.numBlocks / 2016); return ( - {miner.name} + + {miner.website && ( + + {miner.name} + + )} + {!miner.website && miner.name} + + {((miner.numBlocks / 2016) * 100).toFixed(1)}% {miner.signals && <>✅} {!miner.signals && <>🚫}