2022-05-10 14:57:43 +02:00
< app-indexing-progress * ngIf = "!widget" > < / app-indexing-progress >
2022-05-02 17:28:58 +09:00
2022-03-14 18:06:54 +01:00
< div [ class ] = " widget = == false ? ' full-container ' : ' ' " >
2022-01-17 15:34:34 +09:00
2022-03-07 19:54:17 +01:00
< div * ngIf = "widget" >
< div class = "pool-distribution" * ngIf = "(miningStatsObservable$ | async) as miningStats; else loadingReward" >
< div class = "item" >
2022-06-11 00:04:19 +02:00
< h5 class = "card-title d-inline-block" i18n = "mining.miners-luck" i18n-ngbTooltip = "mining.miners-luck-1w"
2023-11-25 17:49:37 +09:00
ngbTooltip="Pools luck (1 week)" placement="bottom" #minersluck [disableTooltip]="!isEllipsisActive(minersluck)">Pools Luck< / h5 >
2022-06-11 00:04:19 +02:00
< p class = "card-text" i18n-ngbTooltip = "mining.pools-luck-desc"
ngbTooltip="The overall luck of all mining pools over the past week. A luck bigger than 100% means the average block time for the current epoch is less than 10 minutes." placement="bottom">
2022-03-07 19:54:17 +01:00
{{ miningStats['minersLuck'] }}%
< / p >
< / div >
< div class = "item" >
2022-06-11 00:04:19 +02:00
< h5 class = "card-title d-inline-block" i18n = "mining.miners-count" i18n-ngbTooltip = "mining.miners-count-1w"
2023-11-25 17:49:37 +09:00
ngbTooltip="Pools count (1w)" placement="bottom" #poolscount [disableTooltip]="!isEllipsisActive(poolscount)">Pools Count< / h5 >
2022-06-11 00:04:19 +02:00
< p class = "card-text" i18n-ngbTooltip = "mining.pools-count-desc"
ngbTooltip="How many unique pools found at least one block over the past week." placement="bottom">
{{ miningStats.pools.length }}
2022-03-07 19:54:17 +01:00
< / p >
< / div >
< div class = "item" >
2023-11-25 17:49:37 +09:00
< h5 class = "card-title d-inline-block" i18n = "shared.blocks-1w" i18n-ngbTooltip = "master-page.blocks"
2022-06-11 00:04:19 +02:00
ngbTooltip="Blocks (1w)" placement="bottom" #blockscount [disableTooltip]="!isEllipsisActive(blockscount)">Blocks (1w)< / h5 >
< p class = "card-text" i18n-ngbTooltip = "mining.blocks-count-desc"
ngbTooltip="The number of blocks found over the past week." placement="bottom">
{{ miningStats.blockCount }}
2022-03-07 19:54:17 +01:00
< / p >
< / div >
2022-03-05 18:47:21 +01:00
< / div >
< / div >
2022-03-14 18:06:54 +01:00
< div class = "card-header" * ngIf = "!widget" >
2023-03-21 16:02:46 +09:00
< div class = "d-flex d-md-table-cell align-items-baseline" >
2022-07-16 21:37:45 +02:00
< span i18n = "mining.pools" > Pools Ranking< / span >
< button class = "btn p-0 pl-2" style = "margin: 0 0 4px 0px" ( click ) = " onSaveChart ( ) " >
< fa-icon [ icon ] = " [ ' fas ' , ' download ' ] " [ fixedWidth ] = " true " > < / fa-icon >
< / button >
< / div >
2022-03-14 18:06:54 +01:00
< form [ formGroup ] = " radioGroupForm " class = "formRadioGroup"
2022-04-15 20:43:10 +09:00
*ngIf="!widget & & (miningStatsObservable$ | async) as stats">
2023-02-21 18:48:09 +09:00
< div class = "btn-group btn-group-toggle" name = "radioBasic" [ class ] = " { ' disabled ' : isLoading } " >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 144" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 24h ' " >
< input type = "radio" [ value ] = " ' 24h ' " fragment = "24h" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 24h ' " formControlName = "dateSpan" > 24h
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 432" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 3d ' " >
< input type = "radio" [ value ] = " ' 3d ' " fragment = "3d" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 3d ' " formControlName = "dateSpan" > 3D
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 1008" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 1w ' " >
< input type = "radio" [ value ] = " ' 1w ' " fragment = "1w" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 1w ' " formControlName = "dateSpan" > 1W
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 4320" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 1m ' " >
< input type = "radio" [ value ] = " ' 1m ' " fragment = "1m" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 1m ' " formControlName = "dateSpan" > 1M
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 12960" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 3m ' " >
< input type = "radio" [ value ] = " ' 3m ' " fragment = "3m" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 3m ' " formControlName = "dateSpan" > 3M
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 25920" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 6m ' " >
< input type = "radio" [ value ] = " ' 6m ' " fragment = "6m" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 6m ' " formControlName = "dateSpan" > 6M
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 52560" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 1y ' " >
< input type = "radio" [ value ] = " ' 1y ' " fragment = "1y" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 1y ' " formControlName = "dateSpan" > 1Y
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 105120" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 2y ' " >
< input type = "radio" [ value ] = " ' 2y ' " fragment = "2y" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 2y ' " formControlName = "dateSpan" > 2Y
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" * ngIf = "stats.totalBlockCount >= 157680" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' 3y ' " >
< input type = "radio" [ value ] = " ' 3y ' " fragment = "3y" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' 3y ' " formControlName = "dateSpan" > 3Y
2022-01-06 19:59:33 +09:00
< / label >
2022-11-28 16:00:50 +09:00
< label class = "btn btn-primary btn-sm" [ class . active ] = " radioGroupForm . get ( ' dateSpan ' ) . value = == ' all ' " >
< input type = "radio" [ value ] = " ' all ' " fragment = "all" [ routerLink ] = " [ ' / graphs / mining / pools ' | relativeUrl ] " [ attr . data-cy ] = " ' all ' " formControlName = "dateSpan" > < span i18n > All< / span >
2022-01-06 19:59:33 +09:00
< / label >
< / div >
< / form >
< / div >
2023-05-06 00:31:08 +04:00
< div [ class ] = " ! widget ? ' ' : ' pb-0 ' " class = "container pb-lg-0" >
2022-08-11 10:19:13 +02:00
< div [ class ] = " widget ? ' chart-widget ' : ' chart ' " echarts [ initOpts ] = " chartInitOptions " [ options ] = " chartOptions "
(chartInit)="onChartInit($event)">
2022-03-31 18:14:07 +09:00
< / div >
2022-03-14 18:06:54 +01:00
< div class = "text-center loadingGraphs" * ngIf = "isLoading" >
< div class = "spinner-border text-light" > < / div >
< / div >
< table * ngIf = "widget === false" class = "table table-borderless text-center pools-table" >
< thead >
< tr >
2023-03-21 16:02:46 +09:00
< th class = "d-none d-md-table-cell" i18n = "mining.rank" > Rank< / th >
2022-03-14 18:06:54 +01:00
< th class = "" > < / th >
< th class = "" i18n = "mining.pool-name" > Pool< / th >
2022-04-11 18:17:36 +09:00
< th class = "" * ngIf = "this.miningWindowPreference === '24h'" i18n = "mining.hashrate" > Hashrate< / th >
2022-03-14 18:06:54 +01:00
< th class = "" i18n = "master-page.blocks" > Blocks< / th >
2023-02-20 17:47:45 +09:00
< th * ngIf = "auditAvailable" class = "health text-right widget" i18n = "latest-blocks.avg_health"
i18n-ngbTooltip="latest-blocks.avg_health" ngbTooltip="Avg Health" placement="bottom" #health [disableTooltip]="!isEllipsisActive(health)">Avg Health< / th >
2023-07-03 16:00:32 +02:00
< th * ngIf = "auditAvailable" class = "d-none d-sm-table-cell" i18n = "mining.fees-per-block" > Avg Block Fees< / th >
2023-11-25 17:49:37 +09:00
< th class = "d-none d-lg-table-cell" i18n = "mining.empty-blocks" > Empty Blocks< / th >
2022-03-14 18:06:54 +01:00
< / tr >
< / thead >
2022-07-06 10:00:32 -07:00
< tbody [ attr . data-cy ] = " ' pools-table ' " * ngIf = "(miningStatsObservable$ | async) as miningStats" >
2022-03-14 18:06:54 +01:00
< tr * ngFor = "let pool of miningStats.pools" >
2023-03-21 16:02:46 +09:00
< td class = "d-none d-md-table-cell" > {{ pool.rank }}< / td >
2022-05-13 15:34:26 +02:00
< td class = "text-right" >
2022-07-11 13:32:24 +02:00
< img width = "25" height = "25" src = "{{ pool.logo }}" [ alt ] = " pool . name + ' mining pool logo ' " onError = "this.src = '/resources/mining-pools/default.svg'" >
2022-05-13 15:34:26 +02:00
< / td >
2022-03-25 14:22:22 +09:00
< td class = "" > < a [ routerLink ] = " [ ( ' / mining / pool / ' + pool . slug ) | relativeUrl ] " > {{ pool.name }}< / a > < / td >
2023-02-21 18:48:09 +09:00
< td class = "" * ngIf = "this.miningWindowPreference === '24h'" > {{ pool.lastEstimatedHashrate }} {{
2022-03-14 18:06:54 +01:00
miningStats.miningUnits.hashrateUnit }}< / td >
2023-02-20 18:13:56 +09:00
< td class = "d-flex justify-content-center" >
2023-03-21 16:02:46 +09:00
{{ pool.blockCount }}< span class = "d-none d-md-table-cell" > ({{ pool.share }}%)< / span >
2023-02-20 18:13:56 +09:00
< / td >
2023-02-20 17:47:45 +09:00
< td * ngIf = "auditAvailable" class = "health text-right" [ ngClass ] = " { ' widget ' : widget , ' legacy ' : ! indexingAvailable } " >
< a
class="health-badge badge"
[class.badge-success]="pool.avgMatchRate >= 99"
[class.badge-warning]="pool.avgMatchRate >= 75 & & pool.avgMatchRate < 99 "
[class.badge-danger]="pool.avgMatchRate < 75 "
*ngIf="pool.avgMatchRate != null; else nullHealth"
>{{ pool.avgMatchRate }}%< / a >
< ng-template # nullHealth >
< span class = "health-badge badge badge-secondary" i18n = "unknown" > Unknown< / span >
< / ng-template >
< / td >
2023-07-03 16:00:32 +02:00
< td * ngIf = "auditAvailable" class = "d-none d-sm-table-cell" >
< span * ngIf = "pool.avgFeeDelta != null; else nullFeeDelta" class = "difference" [ class . positive ] = " pool . avgFeeDelta > = 0" [class.negative]="pool.avgFeeDelta < 0 " >
{{ pool.avgFeeDelta > 0 ? '+' : '' }}{{ (pool.avgFeeDelta * 100) | amountShortener: 2 }}%
< / span >
< ng-template # nullFeeDelta >
-
< / ng-template >
< / td >
< td class = "d-none d-lg-table-cell" > {{ pool.emptyBlocks }} ({{ pool.emptyBlockRatio }}%)< / td >
2022-03-14 18:06:54 +01:00
< / tr >
< tr style = "border-top: 1px solid #555" >
2023-03-21 16:02:46 +09:00
< td class = "d-none d-md-table-cell" > < / td >
2022-03-14 18:06:54 +01:00
< td class = "text-right" > < / td >
2022-05-17 19:27:41 +04:00
< td class = "" > < b i18n = "mining.all-miners" > All miners< / b > < / td >
2022-04-11 18:17:36 +09:00
< td class = "" * ngIf = "this.miningWindowPreference === '24h'" > < b > {{ miningStats.lastEstimatedHashrate}} {{
2022-03-14 18:06:54 +01:00
miningStats.miningUnits.hashrateUnit }}< / b > < / td >
< td class = "" > < b > {{ miningStats.blockCount }}< / b > < / td >
2023-07-20 10:36:26 +09:00
< td * ngIf = "auditAvailable" > < / td >
< td * ngIf = "auditAvailable" > < / td >
2023-03-21 16:02:46 +09:00
< td class = "d-none d-md-table-cell" > < b > {{ miningStats.totalEmptyBlock }} ({{ miningStats.totalEmptyBlockRatio
2022-03-14 18:06:54 +01:00
}}%)< / b > < / td >
< / tr >
< / tbody >
< / table >
< / div >
2022-01-06 19:59:33 +09:00
< / div >
2022-03-07 19:54:17 +01:00
< ng-template # loadingReward >
< div class = "pool-distribution" >
< div class = "item" >
2023-11-25 17:49:37 +09:00
< h5 class = "card-title" i18n = "mining.miners-luck" > Pools Luck< / h5 >
2022-03-07 19:54:17 +01:00
< p class = "card-text" >
< span class = "skeleton-loader skeleton-loader-big" > < / span >
< / p >
< / div >
< div class = "item" >
2023-11-25 17:49:37 +09:00
< h5 class = "card-title" i18n = "mining.miners-count" > Pools Count< / h5 >
2022-03-07 19:54:17 +01:00
< p class = "card-text" >
< span class = "skeleton-loader skeleton-loader-big" > < / span >
< / p >
< / div >
< div class = "item" >
2023-11-25 17:49:37 +09:00
< h5 class = "card-title" i18n = "shared.blocks-1w" > Blocks (1w)< / h5 >
2022-03-07 19:54:17 +01:00
< p class = "card-text" >
< span class = "skeleton-loader skeleton-loader-big" > < / span >
< / p >
< / div >
< / div >
2022-06-11 00:04:19 +02:00
< / ng-template >