Merge branch 'master' into nymkappa/fix-btcpay-invoice-amount

This commit is contained in:
nymkappa 2024-07-02 20:34:42 +09:00
commit 11113041bb
No known key found for this signature in database
GPG Key ID: 92358FC85D9645DE
47 changed files with 47251 additions and 24804 deletions

View File

@ -144,13 +144,13 @@ describe('Mainnet', () => {
});
});
['BC1PQYQSZQ', 'bc1PqYqSzQ'].forEach((searchTerm) => {
['BC1PQYQS', 'bc1PqYqS'].forEach((searchTerm) => {
it(`allows searching for partial case insensitive bech32m addresses: ${searchTerm}`, () => {
cy.visit('/');
cy.get('.search-box-container > .form-control').type(searchTerm).then(() => {
cy.get('app-search-results button.dropdown-item').should('have.length', 1);
cy.get('app-search-results button.dropdown-item').should('have.length', 10);
cy.get('app-search-results button.dropdown-item.active').click().then(() => {
cy.url().should('include', '/address/bc1pqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqszqgpqyqsyjer9e');
cy.url().should('include', '/address/bc1pqyqs26fs4gnyw4aqttyjqa5ta7075zzfjftyz98qa8vdr49dh7fqm2zkv3');
cy.waitForSkeletonGone();
cy.get('.text-center').should('not.have.text', 'Invalid Bitcoin address');
});
@ -158,13 +158,13 @@ describe('Mainnet', () => {
});
});
['BC1Q000375VXCU', 'bC1q000375vXcU'].forEach((searchTerm) => {
['BC1Q0003', 'bC1q0003'].forEach((searchTerm) => {
it(`allows searching for partial case insensitive bech32 addresses: ${searchTerm}`, () => {
cy.visit('/');
cy.get('.search-box-container > .form-control').type(searchTerm).then(() => {
cy.get('app-search-results button.dropdown-item').should('have.length', 1);
cy.get('app-search-results button.dropdown-item').should('have.length', 10);
cy.get('app-search-results button.dropdown-item.active').click().then(() => {
cy.url().should('include', '/address/bc1q000375vxcuf5v04lmwy22vy2thvhqkxghgq7dy');
cy.url().should('include', '/address/bc1q000303cgr9zazthut63kdktwtatfe206um8nyh');
cy.waitForSkeletonGone();
cy.get('.text-center').should('not.have.text', 'Invalid Bitcoin address');
});

View File

@ -32,6 +32,7 @@
"bootstrap": "~4.6.2",
"browserify": "^17.0.0",
"clipboard": "^2.0.11",
"cypress": "^13.13.0",
"domino": "^2.1.6",
"echarts": "~5.5.0",
"esbuild": "^0.22.0",
@ -62,7 +63,7 @@
"optionalDependencies": {
"@cypress/schematic": "^2.5.0",
"@types/cypress": "^1.1.3",
"cypress": "^13.12.0",
"cypress": "^13.13.0",
"cypress-fail-on-console-error": "~5.1.0",
"cypress-wait-until": "^2.0.1",
"mock-socket": "~9.3.1",
@ -8043,9 +8044,9 @@
"peer": true
},
"node_modules/cypress": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.12.0.tgz",
"integrity": "sha512-udzS2JilmI9ApO/UuqurEwOvThclin5ntz7K0BtnHBs+tg2Bl9QShLISXpSEMDv/u8b6mqdoAdyKeZiSqKWL8g==",
"version": "13.13.0",
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.0.tgz",
"integrity": "sha512-ou/MQUDq4tcDJI2FsPaod2FZpex4kpIK43JJlcBgWrX8WX7R/05ZxGTuxedOuZBfxjZxja+fbijZGyxiLP6CFA==",
"hasInstallScript": true,
"optional": true,
"dependencies": {
@ -8088,7 +8089,7 @@
"request-progress": "^3.0.0",
"semver": "^7.5.3",
"supports-color": "^8.1.1",
"tmp": "~0.2.1",
"tmp": "~0.2.3",
"untildify": "^4.0.0",
"yauzl": "^2.10.0"
},
@ -8265,15 +8266,12 @@
}
},
"node_modules/cypress/node_modules/tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
"integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
"optional": true,
"dependencies": {
"rimraf": "^3.0.0"
},
"engines": {
"node": ">=8.17.0"
"node": ">=14.14"
}
},
"node_modules/d": {
@ -24133,9 +24131,9 @@
"peer": true
},
"cypress": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.12.0.tgz",
"integrity": "sha512-udzS2JilmI9ApO/UuqurEwOvThclin5ntz7K0BtnHBs+tg2Bl9QShLISXpSEMDv/u8b6mqdoAdyKeZiSqKWL8g==",
"version": "13.13.0",
"resolved": "https://registry.npmjs.org/cypress/-/cypress-13.13.0.tgz",
"integrity": "sha512-ou/MQUDq4tcDJI2FsPaod2FZpex4kpIK43JJlcBgWrX8WX7R/05ZxGTuxedOuZBfxjZxja+fbijZGyxiLP6CFA==",
"optional": true,
"requires": {
"@cypress/request": "^3.0.0",
@ -24177,7 +24175,7 @@
"request-progress": "^3.0.0",
"semver": "^7.5.3",
"supports-color": "^8.1.1",
"tmp": "~0.2.1",
"tmp": "~0.2.3",
"untildify": "^4.0.0",
"yauzl": "^2.10.0"
},
@ -24287,13 +24285,10 @@
}
},
"tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"optional": true,
"requires": {
"rimraf": "^3.0.0"
}
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
"integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
"optional": true
}
}
},

View File

@ -115,7 +115,7 @@
"optionalDependencies": {
"@cypress/schematic": "^2.5.0",
"@types/cypress": "^1.1.3",
"cypress": "^13.12.0",
"cypress": "^13.13.0",
"cypress-fail-on-console-error": "~5.1.0",
"cypress-wait-until": "^2.0.1",
"mock-socket": "~9.3.1",

View File

@ -73,7 +73,7 @@
<div class="row">
<div class="col">
<ng-container *ngIf="(etaInfo$ | async) as etaInfo; else loadingEstimate">
<small class="form-text checkout-text mb-2" i18n="accelerator.hashrate-percentage-description">Your transaction will be prioritized by up to <strong>{{ etaInfo.hashratePercentage | number : '1.1-1' }}%</strong> of miners.</small>
<small class="form-text checkout-text mb-2"><ng-container *ngTemplateOutlet="prioritizedBy; context: {$implicit:etaInfo.hashratePercentage}"></ng-container></small>
<small class="form-text checkout-text mb-2" i18n="accelerator.time-estimate-description">This will reduce your expected waiting time until the first confirmation to <strong><app-time kind="within" [time]="etaInfo.acceleratedETA" [fastRender]="false" [fixedRender]="true"></app-time></strong></small>
</ng-container>
</div>
@ -256,7 +256,7 @@
<hr>
<div class="row mt-2 mb-2 text-center">
<div class="col-sm d-flex flex-column">
<button type="button" class="mt-1 btn btn-secondary btn-sm rounded-pill align-self-center" style="width: 200px" (click)="moveToStep('summary')">Go Back</button>
<button type="button" class="mt-1 btn btn-secondary btn-sm rounded-pill align-self-center" style="width: 200px" (click)="moveToStep('summary')" i18n="go-back">Go back</button>
</div>
</div>
@ -287,12 +287,12 @@
<div class="form-group form-check mb-2">
<input type="radio" [checked]="selectedOption === 'wait'" class="form-check-input" id="wait" name="accel" (change)="selectedOptionChanged($event)">
<label class="form-check-label d-flex flex-column" for="wait">
<span class="font-weight-bold">Wait</span>
<span class="font-weight-bold" i18n="accelerator.wait">Wait</span>
@if (eta.blocks < 7) {
<span class="checkout-text">Confirmation expected <app-time kind="within" [time]="eta.time" [fastRender]="false" [fixedRender]="true"></app-time></span>
<span class="checkout-text"><ng-container i18n="accelerator.confirmation-expected">Confirmation expected</ng-container>&nbsp;<app-time kind="within" [time]="eta.time" [fastRender]="false" [fixedRender]="true"></app-time></span>
} @else {
<span class="checkout-text">
<span>Confirmation expected within several hours</span>
<span i18n="accelerator.confirmation-expected-within-hours">Confirmation expected within several hours</span>
</span>
}
</label>
@ -322,7 +322,7 @@
</div>
</div>
<div class="pie d-none d-lg-flex">
<small class="form-text checkout-text mb-2" i18n="accelerator.hashrate-percentage-description">Your transaction will be prioritized by up to {{ etaInfo.hashratePercentage | number : '1.1-1' }}% of miners.</small>
<small class="form-text checkout-text mb-2"><ng-container *ngTemplateOutlet="prioritizedBy; context: {$implicit:etaInfo.hashratePercentage}"></ng-container></small>
<app-active-acceleration-box [miningStats]="miningStats" [pools]="estimate.pools" [chartOnly]="true"></app-active-acceleration-box>
</div>
<ng-container *ngTemplateOutlet="accelerateButton"></ng-container>
@ -347,24 +347,24 @@
<span><ng-container *ngTemplateOutlet="accelerateTo; context: {$implicit:(userBid + estimate.txSummary.effectiveFee) / estimate.txSummary.effectiveVsize}"></ng-container></span>
<span class="checkout-text">
@if (!calculating) {
For an additional <app-fiat [value]="cost"></app-fiat> (<span><small style="font-family: monospace;">{{ cost | number }}</small>&nbsp;<span class="symbol" i18n="shared.sats">sats</span></span>)
<ng-container i18n="accelerator.for-an-additional-cost">For an additional</ng-container> <app-fiat [value]="cost"></app-fiat> (<span><small style="font-family: monospace;">{{ cost | number }}</small>&nbsp;<span class="symbol" i18n="shared.sats">sats</span></span>)
} @else {
<span class="estimating">Calculating cost...</span>
}
</span>
<span class="checkout-text" *ngIf="(etaInfo$ | async) as etaInfo">
Reducing expected confirmation time to <app-time kind="within" [time]="etaInfo.acceleratedETA" [fastRender]="false" [fixedRender]="true"></app-time>
<ng-container i18n="accelerator.reducing-expected-confirmation-time">Reducing expected confirmation time to <app-time kind="within" [time]="etaInfo.acceleratedETA" [fastRender]="false" [fixedRender]="true"></app-time></ng-container>
</span>
</div>
</div>
<div class="col-md pie d-none d-md-flex" *ngIf="!forceMobile">
<small class="form-text checkout-text mb-2" i18n="accelerator.hashrate-percentage-description" *ngIf="(etaInfo$ | async) as etaInfo">Your transaction will be prioritized by up to {{ etaInfo.hashratePercentage | number : '1.1-1' }}% of miners.</small>
<small class="form-text checkout-text mb-2" *ngIf="(etaInfo$ | async) as etaInfo"><ng-container *ngTemplateOutlet="prioritizedBy; context: {$implicit:etaInfo.hashratePercentage}"></ng-container></small>
<app-active-acceleration-box [miningStats]="miningStats" [pools]="estimate.pools" [chartOnly]="true"></app-active-acceleration-box>
</div>
</div>
<div class="payment-area mt-2 p-2" [class.disabled]="error || showSuccess" style="font-size: 14px;">
<div class="row text-center justify-content-center mx-2">
<p>Payment to mempool.space for acceleration of txid <a [routerLink]="'/tx/' + tx.txid" target="_blank"> {{ tx.txid.substr(0, 10) }}..{{ tx.txid.substr(-10) }}</a></p>
<p i18n="accelerator.payment-to-mempool-space">Payment to mempool.space for acceleration of txid <a [routerLink]="'/tx/' + tx.txid" target="_blank">{{ tx.txid.substr(0, 10) }}..{{ tx.txid.substr(-10) }}</a></p>
</div>
@if (canPayWithBalance || !(canPayWithBitcoin || canPayWithCashapp)) {
<div class="row">
@ -380,10 +380,10 @@
@if (canPayWithBitcoin) {
<div class="col-sm text-center d-flex flex-column justify-content-center align-items-center">
@if (invoice) {
<p>Pay <span><small style="font-family: monospace;">{{ ((invoice.btcDue * 100_000_000) || cost) | number }}</small>&nbsp;<span class="symbol" i18n="shared.sats">sats</span></span></p>
<p><ng-container i18n="transaction.pay|Pay button label">Pay</ng-container>&nbsp;<span><small style="font-family: monospace;">{{ ((invoice.btcDue * 100_000_000) || cost) | number }}</small>&nbsp;<span class="symbol" i18n="shared.sats">sats</span></span></p>
<app-bitcoin-invoice style="width: 100%;" [invoice]="invoice" [invoiceId]="invoice.btcpayInvoiceId" [minimal]="true" (completed)="bitcoinPaymentCompleted()"></app-bitcoin-invoice>
} @else {
<p>Loading invoice...</p>
<p i18n="accelerator.loading-invoice">Loading invoice...</p>
<div class="d-flex align-items-center justify-content-center" style="width: 100%; height: 292px;">
<div class="m-4 spinner-border text-light" style="width: 25px; height: 25px"></div>
</div>
@ -397,7 +397,7 @@
}
@if (canPayWithCashapp) {
<div class="col-sm text-center d-flex flex-column justify-content-center align-items-center">
<p>Pay <app-fiat [value]="cost"></app-fiat> with</p>
<p><ng-container i18n="transaction.pay|Pay button label">Pay</ng-container>&nbsp;<app-fiat [value]="cost"></app-fiat> with</p>
<img class="paymentMethod mx-2" src="/resources/cash-app.svg" height=55 (click)="moveToStep('cashapp')">
</div>
}
@ -418,21 +418,21 @@
<hr>
<div class="row mt-2 mb-2 text-center">
<div class="col-sm d-flex flex-column">
<button type="button" class="mt-1 btn btn-secondary btn-sm rounded-pill align-self-center" style="width: 200px" (click)="moveToStep('summary')">Go Back</button>
<button type="button" class="mt-1 btn btn-secondary btn-sm rounded-pill align-self-center" style="width: 200px" (click)="moveToStep('summary')" i18n="go-back">Go back</button>
</div>
</div>
} @else if (step === 'cashapp') {
<!-- Show checkout page -->
<div class="row mb-md-1 text-center">
<div class="col-sm" id="confirm-payment-title">
<h1 style="font-size: larger;"><ng-content select="[slot='checkout-title']"></ng-content><span class="default-slot">Confirm your payment</span></h1>
<h1 style="font-size: larger;"><ng-content select="[slot='checkout-title']"></ng-content><span class="default-slot" i18n="accelerator.confirm-your-payment">Confirm your payment</span></h1>
</div>
</div>
<div class="row text-center">
<div class="col-sm">
<div class="form-group w-100" style="font-size: 14px">
Payment to mempool.space for acceleration of txid <a [routerLink]="'/tx/' + tx.txid" target="_blank">{{ tx.txid.substr(0, 10) }}..{{ tx.txid.substr(-10) }}</a>
<ng-container i18n="accelerator.payment-to-mempool-space">Payment to mempool.space for acceleration of txid <a [routerLink]="'/tx/' + tx.txid" target="_blank">{{ tx.txid.substr(0, 10) }}..{{ tx.txid.substr(-10) }}</a></ng-container>
</div>
</div>
</div>
@ -441,11 +441,11 @@
<div class="row text-center mt-1">
<div class="col-sm">
<div class="form-group w-100">
<span><u><strong>Total additional cost</strong></u><br>
<span><u><strong i18n="accelerator.total-additional-cost">Total additional cost</strong></u><br>
<span style="font-size: 16px" class="d-block mt-2">
Pay
<ng-container i18n="transaction.pay|Pay button label">Pay</ng-container>
<strong><app-fiat [value]="cost"></app-fiat></strong>
with
<ng-container i18n="accelerator.pay-with">with</ng-container>
</span>
</span>
</div>
@ -459,7 +459,7 @@
<div id="cash-app-pay" class="d-inline-block" [style]="loadingCashapp ? 'opacity: 0; width: 0px; height: 0px; pointer-events: none;' : ''"></div>
@if (loadingCashapp) {
<div display="d-flex flex-row justify-content-center">
<span>Loading payment method...</span>
<span i18n="accelerator.loading-payment-method">Loading payment method...</span>
<div class="ml-2 spinner-border text-light" style="width: 25px; height: 25px"></div>
</div>
}
@ -470,14 +470,14 @@
<hr>
<div class="row mt-2 mb-2 text-center">
<div class="col-sm d-flex flex-column">
<button type="button" class="mt-1 btn btn-secondary btn-sm rounded-pill align-self-center" style="width: 200px" (click)="moveToStep('checkout')">Go Back</button>
<button type="button" class="mt-1 btn btn-secondary btn-sm rounded-pill align-self-center" style="width: 200px" (click)="moveToStep('checkout')" i18n="go-back">Go back</button>
</div>
</div>
}
@else if (step === 'processing') {
<div class="row mb-1 text-center">
<div class="col-sm">
<h1 style="font-size: larger;"><ng-content select="[slot='processing-title']"></ng-content><span class="default-slot">Confirming your payment</span></h1>
<h1 style="font-size: larger;"><ng-content select="[slot='processing-title']"></ng-content><span class="default-slot" i18n="accelerator.confirming-your-payment">Confirming your payment</span></h1>
</div>
</div>
@ -487,7 +487,7 @@
<!-- Processing payment -->
<div id="cash-app-pay" class="d-inline-block" [style]="'opacity: 0; width: 0px; height: 0px; pointer-events: none;'"></div>
<div display="d-flex flex-row justify-content-center">
<span>We are processing your payment...</span>
<span i18n="accelerator.payment-processing">We are processing your payment...</span>
<div class="ml-2 spinner-border text-light" style="width: 25px; height: 25px"></div>
</div>
</div>
@ -497,14 +497,14 @@
@else if (step === 'paid') {
<div class="row mb-1 text-center">
<div class="col-sm">
<h1 style="font-size: larger;"><ng-content select="[slot='accelerating-title']"></ng-content><span class="default-slot">Accelerating your transaction</span></h1>
<h1 style="font-size: larger;"><ng-content select="[slot='accelerating-title']"></ng-content><span class="default-slot" i18n="accelerator.accelerating-your-transaction">Accelerating your transaction</span></h1>
</div>
</div>
<div class="row text-center mt-1">
<div class="col-sm">
<div class="d-flex flex-row justify-content-center align-items-center">
<span>Confirming your acceleration with our mining pool partners...</span>
<span i18n="accelerator.confirming-acceleration-with-miners">Confirming your acceleration with our mining pool partners...</span>
<div class="ml-2 spinner-border text-light" style="width: 25px; height: 25px"></div>
</div>
</div>
@ -514,11 +514,11 @@
<ng-template #accelerateOption let-etaInfo="etaInfo">
<span><ng-container *ngTemplateOutlet="accelerateTo; context: {$implicit:(userBid + estimate.txSummary.effectiveFee) / estimate.txSummary.effectiveVsize}"></ng-container> <ng-container *ngTemplateOutlet="customizeButton"></ng-container></span>
<span class="checkout-text">Confirmation expected <app-time kind="within" [time]="etaInfo.acceleratedETA" [fastRender]="false" [fixedRender]="true"></app-time><br>
<span class="checkout-text"><ng-container i18n="accelerator.confirmation-expected">Confirmation expected</ng-container>&nbsp;<app-time kind="within" [time]="etaInfo.acceleratedETA" [fastRender]="false" [fixedRender]="true"></app-time><br>
@if (!calculating) {
<app-fiat [value]="cost"></app-fiat>fee (<span><small style="font-family: monospace;">{{ cost | number }}</small>&nbsp;<span class="symbol" i18n="shared.sats">sats</span></span>)
<app-fiat [value]="cost"></app-fiat> (<span><small style="font-family: monospace;">{{ cost | number }}</small>&nbsp;<span class="symbol" i18n="shared.sats">sats</span></span>)
} @else {
<span class="estimating">Calculating cost...</span>
<span class="estimating" i18n="accelerator.calculating-cost">Calculating cost...</span>
}
</span>
</ng-template>
@ -533,7 +533,7 @@
@if (isLoggedIn() || canPayWithBitcoin || canPayWithCashapp) {
<button type="button" class="mt-1 btn btn-purple rounded-pill align-self-center d-flex flex-row justify-content-center align-items-center" [class.disabled]="!canPay || calculating || (!advancedEnabled && selectedOption !== 'accel')" style="width: 200px" (click)="moveToStep('checkout')">
<img src="/resources/mempool-accelerator-sparkles-light.svg" height="20" class="mr-2" style="margin-left: -10px">
<span>Accelerate</span>
<span i18n="transaction.accelerate|Accelerate button label">Accelerate</span>
</button>
} @else {
<button type="button" class="mt-1 btn btn-purple rounded-pill align-self-center d-flex flex-row justify-content-center align-items-center disabled" style="width: 200px">
@ -547,7 +547,7 @@
@if (isLoggedIn()) {
<button type="button" class="mt-1 btn btn-purple rounded-pill align-self-center d-flex flex-row justify-content-center align-items-center" [class.disabled]="!canPay || calculating" style="width: 200px" (click)="accelerateWithMempoolAccount()">
<img src="/resources/mempool-accelerator-sparkles-light.svg" height="20" class="mr-2" style="margin-left: -10px">
<span>Pay</span>
<span i18n="transaction.pay|Pay button label">Pay</span>
</button>
} @else {
<button type="button" class="mt-1 btn btn-purple rounded-pill align-self-center d-flex flex-row justify-content-center align-items-center disabled" style="width: 200px">
@ -556,3 +556,5 @@
</button>
}
</ng-template>
<ng-template #prioritizedBy let-i i18n="accelerator.hashrate-percentage-description">Your transaction will be prioritized by up to <strong>{{ i | number : '1.1-1' }}%</strong> of miners.</ng-template>

View File

@ -122,6 +122,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy {
this.authSubscription$ = this.authService.getAuth$().subscribe((auth) => {
this.auth = auth;
this.estimate = null;
this.error = null;
this.moveToStep('summary');
});
this.authService.refreshAuth$().subscribe();

View File

@ -24,7 +24,7 @@
<tr>
<td class="td-width field-label" i18n="transaction.accelerated-by-hashrate|Accelerated to hashrate">Accelerated by</td>
<td class="field-value" *ngIf="acceleratedByPercentage">
{{ acceleratedByPercentage }} <span class="symbol hashrate-label">of hashrate</span>
<ng-container i18n="accelerator.x-of-hash-rate">{{ acceleratedByPercentage }} <span class="symbol hashrate-label">of hashrate</span></ng-container>
</td>
</tr>
</tbody>

View File

@ -75,7 +75,7 @@ export class BlockFeesSubsidyGraphComponent implements OnInit {
}
ngOnInit(): void {
this.seoService.setTitle($localize`:@@mining.block-fees-subsidy:Block Fees Vs Subsidy`);
this.seoService.setTitle($localize`:@@41545303ec98792b738d6237adbd1f3b54a22196:Block Fees Vs Subsidy`);
this.seoService.setDescription($localize`:@@meta.description.bitcoin.graphs.block-fees-subsidy:See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time.`);
this.miningWindowPreference = this.miningService.getDefaultTimespan('24h');
@ -182,9 +182,9 @@ export class BlockFeesSubsidyGraphComponent implements OnInit {
if (this.displayMode === 'normal') tooltip += `<div style="margin-left: 2px">${formatNumber(data.reduce((acc, val) => acc + val.data, 0), this.locale, '1.0-3')} BTC</div>`;
else if (this.displayMode === 'fiat') tooltip += `<div style="margin-left: 2px">${this.fiatCurrencyPipe.transform(data.reduce((acc, val) => acc + val.data, 0), null, 'USD')}</div>`;
if (['24h', '3d'].includes(this.zoomTimeSpan)) {
tooltip += `<small>` + $localize`At block <b style="color: white; margin-left: 2px">${data[0].axisValue}` + `</small>`;
tooltip += `<small>` + $localize`At block ${'<b style="color: white; margin-left: 2px">' + data[0].axisValue}` + `</small>`;
} else {
tooltip += `<small>` + $localize`Around block <b style="color: white; margin-left: 2px">${data[0].axisValue}` + `</small>`;
tooltip += `<small>` + $localize`Around block ${'<b style="color: white; margin-left: 2px">' + data[0].axisValue}` + `</small>`;
}
return tooltip;
}.bind(this)

View File

@ -60,7 +60,7 @@ export class BlockHealthGraphComponent implements OnInit {
}
ngOnInit(): void {
this.seoService.setTitle($localize`:@@d7d5fcf50179ad70c938491c517efb82de2c8146:Block Health`);
this.seoService.setTitle($localize`:@@b1fa5b210c9670d49a6506f046d4a0c2797fd402:Block Health`);
this.seoService.setDescription($localize`:@@meta.description.bitcoin.graphs.block-health:See Bitcoin block health visualized over time. Block health is a measure of how many expected transactions were included in an actual mined block. Expected transactions are determined using Mempool's re-implementation of Bitcoin Core's transaction selection algorithm.`);
this.miningWindowPreference = '24h';//this.miningService.getDefaultTimespan('24h');
this.radioGroupForm = this.formBuilder.group({ dateSpan: this.miningWindowPreference });

View File

@ -18,7 +18,7 @@
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/block-fees' | relativeUrl]"
i18n="mining.block-fees">Block Fees</a>
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/block-fees-subsidy' | relativeUrl]"
i18n="mining.block-fees">Block Fees Vs Subsidy</a>
i18n="mining.block-fees-subsidy-subsidy">Block Fees Vs Subsidy</a>
<a class="dropdown-item" routerLinkActive="active" [routerLink]="['/graphs/mining/block-rewards' | relativeUrl]"
i18n="mining.block-rewards">Block Rewards</a>
<a class="dropdown-item" routerLinkActive="active"

View File

@ -1,11 +1,11 @@
<div class="tracker-bar" [class.transitions]="transitionsEnabled">
<div class="stage {{ stages.waiting.state }}">Sent</div>
<div class="stage {{ stages.waiting.state }}" i18n="accelerator.sent-state">Sent</div>
<div class="divider left-{{ stages.waiting.state }} right-{{ stages.pending.state }}"></div>
<div class="stage {{ stages.pending.state }}">Pending</div>
<div class="stage {{ stages.pending.state }}" i18n="accelerator.pending-state">Pending</div>
<div class="divider left-{{ stages.pending.state }} right-{{ stages.soon.state }}"></div>
<div class="stage {{ stages.soon.state }}">Soon</div>
<div class="stage {{ stages.soon.state }}" i18n="accelerator.soon">Soon</div>
<div class="divider left-{{ stages.soon.state }} right-{{ stages.next.state }}"></div>
<div class="stage {{ stages.next.state }}">Next block</div>
<div class="stage {{ stages.next.state }}" i18n="@@bdf0e930eb22431140a2eaeacd809cc5f8ebd38c">Next Block</div>
<div class="divider left-{{ stages.next.state }} right-{{ stages.confirmed.state }}"></div>
<div class="stage {{ stages.confirmed.state }}">Confirmed</div>
<div class="stage {{ stages.confirmed.state }}" i18n="transaction.confirmed|Transaction confirmed state">Confirmed</div>
</div>

View File

@ -174,7 +174,7 @@
</div>
<div class="footer-link" [routerLink]="['/tx' | relativeUrl, tx?.txid]">
<span>See more details <fa-icon [icon]="['fas', 'arrow-alt-circle-right']"></fa-icon></span>
<span><ng-container i18n="accelerator.show-more-details">See more details</ng-container>&nbsp;<fa-icon [icon]="['fas', 'arrow-alt-circle-right']"></fa-icon></span>
</div>
</div>
</div>

View File

@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import { map, Observable, ReplaySubject, switchMap, tap } from 'rxjs';
import { catchError, map, Observable, of, ReplaySubject, switchMap, tap } from 'rxjs';
import { ServicesApiServices } from './services-api.service';
export interface IAuth {
@ -43,7 +43,8 @@ export class AuthServiceMempool {
}),
map((user) => {
return user;
})
}),
catchError(() => of(null)),
);
}

View File

@ -41,11 +41,11 @@ const ADDRESS_CHARS: {
bech32: `(?:`
+ `bc1` // Starts with bc1
+ BECH32_CHARS_LW
+ `{20,100}` // As per bech32, 6 char checksum is minimum
+ `{6,100}` // As per bech32, 6 char checksum is minimum
+ `|`
+ `BC1` // All upper case version
+ BECH32_CHARS_UP
+ `{20,100}`
+ `{6,100}`
+ `)`,
},
testnet: {
@ -55,11 +55,11 @@ const ADDRESS_CHARS: {
bech32: `(?:`
+ `tb1` // Starts with tb1
+ BECH32_CHARS_LW
+ `{20,100}` // As per bech32, 6 char checksum is minimum
+ `{6,100}` // As per bech32, 6 char checksum is minimum
+ `|`
+ `TB1` // All upper case version
+ BECH32_CHARS_UP
+ `{20,100}`
+ `{6,100}`
+ `)`,
},
testnet4: {
@ -69,11 +69,11 @@ const ADDRESS_CHARS: {
bech32: `(?:`
+ `tb1` // Starts with tb1
+ BECH32_CHARS_LW
+ `{20,100}` // As per bech32, 6 char checksum is minimum
+ `{6,100}` // As per bech32, 6 char checksum is minimum
+ `|`
+ `TB1` // All upper case version
+ BECH32_CHARS_UP
+ `{20,100}`
+ `{6,100}`
+ `)`,
},
signet: {
@ -83,11 +83,11 @@ const ADDRESS_CHARS: {
bech32: `(?:`
+ `tb1` // Starts with tb1
+ BECH32_CHARS_LW
+ `{20,100}`
+ `{6,100}`
+ `|`
+ `TB1` // All upper case version
+ BECH32_CHARS_UP
+ `{20,100}`
+ `{6,100}`
+ `)`,
},
liquid: {
@ -105,7 +105,7 @@ const ADDRESS_CHARS: {
+ `lq1`
+ `)`
+ BECH32_CHARS_LW // blech32 and bech32 are the same alphabet and protocol, different checksums.
+ `{20,100}`
+ `{6,100}`
+ `|`
+ `(?:` // Same as above but all upper case
+ `EX1`
@ -113,7 +113,7 @@ const ADDRESS_CHARS: {
+ `LQ1`
+ `)`
+ BECH32_CHARS_UP
+ `{20,100}`
+ `{6,100}`
+ `)`,
},
liquidtestnet: {
@ -127,7 +127,7 @@ const ADDRESS_CHARS: {
+ `tlq1` // TODO: does this exist?
+ `)`
+ BECH32_CHARS_LW // blech32 and bech32 are the same alphabet and protocol, different checksums.
+ `{20,100}`
+ `{6,100}`
+ `|`
+ `(?:` // Same as above but all upper case
+ `TEX1`
@ -135,7 +135,7 @@ const ADDRESS_CHARS: {
+ `TLQ1`
+ `)`
+ BECH32_CHARS_UP
+ `{20,100}`
+ `{6,100}`
+ `)`,
},
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -558,14 +558,6 @@
</context-group>
<note priority="1" from="description">accelerator.how-much-faster</note>
</trans-unit>
<trans-unit id="d5e02d655834140c67217985af30b22b4b831aa8" datatype="html">
<source>Your transaction will be prioritized by up to <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/><x id="INTERPOLATION" equiv-text="rcentage | number : &apos;1.1-1&apos; }}"/>%<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> of miners.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">76</context>
</context-group>
<note priority="1" from="description">accelerator.hashrate-percentage-description</note>
</trans-unit>
<trans-unit id="d1a62bdb732f1efbfdc8af6fbb4349b89015b5e5" datatype="html">
<source>This will reduce your expected waiting time until the first confirmation to <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/><x id="START_TAG_APP_TIME" ctype="x-app_time" equiv-text="n&quot; [time]=&quot;etaInfo.acceleratedETA&quot; [fastRender]=&quot;false&quot; [fixedRender]=&quot;true&quot;&gt;"/><x id="CLOSE_TAG_APP_TIME" ctype="x-app_time" equiv-text="&lt;/strong&gt;&lt;/s"/><x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/small&gt;"/></source>
<context-group purpose="location">
@ -691,6 +683,22 @@
</context-group>
<note priority="1" from="description">accelerator.available-balance</note>
</trans-unit>
<trans-unit id="a67aec1c4d47cdf3a4442a19e616def78fd77388" datatype="html">
<source>Go back</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">259</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">421</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">473</context>
</context-group>
<note priority="1" from="description">go-back</note>
</trans-unit>
<trans-unit id="7d89e94e98140d07d5c2bb12d6166b8b74506eb0" datatype="html">
<source>Accelerate your Bitcoin transaction?</source>
<context-group purpose="location">
@ -699,17 +707,91 @@
</context-group>
<note priority="1" from="description">accelerator.accelerate-your-transaction</note>
</trans-unit>
<trans-unit id="d1a7c51db4237fc7799b1c104283ec5202f03c7d" datatype="html">
<source>Your transaction will be prioritized by up to <x id="INTERPOLATION" equiv-text="{{ etaInfo.hashratePercentage | number : &apos;1.1-1&apos; }}"/>% of miners.</source>
<trans-unit id="eb70970e7741aca891aa54ff4651b050a60b1690" datatype="html">
<source>Wait</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">325</context>
<context context-type="linenumber">290</context>
</context-group>
<note priority="1" from="description">accelerator.wait</note>
</trans-unit>
<trans-unit id="f6a46cd5ca2087712a145f2c680e2aad5f926eaf" datatype="html">
<source>Confirmation expected</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">292</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">361</context>
<context context-type="linenumber">517</context>
</context-group>
<note priority="1" from="description">accelerator.hashrate-percentage-description</note>
<note priority="1" from="description">accelerator.confirmation-expected</note>
</trans-unit>
<trans-unit id="3f27230dc33770f71a7b0d9249c3c712b116b582" datatype="html">
<source>Confirmation expected within several hours</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">295</context>
</context-group>
<note priority="1" from="description">accelerator.confirmation-expected-within-hours</note>
</trans-unit>
<trans-unit id="fd1ab7f68416a5ce64f04f588c8b808d7bba9624" datatype="html">
<source>For an additional</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">350</context>
</context-group>
<note priority="1" from="description">accelerator.for-an-additional-cost</note>
</trans-unit>
<trans-unit id="b0cd496dc7758e691f57213379a47f0a043010ac" datatype="html">
<source>Reducing expected confirmation time to <x id="START_TAG_APP_TIME" ctype="x-app_time" equiv-text="&lt;app-time kind=&quot;within&quot; [time]=&quot;etaInfo.acceleratedETA&quot; [fastRender]=&quot;false&quot; [fixedRender]=&quot;true&quot;&gt;"/><x id="CLOSE_TAG_APP_TIME" ctype="x-app_time" equiv-text="&lt;/ng-contain"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">356,357</context>
</context-group>
<note priority="1" from="description">accelerator.reducing-expected-confirmation-time</note>
</trans-unit>
<trans-unit id="b62e50ad8bdbb107a2ec978648faf36e9f91c3c1" datatype="html">
<source>Payment to mempool.space for acceleration of txid <x id="START_LINK" ctype="x-a" equiv-text="&lt;a [routerLink]=&quot;&apos;/tx/&apos; + tx.txid&quot; target=&quot;_blank&quot;&gt;"/><x id="INTERPOLATION" equiv-text="tr(0, 10) }}"/>..<x id="INTERPOLATION_1" equiv-text="{{ tx.txid.substr(-10) }}"/><x id="CLOSE_LINK" ctype="x-a" equiv-text="&lt;/p&gt;
&lt;/d"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">367,368</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">435</context>
</context-group>
<note priority="1" from="description">accelerator.payment-to-mempool-space</note>
</trans-unit>
<trans-unit id="65fd4251d8ddfe4017d4d83f8cec6f5a80d89289" datatype="html">
<source>Pay</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">383</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">400</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">446</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">550</context>
</context-group>
<note priority="1" from="description">Pay button label</note>
<note priority="1" from="meaning">transaction.pay</note>
</trans-unit>
<trans-unit id="13eacf4307fbadcc4ba552641200cdc36997a62c" datatype="html">
<source>Loading invoice...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">386</context>
</context-group>
<note priority="1" from="description">accelerator.loading-invoice</note>
</trans-unit>
<trans-unit id="63f5d0ec23e3cf4abf6d5221107633c90d8d4a15" datatype="html">
<source>OR</source>
@ -719,6 +801,78 @@
</context-group>
<note priority="1" from="description">or</note>
</trans-unit>
<trans-unit id="d5380b83d01211f764e7dc17f115cbe2c306793f" datatype="html">
<source>Confirm your payment</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">428</context>
</context-group>
<note priority="1" from="description">accelerator.confirm-your-payment</note>
</trans-unit>
<trans-unit id="23e85f2bac1f2bf2a36125a7cc9232e47d773bca" datatype="html">
<source>Total additional cost</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">444</context>
</context-group>
<note priority="1" from="description">accelerator.total-additional-cost</note>
</trans-unit>
<trans-unit id="ada15d0099ccf0a54d598a658d7a5d9f95af8fc6" datatype="html">
<source>with</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">448</context>
</context-group>
<note priority="1" from="description">accelerator.pay-with</note>
</trans-unit>
<trans-unit id="c427d1fcbff172397bf8f6fb154e3144f099afdc" datatype="html">
<source>Loading payment method...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">462</context>
</context-group>
<note priority="1" from="description">accelerator.loading-payment-method</note>
</trans-unit>
<trans-unit id="72ca62832f62c0aeb0c0675d2ac6aa7043ee840d" datatype="html">
<source>Confirming your payment</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">480</context>
</context-group>
<note priority="1" from="description">accelerator.confirming-your-payment</note>
</trans-unit>
<trans-unit id="8c8cbda9c5ddde6a4898a80aef46199c946c8895" datatype="html">
<source>We are processing your payment...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">490</context>
</context-group>
<note priority="1" from="description">accelerator.payment-processing</note>
</trans-unit>
<trans-unit id="ea3197c44781ecca4f2adbf7bff229574f192983" datatype="html">
<source>Accelerating your transaction</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">500</context>
</context-group>
<note priority="1" from="description">accelerator.accelerating-your-transaction</note>
</trans-unit>
<trans-unit id="2279bfb8531701cc176ff6b266c3fa0df3983bce" datatype="html">
<source>Confirming your acceleration with our mining pool partners...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">507</context>
</context-group>
<note priority="1" from="description">accelerator.confirming-acceleration-with-miners</note>
</trans-unit>
<trans-unit id="746506272a06b85cba0efc14907940df4bafdf96" datatype="html">
<source>Calculating cost...</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">521</context>
</context-group>
<note priority="1" from="description">accelerator.calculating-cost</note>
</trans-unit>
<trans-unit id="484e154f1b26e67760d10baa8dddb2c69ddb1990" datatype="html">
<source>customize</source>
<context-group purpose="location">
@ -735,6 +889,35 @@
</context-group>
<note priority="1" from="description">accelerator.accelerate-to-x</note>
</trans-unit>
<trans-unit id="913e89d2d1ae354079cccf48b3d3f4ebf2e74080" datatype="html">
<source>Accelerate</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">536</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">139</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">557</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">566</context>
</context-group>
<note priority="1" from="description">Accelerate button label</note>
<note priority="1" from="meaning">transaction.accelerate</note>
</trans-unit>
<trans-unit id="cae178cb66733552da9e3baefc1949a18af63ee0" datatype="html">
<source>Your transaction will be prioritized by up to <x id="START_TAG_STRONG" ctype="x-strong" equiv-text="&lt;strong&gt;"/><x id="INTERPOLATION" equiv-text="1&apos; }}"/>%<x id="CLOSE_TAG_STRONG" ctype="x-strong" equiv-text="&lt;/strong&gt;"/> of miners.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/accelerate-checkout/accelerate-checkout.component.html</context>
<context context-type="linenumber">560</context>
</context-group>
<note priority="1" from="description">accelerator.hashrate-percentage-description</note>
</trans-unit>
<trans-unit id="83b8b9dd1ed416447cf8438460a37b0ddeb2677c" datatype="html">
<source>sat</source>
<context-group purpose="location">
@ -808,6 +991,10 @@
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.ts</context>
<context context-type="linenumber">87</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tracker/tracker-bar.component.html</context>
<context context-type="linenumber">8</context>
</context-group>
</trans-unit>
<trans-unit id="bcf34abc2d9ed8f45a2f65dd464c46694e9a181e" datatype="html">
<source>Acceleration Fees</source>
@ -1132,6 +1319,10 @@
<context context-type="sourcefile">src/app/components/acceleration/accelerations-list/accelerations-list.component.html</context>
<context context-type="linenumber">53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tracker/tracker-bar.component.html</context>
<context context-type="linenumber">4</context>
</context-group>
<note priority="1" from="description">accelerator.pending</note>
</trans-unit>
<trans-unit id="9362dc86738f282259d3ef3789b7824dbfd19202" datatype="html">
@ -1262,6 +1453,14 @@
<note priority="1" from="description">Accelerated to hashrate</note>
<note priority="1" from="meaning">transaction.accelerated-by-hashrate</note>
</trans-unit>
<trans-unit id="3af3e9a4c4d8135f386b2fc59233884ae8fc57fb" datatype="html">
<source><x id="INTERPOLATION" equiv-text="{{ acceleratedByPercentage }}"/> <x id="START_TAG_SPAN" ctype="x-span" equiv-text="&lt;span class=&quot;symbol hashrate-label&quot;&gt;"/>of hashrate<x id="CLOSE_TAG_SPAN" ctype="x-span" equiv-text="&lt;/span&gt;"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<note priority="1" from="description">accelerator.x-of-hash-rate</note>
</trans-unit>
<trans-unit id="3590f5c3ef2810f637316edb8aaa86b8e907f152" datatype="html">
<source>pending</source>
<context-group purpose="location">
@ -2125,19 +2324,16 @@
<context context-type="sourcefile">src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts</context>
<context context-type="linenumber">78</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/graphs/graphs.component.html</context>
<context context-type="linenumber">21</context>
</context-group>
<note priority="1" from="description">mining.block-fees-subsidy-subsidy</note>
</trans-unit>
<trans-unit id="mining.block-fees-subsidy" datatype="html">
<source>Block Fees Vs Subsidy</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts</context>
<context context-type="linenumber">78</context>
</context-group>
</trans-unit>
<trans-unit id="meta.description.bitcoin.graphs.block-fees-subsidy" datatype="html">
<source>See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time.</source>
<context-group purpose="location">
@ -2145,15 +2341,15 @@
<context context-type="linenumber">79</context>
</context-group>
</trans-unit>
<trans-unit id="2189751124546081426" datatype="html">
<source>At block &lt;b style=&quot;color: white; margin-left: 2px&quot;&gt;<x id="PH" equiv-text="data[0].axisValue"/></source>
<trans-unit id="8538305450922736186" datatype="html">
<source>At block <x id="PH" equiv-text="&apos;&lt;b style=&quot;color: white; margin-left: 2px&quot;&gt;&apos; + data[0].axisValue"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts</context>
<context context-type="linenumber">185</context>
</context-group>
</trans-unit>
<trans-unit id="4367945322724572611" datatype="html">
<source>Around block &lt;b style=&quot;color: white; margin-left: 2px&quot;&gt;<x id="PH" equiv-text="data[0].axisValue"/></source>
<trans-unit id="8807945662832318286" datatype="html">
<source>Around block <x id="PH" equiv-text="&apos;&lt;b style=&quot;color: white; margin-left: 2px&quot;&gt;&apos; + data[0].axisValue"/></source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts</context>
<context context-type="linenumber">187</context>
@ -2245,19 +2441,16 @@
<context context-type="sourcefile">src/app/components/block-health-graph/block-health-graph.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-health-graph/block-health-graph.component.ts</context>
<context context-type="linenumber">63</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/graphs/graphs.component.html</context>
<context context-type="linenumber">27</context>
</context-group>
<note priority="1" from="description">mining.blocks-health</note>
</trans-unit>
<trans-unit id="d7d5fcf50179ad70c938491c517efb82de2c8146" datatype="html">
<source>Block Health</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-health-graph/block-health-graph.component.ts</context>
<context context-type="linenumber">63</context>
</context-group>
</trans-unit>
<trans-unit id="meta.description.bitcoin.graphs.block-health" datatype="html">
<source>See Bitcoin block health visualized over time. Block health is a measure of how many expected transactions were included in an actual mined block. Expected transactions are determined using Mempool&apos;s re-implementation of Bitcoin Core&apos;s transaction selection algorithm.</source>
<context-group purpose="location">
@ -2422,6 +2615,10 @@
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">32</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tracker/tracker-bar.component.html</context>
<context context-type="linenumber">10</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">468</context>
@ -6172,6 +6369,22 @@
<context context-type="linenumber">269</context>
</context-group>
</trans-unit>
<trans-unit id="cef1d79eace5eb4d2243fad36730e3e65c757bee" datatype="html">
<source>Sent</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tracker/tracker-bar.component.html</context>
<context context-type="linenumber">2</context>
</context-group>
<note priority="1" from="description">accelerator.sent-state</note>
</trans-unit>
<trans-unit id="6092bb2a5d8d9aca468a0007bc1af1c21e8f454c" datatype="html">
<source>Soon</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tracker/tracker-bar.component.html</context>
<context context-type="linenumber">6</context>
</context-group>
<note priority="1" from="description">accelerator.soon</note>
</trans-unit>
<trans-unit id="0094b97dd052620710f173e7aedf6807a1eba1f5" datatype="html">
<source>This transaction has been replaced by:</source>
<context-group purpose="location">
@ -6283,6 +6496,14 @@
</context-group>
<note priority="1" from="description">tracker.explain.replaced</note>
</trans-unit>
<trans-unit id="2514309d0421b09a70cf9bf5d59bcc1b82dbec31" datatype="html">
<source>See more details</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tracker/tracker.component.html</context>
<context context-type="linenumber">177</context>
</context-group>
<note priority="1" from="description">accelerator.show-more-details</note>
</trans-unit>
<trans-unit id="bisq.transaction.browser-title" datatype="html">
<source>Transaction: <x id="INTERPOLATION" equiv-text="this.txId"/></source>
<context-group purpose="location">
@ -6355,23 +6576,6 @@
<note priority="1" from="description">Transaction Ancestor</note>
<note priority="1" from="meaning">transaction.ancestor</note>
</trans-unit>
<trans-unit id="913e89d2d1ae354079cccf48b3d3f4ebf2e74080" datatype="html">
<source>Accelerate</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">139</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">557</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">566</context>
</context-group>
<note priority="1" from="description">Accelerate button label</note>
<note priority="1" from="meaning">transaction.accelerate</note>
</trans-unit>
<trans-unit id="ec972116b4da9e2c5bc0e6e6586061d60cd13e56" datatype="html">
<source>Hide accelerator</source>
<context-group purpose="location">

File diff suppressed because it is too large Load Diff