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 >