add coinbase tag column to stratum table

This commit is contained in:
Mononaut 2024-09-28 14:51:05 +00:00
parent 55f428ce9f
commit 43dc617cb3
No known key found for this signature in database
GPG Key ID: A3F058E41374C04E
3 changed files with 38 additions and 4 deletions

View File

@ -9,6 +9,7 @@
<tr>
<td class="height">Height</td>
<td class="reward">Reward</td>
<td class="tag">Coinbase Tag</td>
<td class="merkle" [attr.colspan]="rows[0]?.merkleCells?.length || 4">
Merkle Branches
</td>
@ -24,6 +25,9 @@
<td class="reward">
<app-amount [satoshis]="row.job.reward"></app-amount>
</td>
<td class="tag">
{{ row.job.tag }}
</td>
@for (cell of row.merkleCells; track $index) {
<td class="merkle" [style.background-color]="cell.hash ? '#' + cell.hash.slice(0, 6) : ''">
<div class="pipe-segment" [class]="pipeToClass(cell.type)"></div>

View File

@ -6,10 +6,17 @@ td {
position: relative;
height: 2em;
&.height, &.reward {
&.height, &.reward, &.tag {
padding: 0 5px;
}
&.tag {
max-width: 180px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
&.pool {
padding-left: 5px;
padding-right: 20px;

View File

@ -8,10 +8,14 @@ import { SinglePoolStats } from '../../../interfaces/node-api.interface';
type MerkleCellType = ' ' | '┬' | '├' | '└' | '│' | '─' | 'leaf';
interface TaggedStratumJob extends StratumJob {
tag: string;
}
interface MerkleCell {
hash: string;
type: MerkleCellType;
job?: StratumJob;
job?: TaggedStratumJob;
}
interface MerkleTree {
@ -22,10 +26,25 @@ interface MerkleTree {
}
interface PoolRow {
job: StratumJob;
job: TaggedStratumJob;
merkleCells: MerkleCell[];
}
function parseTag(scriptSig: string): string {
const hex = scriptSig.slice(8).replace(/6d6d.{64}/, '');
const bytes: number[] = [];
for (let i = 0; i < hex.length; i += 2) {
bytes.push(parseInt(hex.substr(i, 2), 16));
}
const ascii = new TextDecoder('utf8').decode(Uint8Array.from(bytes)).replace(/\uFFFD/g, '').replace(/\\0/g, '');
if (ascii.includes('/ViaBTC/')) {
return '/ViaBTC/';
} else if (ascii.includes('SpiderPool/')) {
return 'SpiderPool/';
}
return ascii.match(/\/.*\//)?.[0] || ascii;
}
@Component({
selector: 'app-stratum-list',
templateUrl: './stratum-list.component.html',
@ -60,7 +79,11 @@ export class StratumList implements OnInit, OnDestroy {
this.websocketService.startTrackStratum('all');
}
processJobs(jobs: Record<string, StratumJob>): PoolRow[] {
processJobs(rawJobs: Record<string, StratumJob>): PoolRow[] {
const jobs: Record<string, TaggedStratumJob> = {};
for (const [id, job] of Object.entries(rawJobs)) {
jobs[id] = { ...job, tag: parseTag(job.scriptsig) };
}
if (Object.keys(jobs).length === 0) {
return [];
}