Merge branch 'master' into nymkappa/accelerator-card-on-file
This commit is contained in:
@@ -8,8 +8,10 @@ import { SinglePoolStats } from '../../../interfaces/node-api.interface';
|
||||
|
||||
type MerkleCellType = ' ' | '┬' | '├' | '└' | '│' | '─' | 'leaf';
|
||||
|
||||
|
||||
interface TaggedStratumJob extends StratumJob {
|
||||
tag: string;
|
||||
merkleBranchIds: string[];
|
||||
}
|
||||
|
||||
interface MerkleCell {
|
||||
@@ -46,6 +48,18 @@ function parseTag(scriptSig: string): string {
|
||||
return (ascii.match(/\/.*\//)?.[0] || ascii).trim();
|
||||
}
|
||||
|
||||
function getMerkleBranchIds(merkleBranches: string[], numBranches: number): string[] {
|
||||
let lastHash = '';
|
||||
const ids: string[] = [];
|
||||
for (let i = 0; i < numBranches; i++) {
|
||||
if (merkleBranches[i]) {
|
||||
lastHash = merkleBranches[i];
|
||||
}
|
||||
ids.push(`${i}-${lastHash}`);
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
|
||||
@Component({
|
||||
selector: 'app-stratum-list',
|
||||
templateUrl: './stratum-list.component.html',
|
||||
@@ -81,16 +95,15 @@ export class StratumList implements OnInit, OnDestroy {
|
||||
}
|
||||
|
||||
processJobs(rawJobs: Record<string, StratumJob>): PoolRow[] {
|
||||
const numBranches = Math.max(...Object.values(rawJobs).map(job => job.merkleBranches.length));
|
||||
const jobs: Record<string, TaggedStratumJob> = {};
|
||||
for (const [id, job] of Object.entries(rawJobs)) {
|
||||
jobs[id] = { ...job, tag: parseTag(job.scriptsig) };
|
||||
jobs[id] = { ...job, tag: parseTag(job.scriptsig), merkleBranchIds: getMerkleBranchIds(job.merkleBranches, numBranches) };
|
||||
}
|
||||
if (Object.keys(jobs).length === 0) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const numBranches = Math.max(...Object.values(jobs).map(job => job.merkleBranches.length));
|
||||
|
||||
let trees: MerkleTree[] = Object.keys(jobs).map(job => ({
|
||||
job,
|
||||
size: 1,
|
||||
@@ -100,12 +113,13 @@ export class StratumList implements OnInit, OnDestroy {
|
||||
for (let col = numBranches - 1; col >= 0; col--) {
|
||||
const groups: Record<string, MerkleTree[]> = {};
|
||||
for (const tree of trees) {
|
||||
const hash = jobs[tree.job].merkleBranches[col];
|
||||
if (!groups[hash]) {
|
||||
groups[hash] = [];
|
||||
const branchId = jobs[tree.job].merkleBranchIds[col];
|
||||
if (!groups[branchId]) {
|
||||
groups[branchId] = [];
|
||||
}
|
||||
groups[hash].push(tree);
|
||||
groups[branchId].push(tree);
|
||||
}
|
||||
|
||||
trees = Object.values(groups).map(group => ({
|
||||
hash: jobs[group[0].job].merkleBranches[col],
|
||||
job: group[0].job,
|
||||
|
||||
@@ -7,7 +7,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa
|
||||
faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft,
|
||||
faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck,
|
||||
faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faFaucetDrip, faTimeline,
|
||||
faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faCreditCard } from '@fortawesome/free-solid-svg-icons';
|
||||
faCircleXmark, faCalendarCheck, faMoneyBillTrendUp, faRobot, faShareNodes, faCreditCard } from '@fortawesome/free-solid-svg-icons';
|
||||
import { InfiniteScrollModule } from 'ngx-infinite-scroll';
|
||||
import { MenuComponent } from '@components/menu/menu.component';
|
||||
import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component';
|
||||
@@ -459,6 +459,7 @@ export class SharedModule {
|
||||
library.addIcons(faCalendarCheck);
|
||||
library.addIcons(faMoneyBillTrendUp);
|
||||
library.addIcons(faRobot);
|
||||
library.addIcons(faShareNodes);
|
||||
library.addIcons(faCreditCard);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user