diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts
index 22bea2480..081442567 100644
--- a/backend/src/api/blocks.ts
+++ b/backend/src/api/blocks.ts
@@ -96,14 +96,20 @@ class Blocks {
*/
private getBlockExtended(block: IEsploraApi.Block, transactions: TransactionExtended[]): BlockExtended {
const blockExtended: BlockExtended = Object.assign({}, block);
- blockExtended.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0);
- blockExtended.coinbaseTx = transactionUtils.stripCoinbaseTransaction(transactions[0]);
+
+ blockExtended.extra = {
+ reward: transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0),
+ coinbaseTx: transactionUtils.stripCoinbaseTransaction(transactions[0]),
+ };
const transactionsTmp = [...transactions];
transactionsTmp.shift();
transactionsTmp.sort((a, b) => b.effectiveFeePerVsize - a.effectiveFeePerVsize);
- blockExtended.medianFee = transactionsTmp.length > 0 ? Common.median(transactionsTmp.map((tx) => tx.effectiveFeePerVsize)) : 0;
- blockExtended.feeRange = transactionsTmp.length > 0 ? Common.getFeesInRange(transactionsTmp, 8) : [0, 0];
+
+ blockExtended.extra.medianFee = transactionsTmp.length > 0 ?
+ Common.median(transactionsTmp.map((tx) => tx.effectiveFeePerVsize)) : 0;
+ blockExtended.extra.feeRange = transactionsTmp.length > 0 ?
+ Common.getFeesInRange(transactionsTmp, 8) : [0, 0];
return blockExtended;
}
@@ -197,7 +203,14 @@ class Blocks {
const block = await bitcoinApi.$getBlock(blockHash);
const transactions = await this.$getTransactionsExtended(blockHash, block.height, true);
const blockExtended = this.getBlockExtended(block, transactions);
- const miner = await this.$findBlockMiner(blockExtended.coinbaseTx);
+
+ let miner: PoolTag;
+ if (blockExtended?.extra?.coinbaseTx) {
+ miner = await this.$findBlockMiner(blockExtended.extra.coinbaseTx);
+ } else {
+ miner = await poolsRepository.$getUnknownPool();
+ }
+
const coinbase: IEsploraApi.Transaction = await bitcoinApi.$getRawTransaction(transactions[0].txid, true);
await blocksRepository.$saveBlockInDatabase(blockExtended, blockHash, coinbase.hex, miner);
} catch (e) {
@@ -262,7 +275,12 @@ class Blocks {
const coinbase: IEsploraApi.Transaction = await bitcoinApi.$getRawTransaction(transactions[0].txid, true);
if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === true) {
- const miner = await this.$findBlockMiner(blockExtended.coinbaseTx);
+ let miner: PoolTag;
+ if (blockExtended?.extra?.coinbaseTx) {
+ miner = await this.$findBlockMiner(blockExtended.extra.coinbaseTx);
+ } else {
+ miner = await poolsRepository.$getUnknownPool();
+ }
await blocksRepository.$saveBlockInDatabase(blockExtended, blockHash, coinbase.hex, miner);
}
diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts
index 7891a606a..5478445df 100644
--- a/backend/src/api/websocket-handler.ts
+++ b/backend/src/api/websocket-handler.ts
@@ -380,7 +380,9 @@ class WebsocketHandler {
mBlocks = mempoolBlocks.getMempoolBlocks();
}
- block.matchRate = matchRate;
+ if (block.extra) {
+ block.extra.matchRate = matchRate;
+ }
this.wss.clients.forEach((client) => {
if (client.readyState !== WebSocket.OPEN) {
diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts
index 5fb83d792..17509b814 100644
--- a/backend/src/mempool.interfaces.ts
+++ b/backend/src/mempool.interfaces.ts
@@ -76,7 +76,8 @@ export interface TransactionStripped {
vsize: number;
value: number;
}
-export interface BlockExtended extends IEsploraApi.Block {
+
+export interface BlockExtension {
medianFee?: number;
feeRange?: number[];
reward?: number;
@@ -84,6 +85,10 @@ export interface BlockExtended extends IEsploraApi.Block {
matchRate?: number;
}
+export interface BlockExtended extends IEsploraApi.Block {
+ extra?: BlockExtension;
+}
+
export interface TransactionMinerInfo {
vin: VinStrippedToScriptsig[];
vout: VoutStrippedToScriptPubkey[];
diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts
index 947403e88..2d55fc1cb 100644
--- a/backend/src/repositories/BlocksRepository.ts
+++ b/backend/src/repositories/BlocksRepository.ts
@@ -31,9 +31,18 @@ class BlocksRepository {
)`;
const params: any[] = [
- block.height, blockHash, block.timestamp, block.size,
- block.weight, block.tx_count, coinbaseHex ? coinbaseHex : '', block.difficulty,
- poolTag.id, 0, '[]', block.medianFee,
+ block.height,
+ blockHash,
+ block.timestamp,
+ block.size,
+ block.weight,
+ block.tx_count,
+ coinbaseHex ? coinbaseHex : '',
+ block.difficulty,
+ poolTag.id,
+ 0,
+ '[]',
+ block.extra ? block.extra.medianFee : 0,
];
await connection.query(query, params);
diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html
index 7995d9d1e..4f6e1cc03 100644
--- a/frontend/src/app/components/block/block.component.html
+++ b/frontend/src/app/components/block/block.component.html
@@ -74,9 +74,9 @@
-
+
Median fee |
- ~{{ block.medianFee | number:'1.0-0' }} sat/vB |
+ ~{{ block?.extra?.medianFee | number:'1.0-0' }} sat/vB |
diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts
index a3841a3a6..c079b5efd 100644
--- a/frontend/src/app/components/block/block.component.ts
+++ b/frontend/src/app/components/block/block.component.ts
@@ -3,12 +3,13 @@ import { Location } from '@angular/common';
import { ActivatedRoute, ParamMap, Router } from '@angular/router';
import { ElectrsApiService } from '../../services/electrs-api.service';
import { switchMap, tap, debounceTime, catchError, map } from 'rxjs/operators';
-import { Block, Transaction, Vout } from '../../interfaces/electrs.interface';
+import { Transaction, Vout } from '../../interfaces/electrs.interface';
import { Observable, of, Subscription } from 'rxjs';
import { StateService } from '../../services/state.service';
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';
@Component({
selector: 'app-block',
@@ -17,13 +18,13 @@ import { RelativeUrlPipe } from 'src/app/shared/pipes/relative-url/relative-url.
})
export class BlockComponent implements OnInit, OnDestroy {
network = '';
- block: Block;
+ block: BlockExtended;
blockHeight: number;
nextBlockHeight: number;
blockHash: string;
isLoadingBlock = true;
- latestBlock: Block;
- latestBlocks: Block[] = [];
+ latestBlock: BlockExtended;
+ latestBlocks: BlockExtended[] = [];
transactions: Transaction[];
isLoadingTransactions = true;
error: any;
@@ -76,7 +77,9 @@ export class BlockComponent implements OnInit, OnDestroy {
if (block.id === this.blockHash) {
this.block = block;
- this.fees = block.reward / 100000000 - this.blockSubsidy;
+ if (block?.extra?.reward != undefined) {
+ this.fees = block.extra.reward / 100000000 - this.blockSubsidy;
+ }
}
});
@@ -108,7 +111,7 @@ export class BlockComponent implements OnInit, OnDestroy {
} else {
this.isLoadingBlock = true;
- let blockInCache: Block;
+ let blockInCache: BlockExtended;
if (isBlockHeight) {
blockInCache = this.latestBlocks.find((block) => block.height === parseInt(blockHash, 10));
if (blockInCache) {
@@ -134,7 +137,7 @@ export class BlockComponent implements OnInit, OnDestroy {
return this.electrsApiService.getBlock$(blockHash);
}
}),
- tap((block: Block) => {
+ tap((block: BlockExtended) => {
this.block = block;
this.blockHeight = block.height;
this.nextBlockHeight = block.height + 1;
@@ -142,12 +145,10 @@ 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;
- if (block.coinbaseTx) {
- this.coinbaseTx = block.coinbaseTx;
- }
+ this.coinbaseTx = block?.extra?.coinbaseTx;
this.setBlockSubsidy();
- if (block.reward !== undefined) {
- this.fees = block.reward / 100000000 - this.blockSubsidy;
+ if (block?.extra?.reward !== undefined) {
+ this.fees = block.extra.reward / 100000000 - this.blockSubsidy;
}
this.stateService.markBlock$.next({ blockHeight: this.blockHeight });
this.isLoadingTransactions = true;
diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html
index 1a3942df1..4a74dab3c 100644
--- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html
+++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html
@@ -8,10 +8,10 @@
- ~{{ block.medianFee | number:feeRounding }} sat/vB
+ ~{{ block?.extra?.medianFee | number:feeRounding }} sat/vB
- {{ block.feeRange[1] | number:feeRounding }} - {{ block.feeRange[block.feeRange.length - 1] | number:feeRounding }} sat/vB
+ {{ block?.extra?.feeRange[1] | number:feeRounding }} - {{ block?.extra?.feeRange[block?.extra?.feeRange.length - 1] | number:feeRounding }} sat/vB
diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts
index 665822bd5..7dcec9cc3 100644
--- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts
+++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts
@@ -1,9 +1,9 @@
import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import { Observable, Subscription } from 'rxjs';
-import { Block } from 'src/app/interfaces/electrs.interface';
import { StateService } from 'src/app/services/state.service';
import { Router } from '@angular/router';
import { specialBlocks } from 'src/app/app.constants';
+import { BlockExtended } from 'src/app/interfaces/node-api.interface';
@Component({
selector: 'app-blockchain-blocks',
@@ -14,8 +14,8 @@ import { specialBlocks } from 'src/app/app.constants';
export class BlockchainBlocksComponent implements OnInit, OnDestroy {
specialBlocks = specialBlocks;
network = '';
- blocks: Block[] = [];
- emptyBlocks: Block[] = this.mountEmptyBlocks();
+ blocks: BlockExtended[] = [];
+ emptyBlocks: BlockExtended[] = this.mountEmptyBlocks();
markHeight: number;
blocksSubscription: Subscription;
networkSubscription: Subscription;
@@ -69,8 +69,8 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
this.blocks.unshift(block);
this.blocks = this.blocks.slice(0, this.stateService.env.KEEP_BLOCKS_AMOUNT);
- if (this.blocksFilled && !this.tabHidden) {
- block.stage = block.matchRate >= 66 ? 1 : 2;
+ if (this.blocksFilled && !this.tabHidden && block.extra) {
+ block.extra.stage = block.extra.matchRate >= 66 ? 1 : 2;
}
if (txConfirmed) {
@@ -143,16 +143,16 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
}
}
- trackByBlocksFn(index: number, item: Block) {
+ trackByBlocksFn(index: number, item: BlockExtended) {
return item.height;
}
- getStyleForBlock(block: Block) {
+ getStyleForBlock(block: BlockExtended) {
const greenBackgroundHeight = 100 - (block.weight / this.stateService.env.BLOCK_WEIGHT_UNITS) * 100;
let addLeft = 0;
- if (block.stage === 1) {
- block.stage = 2;
+ if (block?.extra?.stage === 1) {
+ block.extra.stage = 2;
addLeft = -205;
}
@@ -167,11 +167,11 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy {
};
}
- getStyleForEmptyBlock(block: Block) {
+ getStyleForEmptyBlock(block: BlockExtended) {
let addLeft = 0;
- if (block.stage === 1) {
- block.stage = 2;
+ if (block?.extra?.stage === 1) {
+ block.extra.stage = 2;
addLeft = -205;
}
diff --git a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts
index 5257d6a9e..1bfb665b6 100644
--- a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts
+++ b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts
@@ -153,7 +153,7 @@ export class MempoolBlocksComponent implements OnInit, OnDestroy {
this.blockSubscription = this.stateService.blocks$
.subscribe(([block]) => {
- if (block.matchRate >= 66 && !this.tabHidden) {
+ if (block?.extra?.matchRate >= 66 && !this.tabHidden) {
this.blockIndex++;
}
});
diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts
index 2478958f6..bd77c564f 100644
--- a/frontend/src/app/components/transaction/transaction.component.ts
+++ b/frontend/src/app/components/transaction/transaction.component.ts
@@ -9,14 +9,14 @@ import {
delay,
map
} from 'rxjs/operators';
-import { Transaction, Block } from '../../interfaces/electrs.interface';
+import { Transaction } from '../../interfaces/electrs.interface';
import { of, merge, Subscription, Observable, Subject, timer, combineLatest, from } from 'rxjs';
import { StateService } from '../../services/state.service';
import { WebsocketService } from '../../services/websocket.service';
import { AudioService } from 'src/app/services/audio.service';
import { ApiService } from 'src/app/services/api.service';
import { SeoService } from 'src/app/services/seo.service';
-import { CpfpInfo } from 'src/app/interfaces/node-api.interface';
+import { BlockExtended, CpfpInfo } from 'src/app/interfaces/node-api.interface';
import { LiquidUnblinding } from './liquid-ublinding';
@Component({
@@ -33,7 +33,7 @@ export class TransactionComponent implements OnInit, OnDestroy {
error: any = undefined;
errorUnblinded: any = undefined;
waitingForTransaction = false;
- latestBlock: Block;
+ latestBlock: BlockExtended;
transactionTime = -1;
subscription: Subscription;
fetchCpfpSubscription: Subscription;
diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts
index e1fb7d2e6..dac0e8857 100644
--- a/frontend/src/app/components/transactions-list/transactions-list.component.ts
+++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts
@@ -1,11 +1,12 @@
import { Component, OnInit, Input, ChangeDetectionStrategy, OnChanges, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';
import { StateService } from '../../services/state.service';
import { Observable, forkJoin } from 'rxjs';
-import { Block, Outspend, Transaction } from '../../interfaces/electrs.interface';
+import { Outspend, Transaction } from '../../interfaces/electrs.interface';
import { ElectrsApiService } from '../../services/electrs-api.service';
import { environment } from 'src/environments/environment';
import { AssetsService } from 'src/app/services/assets.service';
import { map } from 'rxjs/operators';
+import { BlockExtended } from 'src/app/interfaces/node-api.interface';
@Component({
selector: 'app-transactions-list',
@@ -26,7 +27,7 @@ export class TransactionsListComponent implements OnInit, OnChanges {
@Output() loadMore = new EventEmitter();
- latestBlock$: Observable
;
+ latestBlock$: Observable;
outspends: Outspend[] = [];
assetsMinimal: any;
diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts
index d5637421b..0a2100831 100644
--- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts
+++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts
@@ -1,7 +1,8 @@
import { Component, ChangeDetectionStrategy, OnChanges, Input, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core';
-import { Transaction, Block } from 'src/app/interfaces/electrs.interface';
+import { Transaction } from 'src/app/interfaces/electrs.interface';
import { StateService } from 'src/app/services/state.service';
import { Subscription } from 'rxjs';
+import { BlockExtended } from 'src/app/interfaces/node-api.interface';
@Component({
selector: 'app-tx-fee-rating',
@@ -18,7 +19,7 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy {
overpaidTimes: number;
feeRating: number;
- blocks: Block[] = [];
+ blocks: BlockExtended[] = [];
constructor(
private stateService: StateService,
@@ -28,7 +29,7 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy {
ngOnInit() {
this.blocksSubscription = this.stateService.blocks$.subscribe(([block]) => {
this.blocks.push(block);
- if (this.tx.status.confirmed && this.tx.status.block_height === block.height && block.medianFee > 0) {
+ if (this.tx.status.confirmed && this.tx.status.block_height === block.height && block?.extra?.medianFee > 0) {
this.calculateRatings(block);
this.cd.markForCheck();
}
@@ -42,7 +43,7 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy {
}
const foundBlock = this.blocks.find((b) => b.height === this.tx.status.block_height);
- if (foundBlock && foundBlock.medianFee > 0) {
+ if (foundBlock && foundBlock?.extra?.medianFee > 0) {
this.calculateRatings(foundBlock);
}
}
@@ -51,9 +52,9 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy {
this.blocksSubscription.unsubscribe();
}
- calculateRatings(block: Block) {
+ calculateRatings(block: BlockExtended) {
const feePervByte = this.tx.effectiveFeePerVsize || this.tx.fee / (this.tx.weight / 4);
- this.medianFeeNeeded = block.medianFee;
+ this.medianFeeNeeded = block?.extra?.medianFee;
// Block not filled
if (block.weight < this.stateService.env.BLOCK_WEIGHT_UNITS * 0.95) {
diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts
index a582baba3..7a7e1fbf2 100644
--- a/frontend/src/app/dashboard/dashboard.component.ts
+++ b/frontend/src/app/dashboard/dashboard.component.ts
@@ -1,8 +1,7 @@
import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, OnInit } from '@angular/core';
import { combineLatest, merge, Observable, of, timer } from 'rxjs';
import { filter, map, scan, share, switchMap, tap } from 'rxjs/operators';
-import { Block } from '../interfaces/electrs.interface';
-import { OptimizedMempoolStats } from '../interfaces/node-api.interface';
+import { BlockExtended, OptimizedMempoolStats } from '../interfaces/node-api.interface';
import { MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface';
import { ApiService } from '../services/api.service';
import { StateService } from '../services/state.service';
@@ -40,7 +39,7 @@ export class DashboardComponent implements OnInit {
mempoolInfoData$: Observable;
mempoolLoadingStatus$: Observable;
vBytesPerSecondLimit = 1667;
- blocks$: Observable;
+ blocks$: Observable;
transactions$: Observable;
latestBlockHeight: number;
mempoolTransactionsWeightPerSecondData: any;
@@ -199,7 +198,7 @@ export class DashboardComponent implements OnInit {
};
}
- trackByBlock(index: number, block: Block) {
+ trackByBlock(index: number, block: BlockExtended) {
return block.height;
}
diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts
index ff948551f..803a7227e 100644
--- a/frontend/src/app/interfaces/electrs.interface.ts
+++ b/frontend/src/app/interfaces/electrs.interface.ts
@@ -107,14 +107,6 @@ export interface Block {
size: number;
weight: number;
previousblockhash: string;
-
- // Custom properties
- medianFee?: number;
- feeRange?: number[];
- reward?: number;
- coinbaseTx?: Transaction;
- matchRate: number;
- stage: number;
}
export interface Address {
diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts
index 6d87f648d..c48b3e000 100644
--- a/frontend/src/app/interfaces/node-api.interface.ts
+++ b/frontend/src/app/interfaces/node-api.interface.ts
@@ -1,3 +1,5 @@
+import { Block, Transaction } from "./electrs.interface";
+
export interface OptimizedMempoolStats {
added: number;
vbytes_per_second: number;
@@ -80,3 +82,17 @@ export interface MiningStats {
pools: SinglePoolStats[],
}
+export interface BlockExtension {
+ medianFee?: number;
+ feeRange?: number[];
+ reward?: number;
+ coinbaseTx?: Transaction;
+ matchRate?: number;
+
+ stage?: number; // Frontend only
+}
+
+export interface BlockExtended extends Block {
+ extra?: BlockExtension;
+}
+
diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts
index 989c4176b..1dbaa90af 100644
--- a/frontend/src/app/interfaces/websocket.interface.ts
+++ b/frontend/src/app/interfaces/websocket.interface.ts
@@ -1,9 +1,10 @@
import { ILoadingIndicators } from '../services/state.service';
-import { Block, Transaction } from './electrs.interface';
+import { Transaction } from './electrs.interface';
+import { BlockExtended } from './node-api.interface';
export interface WebsocketResponse {
- block?: Block;
- blocks?: Block[];
+ block?: BlockExtended;
+ blocks?: BlockExtended[];
conversions?: any;
txConfirmed?: boolean;
historicalDate?: string;
diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts
index 63018ec63..5756f7fb2 100644
--- a/frontend/src/app/services/electrs-api.service.ts
+++ b/frontend/src/app/services/electrs-api.service.ts
@@ -1,8 +1,9 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
-import { Block, Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface';
+import { Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface';
import { StateService } from './state.service';
+import { BlockExtended } from '../interfaces/node-api.interface';
@Injectable({
providedIn: 'root'
@@ -28,12 +29,12 @@ export class ElectrsApiService {
});
}
- getBlock$(hash: string): Observable {
- return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block/' + hash);
+ getBlock$(hash: string): Observable {
+ return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block/' + hash);
}
- listBlocks$(height?: number): Observable {
- return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/blocks/' + (height || ''));
+ listBlocks$(height?: number): Observable {
+ return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/blocks/' + (height || ''));
}
getTransaction$(txId: string): Observable {
diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts
index 8050e4286..230c9b150 100644
--- a/frontend/src/app/services/state.service.ts
+++ b/frontend/src/app/services/state.service.ts
@@ -1,8 +1,8 @@
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs';
-import { Block, Transaction } from '../interfaces/electrs.interface';
+import { Transaction } from '../interfaces/electrs.interface';
import { IBackendInfo, MempoolBlock, MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface';
-import { OptimizedMempoolStats } from '../interfaces/node-api.interface';
+import { BlockExtended, OptimizedMempoolStats } from '../interfaces/node-api.interface';
import { Router, NavigationStart } from '@angular/router';
import { isPlatformBrowser } from '@angular/common';
import { map, shareReplay } from 'rxjs/operators';
@@ -72,7 +72,7 @@ export class StateService {
latestBlockHeight = 0;
networkChanged$ = new ReplaySubject(1);
- blocks$: ReplaySubject<[Block, boolean]>;
+ blocks$: ReplaySubject<[BlockExtended, boolean]>;
transactions$ = new ReplaySubject(6);
conversions$ = new ReplaySubject(1);
bsqPrice$ = new ReplaySubject(1);
@@ -122,7 +122,7 @@ export class StateService {
}
});
- this.blocks$ = new ReplaySubject<[Block, boolean]>(this.env.KEEP_BLOCKS_AMOUNT);
+ this.blocks$ = new ReplaySubject<[BlockExtended, boolean]>(this.env.KEEP_BLOCKS_AMOUNT);
if (this.env.BASE_MODULE === 'bisq') {
this.network = this.env.BASE_MODULE;
diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts
index dc65cf8f7..b50cbc494 100644
--- a/frontend/src/app/services/websocket.service.ts
+++ b/frontend/src/app/services/websocket.service.ts
@@ -2,11 +2,12 @@ import { Injectable } from '@angular/core';
import { webSocket, WebSocketSubject } from 'rxjs/webSocket';
import { WebsocketResponse, IBackendInfo } from '../interfaces/websocket.interface';
import { StateService } from './state.service';
-import { Block, Transaction } from '../interfaces/electrs.interface';
+import { Transaction } from '../interfaces/electrs.interface';
import { Subscription } from 'rxjs';
import { ApiService } from './api.service';
import { take } from 'rxjs/operators';
import { TransferState, makeStateKey } from '@angular/platform-browser';
+import { BlockExtended } from '../interfaces/node-api.interface';
const OFFLINE_RETRY_AFTER_MS = 10000;
const OFFLINE_PING_CHECK_AFTER_MS = 30000;
@@ -207,7 +208,7 @@ export class WebsocketService {
handleResponse(response: WebsocketResponse) {
if (response.blocks && response.blocks.length) {
const blocks = response.blocks;
- blocks.forEach((block: Block) => {
+ blocks.forEach((block: BlockExtended) => {
if (block.height > this.stateService.latestBlockHeight) {
this.stateService.latestBlockHeight = block.height;
this.stateService.blocks$.next([block, false]);