diff --git a/backend/src/api/explorer/nodes.api.ts b/backend/src/api/explorer/nodes.api.ts
index cbd70a34f..d8dceab19 100644
--- a/backend/src/api/explorer/nodes.api.ts
+++ b/backend/src/api/explorer/nodes.api.ts
@@ -129,6 +129,56 @@ class NodesApi {
}
}
+ public async $getFeeHistogram(node_public_key: string): Promise {
+ try {
+ const inQuery = `
+ SELECT CASE WHEN fee_rate <= 10.0 THEN CEIL(fee_rate)
+ WHEN (fee_rate > 10.0 and fee_rate <= 100.0) THEN CEIL(fee_rate / 10.0) * 10.0
+ WHEN (fee_rate > 100.0 and fee_rate <= 1000.0) THEN CEIL(fee_rate / 100.0) * 100.0
+ WHEN fee_rate > 1000.0 THEN CEIL(fee_rate / 1000.0) * 1000.0
+ END as bucket,
+ count(short_id) as count,
+ sum(capacity) as capacity
+ FROM (
+ SELECT CASE WHEN node1_public_key = ? THEN node2_fee_rate WHEN node2_public_key = ? THEN node1_fee_rate END as fee_rate,
+ short_id as short_id,
+ capacity as capacity
+ FROM channels
+ WHERE status = 1 AND (channels.node1_public_key = ? OR channels.node2_public_key = ?)
+ ) as fee_rate_table
+ GROUP BY bucket;
+ `;
+ const [inRows]: any[] = await DB.query(inQuery, [node_public_key, node_public_key, node_public_key, node_public_key]);
+
+ const outQuery = `
+ SELECT CASE WHEN fee_rate <= 10.0 THEN CEIL(fee_rate)
+ WHEN (fee_rate > 10.0 and fee_rate <= 100.0) THEN CEIL(fee_rate / 10.0) * 10.0
+ WHEN (fee_rate > 100.0 and fee_rate <= 1000.0) THEN CEIL(fee_rate / 100.0) * 100.0
+ WHEN fee_rate > 1000.0 THEN CEIL(fee_rate / 1000.0) * 1000.0
+ END as bucket,
+ count(short_id) as count,
+ sum(capacity) as capacity
+ FROM (
+ SELECT CASE WHEN node1_public_key = ? THEN node1_fee_rate WHEN node2_public_key = ? THEN node2_fee_rate END as fee_rate,
+ short_id as short_id,
+ capacity as capacity
+ FROM channels
+ WHERE status = 1 AND (channels.node1_public_key = ? OR channels.node2_public_key = ?)
+ ) as fee_rate_table
+ GROUP BY bucket;
+ `;
+ const [outRows]: any[] = await DB.query(outQuery, [node_public_key, node_public_key, node_public_key, node_public_key]);
+
+ return {
+ incoming: inRows.length > 0 ? inRows : [],
+ outgoing: outRows.length > 0 ? outRows : [],
+ };
+ } catch (e) {
+ logger.err(`Cannot get node fee distribution for ${node_public_key}. Reason: ${(e instanceof Error ? e.message : e)}`);
+ throw e;
+ }
+ }
+
public async $getAllNodes(): Promise {
try {
const query = `SELECT * FROM nodes`;
diff --git a/backend/src/api/explorer/nodes.routes.ts b/backend/src/api/explorer/nodes.routes.ts
index 589e337cf..c19bde236 100644
--- a/backend/src/api/explorer/nodes.routes.ts
+++ b/backend/src/api/explorer/nodes.routes.ts
@@ -20,6 +20,7 @@ class NodesRoutes {
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/rankings/connectivity', this.$getTopNodesByChannels)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/rankings/age', this.$getOldestNodes)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/:public_key/statistics', this.$getHistoricalNodeStats)
+ .get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/:public_key/fees/histogram', this.$getFeeHistogram)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/:public_key', this.$getNode)
.get(config.MEMPOOL.API_URL_PREFIX + 'lightning/nodes/group/:name', this.$getNodeGroup)
;
@@ -95,6 +96,22 @@ class NodesRoutes {
}
}
+ private async $getFeeHistogram(req: Request, res: Response) {
+ try {
+ const node = await nodesApi.$getFeeHistogram(req.params.public_key);
+ if (!node) {
+ res.status(404).send('Node not found');
+ return;
+ }
+ res.header('Pragma', 'public');
+ res.header('Cache-control', 'public');
+ res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString());
+ res.json(node);
+ } catch (e) {
+ res.status(500).send(e instanceof Error ? e.message : e);
+ }
+ }
+
private async $getNodesRanking(req: Request, res: Response): Promise {
try {
const topCapacityNodes = await nodesApi.$getTopCapacityNodes(false);
diff --git a/frontend/package.json b/frontend/package.json
index 18d527ccc..c5a062e01 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -22,7 +22,7 @@
"scripts": {
"ng": "./node_modules/@angular/cli/bin/ng.js",
"tsc": "./node_modules/typescript/bin/tsc",
- "i18n-extract-from-source": "./node_modules/@angular/cli/bin/ng extract-i18n --out-file ./src/locale/messages.xlf",
+ "i18n-extract-from-source": "npm run ng -- extract-i18n --out-file ./src/locale/messages.xlf",
"i18n-pull-from-transifex": "tx pull -a --parallel --minimum-perc 1 --force",
"serve": "npm run generate-config && npm run ng -- serve -c local",
"serve:stg": "npm run generate-config && npm run ng -- serve -c staging",
diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts
index 260efcafe..69c78fc83 100644
--- a/frontend/src/app/app-routing.module.ts
+++ b/frontend/src/app/app-routing.module.ts
@@ -74,12 +74,14 @@ let routes: Routes = [
children: [],
component: AddressComponent,
data: {
- ogImage: true
+ ogImage: true,
+ networkSpecific: true,
}
},
{
path: 'tx',
component: StartComponent,
+ data: { networkSpecific: true },
children: [
{
path: ':id',
@@ -90,6 +92,7 @@ let routes: Routes = [
{
path: 'block',
component: StartComponent,
+ data: { networkSpecific: true },
children: [
{
path: ':id',
@@ -102,6 +105,7 @@ let routes: Routes = [
},
{
path: 'block-audit',
+ data: { networkSpecific: true },
children: [
{
path: ':id',
@@ -121,12 +125,13 @@ let routes: Routes = [
{
path: 'lightning',
loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule),
- data: { preload: browserWindowEnv && browserWindowEnv.LIGHTNING === true },
+ data: { preload: browserWindowEnv && browserWindowEnv.LIGHTNING === true, networks: ['bitcoin'] },
},
],
},
{
path: 'status',
+ data: { networks: ['bitcoin', 'liquid'] },
component: StatusViewComponent
},
{
@@ -185,11 +190,13 @@ let routes: Routes = [
children: [],
component: AddressComponent,
data: {
- ogImage: true
+ ogImage: true,
+ networkSpecific: true,
}
},
{
path: 'tx',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -200,6 +207,7 @@ let routes: Routes = [
},
{
path: 'block',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -213,6 +221,7 @@ let routes: Routes = [
},
{
path: 'block-audit',
+ data: { networkSpecific: true },
children: [
{
path: ':id',
@@ -230,12 +239,14 @@ let routes: Routes = [
},
{
path: 'lightning',
+ data: { networks: ['bitcoin'] },
loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule)
},
],
},
{
path: 'status',
+ data: { networks: ['bitcoin', 'liquid'] },
component: StatusViewComponent
},
{
@@ -291,11 +302,13 @@ let routes: Routes = [
children: [],
component: AddressComponent,
data: {
- ogImage: true
+ ogImage: true,
+ networkSpecific: true,
}
},
{
path: 'tx',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -306,6 +319,7 @@ let routes: Routes = [
},
{
path: 'block',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -319,6 +333,7 @@ let routes: Routes = [
},
{
path: 'block-audit',
+ data: { networkSpecific: true },
children: [
{
path: ':id',
@@ -336,6 +351,7 @@ let routes: Routes = [
},
{
path: 'lightning',
+ data: { networks: ['bitcoin'] },
loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule)
},
],
@@ -359,6 +375,7 @@ let routes: Routes = [
},
{
path: 'status',
+ data: { networks: ['bitcoin', 'liquid'] },
component: StatusViewComponent
},
{
@@ -422,11 +439,13 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
children: [],
component: AddressComponent,
data: {
- ogImage: true
+ ogImage: true,
+ networkSpecific: true,
}
},
{
path: 'tx',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -437,6 +456,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
},
{
path: 'block',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -450,18 +470,22 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
},
{
path: 'assets',
+ data: { networks: ['liquid'] },
component: AssetsNavComponent,
children: [
{
path: 'all',
+ data: { networks: ['liquid'] },
component: AssetsComponent,
},
{
path: 'asset/:id',
+ data: { networkSpecific: true },
component: AssetComponent
},
{
path: 'group/:id',
+ data: { networkSpecific: true },
component: AssetGroupComponent
},
{
@@ -482,6 +506,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
},
{
path: 'status',
+ data: { networks: ['bitcoin', 'liquid'] },
component: StatusViewComponent
},
{
@@ -532,11 +557,13 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
children: [],
component: AddressComponent,
data: {
- ogImage: true
+ ogImage: true,
+ networkSpecific: true,
}
},
{
path: 'tx',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -547,6 +574,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
},
{
path: 'block',
+ data: { networkSpecific: true },
component: StartComponent,
children: [
{
@@ -560,22 +588,27 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
},
{
path: 'assets',
+ data: { networks: ['liquid'] },
component: AssetsNavComponent,
children: [
{
path: 'featured',
+ data: { networkSpecific: true },
component: AssetsFeaturedComponent,
},
{
path: 'all',
+ data: { networks: ['liquid'] },
component: AssetsComponent,
},
{
path: 'asset/:id',
+ data: { networkSpecific: true },
component: AssetComponent
},
{
path: 'group/:id',
+ data: { networkSpecific: true },
component: AssetGroupComponent
},
{
@@ -609,6 +642,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') {
},
{
path: 'status',
+ data: { networks: ['bitcoin', 'liquid']},
component: StatusViewComponent
},
{
diff --git a/frontend/src/app/bisq/bisq.routing.module.ts b/frontend/src/app/bisq/bisq.routing.module.ts
index f7385ae63..11acdca2a 100644
--- a/frontend/src/app/bisq/bisq.routing.module.ts
+++ b/frontend/src/app/bisq/bisq.routing.module.ts
@@ -20,14 +20,17 @@ const routes: Routes = [
},
{
path: 'markets',
+ data: { networks: ['bisq'] },
component: BisqDashboardComponent,
},
{
path: 'transactions',
+ data: { networks: ['bisq'] },
component: BisqTransactionsComponent
},
{
path: 'market/:pair',
+ data: { networkSpecific: true },
component: BisqMarketComponent,
},
{
@@ -36,6 +39,7 @@ const routes: Routes = [
},
{
path: 'tx/:id',
+ data: { networkSpecific: true },
component: BisqTransactionComponent
},
{
@@ -45,14 +49,17 @@ const routes: Routes = [
},
{
path: 'block/:id',
+ data: { networkSpecific: true },
component: BisqBlockComponent,
},
{
path: 'address/:id',
+ data: { networkSpecific: true },
component: BisqAddressComponent,
},
{
path: 'stats',
+ data: { networks: ['bisq'] },
component: BisqStatsComponent,
},
{
diff --git a/frontend/src/app/components/bisq-master-page/bisq-master-page.component.html b/frontend/src/app/components/bisq-master-page/bisq-master-page.component.html
index d07f9d60c..2054f1a5d 100644
--- a/frontend/src/app/components/bisq-master-page/bisq-master-page.component.html
+++ b/frontend/src/app/components/bisq-master-page/bisq-master-page.component.html
@@ -44,13 +44,13 @@
diff --git a/frontend/src/app/components/bisq-master-page/bisq-master-page.component.ts b/frontend/src/app/components/bisq-master-page/bisq-master-page.component.ts
index d69b37d3d..941d9e21e 100644
--- a/frontend/src/app/components/bisq-master-page/bisq-master-page.component.ts
+++ b/frontend/src/app/components/bisq-master-page/bisq-master-page.component.ts
@@ -3,6 +3,7 @@ import { Env, StateService } from '../../services/state.service';
import { Observable } from 'rxjs';
import { LanguageService } from '../../services/language.service';
import { EnterpriseService } from '../../services/enterprise.service';
+import { NavigationService } from '../../services/navigation.service';
@Component({
selector: 'app-bisq-master-page',
@@ -15,17 +16,23 @@ export class BisqMasterPageComponent implements OnInit {
env: Env;
isMobile = window.innerWidth <= 767.98;
urlLanguage: string;
+ networkPaths: { [network: string]: string };
constructor(
private stateService: StateService,
private languageService: LanguageService,
private enterpriseService: EnterpriseService,
+ private navigationService: NavigationService,
) { }
ngOnInit() {
this.env = this.stateService.env;
this.connectionState$ = this.stateService.connectionState$;
this.urlLanguage = this.languageService.getLanguageForUrl();
+ this.navigationService.subnetPaths.subscribe((paths) => {
+ console.log('network paths updated...');
+ this.networkPaths = paths;
+ });
}
collapse(): void {
diff --git a/frontend/src/app/components/graphs/graphs.component.html b/frontend/src/app/components/graphs/graphs.component.html
index d6f9694d0..dd47a4ac7 100644
--- a/frontend/src/app/components/graphs/graphs.component.html
+++ b/frontend/src/app/components/graphs/graphs.component.html
@@ -31,17 +31,17 @@
diff --git a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html
index 7f22fd465..17f371202 100644
--- a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html
+++ b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.html
@@ -49,13 +49,13 @@
diff --git a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts
index d78cd457e..c57673529 100644
--- a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts
+++ b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts
@@ -3,6 +3,7 @@ import { Env, StateService } from '../../services/state.service';
import { merge, Observable, of} from 'rxjs';
import { LanguageService } from '../../services/language.service';
import { EnterpriseService } from '../../services/enterprise.service';
+import { NavigationService } from '../../services/navigation.service';
@Component({
selector: 'app-liquid-master-page',
@@ -17,11 +18,13 @@ export class LiquidMasterPageComponent implements OnInit {
officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE;
network$: Observable;
urlLanguage: string;
+ networkPaths: { [network: string]: string };
constructor(
private stateService: StateService,
private languageService: LanguageService,
private enterpriseService: EnterpriseService,
+ private navigationService: NavigationService,
) { }
ngOnInit() {
@@ -29,6 +32,10 @@ export class LiquidMasterPageComponent implements OnInit {
this.connectionState$ = this.stateService.connectionState$;
this.network$ = merge(of(''), this.stateService.networkChanged$);
this.urlLanguage = this.languageService.getLanguageForUrl();
+ this.navigationService.subnetPaths.subscribe((paths) => {
+ console.log('network paths updated...');
+ this.networkPaths = paths;
+ });
}
collapse(): void {
diff --git a/frontend/src/app/components/master-page/master-page.component.html b/frontend/src/app/components/master-page/master-page.component.html
index 1c28d5dce..5c365f0f9 100644
--- a/frontend/src/app/components/master-page/master-page.component.html
+++ b/frontend/src/app/components/master-page/master-page.component.html
@@ -22,13 +22,13 @@
diff --git a/frontend/src/app/components/master-page/master-page.component.ts b/frontend/src/app/components/master-page/master-page.component.ts
index 994f0412f..8f7b4fecc 100644
--- a/frontend/src/app/components/master-page/master-page.component.ts
+++ b/frontend/src/app/components/master-page/master-page.component.ts
@@ -3,6 +3,7 @@ import { Env, StateService } from '../../services/state.service';
import { Observable, merge, of } from 'rxjs';
import { LanguageService } from '../../services/language.service';
import { EnterpriseService } from '../../services/enterprise.service';
+import { NavigationService } from '../../services/navigation.service';
@Component({
selector: 'app-master-page',
@@ -18,11 +19,13 @@ export class MasterPageComponent implements OnInit {
officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE;
urlLanguage: string;
subdomain = '';
+ networkPaths: { [network: string]: string };
constructor(
public stateService: StateService,
private languageService: LanguageService,
private enterpriseService: EnterpriseService,
+ private navigationService: NavigationService,
) { }
ngOnInit() {
@@ -31,6 +34,10 @@ export class MasterPageComponent implements OnInit {
this.network$ = merge(of(''), this.stateService.networkChanged$);
this.urlLanguage = this.languageService.getLanguageForUrl();
this.subdomain = this.enterpriseService.getSubdomain();
+ this.navigationService.subnetPaths.subscribe((paths) => {
+ console.log('network paths updated...');
+ this.networkPaths = paths;
+ });
}
collapse(): void {
diff --git a/frontend/src/app/components/transaction/transaction-preview.component.html b/frontend/src/app/components/transaction/transaction-preview.component.html
index 76ef972c3..f023a77b1 100644
--- a/frontend/src/app/components/transaction/transaction-preview.component.html
+++ b/frontend/src/app/components/transaction/transaction-preview.component.html
@@ -24,7 +24,7 @@
0">{{ transactionTime * 1000 | date:'yyyy-MM-dd HH:mm' }}
- Fee {{ tx.fee | number }} sat
+ Fee {{ tx.fee | number }} sat
diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss
index df8d37ebc..7127a898a 100644
--- a/frontend/src/app/components/transaction/transaction.component.scss
+++ b/frontend/src/app/components/transaction/transaction.component.scss
@@ -3,7 +3,7 @@
}
.container-buttons {
- align-self: flex-start;
+ align-self: center;
}
.title-block {
diff --git a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html
index 6872438a0..cbf2f7d5a 100644
--- a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html
+++ b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html
@@ -42,7 +42,7 @@
Input
Output
- Fee
+ Fee
#{{ line.index + 1 }}
diff --git a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.html b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.html
index ced3b5f57..a85f62c65 100644
--- a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.html
+++ b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.html
@@ -68,7 +68,7 @@
TXID
Amount |
USD |
- Fee |
+ Fee |
diff --git a/frontend/src/app/docs/docs.routing.module.ts b/frontend/src/app/docs/docs.routing.module.ts
index 52eb54f2e..0f01016de 100644
--- a/frontend/src/app/docs/docs.routing.module.ts
+++ b/frontend/src/app/docs/docs.routing.module.ts
@@ -39,6 +39,7 @@ if (browserWindowEnv.BASE_MODULE && (browserWindowEnv.BASE_MODULE === 'bisq' ||
},
{
path: 'faq',
+ data: { networks: ['bitcoin'] },
component: DocsComponent
},
{
diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts
index 57ef6cef7..bf0e0a0a7 100644
--- a/frontend/src/app/graphs/graphs.routing.module.ts
+++ b/frontend/src/app/graphs/graphs.routing.module.ts
@@ -37,10 +37,12 @@ const routes: Routes = [
children: [
{
path: 'mining/pool/:slug',
+ data: { networks: ['bitcoin'] },
component: PoolComponent,
},
{
path: 'mining',
+ data: { networks: ['bitcoin'] },
component: StartComponent,
children: [
{
@@ -51,6 +53,7 @@ const routes: Routes = [
},
{
path: 'mempool-block/:id',
+ data: { networks: ['bitcoin', 'liquid'] },
component: StartComponent,
children: [
{
@@ -61,62 +64,77 @@ const routes: Routes = [
},
{
path: 'graphs',
+ data: { networks: ['bitcoin', 'liquid'] },
component: GraphsComponent,
children: [
{
path: 'mempool',
+ data: { networks: ['bitcoin', 'liquid'] },
component: StatisticsComponent,
},
{
path: 'mining/hashrate-difficulty',
+ data: { networks: ['bitcoin'] },
component: HashrateChartComponent,
},
{
path: 'mining/pools-dominance',
+ data: { networks: ['bitcoin'] },
component: HashrateChartPoolsComponent,
},
{
path: 'mining/pools',
+ data: { networks: ['bitcoin'] },
component: PoolRankingComponent,
},
{
path: 'mining/block-fees',
+ data: { networks: ['bitcoin'] },
component: BlockFeesGraphComponent,
},
{
path: 'mining/block-rewards',
+ data: { networks: ['bitcoin'] },
component: BlockRewardsGraphComponent,
},
{
path: 'mining/block-fee-rates',
+ data: { networks: ['bitcoin'] },
component: BlockFeeRatesGraphComponent,
},
{
path: 'mining/block-sizes-weights',
+ data: { networks: ['bitcoin'] },
component: BlockSizesWeightsGraphComponent,
},
{
path: 'lightning/nodes-networks',
+ data: { networks: ['bitcoin'] },
component: NodesNetworksChartComponent,
},
{
path: 'lightning/capacity',
+ data: { networks: ['bitcoin'] },
component: LightningStatisticsChartComponent,
},
{
path: 'lightning/nodes-per-isp',
+ data: { networks: ['bitcoin'] },
component: NodesPerISPChartComponent,
},
{
path: 'lightning/nodes-per-country',
+ data: { networks: ['bitcoin'] },
component: NodesPerCountryChartComponent,
},
{
path: 'lightning/nodes-map',
+ data: { networks: ['bitcoin'] },
component: NodesMap,
},
{
path: 'lightning/nodes-channels-map',
+ data: { networks: ['bitcoin'] },
component: NodesChannelsMap,
},
{
@@ -125,6 +143,7 @@ const routes: Routes = [
},
{
path: 'mining/block-prediction',
+ data: { networks: ['bitcoin'] },
component: BlockPredictionGraphComponent,
},
]
@@ -141,6 +160,7 @@ const routes: Routes = [
},
{
path: 'tv',
+ data: { networks: ['bitcoin', 'liquid'] },
component: TelevisionComponent
},
];
diff --git a/frontend/src/app/lightning/channel/channel-box/channel-box.component.html b/frontend/src/app/lightning/channel/channel-box/channel-box.component.html
index a61273d4d..47b7fa3ba 100644
--- a/frontend/src/app/lightning/channel/channel-box/channel-box.component.html
+++ b/frontend/src/app/lightning/channel/channel-box/channel-box.component.html
@@ -7,7 +7,7 @@
-
{{ channel.channels }} channels
+
@@ -16,7 +16,7 @@
- Fee rate |
+ Fee rate |
{{ channel.fee_rate !== null ? (channel.fee_rate | amountShortener : 2 : undefined : true) : '-' }} ppm {{ channel.fee_rate !== null ? '(' + (channel.fee_rate / 10000 | amountShortener : 2 : undefined : true) + '%)' : '' }}
@@ -33,19 +33,24 @@
{{ channel.base_fee_mtokens | amountShortener : 0 }}
- msats
+ mSats
-
-
- {{ channel.base_fee_mtokens === 0 ? 'Zero base fee' : 'Non-zero base fee' }}
-
+
+ Zero base fee
+
+
+ Non-zero base fee
+
|
@@ -62,7 +67,7 @@
- Timelock delta |
+ Timelock delta |
|
@@ -72,3 +77,4 @@
{{ i }} blocks
+{{ i }} channels
diff --git a/frontend/src/app/lightning/channel/channel-preview.component.html b/frontend/src/app/lightning/channel/channel-preview.component.html
index 379de479a..fe7f45a13 100644
--- a/frontend/src/app/lightning/channel/channel-preview.component.html
+++ b/frontend/src/app/lightning/channel/channel-preview.component.html
@@ -7,9 +7,9 @@
{{ channel.short_id }}
-
Inactive
-
Active
-
Closed
+
Inactive
+
Active
+
Closed
@@ -20,20 +20,20 @@
- Created |
+ Created |
{{ channel.created | date:'yyyy-MM-dd HH:mm' }} |
- Capacity |
+ Capacity |
|
- Fee rate |
+ Fee rate |
- {{ channel.node_left.fee_rate }} ppm
+ {{ channel.node_left.fee_rate }} ppm
- {{ channel.node_right.fee_rate }} ppm
+ {{ channel.node_right.fee_rate }} ppm
|
diff --git a/frontend/src/app/lightning/channel/channel.component.html b/frontend/src/app/lightning/channel/channel.component.html
index 3fceab483..c25af5377 100644
--- a/frontend/src/app/lightning/channel/channel.component.html
+++ b/frontend/src/app/lightning/channel/channel.component.html
@@ -8,9 +8,9 @@
-
Inactive
-
Active
-
Closed
+
Inactive
+
Active
+
Closed
@@ -45,7 +45,7 @@
- Capacity |
+ Capacity |
|
@@ -70,7 +70,7 @@
-
Opening transaction
+ Opening transaction
@@ -79,7 +79,7 @@
- {{ node.channels }} channels
+
100000000; else smallnode" [satoshis]="node.capacity" [digitsInfo]="'1.2-2'" [noFiat]="true">
@@ -63,10 +63,10 @@
|
- Inactive
- Active
+ Inactive
+ Active
- Closed
+ Closed
@@ -117,3 +117,5 @@
|
+
+{{ i }} channels
diff --git a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.html b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.html
index 9d2ca83e8..bedcc0ded 100644
--- a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.html
+++ b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.html
@@ -14,7 +14,7 @@
{{ statistics.latest?.avg_capacity || 0 | number: '1.0-0' }}
- sats
+ sats
@@ -29,7 +29,7 @@
placement="bottom">
{{ statistics.latest?.avg_fee_rate || 0 | number: '1.0-0' }}
- ppm
+ ppm
@@ -44,7 +44,7 @@
{{ statistics.latest?.avg_base_fee_mtokens || 0 | number: '1.0-0' }}
- msats
+ mSats
@@ -60,7 +60,7 @@
{{ statistics.latest?.med_capacity || 0 | number: '1.0-0' }}
- sats
+ sats
@@ -75,7 +75,7 @@
placement="bottom">
{{ statistics.latest?.med_fee_rate || 0 | number: '1.0-0' }}
- ppm
+ ppm
@@ -90,7 +90,7 @@
{{ statistics.latest?.med_base_fee_mtokens || 0 | number: '1.0-0' }}
- msats
+ mSats
diff --git a/frontend/src/app/lightning/group/group-preview.component.html b/frontend/src/app/lightning/group/group-preview.component.html
index 8a918be35..d821e2752 100644
--- a/frontend/src/app/lightning/group/group-preview.component.html
+++ b/frontend/src/app/lightning/group/group-preview.component.html
@@ -1,6 +1,6 @@
- Lightning node group
+ Lightning node group
diff --git a/frontend/src/app/lightning/group/group.component.html b/frontend/src/app/lightning/group/group.component.html
index fdc79b692..f7dfd0585 100644
--- a/frontend/src/app/lightning/group/group.component.html
+++ b/frontend/src/app/lightning/group/group.component.html
@@ -1,5 +1,5 @@
-
Lightning node group
+ Lightning node group