diff --git a/.github/workflows/cypress.yml b/.github/workflows/cypress.yml index 0cd95e568..732923ce2 100644 --- a/.github/workflows/cypress.yml +++ b/.github/workflows/cypress.yml @@ -21,7 +21,7 @@ jobs: - name: Setup node uses: actions/setup-node@v2 with: - node-version: 16.10.0 + node-version: 16.15.0 cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: ${{ matrix.browser }} browser tests (Mempool) diff --git a/.nvmrc b/.nvmrc index 56bfee434..7fd023741 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16.10.0 +v16.15.0 diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 6af631382..293862e93 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -134,7 +134,7 @@ class Blocks { blockExtended.extras.avgFeeRate = stats.avgfeerate; } - if (Common.indexingEnabled()) { + if (['mainnet', 'testnet', 'signet', 'regtest'].includes(config.MEMPOOL.NETWORK)) { let pool: PoolTag; if (blockExtended.extras?.coinbaseTx !== undefined) { pool = await this.$findBlockMiner(blockExtended.extras?.coinbaseTx); @@ -143,7 +143,8 @@ class Blocks { } if (!pool) { // We should never have this situation in practise - logger.warn(`Cannot assign pool to block ${blockExtended.height} and 'unknown' pool does not exist. Check your "pools" table entries`); + logger.warn(`Cannot assign pool to block ${blockExtended.height} and 'unknown' pool does not exist. ` + + `Check your "pools" table entries`); return blockExtended; } @@ -389,6 +390,42 @@ class Blocks { return prepareBlock(blockExtended); } + /** + * Index a block by hash if it's missing from the database. Returns the block after indexing + */ + public async $getBlock(hash: string): Promise { + // Check the memory cache + const blockByHash = this.getBlocks().find((b) => b.id === hash); + if (blockByHash) { + return blockByHash; + } + + // Block has already been indexed + if (Common.indexingEnabled()) { + const dbBlock = await blocksRepository.$getBlockByHash(hash); + if (dbBlock != null) { + return prepareBlock(dbBlock); + } + } + + const block = await bitcoinApi.$getBlock(hash); + + // Not Bitcoin network, return the block as it + if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === false) { + return block; + } + + // Bitcoin network, add our custom data on top + const transactions = await this.$getTransactionsExtended(hash, block.height, true); + const blockExtended = await this.$getBlockExtended(block, transactions); + if (Common.indexingEnabled()) { + delete(blockExtended['coinbaseTx']); + await blocksRepository.$saveBlockInDatabase(blockExtended); + } + + return blockExtended; + } + public async $getBlocksExtras(fromHeight?: number, limit: number = 15): Promise { // Note - This API is breaking if indexing is not available. For now it is okay because we only // use it for the mining pages, and mining pages should not be available if indexing is turned off. diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 45ef5f576..d4b57f204 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -169,12 +169,12 @@ export class Common { default: return null; } } - + static indexingEnabled(): boolean { return ( - ['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) && + ['mainnet', 'testnet', 'signet', 'regtest'].includes(config.MEMPOOL.NETWORK) && config.DATABASE.ENABLED === true && - config.MEMPOOL.INDEXING_BLOCKS_AMOUNT != 0 + config.MEMPOOL.INDEXING_BLOCKS_AMOUNT !== 0 ); } } diff --git a/backend/src/index.ts b/backend/src/index.ts index 8560064a9..f2658a22a 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -350,7 +350,8 @@ class Server { this.app .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-extras', routes.getBlocksExtras) - .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-extras/:height', routes.getBlocksExtras); + .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-extras/:height', routes.getBlocksExtras) + .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash', routes.getBlock); if (config.MEMPOOL.BACKEND !== 'esplora') { this.app @@ -362,7 +363,6 @@ class Server { .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/hex', routes.getRawTransaction) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/status', routes.getTransactionStatus) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/outspends', routes.getTransactionOutspends) - .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash', routes.getBlock) .get(config.MEMPOOL.API_URL_PREFIX + 'block/:hash/header', routes.getBlockHeader) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks', routes.getBlocks) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks/:height', routes.getBlocks) diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 0792f130f..47a18fc9b 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -287,6 +287,7 @@ class BlocksRepository { return null; } + rows[0].fee_span = JSON.parse(rows[0].fee_span); return rows[0]; } catch (e) { logger.err(`Cannot get indexed block ${height}. Reason: ` + (e instanceof Error ? e.message : e)); @@ -294,6 +295,34 @@ class BlocksRepository { } } + /** + * Get one block by hash + */ + public async $getBlockByHash(hash: string): Promise { + try { + const query = ` + SELECT *, UNIX_TIMESTAMP(blocks.blockTimestamp) as blockTimestamp, hash as id, + pools.id as pool_id, pools.name as pool_name, pools.link as pool_link, pools.slug as pool_slug, + pools.addresses as pool_addresses, pools.regexes as pool_regexes, + previous_block_hash as previousblockhash + FROM blocks + JOIN pools ON blocks.pool_id = pools.id + WHERE hash = '${hash}'; + `; + const [rows]: any[] = await DB.query(query); + + if (rows.length <= 0) { + return null; + } + + rows[0].fee_span = JSON.parse(rows[0].fee_span); + return rows[0]; + } catch (e) { + logger.err(`Cannot get indexed block ${hash}. Reason: ` + (e instanceof Error ? e.message : e)); + throw e; + } + } + /** * Return blocks difficulty */ @@ -397,18 +426,28 @@ class BlocksRepository { const [blocks]: any[] = await DB.query(`SELECT height, hash, previous_block_hash, UNIX_TIMESTAMP(blockTimestamp) as timestamp FROM blocks ORDER BY height`); - let currentHeight = 1; - while (currentHeight < blocks.length) { - if (blocks[currentHeight].previous_block_hash !== blocks[currentHeight - 1].hash) { - logger.warn(`Chain divergence detected at block ${blocks[currentHeight - 1].height}, re-indexing newer blocks and hashrates`); - await this.$deleteBlocksFrom(blocks[currentHeight - 1].height); - await HashratesRepository.$deleteHashratesFromTimestamp(blocks[currentHeight - 1].timestamp - 604800); + let partialMsg = false; + let idx = 1; + while (idx < blocks.length) { + if (blocks[idx].height - 1 !== blocks[idx - 1].height) { + if (partialMsg === false) { + logger.info('Some blocks are not indexed, skipping missing blocks during chain validation'); + partialMsg = true; + } + ++idx; + continue; + } + + if (blocks[idx].previous_block_hash !== blocks[idx - 1].hash) { + logger.warn(`Chain divergence detected at block ${blocks[idx - 1].height}, re-indexing newer blocks and hashrates`); + await this.$deleteBlocksFrom(blocks[idx - 1].height); + await HashratesRepository.$deleteHashratesFromTimestamp(blocks[idx - 1].timestamp - 604800); return false; } - ++currentHeight; + ++idx; } - logger.info(`${currentHeight} blocks hash validated in ${new Date().getTime() - start} ms`); + logger.info(`${idx} blocks hash validated in ${new Date().getTime() - start} ms`); return true; } catch (e) { logger.err('Cannot validate chain of block hash. Reason: ' + (e instanceof Error ? e.message : e)); @@ -457,7 +496,7 @@ class BlocksRepository { /** * Get the historical averaged block rewards */ - public async $getHistoricalBlockRewards(div: number, interval: string | null): Promise { + public async $getHistoricalBlockRewards(div: number, interval: string | null): Promise { try { let query = `SELECT CAST(AVG(height) as INT) as avg_height, diff --git a/backend/src/routes.ts b/backend/src/routes.ts index 72bf3b483..52f590775 100644 --- a/backend/src/routes.ts +++ b/backend/src/routes.ts @@ -702,8 +702,8 @@ class Routes { public async getBlock(req: Request, res: Response) { try { - const result = await bitcoinApi.$getBlock(req.params.hash); - res.json(result); + const block = await blocks.$getBlock(req.params.hash); + res.json(block); } catch (e) { res.status(500).send(e instanceof Error ? e.message : e); } @@ -727,7 +727,7 @@ class Routes { res.status(500).send(e instanceof Error ? e.message : e); } } - + public async getBlocks(req: Request, res: Response) { try { loadingIndicators.setProgress('blocks', 0); diff --git a/backend/src/utils/blocks-utils.ts b/backend/src/utils/blocks-utils.ts index 7b5c0b23a..8760a08c0 100644 --- a/backend/src/utils/blocks-utils.ts +++ b/backend/src/utils/blocks-utils.ts @@ -1,4 +1,4 @@ -import { BlockExtended } from "../mempool.interfaces"; +import { BlockExtended } from '../mempool.interfaces'; export function prepareBlock(block: any): BlockExtended { return { @@ -17,9 +17,11 @@ export function prepareBlock(block: any): BlockExtended { extras: { coinbaseRaw: block.coinbase_raw ?? block.extras.coinbaseRaw, medianFee: block.medianFee ?? block.median_fee ?? block.extras?.medianFee, - feeRange: block.feeRange ?? block.fee_range ?? block?.extras?.feeSpan, + feeRange: block.feeRange ?? block.fee_span, reward: block.reward ?? block?.extras?.reward, - totalFees: block.totalFees ?? block?.fees ?? block?.extras.totalFees, + totalFees: block.totalFees ?? block?.fees ?? block?.extras?.totalFees, + avgFee: block?.extras?.avgFee ?? block.avg_fee, + avgFeeRate: block?.avgFeeRate ?? block.avg_fee_rate, pool: block?.extras?.pool ?? (block?.pool_id ? { id: block.pool_id, name: block.pool_name, diff --git a/docker/backend/Dockerfile b/docker/backend/Dockerfile index c013fc23a..31acff047 100644 --- a/docker/backend/Dockerfile +++ b/docker/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.10.0-buster-slim AS builder +FROM node:16.15.0-buster-slim AS builder ARG commitHash ENV DOCKER_COMMIT_HASH=${commitHash} @@ -11,7 +11,7 @@ RUN apt-get install -y build-essential python3 pkg-config RUN npm install RUN npm run build -FROM node:16.10.0-buster-slim +FROM node:16.15.0-buster-slim WORKDIR /backend diff --git a/docker/frontend/Dockerfile b/docker/frontend/Dockerfile index 34c41119c..e2874ff4e 100644 --- a/docker/frontend/Dockerfile +++ b/docker/frontend/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.10.0-buster-slim AS builder +FROM node:16.15.0-buster-slim AS builder ARG commitHash ENV DOCKER_COMMIT_HASH=${commitHash} diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 336cfead2..c9cd63c0c 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -40,7 +40,6 @@ import { AssetComponent } from './components/asset/asset.component'; import { AssetsComponent } from './components/assets/assets.component'; import { AssetsNavComponent } from './components/assets/assets-nav/assets-nav.component'; import { StatusViewComponent } from './components/status-view/status-view.component'; -import { MinerComponent } from './components/miner/miner.component'; import { SharedModule } from './shared/shared.module'; import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap'; import { FeesBoxComponent } from './components/fees-box/fees-box.component'; @@ -108,7 +107,6 @@ import { BlockSizesWeightsGraphComponent } from './components/block-sizes-weight LbtcPegsGraphComponent, AssetComponent, AssetsComponent, - MinerComponent, StatusViewComponent, FeesBoxComponent, DashboardComponent, diff --git a/frontend/src/app/bisq/bisq-block/bisq-block.component.html b/frontend/src/app/bisq/bisq-block/bisq-block.component.html index 36281157d..9cc2ad699 100644 --- a/frontend/src/app/bisq/bisq-block/bisq-block.component.html +++ b/frontend/src/app/bisq/bisq-block/bisq-block.component.html @@ -20,7 +20,7 @@ {{ block.hash | shortenString : 13 }} - Timestamp + Timestamp ‎{{ block.time | date:'yyyy-MM-dd HH:mm' }}
@@ -83,7 +83,7 @@ - Timestamp + Timestamp diff --git a/frontend/src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html b/frontend/src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html index 83b93dc78..2d7df05e1 100644 --- a/frontend/src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html +++ b/frontend/src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html @@ -89,7 +89,7 @@
- + @@ -98,7 +98,7 @@
Latest Trades
- +
diff --git a/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html b/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html index 2b3964caa..257281c7a 100644 --- a/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html +++ b/frontend/src/app/bisq/bisq-transaction/bisq-transaction.component.html @@ -31,7 +31,7 @@ - + - + diff --git a/frontend/src/app/components/address-labels/address-labels.component.ts b/frontend/src/app/components/address-labels/address-labels.component.ts index f4eff6d78..34c82c851 100644 --- a/frontend/src/app/components/address-labels/address-labels.component.ts +++ b/frontend/src/app/components/address-labels/address-labels.component.ts @@ -118,7 +118,7 @@ export class AddressLabelsComponent implements OnInit { } const m = parseInt(opM.match(/[0-9]+/)[0], 10); - this.label = `multisig ${m} of ${n}`; + this.label = $localize`:@@address-label.multisig:Multisig ${m}:multisigM: of ${n}:multisigN:` } handleVout() { diff --git a/frontend/src/app/components/assets/asset-group/asset-group.component.html b/frontend/src/app/components/assets/asset-group/asset-group.component.html index df3f90abd..a4c9e9da0 100644 --- a/frontend/src/app/components/assets/asset-group/asset-group.component.html +++ b/frontend/src/app/components/assets/asset-group/asset-group.component.html @@ -1,11 +1,13 @@ -
+
-
-

{{ group.group.name }}

- -
Group of {{ group.group.assets.length | number }} assets
-
+ + +
+

{{ group.name }}

+
Group of {{ group.assets.length | number }} assets
+
+
diff --git a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html index f15356c2f..ec3773ca8 100644 --- a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html +++ b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html @@ -2,11 +2,10 @@
- Block fee rates + Block Fee Rates -
- + - + @@ -105,7 +116,18 @@ - + +
TimestampTimestamp ‎{{ bisqTx.time | date:'yyyy-MM-dd HH:mm' }}
diff --git a/frontend/src/app/bisq/bisq-transactions/bisq-transactions.component.html b/frontend/src/app/bisq/bisq-transactions/bisq-transactions.component.html index d1064972e..7a2056b46 100644 --- a/frontend/src/app/bisq/bisq-transactions/bisq-transactions.component.html +++ b/frontend/src/app/bisq/bisq-transactions/bisq-transactions.component.html @@ -18,7 +18,7 @@
TXID Type AmountConfirmedConfirmed Height
Total fees + + + + +   +   +
Subsidy + fees: - + + + +
Miner + + {{ block.extras.pool.name }} + + + + {{ block.extras.pool.name }} + +
diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 512b6b411..57417a5c3 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -10,6 +10,7 @@ import { SeoService } from 'src/app/services/seo.service'; import { WebsocketService } from 'src/app/services/websocket.service'; import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.pipe'; import { BlockExtended } from 'src/app/interfaces/node-api.interface'; +import { ApiService } from 'src/app/services/api.service'; @Component({ selector: 'app-block', @@ -31,7 +32,6 @@ export class BlockComponent implements OnInit, OnDestroy { blockSubsidy: number; fees: number; paginationMaxSize: number; - coinbaseTx: Transaction; page = 1; itemsPerPage: number; txsLoadingStatus$: Observable; @@ -50,10 +50,11 @@ export class BlockComponent implements OnInit, OnDestroy { private location: Location, private router: Router, private electrsApiService: ElectrsApiService, - private stateService: StateService, + public stateService: StateService, private seoService: SeoService, private websocketService: WebsocketService, private relativeUrlPipe: RelativeUrlPipe, + private apiService: ApiService ) { } ngOnInit() { @@ -88,7 +89,6 @@ export class BlockComponent implements OnInit, OnDestroy { const blockHash: string = params.get('id') || ''; this.block = undefined; this.page = 1; - this.coinbaseTx = undefined; this.error = undefined; this.fees = undefined; this.stateService.markBlock$.next({}); @@ -124,7 +124,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.location.replaceState( this.router.createUrlTree([(this.network ? '/' + this.network : '') + '/block/', hash]).toString() ); - return this.electrsApiService.getBlock$(hash); + return this.apiService.getBlock$(hash); }) ); } @@ -134,7 +134,7 @@ export class BlockComponent implements OnInit, OnDestroy { return of(blockInCache); } - return this.electrsApiService.getBlock$(blockHash); + return this.apiService.getBlock$(blockHash); } }), tap((block: BlockExtended) => { @@ -145,7 +145,6 @@ export class BlockComponent implements OnInit, OnDestroy { this.seoService.setTitle($localize`:@@block.component.browser-title:Block ${block.height}:BLOCK_HEIGHT:: ${block.id}:BLOCK_ID:`); this.isLoadingBlock = false; - this.coinbaseTx = block?.extras?.coinbaseTx; this.setBlockSubsidy(); if (block?.extras?.reward !== undefined) { this.fees = block.extras.reward / 100000000 - this.blockSubsidy; @@ -167,9 +166,6 @@ export class BlockComponent implements OnInit, OnDestroy { if (this.fees === undefined && transactions[0]) { this.fees = transactions[0].vout.reduce((acc: number, curr: Vout) => acc + curr.value, 0) / 100000000 - this.blockSubsidy; } - if (!this.coinbaseTx && transactions[0]) { - this.coinbaseTx = transactions[0]; - } this.transactions = transactions; this.isLoadingTransactions = false; }, @@ -212,13 +208,10 @@ export class BlockComponent implements OnInit, OnDestroy { this.queryParamsSubscription.unsubscribe(); } + // TODO - Refactor this.fees/this.reward for liquid because it is not + // used anymore on Bitcoin networks (we use block.extras directly) setBlockSubsidy() { - if (this.network === 'liquid' || this.network === 'liquidtestnet') { - this.blockSubsidy = 0; - return; - } - const halvings = Math.floor(this.block.height / 210000); - this.blockSubsidy = 50 * 2 ** -halvings; + this.blockSubsidy = 0; } pageChange(page: number, target: HTMLElement) { diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.html b/frontend/src/app/components/blocks-list/blocks-list.component.html index 51a50f2bb..face9452b 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.html +++ b/frontend/src/app/components/blocks-list/blocks-list.component.html @@ -1,26 +1,25 @@
-

Blocks

+

Blocks

- - + + - + - @@ -28,7 +27,7 @@ - - + diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss index a0d8e115e..f379effe2 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.scss @@ -2,10 +2,15 @@ width: 100%; text-align: left; table-layout:fixed; - tr, td, th { + tr, th { border: 0px; + padding-top: 0.65rem !important; + padding-bottom: 0.7rem !important; } td { + border: 0px; + padding-top: 0.71rem !important; + padding-bottom: 0.75rem !important; width: 25%; @media (max-width: 376px) { padding: 0.85rem; diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts index 1026bc145..854c1c349 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts @@ -54,7 +54,7 @@ export class DifficultyAdjustmentsTable implements OnInit { return { availableTimespanDay: availableTimespanDay, - difficulty: tableData.slice(0, 5), + difficulty: tableData.slice(0, 6), }; }), ); diff --git a/frontend/src/app/components/graphs/graphs.component.html b/frontend/src/app/components/graphs/graphs.component.html index a32829d6b..6c59645ea 100644 --- a/frontend/src/app/components/graphs/graphs.component.html +++ b/frontend/src/app/components/graphs/graphs.component.html @@ -5,33 +5,19 @@
- Pools ranking - + i18n="mining.pools">Pools Ranking - Pools dominance - + i18n="mining.pools-dominance">Pools Dominance - Hashrate & Difficulty - + [routerLink]="['/graphs/mining/hashrate-difficulty' | relativeUrl]" i18n="mining.hashrate-difficulty">Hashrate & Difficulty - Block Fee Rates - + [routerLink]="['/graphs/mining/block-fee-rates' | relativeUrl]" i18n="mining.block-fee-rates">Block Fee Rates - Block Fees - + [routerLink]="['/graphs/mining/block-fees' | relativeUrl]" i18n="mining.block-fees">Block Fees - Block Rewards - + [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]" i18n="mining.block-rewards">Block Rewards - Block Sizes and Weights - + [routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" i18n="mining.block-sizes-weights">Block Sizes and Weights
diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss index fa044a4d6..52b5b2c2f 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss @@ -52,7 +52,7 @@ .chart-widget { width: 100%; height: 100%; - max-height: 270px; + height: 240px; } .formRadioGroup { diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts index f20f9db3a..70b98bd0c 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -64,7 +64,7 @@ export class HashrateChartComponent implements OnInit { if (this.widget) { this.miningWindowPreference = '1y'; } else { - this.seoService.setTitle($localize`:@@mining.hashrate-difficulty:Hashrate and Difficulty`); + this.seoService.setTitle($localize`:@@3510fc6daa1d975f331e3a717bdf1a34efa06dff:Hashrate & Difficulty`); this.miningWindowPreference = this.miningService.getDefaultTimespan('1m'); } this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference }); diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html index 80f2baa54..18c7404af 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html @@ -3,11 +3,11 @@
- Mining pools dominance + Pools Dominance - + Pools Dominance
- + diff --git a/frontend/src/app/components/mempool-block/mempool-block.component.ts b/frontend/src/app/components/mempool-block/mempool-block.component.ts index ead56736c..75147f5e3 100644 --- a/frontend/src/app/components/mempool-block/mempool-block.component.ts +++ b/frontend/src/app/components/mempool-block/mempool-block.component.ts @@ -68,7 +68,7 @@ export class MempoolBlockComponent implements OnInit, OnDestroy { getOrdinal(mempoolBlock: MempoolBlock): string { const blocksInBlock = Math.ceil(mempoolBlock.blockVSize / this.stateService.blockVSize); if (this.mempoolBlockIndex === 0) { - return $localize`:@@mempool-block.next.block:Next block`; + return $localize`:@@bdf0e930eb22431140a2eaeacd809cc5f8ebd38c:Next Block`; } else if (this.mempoolBlockIndex === this.stateService.env.KEEP_BLOCKS_AMOUNT - 1 && blocksInBlock > 1) { return $localize`:@@mempool-block.stack.of.blocks:Stack of ${blocksInBlock}:INTERPOLATION: mempool blocks`; } else { diff --git a/frontend/src/app/components/miner/miner.component.html b/frontend/src/app/components/miner/miner.component.html deleted file mode 100644 index f4798d07d..000000000 --- a/frontend/src/app/components/miner/miner.component.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - {{ miner }} - - - Unknown - - diff --git a/frontend/src/app/components/miner/miner.component.scss b/frontend/src/app/components/miner/miner.component.scss deleted file mode 100644 index b6e8c8ca1..000000000 --- a/frontend/src/app/components/miner/miner.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -.badge { - font-size: 14px; -} diff --git a/frontend/src/app/components/miner/miner.component.ts b/frontend/src/app/components/miner/miner.component.ts deleted file mode 100644 index 733204120..000000000 --- a/frontend/src/app/components/miner/miner.component.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Component, Input, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; -import { AssetsService } from 'src/app/services/assets.service'; -import { Transaction } from 'src/app/interfaces/electrs.interface'; -import { StateService } from 'src/app/services/state.service'; -import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.pipe'; - -@Component({ - selector: 'app-miner', - templateUrl: './miner.component.html', - styleUrls: ['./miner.component.scss'], - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class MinerComponent implements OnChanges { - @Input() coinbaseTransaction: Transaction; - miner = ''; - title = ''; - url = ''; - target = '_blank'; - loading = true; - - constructor( - private assetsService: AssetsService, - private cd: ChangeDetectorRef, - public stateService: StateService, - private relativeUrlPipe: RelativeUrlPipe, - ) { } - - ngOnChanges() { - this.miner = ''; - if (this.stateService.env.MINING_DASHBOARD) { - this.miner = 'Unknown'; - this.url = this.relativeUrlPipe.transform(`/mining/pool/unknown`); - this.target = ''; - } - this.loading = true; - this.findMinerFromCoinbase(); - } - - findMinerFromCoinbase() { - if (this.coinbaseTransaction == null || this.coinbaseTransaction.vin == null || this.coinbaseTransaction.vin.length === 0) { - return null; - } - - this.assetsService.getMiningPools$.subscribe((pools) => { - for (const vout of this.coinbaseTransaction.vout) { - if (!vout.scriptpubkey_address) { - continue; - } - - if (pools.payout_addresses[vout.scriptpubkey_address]) { - this.miner = pools.payout_addresses[vout.scriptpubkey_address].name; - this.title = $localize`:@@miner-identified-by-payout:Identified by payout address: '${vout.scriptpubkey_address}:PAYOUT_ADDRESS:'`; - const pool = pools.payout_addresses[vout.scriptpubkey_address]; - if (this.stateService.env.MINING_DASHBOARD && pools.slugs && pools.slugs[pool.name] !== undefined) { - this.url = this.relativeUrlPipe.transform(`/mining/pool/${pools.slugs[pool.name]}`); - this.target = ''; - } else { - this.url = pool.link; - } - break; - } - - for (const tag in pools.coinbase_tags) { - if (pools.coinbase_tags.hasOwnProperty(tag)) { - const coinbaseAscii = this.hex2ascii(this.coinbaseTransaction.vin[0].scriptsig); - if (coinbaseAscii.indexOf(tag) > -1) { - const pool = pools.coinbase_tags[tag]; - this.miner = pool.name; - this.title = $localize`:@@miner-identified-by-coinbase:Identified by coinbase tag: '${tag}:TAG:'`; - if (this.stateService.env.MINING_DASHBOARD && pools.slugs && pools.slugs[pool.name] !== undefined) { - this.url = this.relativeUrlPipe.transform(`/mining/pool/${pools.slugs[pool.name]}`); - this.target = ''; - } else { - this.url = pool.link; - } - break; - } - } - } - } - - this.loading = false; - this.cd.markForCheck(); - }); - } - - hex2ascii(hex: string) { - let str = ''; - for (let i = 0; i < hex.length; i += 2) { - str += String.fromCharCode(parseInt(hex.substr(i, 2), 16)); - } - return str; - } -} diff --git a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html index bf8ba2cf7..6a208e5c7 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html @@ -11,7 +11,7 @@ (144 blocks)
-
+
@@ -22,29 +22,25 @@
Difficulty Adjustment
-
- -
+
-
-
-
+ -
+
@@ -53,12 +49,9 @@
-
- Latest blocks -
+
Latest blocks
- +
@@ -67,12 +60,9 @@
-
- Adjustments -
+
Adjustments
- +
diff --git a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.scss b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.scss index d744e285d..72332602b 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.scss +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.scss @@ -14,6 +14,13 @@ background-color: #1d1f31; } +.graph-card { + height: 100%; + @media (min-width: 992px) { + height: 385px; + } +} + .card-title { font-size: 1rem; color: #4a68b9; @@ -22,9 +29,6 @@ color: #4a68b9; } -.card-body { - padding: 1.25rem 1rem 0.75rem 1rem; -} .card-body.pool-ranking { padding: 1.25rem 0.25rem 0.75rem 0.25rem; } diff --git a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts index 352586f14..05846fc8a 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts @@ -13,7 +13,7 @@ export class MiningDashboardComponent implements OnInit { private seoService: SeoService, private websocketService: WebsocketService, ) { - this.seoService.setTitle($localize`:@@mining.mining-dashboard:Mining Dashboard`); + this.seoService.setTitle($localize`:@@a681a4e2011bb28157689dbaa387de0dd0aa0c11:Mining Dashboard`); } ngOnInit(): void { diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.html b/frontend/src/app/components/pool-ranking/pool-ranking.component.html index 12b5ffb2a..367f460df 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.html +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.html @@ -5,7 +5,7 @@
-
Pools luck (1w)
+
Pools Luck (1w)

{{ miningStats['minersLuck'] }}%

@@ -17,7 +17,7 @@

-
Pools count (1w)
+
Pools Count (1w)

{{ miningStats.pools.length }}

@@ -26,11 +26,10 @@
- Mining pools share + Pools Ranking -
@@ -62,7 +61,7 @@ 3Y
@@ -87,14 +86,15 @@
- + - + @@ -104,7 +104,7 @@ - + @@ -121,7 +121,7 @@
-
Pools luck (1w)
+
Pools Luck (1w)

@@ -133,7 +133,7 @@

-
Pools count (1w)
+
Pools Count (1w)

diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss index d5eedd5d3..5764cf73a 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss @@ -27,7 +27,7 @@ .chart-widget { width: 100%; height: 100%; - max-height: 270px; + height: 240px; @media (max-width: 485px) { max-height: 200px; } diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index be7437363..849744253 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -5,7 +5,7 @@
-

{{ poolStats.pool.name }}

@@ -93,10 +93,8 @@
Height - PoolHeightPool Timestamp Mined Reward FeesTxsTXs Size
+ {{ block.height }}
+ diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.scss b/frontend/src/app/components/blocks-list/blocks-list.component.scss index c8035dc44..ead712be0 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.scss +++ b/frontend/src/app/components/blocks-list/blocks-list.component.scss @@ -11,13 +11,10 @@ max-width: 100%; } -td { - padding-top: 0.7rem !important; +tr, td, th { + border: 0px; + padding-top: 0.65rem !important; padding-bottom: 0.7rem !important; - @media (max-width: 376px) { - padding-top: 0.73rem !important; - padding-bottom: 0.73rem !important; - } } .clear-link { @@ -41,7 +38,7 @@ td { } .pool.widget { width: 40%; - padding-left: 30px; + padding-left: 24px; @media (max-width: 376px) { width: 60%; } @@ -56,7 +53,7 @@ td { width: 10%; } .height.widget { - width: 20%; + width: 15%; @media (max-width: 576px) { width: 10%; } diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.ts b/frontend/src/app/components/blocks-list/blocks-list.component.ts index 9da92f158..b5b66b22b 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -39,7 +39,7 @@ export class BlocksList implements OnInit { this.websocketService.want(['blocks']); } - this.skeletonLines = this.widget === true ? [...Array(5).keys()] : [...Array(15).keys()]; + this.skeletonLines = this.widget === true ? [...Array(6).keys()] : [...Array(15).keys()]; this.paginationMaxSize = window.matchMedia('(max-width: 670px)').matches ? 3 : 5; this.blocks$ = combineLatest([ @@ -61,7 +61,7 @@ export class BlocksList implements OnInit { block.extras.pool.name.toLowerCase().replace(' ', '').replace('.', '') + '.svg'; } if (this.widget) { - return blocks.slice(0, 5); + return blocks.slice(0, 6); } return blocks; }), @@ -85,7 +85,7 @@ export class BlocksList implements OnInit { blocks[1][0].extras.pool.logo = `./resources/mining-pools/` + blocks[1][0].extras.pool.name.toLowerCase().replace(' ', '').replace('.', '') + '.svg'; acc.unshift(blocks[1][0]); - acc = acc.slice(0, this.widget ? 5 : 15); + acc = acc.slice(0, this.widget ? 6 : 15); return acc; }, []) ); diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html index 787058d91..6e80d828a 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html @@ -22,7 +22,7 @@
{{ mempoolBlock.feeRange[0] | number:'1.0-0' }} - {{ mempoolBlock.feeRange[mempoolBlock.feeRange.length - 1] | number:'1.0-0' }} sat/vB
Total feesTotal fees
Pool Hashrate BlocksEmpty BlocksEmpty blocks
{{ pool.rank }} + + {{ pool.name }} {{ pool.lastEstimatedHashrate }} {{ miningStats.miningUnits.hashrateUnit }}
All minersAll miners {{ miningStats.lastEstimatedHashrate}} {{ miningStats.miningUnits.hashrateUnit }} {{ miningStats.blockCount }}
- - + + @@ -117,10 +115,8 @@
Estimated - Reported - EstimatedReported Luck
- - + + @@ -142,7 +138,7 @@ - +
Estimated - Reported - EstimatedReported Luck
Mined BlocksMined blocks @@ -166,7 +162,7 @@
- Mined Blocks + Mined blocks @@ -216,12 +212,10 @@ - - + + - + @@ -266,12 +260,10 @@ - - + + - + @@ -378,10 +370,8 @@
Height Timestamp Mined - Coinbase Tag - RewardCoinbase tagReward FeesTxsTXs Size
Height Timestamp Mined - Coinbase Tag - RewardCoinbase tagReward FeesTxsTXs Size
- - + + @@ -406,10 +396,8 @@
Estimated - Reported - EstimatedReported Luck
- - + + @@ -430,13 +418,13 @@ - +
Estimated - Reported - EstimatedReported Luck
Mined BlocksMined blocks - - + + @@ -457,12 +445,12 @@
24h1w24h1w All
- Mined Blocks + Mined blocks - - + + diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.html b/frontend/src/app/components/push-transaction/push-transaction.component.html index 5762c8363..d0693ed2c 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.html +++ b/frontend/src/app/components/push-transaction/push-transaction.component.html @@ -3,7 +3,7 @@
- +

{{ error }}

{{ txId }} diff --git a/frontend/src/app/components/reward-stats/reward-stats.component.html b/frontend/src/app/components/reward-stats/reward-stats.component.html index 4f2919c91..345cb755d 100644 --- a/frontend/src/app/components/reward-stats/reward-stats.component.html +++ b/frontend/src/app/components/reward-stats/reward-stats.component.html @@ -26,7 +26,7 @@
-
Average Fee
+
Reward Per Tx
{{ rewardStats.feePerTx | amountShortener: 2 }} @@ -57,7 +57,7 @@
-
Average Fee
+
Reward Per Tx
diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 1b6844cda..0ff82899f 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -46,7 +46,7 @@
24h1w24h1w All
- +
TimestampTimestamp ‎{{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm' }}
@@ -209,7 +209,7 @@ - + @@ -217,7 +217,7 @@ - + @@ -235,7 +235,7 @@ - + @@ -383,7 +383,7 @@ - + diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index eded208bd..a3f9cddc9 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -138,7 +138,7 @@ @@ -232,7 +232,7 @@ - + @@ -246,7 +246,7 @@ diff --git a/frontend/src/app/dashboard/dashboard.component.html b/frontend/src/app/dashboard/dashboard.component.html index 80ab9545d..2ab42a6a0 100644 --- a/frontend/src/app/dashboard/dashboard.component.html +++ b/frontend/src/app/dashboard/dashboard.component.html @@ -121,7 +121,7 @@
SizeSize
WeightWeight
Transaction HexTransaction hex
Fee{{ tx.fee | number }} sat {{ tx.fee | number }} sat
Fee rate
- +
{{ vout.scriptpubkey }}
OP_RETURN dataOP_RETURN data {{ vout.scriptpubkey_asm | hex2ascii }}
- +
- {{ block.extras.pool.name }} @@ -136,7 +136,7 @@
- +
diff --git a/frontend/src/app/dashboard/dashboard.component.scss b/frontend/src/app/dashboard/dashboard.component.scss index 65d68f122..47fb5b757 100644 --- a/frontend/src/app/dashboard/dashboard.component.scss +++ b/frontend/src/app/dashboard/dashboard.component.scss @@ -134,6 +134,8 @@ table-layout:fixed; tr, td, th { border: 0px; + padding-top: 0.71rem !important; + padding-bottom: 0.75rem !important; } td { overflow:hidden; @@ -182,16 +184,15 @@ text-align: left; tr, td, th { border: 0px; + padding-top: 0.65rem !important; + padding-bottom: 0.7rem !important; } .table-cell-height { width: 15%; } .table-cell-mined { width: 35%; - text-align: right; - @media (min-width: 376px) { - text-align: left; - } + text-align: left; } .table-cell-transaction-count { display: none; diff --git a/frontend/src/app/docs/api-docs/api-docs-data.ts b/frontend/src/app/docs/api-docs/api-docs-data.ts index b0d4d1c4f..88ec96e67 100644 --- a/frontend/src/app/docs/api-docs/api-docs-data.ts +++ b/frontend/src/app/docs/api-docs/api-docs-data.ts @@ -4467,6 +4467,14 @@ export const faqData = [ title: "What are mining pools?", answer: "Mining pools are groups of miners that combine their computational power in order to increase the probability of finding new blocks." }, + { + type: "endpoint", + category: "basics", + showConditions: bitcoinNetworks, + fragment: "what-is-full-mempool", + title: "What does it mean for the mempool to be \"full\"?", + answer: "

When a Bitcoin transaction is made, it is stored in a Bitcoin node's mempool before it is confirmed into a block. When the rate of incoming transactions exceeds the rate transactions are confirmed, the mempool grows in size.

The default maximum size of a Bitcoin node's mempool is 300MB, so when there are 300MB of transactions in the mempool, we say it's \"full\".

" + }, { type: "category", category: "help", diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 982461ad1..9b096394a 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -154,6 +154,10 @@ export class ApiService { ); } + getBlock$(hash: string): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/v1/block/' + hash); + } + getHistoricalHashrate$(interval: string | undefined): Observable { return this.httpClient.get( this.apiBaseUrl + this.apiBasePath + `/api/v1/mining/hashrate` + diff --git a/frontend/src/app/services/assets.service.ts b/frontend/src/app/services/assets.service.ts index 9454ef7e2..880883a8c 100644 --- a/frontend/src/app/services/assets.service.ts +++ b/frontend/src/app/services/assets.service.ts @@ -14,7 +14,6 @@ export class AssetsService { getAssetsJson$: Observable<{ array: AssetExtended[]; objects: any}>; getAssetsMinimalJson$: Observable; - getMiningPools$: Observable; constructor( private httpClient: HttpClient, @@ -66,6 +65,5 @@ export class AssetsService { }), shareReplay(1), ); - this.getMiningPools$ = this.httpClient.get(apiBaseUrl + '/resources/pools.json').pipe(shareReplay(1)); } } diff --git a/frontend/src/locale/messages.xlf b/frontend/src/locale/messages.xlf index f142c56ff..d5dd6ee59 100644 --- a/frontend/src/locale/messages.xlf +++ b/frontend/src/locale/messages.xlf @@ -5,343 +5,242 @@ Close - node_modules/@ng-bootstrap/src/alert/alert.ts - 58,61 + node_modules/src/alert/alert.ts + 77,80 - Slide of + Slide of - node_modules/@ng-bootstrap/src/carousel/carousel.ts - 114,118 + node_modules/src/carousel/carousel.ts + 147,156 Currently selected slide number read by screen reader Previous - node_modules/@ng-bootstrap/src/carousel/carousel.ts - 132,134 + node_modules/src/carousel/carousel.ts + 174 Next - node_modules/@ng-bootstrap/src/carousel/carousel.ts - 147,152 + node_modules/src/carousel/carousel.ts + 195 Select month - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation-select.ts - 44,49 + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation-select.ts - 49,50 + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 Select year - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation-select.ts - 59,63 + node_modules/src/datepicker/datepicker-navigation-select.ts + 74 - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation-select.ts + node_modules/src/datepicker/datepicker-navigation-select.ts 74 Previous month - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation.ts - 24,27 + node_modules/src/datepicker/datepicker-navigation.ts + 69 - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation.ts - 35,36 + node_modules/src/datepicker/datepicker-navigation.ts + 69 Next month - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation.ts - 47,50 + node_modules/src/datepicker/datepicker-navigation.ts + 69 - node_modules/@ng-bootstrap/src/datepicker/datepicker-navigation.ts - 60,64 + node_modules/src/datepicker/datepicker-navigation.ts + 69 «« - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 182,183 + node_modules/src/pagination/pagination.ts + 247 « - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 186,190 + node_modules/src/pagination/pagination.ts + 264,266 » - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 194,195 + node_modules/src/pagination/pagination.ts + 282,285 »» - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 201,204 + node_modules/src/pagination/pagination.ts + 301,303 First - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 208,209 + node_modules/src/pagination/pagination.ts + 318,320 Previous - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 215,216 + node_modules/src/pagination/pagination.ts + 333 Next - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 226,228 + node_modules/src/pagination/pagination.ts + 343,344 Last - node_modules/@ng-bootstrap/src/pagination/pagination.ts - 232,233 + node_modules/src/pagination/pagination.ts + 354 - + - node_modules/@ng-bootstrap/src/progressbar/progressbar.ts - 32,38 + node_modules/src/progressbar/progressbar.ts + 59,63 HH - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 40,41 + node_modules/src/timepicker/timepicker.ts + 133,135 Hours - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 46,47 + node_modules/src/timepicker/timepicker.ts + 154,155 MM - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 51,54 + node_modules/src/timepicker/timepicker.ts + 171,172 Minutes - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 58,59 + node_modules/src/timepicker/timepicker.ts + 186,187 Increment hours - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 63,64 + node_modules/src/timepicker/timepicker.ts + 200 Decrement hours - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 69,70 + node_modules/src/timepicker/timepicker.ts + 219,222 Increment minutes - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 76,78 + node_modules/src/timepicker/timepicker.ts + 238,239 Decrement minutes - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 82,84 + node_modules/src/timepicker/timepicker.ts + 259,261 SS - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 87,88 + node_modules/src/timepicker/timepicker.ts + 277 Seconds - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 92,93 + node_modules/src/timepicker/timepicker.ts + 295 Increment seconds - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 100,101 + node_modules/src/timepicker/timepicker.ts + 295 Decrement seconds - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 106,110 - - - - - - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 115,121 + node_modules/src/timepicker/timepicker.ts + 295 - + - node_modules/@ng-bootstrap/src/timepicker/timepicker.ts - 123,131 + node_modules/src/timepicker/timepicker.ts + 295 + + + + + + node_modules/src/timepicker/timepicker.ts + 295 Close - node_modules/@ng-bootstrap/src/toast/toast.ts - 78,85 - - - - Registered assets - - src/app/assets/assets.component.html - 3,8 - - Registered assets page header - - - Search asset - - src/app/assets/assets.component.html - 9,11 - - Search Assets Placeholder Text - - - Clear - - src/app/assets/assets.component.html - 11,16 - - Search Clear Button - - - Name - - src/app/assets/assets.component.html - 19,21 - - - src/app/assets/assets.component.html - 44,46 - - Asset name header - - - Ticker - - src/app/assets/assets.component.html - 20,21 - - - src/app/assets/assets.component.html - 45,47 - - Asset ticker header - - - Issuer domain - - src/app/assets/assets.component.html - 21,25 - - - src/app/assets/assets.component.html - 46,50 - - Asset Issuer Domain header - - - Asset ID - - src/app/assets/assets.component.html - 22,25 - - - src/app/assets/assets.component.html - 47,50 - - Asset ID header - - - Error loading assets data. - - src/app/assets/assets.component.html - 63,71 - - Asset data load error - - - Assets - - src/app/assets/assets.component.ts - 40 - - - src/app/components/liquid-master-page/liquid-master-page.component.html - 44,46 - - - src/app/components/master-page/master-page.component.html - 58,61 + node_modules/src/toast/toast.ts + 106,109 @@ -408,15 +307,15 @@ src/app/components/block/block.component.html - 168,169 + 190,191 src/app/components/blockchain-blocks/blockchain-blocks.component.html - 19,20 + 22,23 src/app/components/mempool-blocks/mempool-blocks.component.html - 18,19 + 21,22 shared.transaction-count.singular @@ -432,15 +331,15 @@ src/app/components/block/block.component.html - 169,170 + 191,192 src/app/components/blockchain-blocks/blockchain-blocks.component.html - 20,21 + 23,24 src/app/components/mempool-blocks/mempool-blocks.component.html - 19,20 + 22,23 shared.transaction-count.plural @@ -479,7 +378,7 @@ block.hash - + Timestamp src/app/bisq/bisq-block/bisq-block.component.html @@ -491,14 +390,33 @@ src/app/bisq/bisq-transaction/bisq-transaction.component.html - 34,37 + 34,36 + + + src/app/components/block/block.component.html + 55,57 + + + src/app/components/blocks-list/blocks-list.component.html + 13,15 + + + src/app/components/latest-blocks/latest-blocks.component.html + 10,12 + + + src/app/components/pool/pool.component.html + 213,215 + + + src/app/components/pool/pool.component.html + 261,263 src/app/components/transaction/transaction.component.html - 49,52 + 49,51 - Transaction Timestamp - transaction.timestamp + block.timestamp Previous hash @@ -538,13 +456,29 @@ src/app/bisq/bisq-transactions/bisq-transactions.component.html 22,24 + + src/app/components/blocks-list/blocks-list.component.html + 11,12 + + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 5,7 + src/app/components/latest-blocks/latest-blocks.component.html 9,10 + + src/app/components/pool/pool.component.html + 212,214 + + + src/app/components/pool/pool.component.html + 260,262 + src/app/dashboard/dashboard.component.html - 91,93 + 112,113 Bisq block height header @@ -554,10 +488,6 @@ src/app/bisq/bisq-blocks/bisq-blocks.component.html 13,15 - - src/app/bisq/bisq-transactions/bisq-transactions.component.html - 21,24 - Bisq block confirmed time header @@ -572,16 +502,12 @@ src/app/components/bisq-master-page/bisq-master-page.component.html - 33,36 + 34,36 src/app/components/latest-blocks/latest-blocks.component.html 12,16 - - src/app/components/master-page/master-page.component.html - 37,40 - src/app/components/mempool-block/mempool-block.component.html 28,32 @@ -596,23 +522,31 @@ src/app/components/bisq-master-page/bisq-master-page.component.html - 36,39 + 37,39 + + + src/app/components/blocks-list/blocks-list.component.html + 4,9 src/app/components/latest-blocks/latest-blocks.component.html 2,7 + + src/app/components/latest-blocks/latest-blocks.component.ts + 39 + src/app/components/liquid-master-page/liquid-master-page.component.html - 33,36 + 35,37 src/app/components/master-page/master-page.component.html - 40,43 + 38,40 - src/app/components/master-page/master-page.component.html - 48,51 + src/app/components/pool-ranking/pool-ranking.component.html + 88,90 @@ -741,8 +675,8 @@ bisq-dashboard.market-price-title - - View all » + + View more » src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html 92,97 @@ -752,32 +686,65 @@ 101,108 - src/app/dashboard/dashboard.component.html - 110,115 + src/app/components/mining-dashboard/mining-dashboard.component.html + 33 - dashboard.view-all + + src/app/components/mining-dashboard/mining-dashboard.component.html + 43 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 54 + + + src/app/components/mining-dashboard/mining-dashboard.component.html + 65 + + + src/app/dashboard/dashboard.component.html + 139,144 + + dashboard.view-more Terms of Service src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html - 111,118 + 111,113 src/app/components/about/about.component.html - 239,243 - - - src/app/components/docs/docs.component.html - 33 + 357,361 src/app/dashboard/dashboard.component.html - 152,154 + 181,183 + + + src/app/docs/docs/docs.component.html + 42 Terms of Service shared.terms-of-service + + Privacy Policy + + src/app/bisq/bisq-main-dashboard/bisq-main-dashboard.component.html + 113,120 + + + src/app/dashboard/dashboard.component.html + 183,185 + + + src/app/docs/docs/docs.component.html + 44 + + Privacy Policy + shared.privacy-policy + Buy Offers @@ -872,6 +839,22 @@ src/app/bisq/bisq-stats/bisq-stats.component.html 66 + + src/app/components/pool/pool.component.html + 39,40 + + + src/app/components/pool/pool.component.html + 63,65 + + + src/app/components/pool/pool.component.html + 338,340 + + + src/app/components/pool/pool.component.html + 349,352 + BSQ addresses @@ -921,11 +904,11 @@ src/app/bisq/bisq-transactions/bisq-transactions.component.html - 20,22 + 20,21 src/app/dashboard/dashboard.component.html - 121,122 + 150,151 @@ -952,7 +935,7 @@ src/app/components/asset/asset.component.html - 54 + 47 Liquid Asset issued amount asset.issued-amount @@ -973,7 +956,7 @@ src/app/components/transactions-list/transactions-list.component.html - 211,213 + 239,241 @@ -984,7 +967,7 @@ src/app/components/block/block.component.html - 125,126 + 147,148 src/app/components/transaction/transaction.component.html @@ -1025,7 +1008,7 @@ src/app/components/transactions-list/transactions-list.component.html - 238,239 + 266,267 Transaction singular confirmation count shared.confirmation-count.singular @@ -1053,7 +1036,7 @@ src/app/components/transactions-list/transactions-list.component.html - 239,240 + 267,268 Transaction plural confirmation count shared.confirmation-count.plural @@ -1146,7 +1129,7 @@ src/app/components/transaction/transaction.component.ts - 133,132 + 114,113 @@ -1168,9 +1151,22 @@ src/app/dashboard/dashboard.component.html - 120,121 + 149,150 + + Confirmed + + src/app/bisq/bisq-transactions/bisq-transactions.component.html + 21,24 + + + src/app/components/transaction/transaction.component.html + 65,66 + + Transaction Confirmed state + transaction.confirmed + Asset listing fee @@ -1309,34 +1305,18 @@ about.about-the-project - - Building a mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, without any advertising, altcoins, or third-party trackers. + + Our mempool and blockchain explorer for the Bitcoin community, focusing on the transaction fee market and multi-layer ecosystem, completely self-hosted without any trusted third-parties. src/app/components/about/about.component.html - 13,16 + 13,17 - - Enterprise Sponsors 🚀 - - src/app/components/about/about.component.html - 35,38 - - about.sponsors.enterprise.withRocket - - - Community Sponsors ❤️ - - src/app/components/about/about.component.html - 65,68 - - about.sponsors.withHeart - Become a sponsor ❤️ src/app/components/about/about.component.html - 77,78 + 33,34 about.become-a-sponsor @@ -1344,35 +1324,67 @@ Navigate to https://mempool.space/sponsor to sponsor src/app/components/about/about.component.html - 78 + 34 src/app/components/sponsor/sponsor.component.html - 6 + 10 about.navigate-to-sponsor - - Community Integrations + + Enterprise Sponsors 🚀 src/app/components/about/about.component.html - 82,85 + 38,41 - about.integrations + about.sponsors.enterprise.withRocket + + + Community Sponsors ❤️ + + src/app/components/about/about.component.html + 159,162 + + about.sponsors.withHeart + + + Self-Hosted Integrations + + src/app/components/about/about.component.html + 173,175 + + about.self-hosted-integrations + + + Wallet Integrations + + src/app/components/about/about.component.html + 207,209 + + about.wallet-integrations Community Alliances src/app/components/about/about.component.html - 153,155 + 257,259 about.alliances + + Project Translators + + src/app/components/about/about.component.html + 273,275 + + about.translators + Project Contributors src/app/components/about/about.component.html - 169,171 + 287,289 about.contributors @@ -1380,7 +1392,7 @@ Project Members src/app/components/about/about.component.html - 181,183 + 299,301 about.project_members @@ -1388,7 +1400,7 @@ Project Maintainers src/app/components/about/about.component.html - 194,196 + 312,314 about.maintainers @@ -1396,44 +1408,27 @@ About src/app/components/about/about.component.ts - 37 + 39 src/app/components/bisq-master-page/bisq-master-page.component.html - 45,48 + 46,49 src/app/components/liquid-master-page/liquid-master-page.component.html - 50,53 + 52,55 src/app/components/master-page/master-page.component.html - 64,67 + 50,53 - - multisig of + + Multisig of - src/app/components/address-labels/address-labels.component.html - 5 + src/app/components/address-labels/address-labels.component.ts + 121 - address-labels.multisig - - - Lightning - - src/app/components/address-labels/address-labels.component.html - 11 - - address-labels.upper-layer-peg-out - - - Liquid - - src/app/components/address-labels/address-labels.component.html - 17 - - address-labels.upper-layer-peg-out Unconfidential @@ -1468,9 +1463,8 @@ address.error.loading-address-data - - The number of transactions on this address exceeds the Electrum server limit Consider viewing this address on the official Mempool website instead: + + There many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: src/app/components/address/address.component.html 137,140 @@ -1487,17 +1481,21 @@ src/app/components/amount/amount.component.html 6,9 + + src/app/components/asset-circulation/asset-circulation.component.html + 2,4 + src/app/components/asset/asset.component.html - 152 + 163 src/app/components/transactions-list/transactions-list.component.html - 247,249 + 274,276 src/app/dashboard/dashboard.component.html - 128,129 + 157,158 shared.confidential @@ -1517,14 +1515,21 @@ Liquid Asset page title asset - + Name src/app/components/asset/asset.component.html 23 - Liquid Asset name - asset.name + + src/app/components/assets/assets.component.html + 4,6 + + + src/app/components/assets/assets.component.html + 29,31 + + Asset name header Precision @@ -1557,7 +1562,7 @@ Pegged in src/app/components/asset/asset.component.html - 46 + 39 Liquid Asset pegged-in amount asset.pegged-in @@ -1566,7 +1571,7 @@ Pegged out src/app/components/asset/asset.component.html - 50 + 43 Liquid Asset pegged-out amount asset.pegged-out @@ -1575,7 +1580,7 @@ Burned amount src/app/components/asset/asset.component.html - 58 + 51 Liquid Asset burned amount asset.burned-amount @@ -1584,11 +1589,11 @@ Circulating amount src/app/components/asset/asset.component.html - 62 + 55 src/app/components/asset/asset.component.html - 66 + 59 Liquid Asset circulating amount asset.circulating-amount @@ -1621,7 +1626,7 @@ Error loading asset data. src/app/components/asset/asset.component.html - 141 + 152 asset.error.loading-asset-data @@ -1629,9 +1634,134 @@ Asset: src/app/components/asset/asset.component.ts - 73 + 75 + + Group of assets + + src/app/components/assets/asset-group/asset-group.component.html + 8,9 + + + src/app/components/assets/assets-featured/assets-featured.component.html + 9,10 + + + + Assets + + src/app/components/assets/assets-nav/assets-nav.component.html + 3 + + + src/app/components/assets/assets-nav/assets-nav.component.ts + 42 + + + src/app/components/assets/assets.component.ts + 44 + + + src/app/components/liquid-master-page/liquid-master-page.component.html + 46,48 + + Assets page header + + + Featured + + src/app/components/assets/assets-nav/assets-nav.component.html + 9 + + + + All + + src/app/components/assets/assets-nav/assets-nav.component.html + 13 + + + src/app/components/pool-ranking/pool-ranking.component.html + 64,70 + + + src/app/components/pool/pool.component.html + 149,151 + + + src/app/components/pool/pool.component.html + 172,174 + + + src/app/components/pool/pool.component.html + 429,431 + + + src/app/components/pool/pool.component.html + 455,457 + + + + Search asset + + src/app/components/assets/assets-nav/assets-nav.component.html + 19 + + Search Assets Placeholder Text + + + Clear + + src/app/components/assets/assets-nav/assets-nav.component.html + 21 + + Search Clear Button + + + Ticker + + src/app/components/assets/assets.component.html + 5,6 + + + src/app/components/assets/assets.component.html + 30,31 + + Asset ticker header + + + Issuer domain + + src/app/components/assets/assets.component.html + 6,9 + + + src/app/components/assets/assets.component.html + 31,34 + + Asset Issuer Domain header + + + Asset ID + + src/app/components/assets/assets.component.html + 7,10 + + + src/app/components/assets/assets.component.html + 32,36 + + Asset ID header + + + Error loading assets data. + + src/app/components/assets/assets.component.html + 48,53 + + Asset data load error + Offline @@ -1640,7 +1770,7 @@ src/app/components/liquid-master-page/liquid-master-page.component.html - 7,8 + 8,9 src/app/components/master-page/master-page.component.html @@ -1656,7 +1786,7 @@ src/app/components/liquid-master-page/liquid-master-page.component.html - 8,13 + 9,14 src/app/components/master-page/master-page.component.html @@ -1672,7 +1802,7 @@ src/app/components/liquid-master-page/liquid-master-page.component.html - 21,22 + 22,23 src/app/components/master-page/master-page.component.html @@ -1684,15 +1814,15 @@ Dashboard src/app/components/bisq-master-page/bisq-master-page.component.html - 30,32 + 31,33 src/app/components/liquid-master-page/liquid-master-page.component.html - 30,33 + 32,34 src/app/components/master-page/master-page.component.html - 33,35 + 32,34 master-page.dashboard @@ -1700,11 +1830,7 @@ Stats src/app/components/bisq-master-page/bisq-master-page.component.html - 39,42 - - - src/app/components/master-page/master-page.component.html - 43,47 + 40,42 master-page.stats @@ -1712,14 +1838,78 @@ Docs src/app/components/bisq-master-page/bisq-master-page.component.html - 42,45 + 43,45 src/app/components/liquid-master-page/liquid-master-page.component.html - 47,50 + 49,51 master-page.docs + + Block Fee Rates + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html + 5,7 + + + src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts + 65 + + + src/app/components/graphs/graphs.component.html + 14 + + mining.block-fee-rates + + + Block Fees + + src/app/components/block-fees-graph/block-fees-graph.component.html + 5,7 + + + src/app/components/block-fees-graph/block-fees-graph.component.ts + 58 + + + src/app/components/graphs/graphs.component.html + 16 + + mining.block-fees + + + Block Rewards + + src/app/components/block-rewards-graph/block-rewards-graph.component.html + 6,8 + + + src/app/components/block-rewards-graph/block-rewards-graph.component.ts + 56 + + + src/app/components/graphs/graphs.component.html + 18 + + mining.block-rewards + + + Block Sizes and Weights + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.html + 4,6 + + + src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts + 65 + + + src/app/components/graphs/graphs.component.html + 20 + + mining.block-sizes-weights + Next Block @@ -1730,6 +1920,10 @@ src/app/components/block/block.component.html 19,20 + + src/app/components/mempool-block/mempool-block.component.ts + 71 + Next Block @@ -1740,24 +1934,16 @@ Previous Block - - Timestamp - - src/app/components/block/block.component.html - 55,57 - - - src/app/components/latest-blocks/latest-blocks.component.html - 10,12 - - block.timestamp - Size src/app/components/block/block.component.html 64,66 + + src/app/components/blocks-list/blocks-list.component.html + 18,20 + src/app/components/latest-blocks/latest-blocks.component.html 13,16 @@ -1768,11 +1954,23 @@ src/app/components/mempool-graph/mempool-graph.component.ts - 257 + 260 + + + src/app/components/pool/pool.component.html + 219,222 + + + src/app/components/pool/pool.component.html + 267,271 + + + src/app/components/transaction/transaction.component.html + 212,214 src/app/dashboard/dashboard.component.html - 94,97 + 116,119 block.size @@ -1782,6 +1980,10 @@ src/app/components/block/block.component.html 68,70 + + src/app/components/transaction/transaction.component.html + 220,222 + block.weight @@ -1808,7 +2010,7 @@ src/app/components/blockchain-blocks/blockchain-blocks.component.html - 14,16 + 14,17 src/app/components/fees-box/fees-box.component.html @@ -1836,7 +2038,7 @@ src/app/components/mempool-blocks/mempool-blocks.component.html - 13,15 + 13,16 src/app/components/transaction/transaction.component.html @@ -1856,15 +2058,15 @@ src/app/components/transactions-list/transactions-list.component.html - 231 + 259 src/app/dashboard/dashboard.component.html - 130,134 + 159,163 src/app/dashboard/dashboard.component.html - 185,189 + 235,239 sat/vB shared.sat-vbyte @@ -1897,11 +2099,15 @@ Total fees src/app/components/block/block.component.html - 83,84 + 83,85 src/app/components/block/block.component.html - 98,100 + 109,111 + + + src/app/components/mempool-block/mempool-block.component.html + 24,25 Total fees in a block block.total-fees @@ -1910,11 +2116,11 @@ Subsidy + fees: src/app/components/block/block.component.html - 90,92 + 98,100 src/app/components/block/block.component.html - 102,106 + 113,117 Total subsidy and fees in a block block.subsidy-and-fees @@ -1923,7 +2129,7 @@ Miner src/app/components/block/block.component.html - 107,108 + 118,120 block.miner @@ -1931,7 +2137,7 @@ Bits src/app/components/block/block.component.html - 129,131 + 151,153 block.bits @@ -1939,7 +2145,7 @@ Merkle root src/app/components/block/block.component.html - 133,135 + 155,157 block.merkle-root @@ -1947,7 +2153,19 @@ Difficulty src/app/components/block/block.component.html - 143,146 + 165,168 + + + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 7,10 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 14,16 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 73,75 block.difficulty @@ -1955,7 +2173,7 @@ Nonce src/app/components/block/block.component.html - 147,149 + 169,171 block.nonce @@ -1963,7 +2181,7 @@ Block Header Hex src/app/components/block/block.component.html - 151,152 + 173,174 block.header @@ -1971,7 +2189,7 @@ Details src/app/components/block/block.component.html - 162,167 + 184,188 src/app/components/transaction/transaction.component.html @@ -1984,7 +2202,7 @@ Error loading block data. src/app/components/block/block.component.html - 256,266 + 278,288 block.error.loading-block-data @@ -1992,9 +2210,105 @@ Block : src/app/components/block/block.component.ts - 141 + 146 + + Pool + + src/app/components/blocks-list/blocks-list.component.html + 12,13 + + + src/app/components/pool-ranking/pool-ranking.component.html + 86,87 + + + src/app/dashboard/dashboard.component.html + 114,115 + + mining.pool-name + + + Mined + + src/app/components/blocks-list/blocks-list.component.html + 14,15 + + + src/app/components/latest-blocks/latest-blocks.component.html + 11,12 + + + src/app/components/pool/pool.component.html + 214,215 + + + src/app/components/pool/pool.component.html + 262,263 + + + src/app/dashboard/dashboard.component.html + 113,114 + + latest-blocks.mined + + + Reward + + src/app/components/blocks-list/blocks-list.component.html + 15,17 + + + src/app/components/pool/pool.component.html + 216,218 + + + src/app/components/pool/pool.component.html + 264,266 + + latest-blocks.reward + + + Fees + + src/app/components/blocks-list/blocks-list.component.html + 16,17 + + + src/app/components/pool/pool.component.html + 217,219 + + + src/app/components/pool/pool.component.html + 265,267 + + latest-blocks.fees + + + TXs + + src/app/components/blocks-list/blocks-list.component.html + 18,19 + + + src/app/components/pool/pool.component.html + 219,221 + + + src/app/components/pool/pool.component.html + 267,269 + + + src/app/dashboard/dashboard.component.html + 116,117 + + + src/app/dashboard/dashboard.component.html + 241,245 + + dashboard.txs + Copied! @@ -2002,795 +2316,123 @@ 15 - - API service + + Adjusted - src/app/components/docs/api-docs.component.html - 12,14 + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 6,8 - api-docs.title + mining.adjusted - - Endpoint + + Change - src/app/components/docs/api-docs.component.html - 32,33 + src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html + 8,11 - - src/app/components/docs/api-docs.component.html - 49,50 - - - src/app/components/docs/api-docs.component.html - 62,63 - - - src/app/components/docs/api-docs.component.html - 75,76 - - - src/app/components/docs/api-docs.component.html - 88,89 - - - src/app/components/docs/api-docs.component.html - 101,102 - - - src/app/components/docs/api-docs.component.html - 114,115 - - - src/app/components/docs/api-docs.component.html - 127,128 - - - src/app/components/docs/api-docs.component.html - 140,141 - - - src/app/components/docs/api-docs.component.html - 157,158 - - - src/app/components/docs/api-docs.component.html - 174,175 - - - src/app/components/docs/api-docs.component.html - 187,188 - - - src/app/components/docs/api-docs.component.html - 200,201 - - - src/app/components/docs/api-docs.component.html - 213,214 - - - src/app/components/docs/api-docs.component.html - 226,227 - - - src/app/components/docs/api-docs.component.html - 243,244 - - - src/app/components/docs/api-docs.component.html - 268,269 - - - src/app/components/docs/api-docs.component.html - 285,286 - - - src/app/components/docs/api-docs.component.html - 298,299 - - - src/app/components/docs/api-docs.component.html - 311,312 - - - src/app/components/docs/api-docs.component.html - 324,325 - - - src/app/components/docs/api-docs.component.html - 337,338 - - - src/app/components/docs/api-docs.component.html - 350,351 - - - src/app/components/docs/api-docs.component.html - 363,364 - - - src/app/components/docs/api-docs.component.html - 376,377 - - - src/app/components/docs/api-docs.component.html - 389,390 - - - src/app/components/docs/api-docs.component.html - 402,403 - - - src/app/components/docs/api-docs.component.html - 415,416 - - - src/app/components/docs/api-docs.component.html - 428,429 - - - src/app/components/docs/api-docs.component.html - 445,446 - - - src/app/components/docs/api-docs.component.html - 458,459 - - - src/app/components/docs/api-docs.component.html - 475,476 - - - src/app/components/docs/api-docs.component.html - 488,489 - - - src/app/components/docs/api-docs.component.html - 501,502 - - - src/app/components/docs/api-docs.component.html - 518,519 - - - src/app/components/docs/api-docs.component.html - 531,532 - - - src/app/components/docs/api-docs.component.html - 544,545 - - - src/app/components/docs/api-docs.component.html - 557,558 - - - src/app/components/docs/api-docs.component.html - 570,571 - - - src/app/components/docs/api-docs.component.html - 583,584 - - - src/app/components/docs/api-docs.component.html - 596,597 - - - src/app/components/docs/api-docs.component.html - 609,610 - - - src/app/components/docs/api-docs.component.html - 622,623 - - - src/app/components/docs/api-docs.component.html - 635,636 - - - src/app/components/docs/api-docs.component.html - 648,651 - - - src/app/components/docs/api-docs.component.html - 666,669 - - Api docs endpoint + mining.change - - Description + + Difficulty Adjustment - src/app/components/docs/api-docs.component.html - 36,37 + src/app/components/difficulty/difficulty.component.html + 1,5 - src/app/components/docs/api-docs.component.html + src/app/components/mining-dashboard/mining-dashboard.component.html + 24 + + dashboard.difficulty-adjustment + + + Remaining + + src/app/components/difficulty/difficulty.component.html + 7,9 + + + src/app/components/difficulty/difficulty.component.html + 66,69 + + difficulty-box.remaining + + + blocks + + src/app/components/difficulty/difficulty.component.html + 10,11 + + + src/app/components/difficulty/difficulty.component.html 53,54 - src/app/components/docs/api-docs.component.html - 66,67 + src/app/components/footer/footer.component.html + 25,26 - src/app/components/docs/api-docs.component.html - 79,80 - - - src/app/components/docs/api-docs.component.html - 92,94 - - - src/app/components/docs/api-docs.component.html - 105,106 - - - src/app/components/docs/api-docs.component.html - 118,119 - - - src/app/components/docs/api-docs.component.html - 131,132 - - - src/app/components/docs/api-docs.component.html - 144,145 - - - src/app/components/docs/api-docs.component.html - 161,162 - - - src/app/components/docs/api-docs.component.html - 178,179 - - - src/app/components/docs/api-docs.component.html - 191,192 - - - src/app/components/docs/api-docs.component.html - 204,205 - - - src/app/components/docs/api-docs.component.html - 217,218 - - - src/app/components/docs/api-docs.component.html - 230,231 - - - src/app/components/docs/api-docs.component.html - 247,248 - - - src/app/components/docs/api-docs.component.html - 259,260 - - - src/app/components/docs/api-docs.component.html - 272,273 - - - src/app/components/docs/api-docs.component.html - 289,290 - - - src/app/components/docs/api-docs.component.html - 302,303 - - - src/app/components/docs/api-docs.component.html - 315,316 - - - src/app/components/docs/api-docs.component.html - 328,329 - - - src/app/components/docs/api-docs.component.html - 341,342 - - - src/app/components/docs/api-docs.component.html - 354,355 - - - src/app/components/docs/api-docs.component.html - 367,369 - - - src/app/components/docs/api-docs.component.html - 380,381 - - - src/app/components/docs/api-docs.component.html - 393,394 - - - src/app/components/docs/api-docs.component.html - 406,407 - - - src/app/components/docs/api-docs.component.html - 419,420 - - - src/app/components/docs/api-docs.component.html - 432,433 - - - src/app/components/docs/api-docs.component.html - 449,450 - - - src/app/components/docs/api-docs.component.html - 462,463 - - - src/app/components/docs/api-docs.component.html - 479,480 - - - src/app/components/docs/api-docs.component.html - 492,493 - - - src/app/components/docs/api-docs.component.html - 505,506 - - - src/app/components/docs/api-docs.component.html - 522,523 - - - src/app/components/docs/api-docs.component.html - 535,536 - - - src/app/components/docs/api-docs.component.html - 548,549 - - - src/app/components/docs/api-docs.component.html - 561,562 - - - src/app/components/docs/api-docs.component.html - 574,575 - - - src/app/components/docs/api-docs.component.html - 587,588 - - - src/app/components/docs/api-docs.component.html - 600,601 - - - src/app/components/docs/api-docs.component.html - 613,614 - - - src/app/components/docs/api-docs.component.html - 626,627 - - - src/app/components/docs/api-docs.component.html - 639,640 - - - src/app/components/docs/api-docs.component.html - 652,653 - - - src/app/components/docs/api-docs.component.html - 670,671 + src/app/components/mempool-blocks/mempool-blocks.component.html + 35,36 + shared.blocks - - Returns details about difficulty adjustment. + + block - src/app/components/docs/api-docs.component.html - 37,39 + src/app/components/difficulty/difficulty.component.html + 11,12 + + src/app/components/difficulty/difficulty.component.html + 54,55 + + + src/app/components/footer/footer.component.html + 26,27 + + shared.block - - Provides list of available currencies for a given base currency. + + Estimate - src/app/components/docs/api-docs.component.html - 54,56 + src/app/components/difficulty/difficulty.component.html + 16,17 + + src/app/components/difficulty/difficulty.component.html + 73,76 + + difficulty-box.estimate - - Provides list of open offer prices for a single market. + + Previous - src/app/components/docs/api-docs.component.html - 67,69 + src/app/components/difficulty/difficulty.component.html + 31,33 + difficulty-box.previous - - Provides hi/low/open/close data for a given market. This can be used to generate a candlestick chart. + + Current Period - src/app/components/docs/api-docs.component.html - 80,82 + src/app/components/difficulty/difficulty.component.html + 43,44 + + src/app/components/difficulty/difficulty.component.html + 80,83 + + difficulty-box.current-period - - Provides list of available markets. + + Next Halving - src/app/components/docs/api-docs.component.html - 93,95 + src/app/components/difficulty/difficulty.component.html + 50,52 - - - Provides list of open offer details for a single market. - - src/app/components/docs/api-docs.component.html - 106,108 - - - - Provides 24 hour price ticker for single market or all markets - - src/app/components/docs/api-docs.component.html - 119,121 - - - - Provides list of completed trades for a single market. - - src/app/components/docs/api-docs.component.html - 132,134 - - - - Provides periodic volume data in terms of base currency for one or all markets. - - src/app/components/docs/api-docs.component.html - 145,147 - - - - Returns statistics about all Bisq transactions. - - src/app/components/docs/api-docs.component.html - 162,164 - - - - Returns details about an address. Available fields: address, chain_stats, and mempool_stats. chain,mempool_stats each contain an object with tx_count, funded_txo_count, funded_txo_sum, spent_txo_count, and spent_txo_sum. - - src/app/components/docs/api-docs.component.html - 179,180 - - - - Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using :last_seen_txid (see below). - - src/app/components/docs/api-docs.component.html - 192,193 - - - - Get confirmed transaction history for the specified address/scripthash, sorted with newest first. Returns 25 transactions per page. More can be requested by specifying the last txid seen by the previous query. - - src/app/components/docs/api-docs.component.html - 205,207 - - - - Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging). - - src/app/components/docs/api-docs.component.html - 218,220 - - - - Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: txid, vout, value, and status (with the status of the funding tx).There is also a valuecommitment field that may appear in place of value, plus the following additional fields: asset/assetcommitment, nonce/noncecommitment, surjection_proof, and range_proof. - - src/app/components/docs/api-docs.component.html - 231,233 - - - - Returns information about a Liquid asset. - - src/app/components/docs/api-docs.component.html - 248,250 - - - - Returns transactions associated with the specified Liquid asset. For the network's native asset, returns a list of peg in, peg out, and burn transactions. For user-issued assets, returns a list of issuance, reissuance, and burn transactions. Does not include regular transactions transferring this asset. - - src/app/components/docs/api-docs.component.html - 260,262 - - - - Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units. - - src/app/components/docs/api-docs.component.html - 273,275 - - - - Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight,proof, and previousblockhash. - - src/app/components/docs/api-docs.component.html - 290,291 - - - - Returns the hex-encoded block header. - - src/app/components/docs/api-docs.component.html - 303,305 - - - - Returns the hash of the block currently at :height. - - src/app/components/docs/api-docs.component.html - 316,317 - - - - Returns the raw block representation in binary. - - src/app/components/docs/api-docs.component.html - 329,331 - - - - Returns the confirmation status of a block. Available fields: in_best_chain (boolean, false for orphaned blocks), next_best (the hash of the next block, only available for blocks in the best chain). - - src/app/components/docs/api-docs.component.html - 342,343 - - - - Returns the height of the last block. - - src/app/components/docs/api-docs.component.html - 355,357 - - - - Returns the hash of the last block. - - src/app/components/docs/api-docs.component.html - 368,370 - - - - Returns the transaction at index :index within the specified block. - - src/app/components/docs/api-docs.component.html - 381,382 - - - - Returns a list of all txids in the block. - - src/app/components/docs/api-docs.component.html - 394,396 - - - - Returns a list of transactions in the block (up to 25 transactions beginning at start_index). Transactions returned here do not have the status field, since all the transactions share the same block and confirmation status. - - src/app/components/docs/api-docs.component.html - 407,408 - - - - Returns the 10 newest blocks starting at the tip or at :start_height if specified. - - src/app/components/docs/api-docs.component.html - 420,421 - - - src/app/components/docs/api-docs.component.html - 433,434 - - - - Returns current mempool as projected blocks. - - src/app/components/docs/api-docs.component.html - 450,452 - - API Docs for /api/v1/fees/mempool-blocks - api-docs.fees.mempool-blocks - - - Returns our currently suggested fees for new transactions. - - src/app/components/docs/api-docs.component.html - 463,465 - - API Docs for /api/v1/fees/recommended - api-docs.fees.recommended - - - Returns current mempool backlog statistics. - - src/app/components/docs/api-docs.component.html - 480,482 - - API Docs for /api/mempool - api-docs.mempool.mempool - - - Get the full list of txids in the mempool as an array. The order of the txids is arbitrary and does not match bitcoind. - - src/app/components/docs/api-docs.component.html - 493,495 - - API Docs for /api/mempool/txids - api-docs.mempool.txids - - - Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: txid, fee, vsize, and value. - - src/app/components/docs/api-docs.component.html - 506,507 - - API Docs for /api/mempool/recent - api-docs.mempool.recent - - - Returns the ancestors and the best descendant fees for a transaction. - - src/app/components/docs/api-docs.component.html - 523,525 - - API Docs for /api/v1/fees/cpfp - api-docs.fees.cpfp - - - Returns details about a transaction. Available fields: txid, version, locktime, size, weight, fee, vin, vout, and status. - - src/app/components/docs/api-docs.component.html - 536,537 - - - - Returns a transaction serialized as hex. - - src/app/components/docs/api-docs.component.html - 549,551 - - - - Returns a merkle inclusion proof for the transaction using bitcoind's merkleblock format. - - src/app/components/docs/api-docs.component.html - 562,563 - - - - Returns a merkle inclusion proof for the transaction using Electrum's blockchain.transaction.get_merkle format. - - src/app/components/docs/api-docs.component.html - 575,576 - - - - Returns the spending status of a transaction output. Available fields: spent (boolean), txid (optional), vin (optional), and status (optional, the status of the spending tx). - - src/app/components/docs/api-docs.component.html - 588,589 - - - - Returns the spending status of all transaction outputs. - - src/app/components/docs/api-docs.component.html - 601,603 - - - - Returns a transaction as binary data. - - src/app/components/docs/api-docs.component.html - 614,616 - - - - Returns the confirmation status of a transaction. Available fields: confirmed (boolean), block_height (optional), and block_hash (optional). - - src/app/components/docs/api-docs.component.html - 627,628 - - - - Returns :length of latest Bisq transactions, starting from :index. - - src/app/components/docs/api-docs.component.html - 640,642 - - - - Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The txid will be returned on success. - - src/app/components/docs/api-docs.component.html - 653,654 - - - - Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - - src/app/components/docs/api-docs.component.html - 671,672 - - api-docs.websocket.websocket - - - API - - src/app/components/docs/api-docs.component.ts - 42 - - - - Code Example - - src/app/components/docs/code-template.component.html - 6,7 - - - src/app/components/docs/code-template.component.html - 13,14 - - - src/app/components/docs/code-template.component.html - 29,30 - - API Docs code example - - - Install Package - - src/app/components/docs/code-template.component.html - 23,24 - - API Docs install lib - - - Response - - src/app/components/docs/code-template.component.html - 36,37 - - API Docs API response - - - Documentation - - src/app/components/docs/docs.component.html - 4 - - - src/app/components/master-page/master-page.component.html - 61,64 - - documentation.title - - - Privacy Policy - - src/app/components/docs/docs.component.html - 35 - - - src/app/dashboard/dashboard.component.html - 154,156 - - Privacy Policy - shared.privacy-policy + difficulty-box.next-halving Low priority @@ -2828,23 +2470,27 @@ fees-box.high-priority - - Tx vBytes per second: + + Incoming transactions src/app/components/footer/footer.component.html - 5,7 + 5,6 - footer.tx-vbytes-per-second + + src/app/dashboard/dashboard.component.html + 268,269 + + dashboard.incoming-transactions Backend is synchronizing src/app/components/footer/footer.component.html - 7,11 + 8,10 src/app/dashboard/dashboard.component.html - 221,224 + 271,274 dashboard.backend-is-synchronizing @@ -2852,11 +2498,11 @@ vB/s src/app/components/footer/footer.component.html - 11,16 + 13,17 src/app/dashboard/dashboard.component.html - 226,232 + 276,281 vB/s shared.vbytes-per-second @@ -2865,11 +2511,11 @@ Unconfirmed src/app/components/footer/footer.component.html - 16,18 + 19,21 src/app/dashboard/dashboard.component.html - 189,190 + 239,240 Unconfirmed count dashboard.unconfirmed @@ -2878,89 +2524,159 @@ Mempool size src/app/components/footer/footer.component.html - 20,21 + 23,24 Mempool size dashboard.mempool-size - - blocks + + Mining - src/app/components/footer/footer.component.html - 22,23 + src/app/components/graphs/graphs.component.html + 5 - - src/app/components/mempool-blocks/mempool-blocks.component.html - 32,33 - - - src/app/dashboard/dashboard.component.html - 242,243 - - shared.blocks + mining - - block + + Pools Ranking - src/app/components/footer/footer.component.html - 23,24 + src/app/components/graphs/graphs.component.html + 8 - src/app/dashboard/dashboard.component.html - 243,244 + src/app/components/pool-ranking/pool-ranking.component.html + 29,31 - shared.block + mining.pools - - Mined + + Pools Dominance - src/app/components/latest-blocks/latest-blocks.component.html - 11,12 + src/app/components/graphs/graphs.component.html + 10 - src/app/dashboard/dashboard.component.html - 92,93 + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html + 6,8 - latest-blocks.mined + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html + 10,11 + + mining.pools-dominance - - Blocks + + Hashrate & Difficulty - src/app/components/latest-blocks/latest-blocks.component.ts - 39 + src/app/components/graphs/graphs.component.html + 12 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 23,25 + + + src/app/components/hashrate-chart/hashrate-chart.component.ts + 67 + + mining.hashrate-difficulty + + + Hashrate + + src/app/components/hashrate-chart/hashrate-chart.component.html + 8,10 + + + src/app/components/hashrate-chart/hashrate-chart.component.html + 67,69 + + + src/app/components/pool-ranking/pool-ranking.component.html + 87,89 + + mining.hashrate + + + Pools Historical Dominance + + src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts + 63 + + + + Indexing blocks + + src/app/components/indexing-progress/indexing-progress.component.html + 1 + + + + Indexing network hashrate + + src/app/components/indexing-progress/indexing-progress.component.html + 2 + + + + Indexing pools hashrate + + src/app/components/indexing-progress/indexing-progress.component.html + 3 Graphs src/app/components/liquid-master-page/liquid-master-page.component.html - 36,39 + 38,41 src/app/components/master-page/master-page.component.html - 51,53 + 41,43 src/app/components/statistics/statistics.component.ts - 58 + 62 master-page.graphs + + Mining Dashboard + + src/app/components/master-page/master-page.component.html + 35,37 + + + src/app/components/mining-dashboard/mining-dashboard.component.ts + 16 + + mining.mining-dashboard + TV view src/app/components/master-page/master-page.component.html - 54,57 + 44,46 src/app/components/television/television.component.ts - 27 + 37 master-page.tvview + + Documentation + + src/app/components/master-page/master-page.component.html + 47,49 + + + src/app/docs/docs/docs.component.html + 4 + + documentation.title + Fee span @@ -2969,21 +2685,6 @@ mempool-block.fee-span - - Total fees - - src/app/components/mempool-block/mempool-block.component.html - 24,25 - - mempool-block.total-fees - - - Next block - - src/app/components/mempool-block/mempool-block.component.ts - 71 - - Stack of mempool blocks @@ -3002,37 +2703,302 @@ Range src/app/components/mempool-graph/mempool-graph.component.ts - 256 + 259 Sum src/app/components/mempool-graph/mempool-graph.component.ts - 258 + 261 - - Unknown + + Reward stats - src/app/components/miner/miner.component.html + src/app/components/mining-dashboard/mining-dashboard.component.html 10 - miner.tag.unknown-miner + mining.reward-stats - - Identified by payout address: '' + + (144 blocks) - src/app/components/miner/miner.component.ts - 42 + src/app/components/mining-dashboard/mining-dashboard.component.html + 11 + mining.144-blocks - - Identified by coinbase tag: '' + + Latest blocks - src/app/components/miner/miner.component.ts + src/app/components/mining-dashboard/mining-dashboard.component.html 52 + + src/app/dashboard/dashboard.component.html + 109,112 + + dashboard.latest-blocks + + + Adjustments + + src/app/components/mining-dashboard/mining-dashboard.component.html + 63 + + dashboard.adjustments + + + Pools Luck (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 8,12 + + + src/app/components/pool-ranking/pool-ranking.component.html + 124,126 + + mining.miners-luck + + + Blocks (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 14,18 + + + src/app/components/pool-ranking/pool-ranking.component.html + 130,132 + + master-page.blocks + + + Pools Count (1w) + + src/app/components/pool-ranking/pool-ranking.component.html + 20,24 + + + src/app/components/pool-ranking/pool-ranking.component.html + 136,138 + + mining.miners-count + + + Rank + + src/app/components/pool-ranking/pool-ranking.component.html + 84,86 + + mining.rank + + + Empty blocks + + src/app/components/pool-ranking/pool-ranking.component.html + 89,92 + + mining.empty-blocks + + + All miners + + src/app/components/pool-ranking/pool-ranking.component.html + 107,108 + + mining.all-miners + + + Mining Pools + + src/app/components/pool-ranking/pool-ranking.component.ts + 55 + + + + Tags + + src/app/components/pool/pool.component.html + 22,23 + + + src/app/components/pool/pool.component.html + 30,31 + + + src/app/components/pool/pool.component.html + 321,323 + + + src/app/components/pool/pool.component.html + 329,331 + + mining.tags + + + Show all + + src/app/components/pool/pool.component.html + 53,55 + + + src/app/components/pool/pool.component.html + 68,70 + + + src/app/components/transactions-list/transactions-list.component.html + 141,144 + + + src/app/components/transactions-list/transactions-list.component.html + 249,251 + + show-all + + + Hide + + src/app/components/pool/pool.component.html + 55,58 + + hide + + + Hashrate (24h) + + src/app/components/pool/pool.component.html + 91,93 + + + src/app/components/pool/pool.component.html + 114,116 + + + src/app/components/pool/pool.component.html + 368,370 + + + src/app/components/pool/pool.component.html + 395,397 + + mining.hashrate-24h + + + Estimated + + src/app/components/pool/pool.component.html + 96,97 + + + src/app/components/pool/pool.component.html + 118,119 + + + src/app/components/pool/pool.component.html + 373,374 + + + src/app/components/pool/pool.component.html + 399,400 + + mining.estimated + + + Reported + + src/app/components/pool/pool.component.html + 97,98 + + + src/app/components/pool/pool.component.html + 119,120 + + + src/app/components/pool/pool.component.html + 374,375 + + + src/app/components/pool/pool.component.html + 400,401 + + mining.reported + + + Luck + + src/app/components/pool/pool.component.html + 98,101 + + + src/app/components/pool/pool.component.html + 120,123 + + + src/app/components/pool/pool.component.html + 375,378 + + + src/app/components/pool/pool.component.html + 401,404 + + mining.luck + + + Mined blocks + + src/app/components/pool/pool.component.html + 141,143 + + + src/app/components/pool/pool.component.html + 165,167 + + + src/app/components/pool/pool.component.html + 421,423 + + + src/app/components/pool/pool.component.html + 448,450 + + mining.mined-blocks + + + 24h + + src/app/components/pool/pool.component.html + 147 + + + src/app/components/pool/pool.component.html + 170 + + 24h + + + 1w + + src/app/components/pool/pool.component.html + 148 + + + src/app/components/pool/pool.component.html + 171 + + 1w + + + Coinbase tag + + src/app/components/pool/pool.component.html + 215,217 + + + src/app/components/pool/pool.component.html + 263,265 + + latest-blocks.coinbasetag Broadcast Transaction @@ -3046,13 +3012,13 @@ src/app/dashboard/dashboard.component.html - 156,162 + 185,192 Broadcast Transaction shared.broadcast-transaction - - Transaction Hex + + Transaction hex src/app/components/push-transaction/push-transaction.component.html 6 @@ -3063,6 +3029,75 @@ transaction.hex + + Miners Reward + + src/app/components/reward-stats/reward-stats.component.html + 4,6 + + + src/app/components/reward-stats/reward-stats.component.html + 46,49 + + mining.rewards + + + Amount being paid to miners in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 6,8 + + mining.rewards-desc + + + Reward Per Tx + + src/app/components/reward-stats/reward-stats.component.html + 16,18 + + + src/app/components/reward-stats/reward-stats.component.html + 29,31 + + + src/app/components/reward-stats/reward-stats.component.html + 53,56 + + + src/app/components/reward-stats/reward-stats.component.html + 60,63 + + mining.rewards-per-tx + + + Average miners' reward per transaction in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 18,20 + + mining.rewards-per-tx-desc + + + sats/tx + + src/app/components/reward-stats/reward-stats.component.html + 21,24 + + + src/app/components/reward-stats/reward-stats.component.html + 33,36 + + sat/vB + shared.sat-vbyte + + + Fee paid on average for each transaction in the past 144 blocks + + src/app/components/reward-stats/reward-stats.component.html + 31,32 + + mining.average-fee + TXID, block height, hash or address @@ -3083,7 +3118,7 @@ Sponsor src/app/components/sponsor/sponsor.component.html - 3 + 7 src/app/components/sponsor/sponsor.component.ts @@ -3095,7 +3130,7 @@ Request invoice src/app/components/sponsor/sponsor.component.html - 49 + 53 about.sponsor.request-invoice @@ -3103,7 +3138,7 @@ Waiting for transaction... src/app/components/sponsor/sponsor.component.html - 138 + 142 about.sponsor.waiting-for-transaction @@ -3111,7 +3146,7 @@ Donation confirmed! src/app/components/sponsor/sponsor.component.html - 144 + 148 about.sponsor.donation-confirmed @@ -3119,7 +3154,7 @@ Thank you! src/app/components/sponsor/sponsor.component.html - 145 + 149 about.sponsor.thank-you @@ -3127,7 +3162,7 @@ Mempool by vBytes (sat/vByte) src/app/components/statistics/statistics.component.html - 6 + 7 statistics.memory-by-vBytes @@ -3135,7 +3170,7 @@ Filter src/app/components/statistics/statistics.component.html - 40 + 49 statistics.component-filter.title @@ -3143,7 +3178,7 @@ Invert src/app/components/statistics/statistics.component.html - 62 + 68 statistics.component-invert.title @@ -3151,7 +3186,7 @@ Transaction vBytes per second (vB/s) src/app/components/statistics/statistics.component.html - 87 + 88 statistics.transaction-vbytes-per-second @@ -3364,20 +3399,11 @@ src/app/components/transactions-list/transactions-list.component.html - 242,246 + 270,273 Transaction unconfirmed state transaction.unconfirmed - - Confirmed - - src/app/components/transaction/transaction.component.html - 65,66 - - Transaction Confirmed state - transaction.confirmed - First seen @@ -3449,24 +3475,6 @@ Transaction Ancestor transaction.ancestor - - Size - - src/app/components/transaction/transaction.component.html - 212,215 - - Transaction Size - transaction.size - - - Weight - - src/app/components/transaction/transaction.component.html - 220,223 - - Transaction Weight - transaction.weight - Locktime @@ -3500,14 +3508,18 @@ Transaction fee transaction.fee - + sat src/app/components/transaction/transaction.component.html - 386,389 + 386,387 - Transaction Fee sat - transaction.fee.sat + + src/app/components/transactions-list/transactions-list.component.html + 259,260 + + sat + shared.sat Effective fee rate @@ -3522,7 +3534,7 @@ Coinbase src/app/components/transactions-list/transactions-list.component.html - 51 + 54 transactions-list.coinbase @@ -3530,7 +3542,7 @@ (Newly Generated Coins) src/app/components/transactions-list/transactions-list.component.html - 51 + 54 transactions-list.newly-generated-coins @@ -3538,7 +3550,7 @@ Peg-in src/app/components/transactions-list/transactions-list.component.html - 53,55 + 56,58 transactions-list.peg-in @@ -3546,7 +3558,7 @@ ScriptSig (ASM) src/app/components/transactions-list/transactions-list.component.html - 86,88 + 97,99 ScriptSig (ASM) transactions-list.scriptsig.asm @@ -3555,7 +3567,7 @@ ScriptSig (HEX) src/app/components/transactions-list/transactions-list.component.html - 90,93 + 101,104 ScriptSig (HEX) transactions-list.scriptsig.hex @@ -3564,7 +3576,7 @@ Witness src/app/components/transactions-list/transactions-list.component.html - 95,97 + 106,108 transactions-list.witness @@ -3572,15 +3584,23 @@ P2SH redeem script src/app/components/transactions-list/transactions-list.component.html - 99,100 + 110,111 transactions-list.p2sh-redeem-script + + P2TR tapscript + + src/app/components/transactions-list/transactions-list.component.html + 114,116 + + transactions-list.p2tr-tapscript + P2WSH witness script src/app/components/transactions-list/transactions-list.component.html - 103,104 + 116,118 transactions-list.p2wsh-witness-script @@ -3588,7 +3608,7 @@ nSequence src/app/components/transactions-list/transactions-list.component.html - 107,109 + 121,123 transactions-list.nsequence @@ -3596,7 +3616,7 @@ Previous output script src/app/components/transactions-list/transactions-list.component.html - 112,113 + 126,127 transactions-list.previous-output-script @@ -3604,27 +3624,15 @@ Previous output type src/app/components/transactions-list/transactions-list.component.html - 116,117 + 130,131 transactions-list.previous-output-type - - Load all - - src/app/components/transactions-list/transactions-list.component.html - 127,130 - - - src/app/components/transactions-list/transactions-list.component.html - 221,224 - - transactions-list.load-all - Peg-out to src/app/components/transactions-list/transactions-list.component.html - 146,147 + 166,167 transactions-list.peg-out-to @@ -3632,7 +3640,7 @@ ScriptPubKey (ASM) src/app/components/transactions-list/transactions-list.component.html - 199,201 + 227,229 ScriptPubKey (ASM) transactions-list.scriptpubkey.asm @@ -3641,28 +3649,11 @@ ScriptPubKey (HEX) src/app/components/transactions-list/transactions-list.component.html - 203,206 + 231,234 ScriptPubKey (HEX) transactions-list.scriptpubkey.hex - - data - - src/app/components/transactions-list/transactions-list.component.html - 207,209 - - transactions-list.vout.scriptpubkey-type.data - - - sat - - src/app/components/transactions-list/transactions-list.component.html - 231,232 - - sat - shared.sat - This transaction saved % on fees by using native SegWit-Bech32 @@ -3791,35 +3782,15 @@ src/app/dashboard/dashboard.component.html - 33,36 + 34,37 fees-box.transaction-fees - - Latest blocks - - src/app/dashboard/dashboard.component.html - 88,91 - - dashboard.latest-blocks - - - TXs - - src/app/dashboard/dashboard.component.html - 94,95 - - - src/app/dashboard/dashboard.component.html - 191,195 - - dashboard.latest-blocks.transaction-count - Latest transactions src/app/dashboard/dashboard.component.html - 117,120 + 146,149 dashboard.latest-transactions @@ -3827,7 +3798,7 @@ USD src/app/dashboard/dashboard.component.html - 123,124 + 152,153 dashboard.latest-transactions.USD @@ -3835,7 +3806,7 @@ Fee src/app/dashboard/dashboard.component.html - 124,126 + 153,155 dashboard.latest-transactions.fee @@ -3843,7 +3814,7 @@ Expand src/app/dashboard/dashboard.component.html - 144,145 + 173,174 dashboard.expand @@ -3851,7 +3822,7 @@ Collapse src/app/dashboard/dashboard.component.html - 145,151 + 174,180 dashboard.collapse @@ -3859,7 +3830,7 @@ Minimum fee src/app/dashboard/dashboard.component.html - 182,183 + 232,233 Minimum mempool fee dashboard.minimum-fee @@ -3868,7 +3839,7 @@ Purging src/app/dashboard/dashboard.component.html - 183,184 + 233,234 Purgin below fee dashboard.purging @@ -3877,7 +3848,7 @@ Memory usage src/app/dashboard/dashboard.component.html - 195,196 + 245,246 Memory usage dashboard.memory-usage @@ -3886,69 +3857,87 @@ L-BTC in circulation src/app/dashboard/dashboard.component.html - 209,211 + 259,261 dashboard.lbtc-pegs-in-circulation - - Incoming transactions + + API service - src/app/dashboard/dashboard.component.html - 218,219 + src/app/docs/api-docs/api-docs.component.html + 37,39 - dashboard.incoming-transactions + api-docs.title - - Difficulty Adjustment + + Endpoint - src/app/dashboard/dashboard.component.html - 233,237 + src/app/docs/api-docs/api-docs.component.html + 45,46 - dashboard.difficulty-adjustment + + src/app/docs/api-docs/api-docs.component.html + 97,100 + + Api docs endpoint - - Remaining + + Description - src/app/dashboard/dashboard.component.html - 239,241 + src/app/docs/api-docs/api-docs.component.html + 62,63 - src/app/dashboard/dashboard.component.html - 290,293 + src/app/docs/api-docs/api-docs.component.html + 101,102 - difficulty-box.remaining - - Estimate + + Default push: action: 'want', data: ['blocks', ...] to express what you want pushed. Available: blocks, mempool-blocks, live-2h-chart, and stats.Push transactions related to address: 'track-address': '3PbJ...bF9B' to receive all new transactions containing that address as input or output. Returns an array of transactions. address-transactions for new mempool transactions, and block-transactions for new block confirmed transactions. - src/app/dashboard/dashboard.component.html - 248,249 + src/app/docs/api-docs/api-docs.component.html + 102,103 - - src/app/dashboard/dashboard.component.html - 297,300 - - difficulty-box.estimate + api-docs.websocket.websocket - - Previous + + API - src/app/dashboard/dashboard.component.html - 263,265 + src/app/docs/api-docs/api-docs.component.ts + 48 - difficulty-box.previous - - Current Period + + Code Example - src/app/dashboard/dashboard.component.html - 275,276 + src/app/docs/code-template/code-template.component.html + 6,7 - src/app/dashboard/dashboard.component.html - 304,307 + src/app/docs/code-template/code-template.component.html + 13,14 - difficulty-box.current-period + + src/app/docs/code-template/code-template.component.html + 29,30 + + API Docs code example + + + Install Package + + src/app/docs/code-template/code-template.component.html + 23,24 + + API Docs install lib + + + Response + + src/app/docs/code-template/code-template.component.html + 36,37 + + API Docs API response year diff --git a/production/README.md b/production/README.md index 0fe6b38f0..62218420a 100644 --- a/production/README.md +++ b/production/README.md @@ -82,11 +82,11 @@ pkg install -y zsh sudo git screen curl wget neovim rsync nginx openssl openssh- ### Node.js + npm -Build Node.js v16.10 and npm v7 from source using `nvm`: +Build Node.js v16.15 and npm v8 from source using `nvm`: ``` curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh source $HOME/.zshrc -nvm install v16.10.0 +nvm install v16.15.0 nvm alias default node ``` diff --git a/production/install b/production/install index 0fc9becb6..b40d868bf 100755 --- a/production/install +++ b/production/install @@ -854,7 +854,7 @@ echo "[*] Installing nvm.sh from GitHub" osSudo "${MEMPOOL_USER}" sh -c 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh' echo "[*] Building NodeJS via nvm.sh" -osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v16.10.0' +osSudo "${MEMPOOL_USER}" zsh -c 'source ~/.zshrc ; nvm install v16.15.0' #################### # Tor installation #