From fd34761a937440e6268a2f454a7ef6588688420d Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 27 Dec 2021 22:54:45 +0400 Subject: [PATCH] Adding Liquid Testnet as frontend option fixes #976 --- frontend/mempool-frontend-config.sample.json | 1 + frontend/proxy.conf.js | 11 ++ frontend/src/app/app-routing.module.ts | 173 ++++++++++++++++++ .../components/address/address.component.ts | 2 +- .../components/amount/amount.component.html | 3 +- .../bisq-master-page.component.html | 3 +- .../bisq-master-page.component.scss | 4 + .../app/components/block/block.component.html | 12 +- .../app/components/block/block.component.ts | 2 +- .../blockchain-blocks.component.ts | 3 +- .../blockchain/blockchain.component.scss | 4 +- .../docs/api-docs-nav.component.html | 4 +- .../components/docs/api-docs.component.html | 10 +- .../app/components/docs/api-docs.component.ts | 4 +- .../docs/code-template.component.ts | 14 +- .../components/fees-box/fees-box.component.ts | 2 +- .../liquid-master-page.component.html | 11 +- .../liquid-master-page.component.scss | 4 + .../liquid-master-page.component.ts | 4 +- .../master-page/master-page.component.html | 8 +- .../master-page/master-page.component.scss | 4 + .../mempool-blocks.component.html | 2 +- .../mempool-blocks.component.ts | 2 +- .../mempool-graph/mempool-graph.component.ts | 2 +- .../search-form/search-form.component.ts | 4 +- .../components/sponsor/sponsor.component.html | 2 +- .../transaction/transaction.component.html | 6 +- .../transaction/transaction.component.ts | 2 +- .../transactions-list.component.html | 4 +- .../transactions-list.component.ts | 4 +- .../app/dashboard/dashboard.component.html | 16 +- .../src/app/dashboard/dashboard.component.ts | 2 +- frontend/src/app/services/seo.service.ts | 2 + frontend/src/app/services/state.service.ts | 34 +++- .../pipes/relative-url/relative-url.pipe.ts | 9 +- frontend/src/resources/liquidtestnet-logo.png | Bin 0 -> 14379 bytes production/mempool-config.liquid-testnet.json | 39 ++++ production/mempool-frontend-config.json | 1 + 38 files changed, 342 insertions(+), 72 deletions(-) create mode 100644 frontend/src/resources/liquidtestnet-logo.png create mode 100644 production/mempool-config.liquid-testnet.json diff --git a/frontend/mempool-frontend-config.sample.json b/frontend/mempool-frontend-config.sample.json index 80e8ae4cb..478c3bc55 100644 --- a/frontend/mempool-frontend-config.sample.json +++ b/frontend/mempool-frontend-config.sample.json @@ -2,6 +2,7 @@ "TESTNET_ENABLED": false, "SIGNET_ENABLED": false, "LIQUID_ENABLED": false, + "LIQUID_TESTNET_ENABLED": false, "BISQ_ENABLED": false, "BISQ_SEPARATE_BACKEND": false, "ITEMS_PER_PAGE": 10, diff --git a/frontend/proxy.conf.js b/frontend/proxy.conf.js index 88ad4040b..faae04499 100644 --- a/frontend/proxy.conf.js +++ b/frontend/proxy.conf.js @@ -24,6 +24,7 @@ PROXY_CONFIG = [ '/api/**', '!/api/v1/ws', '!/bisq', '!/bisq/**', '!/bisq/', '!/liquid', '!/liquid/**', '!/liquid/', + '!/liquidtestnet', '!/liquidtestnet/**', '!/liquidtestnet/', '/testnet/api/**', '/signet/api/**' ], target: "https://mempool.space", @@ -57,6 +58,16 @@ PROXY_CONFIG = [ ws: true, secure: false, changeOrigin: true + }, + { + context: ['/api/liquidtestnet**', '/liquidtestnet/api/**'], + target: "https://liquid.network/testnet", + pathRewrite: { + "^/api/liquidtestnet/": "/liquidtestnet/api" + }, + ws: true, + secure: false, + changeOrigin: true } ]; diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index fec2866b2..2e367d78c 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -105,6 +105,91 @@ let routes: Routes = [ }, ], }, + { + path: 'liquidtestnet', + children: [ + { + path: '', + component: MasterPageComponent, + children: [ + { + path: 'tx/push', + component: PushTransactionComponent, + }, + { + path: '', + component: StartComponent, + children: [ + { + path: '', + component: DashboardComponent + }, + { + path: 'tx/:id', + component: TransactionComponent + }, + { + path: 'block/:id', + component: BlockComponent + }, + { + path: 'mempool-block/:id', + component: MempoolBlockComponent + }, + ], + }, + { + path: 'blocks', + component: LatestBlocksComponent, + }, + { + path: 'graphs', + component: StatisticsComponent, + }, + { + path: 'address/:id', + component: AddressComponent + }, + { + path: 'asset/:id', + component: AssetComponent + }, + { + path: 'assets', + component: AssetsComponent, + }, + { + path: 'docs/api/:type', + component: DocsComponent + }, + { + path: 'docs/api', + redirectTo: 'docs/api/rest' + }, + { + path: 'docs', + redirectTo: 'docs/api/rest' + }, + { + path: 'api', + redirectTo: 'docs/api/rest' + }, + ], + }, + { + path: 'tv', + component: TelevisionComponent + }, + { + path: 'status', + component: StatusViewComponent + }, + { + path: '**', + redirectTo: '' + }, + ] + }, { path: 'liquid', children: [ @@ -466,6 +551,94 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { }, ], }, + { + path: 'testnet', + component: LiquidMasterPageComponent, + children: [ + { + path: '', + component: StartComponent, + children: [ + { + path: '', + component: DashboardComponent + }, + { + path: 'tx/push', + component: PushTransactionComponent, + }, + { + path: 'tx/:id', + component: TransactionComponent + }, + { + path: 'block/:id', + component: BlockComponent + }, + { + path: 'mempool-block/:id', + component: MempoolBlockComponent + }, + ], + }, + { + path: 'blocks', + component: LatestBlocksComponent, + }, + { + path: 'graphs', + component: StatisticsComponent, + }, + { + path: 'address/:id', + component: AddressComponent + }, + { + path: 'asset/:id', + component: AssetComponent + }, + { + path: 'assets', + component: AssetsComponent, + }, + { + path: 'docs/api/:type', + component: DocsComponent + }, + { + path: 'docs/api', + redirectTo: 'docs/api/rest' + }, + { + path: 'docs', + redirectTo: 'docs/api/rest' + }, + { + path: 'api', + redirectTo: 'docs/api/rest' + }, + { + path: 'about', + component: AboutComponent, + }, + { + path: 'terms-of-service', + component: TermsOfServiceComponent + }, + { + path: 'privacy-policy', + component: PrivacyPolicyComponent + }, + { + path: 'trademark-policy', + component: TrademarkPolicyComponent + }, + { + path: 'sponsor', + component: SponsorComponent, + }, + ], + }, { path: 'tv', component: TelevisionComponent diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 3280a9da4..890209d38 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -99,7 +99,7 @@ export class AddressComponent implements OnInit, OnDestroy { .pipe( filter((address) => !!address), tap((address: Address) => { - if (this.stateService.network === 'liquid' && /^([m-zA-HJ-NP-Z1-9]{26,35}|[a-z]{2,5}1[ac-hj-np-z02-9]{8,100}|[a-km-zA-HJ-NP-Z1-9]{80})$/.test(address.address)) { + if ((this.stateService.network === 'liquid' || this.stateService.network === 'liquidtestnet') && /^([m-zA-HJ-NP-Z1-9]{26,35}|[a-z]{2,5}1[ac-hj-np-z02-9]{8,100}|[a-km-zA-HJ-NP-Z1-9]{80})$/.test(address.address)) { this.apiService.validateAddress$(address.address) .subscribe((addressInfo) => { this.addressInfo = addressInfo; diff --git a/frontend/src/app/components/amount/amount.component.html b/frontend/src/app/components/amount/amount.component.html index 6548d28f9..07f669a81 100644 --- a/frontend/src/app/components/amount/amount.component.html +++ b/frontend/src/app/components/amount/amount.component.html @@ -2,12 +2,13 @@ {{ conversions.USD * (satoshis / 100000000) | currency:'USD':'symbol':'1.2-2' }} - + Confidential ‎{{ satoshis / 100000000 | number : digitsInfo }} L- + tL- t sBTC 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 427a7d1c3..388497039 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 @@ -10,7 +10,7 @@ - diff --git a/frontend/src/app/components/bisq-master-page/bisq-master-page.component.scss b/frontend/src/app/components/bisq-master-page/bisq-master-page.component.scss index b36d91ae2..fabb9e0e9 100644 --- a/frontend/src/app/components/bisq-master-page/bisq-master-page.component.scss +++ b/frontend/src/app/components/bisq-master-page/bisq-master-page.component.scss @@ -102,6 +102,10 @@ nav { background-color: #116761; } +.liquidtestnet.active { + background-color: #494a4a; +} + .testnet.active { background-color: #1d486f; } diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 18fbe5b7c..7995d9d1e 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -81,12 +81,12 @@ Total fees - + - {{ fees * 100000000 | number }} L-sat () +   - + Subsidy + fees: @@ -98,7 +98,7 @@ Total fees - + Subsidy + fees: @@ -125,7 +125,7 @@ Version {{ block.version | decimal2hex }} Taproot - + Bits {{ block.bits | decimal2hex }} @@ -136,7 +136,7 @@ -
+
diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 9df6b5605..3ad905b7f 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -210,7 +210,7 @@ export class BlockComponent implements OnInit, OnDestroy { } setBlockSubsidy() { - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { this.blockSubsidy = 0; return; } 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 281081876..665822bd5 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -36,6 +36,7 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy { '': ['#9339f4', '#105fb0'], bisq: ['#9339f4', '#105fb0'], liquid: ['#116761', '#183550'], + 'liquidtestnet': ['#494a4a', '#272e46'], testnet: ['#1d486f', '#183550'], signet: ['#6f1d5d', '#471850'], }; @@ -47,7 +48,7 @@ export class BlockchainBlocksComponent implements OnInit, OnDestroy { ) { } ngOnInit() { - if (this.stateService.network === 'liquid') { + if (this.stateService.network === 'liquid' || this.stateService.network === 'liquidtestnet') { this.feeRounding = '1.0-1'; } this.emptyBlocks.forEach((b) => this.emptyBlockStyles.push(this.getStyleForEmptyBlock(b))); diff --git a/frontend/src/app/components/blockchain/blockchain.component.scss b/frontend/src/app/components/blockchain/blockchain.component.scss index fc71bd202..0527798a2 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.scss +++ b/frontend/src/app/components/blockchain/blockchain.component.scss @@ -31,7 +31,7 @@ top: 75px; } -.position-container.liquid { +.position-container.liquid, .position-container.liquidtestnet { left: 420px; } @@ -39,7 +39,7 @@ .position-container { left: 95%; } - .position-container.liquid { + .position-container.liquid, .position-container.liquidtestnet { left: 50%; } .position-container.loading { diff --git a/frontend/src/app/components/docs/api-docs-nav.component.html b/frontend/src/app/components/docs/api-docs-nav.component.html index 63ed8d4e1..38331c5e3 100644 --- a/frontend/src/app/components/docs/api-docs-nav.component.html +++ b/frontend/src/app/components/docs/api-docs-nav.component.html @@ -27,7 +27,7 @@ GET Address Transactions MempoolGET Address UTXO - +

Assets

GET Assets GET Assets Icons @@ -66,7 +66,7 @@ GET Children Pay for Parent GET Transaction GET Transaction Hex -GET Transaction Merkleblock Proof +GET Transaction Merkleblock Proof GET Transaction Merkle Proof GET Transaction Outspend GET Transaction Outspends diff --git a/frontend/src/app/components/docs/api-docs.component.html b/frontend/src/app/components/docs/api-docs.component.html index c41bc57c7..54d0d9109 100644 --- a/frontend/src/app/components/docs/api-docs.component.html +++ b/frontend/src/app/components/docs/api-docs.component.html @@ -24,7 +24,7 @@
-
+
GET Difficulty Adjustment General @@ -228,14 +228,14 @@
Description
-
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.
+
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.
-
+
GET Assets Assets @@ -313,7 +313,7 @@
Description
-
Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight, proof, and previousblockhash.
+
Returns details about a block. Available fields: id, height, version, timestamp, bits, nonce, merkle_root, tx_count, size, weight, proof, and previousblockhash.
@@ -577,7 +577,7 @@
-
+
GET Transaction Merkleblock Proof Transactions
Endpoint
diff --git a/frontend/src/app/components/docs/api-docs.component.ts b/frontend/src/app/components/docs/api-docs.component.ts index 02cca44b2..b46590a89 100644 --- a/frontend/src/app/components/docs/api-docs.component.ts +++ b/frontend/src/app/components/docs/api-docs.component.ts @@ -3663,7 +3663,7 @@ export class ApiDocsComponent implements OnInit { }; this.network$.subscribe((network) => { - this.active = (network === 'liquid') ? 2 : 0; + this.active = (network === 'liquid' || network === 'liquidtestnet') ? 2 : 0; }); } @@ -3679,7 +3679,7 @@ export class ApiDocsComponent implements OnInit { if (network === 'signet') { curlResponse = code.codeSampleSignet.curl; } - if (network === 'liquid') { + if (network === 'liquid' || network === 'liquidtestnet') { curlResponse = code.codeSampleLiquid.curl; } if (network === 'bisq') { diff --git a/frontend/src/app/components/docs/code-template.component.ts b/frontend/src/app/components/docs/code-template.component.ts index 0c46c7a9d..fdd496726 100644 --- a/frontend/src/app/components/docs/code-template.component.ts +++ b/frontend/src/app/components/docs/code-template.component.ts @@ -26,7 +26,7 @@ export class CodeTemplateComponent implements OnInit { if (this.network === 'bisq') { npmLink = `https://github.com/mempool/mempool.js/tree/main/npm-bisq-js`; } - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { npmLink = `https://github.com/mempool/mempool.js/tree/main/npm-liquid-js`; } return npmLink; @@ -37,7 +37,7 @@ export class CodeTemplateComponent implements OnInit { if (this.network === 'bisq') { npmLink = `https://www.npmjs.org/package/@mempool/bisq.js`; } - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { npmLink = `https://www.npmjs.org/package/@mempool/liquid.js`; } return npmLink; @@ -50,7 +50,7 @@ export class CodeTemplateComponent implements OnInit { } else { codeText = codeText.replace('%{0}', 'bitcoin'); } - if(['', 'main', 'liquid', 'bisq'].includes(this.network)) { + if(['', 'main', 'liquid', 'bisq', 'liquidtestnet'].includes(this.network)) { codeText = codeText.replace('mempoolJS();', `mempoolJS({ hostname: '${document.location.hostname}' });`); @@ -119,7 +119,7 @@ export class CodeTemplateComponent implements OnInit { if (this.network === 'signet') { codeText = this.replaceJSPlaceholder(codeText, code.codeSampleSignet.esModule); } - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { codeText = this.replaceJSPlaceholder(codeText, code.codeSampleLiquid.esModule); } if (this.network === 'bisq') { @@ -157,7 +157,7 @@ init();`; if (this.network === 'signet') { codeText = this.replaceJSPlaceholder(codeText, code.codeSampleSignet.esModule); } - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { codeText = this.replaceJSPlaceholder(codeText, code.codeSampleLiquid.esModule); } if (this.network === 'bisq') { @@ -237,7 +237,7 @@ yarn add @mempool/liquid.js`; if (this.network === 'signet') { return this.replaceCurlPlaceholder(code.codeTemplate.curl, code.codeSampleSignet); } - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { return this.replaceCurlPlaceholder(code.codeTemplate.curl, code.codeSampleLiquid); } if (this.network === 'bisq') { @@ -259,7 +259,7 @@ yarn add @mempool/liquid.js`; if (this.network === 'signet') { return code.codeSampleSignet.response; } - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { return code.codeSampleLiquid.response; } if (this.network === 'bisq') { diff --git a/frontend/src/app/components/fees-box/fees-box.component.ts b/frontend/src/app/components/fees-box/fees-box.component.ts index f86ff0b4c..1612c666e 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.ts +++ b/frontend/src/app/components/fees-box/fees-box.component.ts @@ -26,7 +26,7 @@ export class FeesBoxComponent implements OnInit { ) { } ngOnInit(): void { - this.defaultFee = this.stateService.network === 'liquid' ? 0.1 : 1; + this.defaultFee = this.stateService.network === 'liquid' || this.stateService.network === 'liquidtestnet' ? 0.1 : 1; this.isLoadingWebSocket$ = this.stateService.isLoadingWebSocket$; this.feeEstimations$ = this.stateService.mempoolBlocks$ 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 f6e02beed..8329fa2fd 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 @@ -1,3 +1,4 @@ +
- + - + - + diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index 7cc6a2aec..3dbec5ce3 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -262,7 +262,7 @@ export class DashboardComponent implements OnInit { share(), ); - if (this.stateService.network === 'liquid') { + if (this.stateService.network === 'liquid' || this.stateService.network === 'liquidtestnet') { this.liquidPegsMonth$ = this.apiService.listLiquidPegsMonth$() .pipe( map((pegs) => { diff --git a/frontend/src/app/services/seo.service.ts b/frontend/src/app/services/seo.service.ts index 2e1916626..71a57d871 100644 --- a/frontend/src/app/services/seo.service.ts +++ b/frontend/src/app/services/seo.service.ts @@ -29,6 +29,8 @@ export class SeoService { getTitle(): string { if (this.network === 'liquid') return 'mempool - Liquid Network'; + if (this.network === 'liquidtestnet') + return 'mempool - Liquid Network Testnet'; if (this.network === 'bisq') return 'mempool - Bisq Markets'; return 'mempool - ' + (this.network ? this.ucfirst(this.network) : 'Bitcoin') + ' Explorer'; diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 604bb6a87..61b9c291d 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -19,6 +19,7 @@ export interface Env { TESTNET_ENABLED: boolean; SIGNET_ENABLED: boolean; LIQUID_ENABLED: boolean; + LIQUID_TESTNET_ENABLED: boolean; BISQ_ENABLED: boolean; BISQ_SEPARATE_BACKEND: boolean; ITEMS_PER_PAGE: number; @@ -38,6 +39,7 @@ const defaultEnv: Env = { 'TESTNET_ENABLED': false, 'SIGNET_ENABLED': false, 'LIQUID_ENABLED': false, + 'LIQUID_TESTNET_ENABLED': false, 'BASE_MODULE': 'mempool', 'BISQ_ENABLED': false, 'BISQ_SEPARATE_BACKEND': false, @@ -116,7 +118,7 @@ export class StateService { this.blocks$ = new ReplaySubject<[Block, boolean]>(this.env.KEEP_BLOCKS_AMOUNT); - if (this.env.BASE_MODULE !== 'mempool') { + if (this.env.BASE_MODULE === 'bisq') { this.network = this.env.BASE_MODULE; this.networkChanged$.next(this.env.BASE_MODULE); } @@ -125,10 +127,10 @@ export class StateService { } setNetworkBasedonUrl(url: string) { - if (this.env.BASE_MODULE !== 'mempool') { + if (this.env.BASE_MODULE !== 'mempool' && this.env.BASE_MODULE !== 'liquid') { return; } - const networkMatches = url.match(/\/(bisq|testnet|liquid|signet)/); + const networkMatches = url.match(/\/(bisq|testnet|liquidtestnet|liquid|signet)/); switch (networkMatches && networkMatches[1]) { case 'liquid': if (this.network !== 'liquid') { @@ -136,6 +138,12 @@ export class StateService { this.networkChanged$.next('liquid'); } return; + case 'liquidtestnet': + if (this.network !== 'liquidtestnet') { + this.network = 'liquidtestnet'; + this.networkChanged$.next('liquidtestnet'); + } + return; case 'signet': if (this.network !== 'signet') { this.network = 'signet'; @@ -144,8 +152,13 @@ export class StateService { return; case 'testnet': if (this.network !== 'testnet') { - this.network = 'testnet'; - this.networkChanged$.next('testnet'); + if (this.env.BASE_MODULE === 'liquid') { + this.network = 'liquidtestnet'; + this.networkChanged$.next('liquidtestnet'); + } else { + this.network = 'testnet'; + this.networkChanged$.next('testnet'); + } } return; case 'bisq': @@ -155,9 +168,14 @@ export class StateService { } return; default: - if (this.network !== '') { - this.network = ''; - this.networkChanged$.next(''); + if (this.env.BASE_MODULE !== 'mempool' && this.network !== this.env.BASE_MODULE) { + this.network = this.env.BASE_MODULE; + this.networkChanged$.next(this.env.BASE_MODULE); + } else { + if (this.network !== '') { + this.network = ''; + this.networkChanged$.next(''); + } } } } diff --git a/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts b/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts index a19e93a75..2a6cc4d28 100644 --- a/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts +++ b/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts @@ -11,10 +11,13 @@ export class RelativeUrlPipe implements PipeTransform { ) { } transform(value: string): string { - if (this.stateService.env.BASE_MODULE !== 'mempool') { - return '/' + value; + let network = this.stateService.network; + if (this.stateService.env.BASE_MODULE === 'liquid' && network === 'liquidtestnet') { + network = 'testnet'; + } else if (this.stateService.env.BASE_MODULE !== 'mempool') { + network = ''; } - return (this.stateService.network ? '/' + this.stateService.network : '') + value; + return (network ? '/' + network : '') + value; } } diff --git a/frontend/src/resources/liquidtestnet-logo.png b/frontend/src/resources/liquidtestnet-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..590016beb949fe99e44cae865bbc17cbf0bc94a4 GIT binary patch literal 14379 zcmeHtWmKF?)@}nqLU0QjNaODA(73w)wCUYc<_f_3UTwdTQ^g_vP&Aw*n`Fy=45620!jn-a)#1CJ#DQ30MCV{OnY}aL0H(GC9#$Bkt4Xgkf6~(N3F?7~ z0GlIT{~KuDL|CvDM9e5RXu&$~`2qE{b>QvtZ1OX9$>rYpgSE|{2Rw&Aey#ad4Q~nr z+=!FtJJDAYj=CRy`&NSL!-)6mhw0Y!yK~$8`70Ri(>GV%x1*t`7lm%#{;yN7_*qsa zu5&wXRWw`Y{g#e;Ct}jOsqYTma&JA4mP}Wvt0_0mQUkm@9ab+t{P6Y5Z73JD?)I3o zv{L%HS={CLU1BW`i=gkuaHHZd+tX~{V68%=-h<%yWYqeQ-|wfqVSIxB#eTxdnakxc zQK17Zot41D6tjxZ($824v;tb@x1{uh`lTR8g5{oyQ}M?EHH-V-i)&0gy_Rir-VwRE zULJY)-fT;4GJWq1*f}%i=F}nJ!Io2(^m>eRw8@(A(e!IgjrkpObr42z`)De~-h^ia z>2Lr{#f!)>55-AUtgC6`!zES^fyVV2!nfn4U>uDO?;oFPUJfMJxF`L_9l6&STilJxqp(vn0AW#*EXc6Mc(iI(cZ zn=euQJ3|RnSlUvwRaiU2$?ePA(u_?Vngs2UoK@LdKHAw=d2lR{wf)>4r|_m0=#8X} z6B{WljFV8xC9}@(N;6t|(ZKl(97M=kQ@>+Z;nb~EMCGyI^~%&^@g~uZG0XGga7mW; z!uE>R&wcD&NxvKanQMcYJ$Yp(wiT_l!XjVnZ>Wq)+_V-X;`p4=fQJszpLP6VH;6>u z@7Xel@mi%5Wql{+29mb4z^^^_Zt>f4S2rxKTUM>ilUy;ER`7*OCU2D1Z-pHL@S5nG z(>0t0Wmsg{cLghB7BSqEE*5%B{->>1Th6HTgAfoHKz-LNr?A z)$Av;wJ)C#n82AvwN}-q?Q@(yUNa zZ@B(-kh1Nh)#7!~;s>?`Gb*$f^oB-M8@sNtvn*dW)sISCx{vl=o{E)WE7lsRZYp_| za!7^e!JGp7{KuCGU352?xG!GQm3hL=HEx#_JcjB9h=?@oI+F~#j3atB0>f%@7RCD< z*?-^!b${@9!z!i`_dV_#o8Z7OD3#^Q%+`zRw~t8;XUz^znd#YfjT>B~aHuDERdU-n zbA6CC&V{y{vukXVrl@RC4tgqt$;J3sE0V61w6W>&7{71VHf%!1tfMwVxi-m~2iPWD zs^V4$hdPVf`i4*gJKiTe;dgwUaHM`n%VAgQS*@g1rI(vB#1Mm#z)0*GjsI;KpjnK@ zTS{p0jJf|^w`scY6tcT-ynWNl<*Wz2&$U6gJPWKXl&+FwWJKemWfQH;yW?5Wnp~vs zvn%Qc>w{})jefxoIk-A&TjJ7EZ8mUF*q!I)sVlY_L@-8v)Fby^G)x?o3#FH$o%4^yeJzaD8MXe3%rHBXbLUbM?F z$P!FsVKgf(=hQbb>AvJ#Wu-CQ_(qI$_CDY3^iHZwAGNcVKdHTz3=M1wog7bz9n zY<)7+z|y6@S500pp6{D-RUWJRzGGLs_LG{s!;~))tyB3mgs^I@HN`G{!o5!v-{`P& zb+C-L*D!YfB*m>%nUv-M%0Yt_uvL-t-lBN06*g?9y#-jaqN$427j3C9*XcQnm`s4qPeo?TE6cFzPK=kVqHfvoxT8XDTA1{XmZ$Q~-E|C-Kw) zw@OssigRy^piXrJ%U@fy6fS$dkSg9ET*gy0@_IF{wM(dZ9`DABivrE>n5>1*b^7{& zvQFds1=<62H}yb46XpkD+CvX#gGZ#bmX5a*Sbe@=vWS|ee3pLDAlinDTPAa2wEa9y zvlVsdD(0El4vx3*@SIGP6raw7_($|&$U_xVqeSEbdQI{G=^!8xx&Z*pI&Iy?K#aZ| zMxV7fog_sQ6lcRJGTSf->VWm2$+^=E4y}KzHPZGX0-#8>_Bz7+l$x>2sndVb5atP& zdn5_EJ$MMxyOBvU~9U+@fVCkMH))CsE-cVmNbR-#CUIc2E;S?h02h|FRs zNHO(ZJ)kR*k-+$@-gTAJS{VDq*>J4x$eE2zU2x#}!&syF>HbLW9)&ufMNV%o!)$E8 zYuPtXZ5lpGAAG|-hSzfMD(YD%73DAh?)D7vGe#-tp-lB%$U>Mqv3y#{ueBafFdz{P zyYLl1tnu0@uf=O2BNri7iq~|Tq-;5S4l&>a_L6DkfV4%b&<}A3AvDBR#5#Kb4j^c$ zpm!CC&{#!@V<=#IT!LOiwv}Z>WvRfYCfeIyGduo$=5tdezo8LuX7m9Q-isrz0_vi9 z-8j_!9v0i6Ht-bAb!d{+!-tv*B&%{PILjN$?P65(7bNBDTLUpD0kz0s0CKgDeY8HM z(kRV459w&4kVr(~Y-~bPO}^w^)>dXkQCre$uGqpg*7QPlLzjgnNO9=OgXEVzVHQ95U8hVL0gC!e&oNQK+wzoq*;bdH6Ek5p^jLwgANzI?VO#%uAqSp~&~ z;FXjmjn~Ald`Wve+AZN8c8Geyq*0N(@oLVMPMPf}7=Svc1@ zQN5l;*4_+T%VFJN*;yQq7hmcN35yhIelspNy0}JXG}j|JimjHRH^-)eM)?u>iC_|ZIPbGu1doT9FXYui1$LL!}-IpiX4Xe@r3Ml2@5dC8wh4Ws#tV)ldmqt2J@(q zs)drx0kyOh$rQBDX{^%hlFD=W>F-b#(yz|Q(3K)zpI9B$1s6Pp7?(tsdVPt~AP|~U zw7LOxjy*m{^2%!-?XLn~kDGA@fL>xNh46HvJ^9+6Fp90#OG(d_BqJjTd`93ACQ>Ry z+wUJFM{CLtSGU;_wLn$49?R>c*=;BB32R$b@n zMJkaWIx>wEshcb<_daApauD)}c1Kg+t9(kl>FQeMsMpw zmuI0NXl>_M|3KtWY1;1i#MmV7v6cj3NC~LbApcF{hD6xL*ORG5NEx(G0FO?5xdz8e zEN?DFmA<56V}PA5jUKQyr@)|DlK3`0L7TpGf&g&GBb^_itZa%#v4l11;+1kJqp3Yi z3>HS$m-u%2sSPM9ZB9Z#fhC^OK-+j?M<2G)&%|_KmW_Tp?@qEA^vXm1kbn4L2*dXt zbpk|XtC&dhk!+)dd3MRguW(ucXZru6J)o@DwNXu zwbDV4g0wz1G8jwWeO-#&Yqhffr7;Vxl-WmN54-ugDN=8g!D54xvfNSxd9#k>`I@z-||i#Ra7b~P;4TnpkJOAsMPCUQh;-e{~Dh@mIAYOAUMx9*MigSYdppIFvW z*2Qh|KjzRjP`Am(nlB5d#@2%-;R9&iD2*wN2fDco{<3xEm+PvookWwID8A+1v%b{=dnM3eG?a6L!2F4zj3s@Wq7cVz%FF& zJHwMhZZy7jykT1X9ZvvztRX~Li%8;aJX4+-z|4-T2kR(_?rB((Mhs*LFR7HgG*hF` zB5$DlEKkCGK`7PO@V#ETYLq}0t}mxsJcFfa(IDV)l+-UHA2e4PZ!ujHt@4Vfcyixr z@~lrT^q8H^)67;7zmA6sE+(U9rXN{i%Jq}X(Nv!%&s^&%pKN{N6<6G@qY{YKit_q; z8kFtUE)vVW8NAo72290=1-_LsO&0USySSxZ`R4EU;XCeDtv>GL)7^4%V+$-yJ|Kp> zzviVFZGIv}f%5}57grY5NpaXHD93X@Om7{Cgk%5uDI|K~&5!;Q{2uI7GOcSisqyF& z+iKE}7^rMt`-5b^Lm1;_+zDDD=kq`evOaFXM`*Hs;RbV2Q^V$pE-Rte&zhh5lSPi| z8U$>pNLnT4_PAc2y4$^NlBliAZMi-~^H|C6t{{NvBlPcq2V#ryOHeaT&+O1rf086= zZ6YBQF~>=&tIS!(R7(mHC2;f z%-d5^=x|hCdW3x1lgWfK!z1=CgJ#HLdEs%{XF-R7<29Q_KGUlFUuezw8rJ{<6RDNL zbFPGv@}(ebXQlY~`w$V}i?u+TVGMCs=by>NNqohmCw@jVO z-6mnlRf$1;aBz6Dt&W-aG=3q(N#_;w_THfGBK}K*$9W(28%FGOQfad^0E_!7<78?A zvkuMqn5|+kfskO=Evv+0y=OUu7AimcyWT0w4wne7jJU7K$SmA8@bc=mD5!7MydS#> zK#70HKKDc=I>&3Ojr&YRQqDaLJSfCoboYXV>Dz1}mFt44}u>Rx1^KvX?@ zH%=6zIi)U5D!BQu@C_FK=k;~+u=Yc}3GD>-@u6UOuES5)H}=EB=jGYLuKAkF1-N_@ z`Y{kyGD_;^<_)W*+xHChml76cW=y^ps%lk*ElDt0)jVR_!Vy)o3JUNbxc zfQu}K2?nbWCH_T%_{w#pr{8l+O@y6TZeilp#4YO2k8l^BC7Bl&crOTi;vvYSK5|JRpYzSE!6g9;p6PI?YJ&a*6FT zEf{YF_L!6hS?6ioWJ&ljZG!ixe8<-{{iilS-~+R|ZyM*IB<32c$NGa9jzLE0JtI$L zRRC@0LP6uhkqSeGpGq?LSoBaT%aX=1XjhjG$rgz9r%62^ncjVkjoEK{lu-T8Nx(D9 zv|)ENcTNE(q2(k6-fXk2oAht8geyX}j+cB?8_bKAYBB=JDibF39fK7&9o7itAdemG zZB--*=jeCoPyI3$h3pR^0?-~sTKG2OxKO2&%F}9vyAe=upbroNOE)wG*oqLn|i zf`Rsdgm@EkGoL~|8T2s8di0WpWX2R(Ok^mAa;$acXo9ght`z6qXmV4iE~g5s^bbAy zif3$~%@NJEyyQ+r=y?_+-(BV0^kU^lf5}K|IibJE)?NzE_qV$>N035)vLh;uvBRmb zVlWn)Q|8>uKqU@9lnlArZ0m1uMKsPi40w9M)Uy_4Ec+xwZLbU3g+Kh1`vrpzT zLRBRSW2q1sat?k|HOje}y}9NmzN_LP;9~29MQKTAQhhAVXA6&lAB7}@9m`~1{78Zv zImTv>fA|8}PnW4Y`zUxaB`VtPL0Cw&lX%rz(o^_M_zS-l(lOZ7@QF&<k8b-wsYzni+^+PF}jC@^Z%=Q}cFM+oim%UJh%<`|hvT;OBJJ2EM` zgWk);_Of?oC{PGl-T!&od8*wq*io?x9r%G?X3SB)iTqQ`sGLvU;LOeJI2nHt@{~Fg zw+YQa`9b&-)sQv?pgm^|Eo+N6ZI9l~0*0Mwgu;{8Av;l%k9s{jUgG@_z5GZ*BaJTW zwq;e5z5r?;o<>tWARWq$TQJHTag1toh%>3anp&R!XhrKC2a;*!$LO6|wP;ELvlFrf z_W3nGf$O%W$IB+qB1xso9=iLqhI@k-a=yNM3{;plE8i-+)nTw)Bi`Duh;`sU2^R|I>#=8Nqz$DQD|L7o)}f zMZ8wEp1o>=ACJGtbWj8ZR}bqV2{7;`tII}l3vTH8hF?G!?u;)g4Gaw!09 zVK~2a=W`48DlchEM5CiwCD+f#ND2I)nD$~HFv2>{ zpNpm=%e5Qon%VKKS8`m(&kTkee*LP0x|}i{$L3<@>ery@r>`@T=skv|I{|H@;1MrVb#O!5UILe zwf%!49bq+lIhl3jbBk>)3A0Q_K;q8jlO8*^MsZz9L;8)#1$$M%p!V9@lQ$@{;1v|a zKVHGt9dcFTSNmiU6`DKD!ZjRx+gPDHS&UfEW$Z~W_jS|y;fjeKh4nI9hhN&Y%HlwZ z&CUmkD4S=Fq0;aAM?NLTKBTcQd_G~SJ7c@`S)<(Aer4q~Fyo;nN37R77mg0rauO}A z88Zcr0{R&~&s~B_EFl|~EGH9}WUFIO+wJFhv+F9Qw2dU>@4WKDW|jys)gkHQOGFrM zEV;%hW;!GnVIedCHe}>0o`i=?AAY>@HgU(H-!6?iH!7LblC9$)Dv4L3P!;N2kb36x z`9!?OIe|lS85U0yx&2(nd6ODuV0xhCroZQ_&b6gmblZ*V+vh+E$k!FE*Ak^bzEdZi zvR^RYO$O9nqv11Vx9FJXP@cwJ1F&F5BH8$FMIvU))$J0CpPye)w$GR6$693X)hAj|O8FyrW|NFxC`-cSHM8bx+U zK`<8?y#i;?rak3wv$)FN#x*Ig)ime9x6v6S{HnT3^ZFYn5w0o zJ;OQvg^w8<&?6%+|r?WK36w+gYigK6wM4EG& zNsqpD13$}Oo}zRgm`F!@nPgJ%3t8>NS2~|j?Pu0#eyl5XnMkyFBrP|#?fsd=ll|#A z0}fCA2TX0n-0^rG6Yb+kX~p(Jfi~ik*8(F9a>BHM2T*-o@^J&!CU_v;_XtG?O9g+A zVh6SkQNZaOFo%Sw?jf zy8aZ@So}8KT3v0$HvT3BAGUV|o@UKV;yV?qTP4%NHC1+GFB3h&)SY1DZ!2qL|WD`2aKs=e$L zbd|KnREj=Z`tY6jiwMTjs!v*K!HUPQ8wXbzs)0MJdbZ|wvH+|m zi>|3>rh`o4)i9Q1_@TA3%&iLU{%!G{>AIv?V#fS_01{zlJ(O2bj~xI&3bmD$)l`y| z{oBJ(#3Rrwza(+RJ}Jug<~l_{VpP#c5m2c*2}q8z2~(~V&n`@#N|oaVFN2ScnIk^f z{@uHT_vIlm4b?c+!8GScs~a0{wt)1voXm}pM_*g15BA0Pmyu+u`uQpxuqNS)s`RTC z4DG;hGyDO7H&vN^x=5TM(yW5+N3D?ZDg>V|Xg~kWD@D@;a^ad{^+_Nqp;`yRg|0?b_K`EA0su5_~ z!k_HKHZc+8hvK$=LAuPr`kZ3Qtf(`z8Fa>bSt52p>)R7EVE95}!bCkrTtr-L)%;WYpt zCh6%6wzP-BX)K`DwvOV!gZ6G9jV(kRXuz+=rRFRPwXs$7hCy|_)paes?Jb2NKuHNq zF;5W$fddo{rtx%m;pi&jDGvP2D}wlb-^~f6`3-^FivtbSG-+g=U{D%94n7Vpb~#U5 zcOIYwCXE;jVkM#tlK+ze(GmyRz~Rm!oSYsW9vmLL98NH6PHtggVNNa{P97e11cKew z%MlLtWOsC>y{Gtt0|a%ogxNa7ZJiux?m590PHu2Ih|rVM6YR{%&B4X#;P6it zu5dZ`fB5^C7OuL8-w1GOLtUNRV3trhcc>$r_ODKzU%0vc)u)>)^uFtN+%F(joQR-) zd;Y79f|8o%-)-(?w6=9{{%vuO{woq<`FEVN8|=kz48)QX`U2{J2*ee^%>7SzxUJPc z7U-Ymb3gK50ztU@JO4kS|EAaPSbpm&0&=o+yLYMt5(nPLD*|z{w1tTL{>p7>At1=l zC%`VmjrhZ7DImx$%m=Y#=eOeH<%S4D!CV%?f1y%xbcKT*Eur^R2yzZv1P>T2XeA^d z%)`#l1GZx4nv>Ep#7^CA$!h03SOK508bF6&J4{)as9D?$<#?T2o0J$iu<)oBVf=<_j>~$_eHm z4pakM(rD=XV?@{10jdKB->b$gz{e%P!z0WsgossG@Gpe=P?#$s%kN3Kxj1-uew#xq zMdT5bU_`drI)JUAoX(EczX$HuMFcS$gtFlK;y^I}?ng{UL>2}G!<}HdPEIexf%l=& z+*AIpDH^dqt3^cB$?~`1Z!i>cUvPhxoDA5S^LJB>^S=ZC7bYDWClAN}JDz_)|IQ)} zgL^o^>@{E-7Isie_3(0^ukb+UqcfMHN+YeWtp))`S-zt@?D z>5ued{%5#{4fH;@xOlkPxe;5Spe_%W2rs_~w-75Ap9mKh@Q)>@5#zkyW&bv1vHN{U zO-tw-ord!2ijv|H$=kDe!NB|C3$+&*Z}V$89&%5pnV7fw-wA z>>3M3+>oPLs3?E{clY<^yo|m-5g!ko6^&dGKRutje3r0qAfgH97R}SQL1) z1nD8I1_+pw5=dItbKys3fV1u=;z7x?PV7gSnrawj4DFn1tm@_TEW{Nkw=$u%6rswC zWP@e#?2=jWmQ^WJ<c+AztOeEVW_fD()&S!B6)FDdo7t z#Ma?`(HmOM(UXfbB~7K?jjOr#vnAJ+&J~Y|w#{sxC$V5GOVU14`3EzKazc%Y7=j>N!P)NI}Gxya4U?O>f)_*si1)hqRq!X9ENcCM!i)5RGX89Ke+YALJg zP{U(VPIl)su+TybN~X7Wg9y={YTs;RI_V=HP&ces8Z`{CadMiYU8{l^u%&-JmzI9l zRVX}LsH|>jxn>)`CbqheoZo|#Hj%+!vHQ9~co?GnW4><9_&G5iWvC*W=R;3yPg#(_ zdyBdaOUD)%_P%WOJ8??ypw>vSg}J#FuW!9!*@M6IyS#pG^r|v6yj#j}T_E@>-N&_G zT~(zQ0M?@jyjc*;}4pm_p#iYeY*RdZ;oB*I=g(VPbK6eWBFZRan?3=KQs1 zE>*iB@F&tECRB!YOA;E?4)hlW$~S9Y--TpWR8+JpJP>Yn;M7vSA@yWW9%d^mFJF*! zu4!xgY-49PB<8V%t|w-0`FMxL z>7d6*eO1O_qghjwv$dmhs-8IE{uLNyNj2gnM_UBU9IGZsIsl;NzUyd?9KudbO|7B) zRMpYhxujS!-A#-y>ti1gYwhQEL*Iif+;7gM#!DV2FF6z0#gaUHO)ex65epEgRbXzy z9f}@;e2uAodoc!X*0#%ZSUd}t$??TgjoOnsX z%4Ht{ExI=|iZ8~Zqodb1mE$8zLBJyx&BCgT0|j8xO8d?)F6W}$3R>W_W!?M}k0v4% zia@d)_p4OxGe8AxlH!%-K(qZ^brdQps!9+w60zCcbbX~)E-ONCg&^-LyUp{XHT#i~ z5uPK@Yb*~p(kFEi_~~RZ@0;8FQUDVG9q}LJs?#RkbWZaP8C}maHk<-08h7pt)A$`q z{m5ir1TNWZ7E5S2%cUX>)cJ8xg|32^9Pm<7kdYd`1LOpeIktl6vw>KOs-_Q@g}D z51nX8e49|s7CBL>x@MjD`J|T3zMp{C1|}jRGJwQ;5`_>?@Cz{?F4Hl7yAzF__2MaV z!nJ6==9Y-O5SpC2we_YEkley-4 z?(}V0o9m`O#^l0+HvyMv@)8M7#N7x}&-3AnjFOHqY$aWQ`LXR?V{<*nPtwyB=Av~& z;O2(~HxW{-F4V+fi2Cr4?mT&#HQU= zs1bE62@Gv_GsSL>dV|IR;B$gk0w(=HIoO82rfDk9b z9Nmf+liRR~yySBtim_jQf`MZNGQam})2%X*0fk)0s`%;bOO(NDF+c z6R{>V{pB+IS1yjH!NSGG8~sIbNcKZKM3y6o`hl!Av4zuBt=g>@yA)~nZK;#UPEJme zI%o#Pcl?YhLq(H0wH!MXQ6OTh;wac|wGg>#lii?YDAo=)$I7S&^9r@v`01|fN z6r|b9$h`>)Snsz(oUeLSJIIU8C9UOdk0&>dvJOTmU?yU#Nv1e>G4D@F!(Gs7O+b#$ zlqC%0aa}wM!(<;_YJFzxPzKxd#EWfnu8p#E<1bTn^z_^So|@3NXy;j7=EYs{Tp~jG0g1b0^q)0~q1s-!8h9O0e2`$!FzUp+K zASdT|ob+j5rB#?bZrP``%VDt#ztu93^^%ZK07+DCo$4zJppQ!isEstkRAdEs+^(R2 z>^oOq+0-W!uQI6ygthB8@e*OGv9hz@*yQz&0dE2m(EA-@3Ir(bCGw z7gJb2wej0<*)?mvb@%K@(Kz2_3A-+kNuSRsEtKi9yd1MKCrBbZd4*&0!f1AJ0rL{A z7U!;kBhaj9M*q?^N>Hv)%V#DTB~g_@!
Features @@ -114,7 +114,7 @@ In several hours (or more) - + @@ -124,7 +124,7 @@
Features diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 4f376eb62..2478958f6 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -159,7 +159,7 @@ export class TransactionComponent implements OnInit, OnDestroy { ); }), switchMap((tx) => { - if (this.network === 'liquid') { + if (this.network === 'liquid' || this.network === 'liquidtestnet') { return from(this.liquidUnblinding.checkUnblindedTx(tx)) .pipe( catchError((error) => { 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 c49664b06..45c8fb345 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -48,7 +48,7 @@
- Coinbase (Newly Generated Coins)
{{ vin.scriptsig | hex2ascii }}
+ Coinbase (Newly Generated Coins)
{{ vin.scriptsig | hex2ascii }}
Peg-in @@ -244,7 +244,7 @@  
{{ transaction.txid | shortenString : 10 }}ConfidentialConfidential {{ transaction.fee / transaction.vsize | feeRounding }} sat/vB