diff --git a/backend/src/api/mining/mining-routes.ts b/backend/src/api/mining/mining-routes.ts index 08ea0d1bc..f49abd7b0 100644 --- a/backend/src/api/mining/mining-routes.ts +++ b/backend/src/api/mining/mining-routes.ts @@ -465,10 +465,6 @@ class MiningRoutes { } private async $requestAcceleration(req: Request, res: Response): Promise { - if (config.MEMPOOL_SERVICES.ACCELERATIONS || config.MEMPOOL.OFFICIAL) { - res.status(405).send('not available.'); - return; - } res.setHeader('Pragma', 'no-cache'); res.setHeader('Cache-control', 'private, no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'); res.setHeader('expires', -1); diff --git a/backend/src/api/services/acceleration.ts b/backend/src/api/services/acceleration.ts index 386c40b8e..88289382b 100644 --- a/backend/src/api/services/acceleration.ts +++ b/backend/src/api/services/acceleration.ts @@ -37,6 +37,7 @@ export interface AccelerationHistory { }; class AccelerationApi { + private onDemandPollingEnabled = !config.MEMPOOL_SERVICES.ACCELERATIONS; private apiPath = config.MEMPOOL.OFFICIAL ? (config.MEMPOOL_SERVICES.API + '/accelerator/accelerations') : (config.EXTERNAL_DATA_SERVER.MEMPOOL_API + '/accelerations'); private _accelerations: Acceleration[] | null = null; private lastPoll = 0; @@ -52,7 +53,9 @@ class AccelerationApi { } public accelerationRequested(txid: string): void { - this.myAccelerations[txid] = { status: 'requested', added: Date.now() }; + if (this.onDemandPollingEnabled) { + this.myAccelerations[txid] = { status: 'requested', added: Date.now() }; + } } public accelerationConfirmed(): void { @@ -70,7 +73,7 @@ class AccelerationApi { } public async $updateAccelerations(): Promise { - if (config.MEMPOOL_SERVICES.ACCELERATIONS) { + if (!this.onDemandPollingEnabled) { const accelerations = await this.$fetchAccelerations(); if (accelerations) { this._accelerations = accelerations; diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html index 82391dc89..b9a176055 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.html @@ -389,21 +389,29 @@ } - @if (canPayWithCashapp || canPayWithApplePay) { + @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) {

OR

} } - @if (canPayWithCashapp || canPayWithApplePay) { + @if (canPayWithCashapp || canPayWithApplePay || canPayWithGooglePay) {

Pay  with

@if (canPayWithCashapp) { } @if (canPayWithApplePay) { - @if (canPayWithCashapp) {
} - + @if (canPayWithCashapp) { } +
+ +
+ } + @if (canPayWithGooglePay) { + @if (canPayWithCashapp || canPayWithApplePay) { } +
+ +
}
} @@ -427,7 +435,7 @@ - } @else if (step === 'cashapp' || step === 'applepay') { + } @else if (step === 'cashapp' || step === 'applepay' || step === 'googlepay') {
@@ -443,7 +451,7 @@
- @if (step === 'cashapp' && !loadingCashapp || step === 'applepay' && !loadingApplePay) { + @if (step === 'cashapp' && !loadingCashapp || step === 'applepay' && !loadingApplePay || step === 'googlepay' && !loadingGooglePay) {
@@ -463,11 +471,13 @@
@if (step === 'applepay') { -
+
} @else if (step === 'cashapp') { -
+
+ } @else if (step === 'googlepay') { +
} - @if (loadingCashapp || loadingApplePay) { + @if (loadingCashapp || loadingApplePay || loadingGooglePay) {
Loading payment method...
diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index 71c46e2da..624df2ca3 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -1,7 +1,8 @@ +/* eslint-disable no-console */ import { Component, OnInit, OnDestroy, Output, EventEmitter, Input, ChangeDetectorRef, SimpleChanges, HostListener } from '@angular/core'; import { Subscription, tap, of, catchError, Observable, switchMap } from 'rxjs'; import { ServicesApiServices } from '../../services/services-api.service'; -import { md5, nextRoundNumber, insecureRandomUUID } from '../../shared/common.utils'; +import { md5, insecureRandomUUID } from '../../shared/common.utils'; import { StateService } from '../../services/state.service'; import { AudioService } from '../../services/audio.service'; import { ETA, EtaService } from '../../services/eta.service'; @@ -11,7 +12,7 @@ import { IAuth, AuthServiceMempool } from '../../services/auth.service'; import { EnterpriseService } from '../../services/enterprise.service'; import { ApiService } from '../../services/api.service'; -export type PaymentMethod = 'balance' | 'bitcoin' | 'cashapp'; +export type PaymentMethod = 'balance' | 'bitcoin' | 'cashapp' | 'applePay' | 'googlePay'; export type AccelerationEstimate = { hasAccess: boolean; @@ -24,7 +25,7 @@ export type AccelerationEstimate = { mempoolBaseFee: number; vsizeFee: number; pools: number[]; - availablePaymentMethods: {[method: string]: {min: number, max: number}}; + availablePaymentMethods: Record; unavailable?: boolean; options: { // recommended bid options fee: number; // recommended userBid in sats @@ -47,7 +48,7 @@ export const MIN_BID_RATIO = 1; export const DEFAULT_BID_RATIO = 2; export const MAX_BID_RATIO = 4; -type CheckoutStep = 'quote' | 'summary' | 'checkout' | 'cashapp' | 'applepay' | 'processing' | 'paid' | 'success'; +type CheckoutStep = 'quote' | 'summary' | 'checkout' | 'cashapp' | 'applepay' | 'googlepay' | 'processing' | 'paid' | 'success'; @Component({ selector: 'app-accelerate-checkout', @@ -62,6 +63,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Input() scrollEvent: boolean; @Input() cashappEnabled: boolean = true; @Input() applePayEnabled: boolean = false; + @Input() googlePayEnabled: boolean = true; @Input() advancedEnabled: boolean = false; @Input() forceMobile: boolean = false; @Input() showDetails: boolean = false; @@ -83,14 +85,12 @@ export class AccelerateCheckout implements OnInit, OnDestroy { private _step: CheckoutStep = 'summary'; simpleMode: boolean = true; - paymentMethod: 'cashapp' | 'btcpay'; timeoutTimer: any; authSubscription$: Subscription; auth: IAuth | null = null; // accelerator stuff - square: { appId: string, locationId: string}; accelerationUUID: string; accelerationSubscription: Subscription; difficultySubscription: Subscription; @@ -112,14 +112,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { // square loadingCashapp = false; loadingApplePay = false; - cashappError = false; - cashappSubmit: any; + loadingGooglePay = false; payments: any; cashAppPay: any; applePay: any; + googlePay: any; conversionsSubscription: Subscription; - conversions: any; - + conversions: Record; + // btcpay loadingBtcpayInvoice = false; invoice = undefined; @@ -137,13 +137,13 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.accelerationUUID = insecureRandomUUID(); // Check if Apple Pay available - // @ts-ignore https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/checking_for_apple_pay_availability#overview - if (window.ApplePaySession) { + // https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_js_api/checking_for_apple_pay_availability#overview + if (window['ApplePaySession']) { this.applePayEnabled = true; } } - ngOnInit() { + ngOnInit(): void { this.authSubscription$ = this.authService.getAuth$().subscribe((auth) => { if (this.auth?.user?.userId !== auth?.user?.userId) { this.auth = auth; @@ -168,13 +168,6 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.moveToStep('summary'); } - this.servicesApiService.setupSquare$().subscribe(ids => { - this.square = { - appId: ids.squareAppId, - locationId: ids.squareLocationId - }; - }); - this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -182,7 +175,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { ); } - ngOnDestroy() { + ngOnDestroy(): void { if (this.estimateSubscription) { this.estimateSubscription.unsubscribe(); } @@ -202,7 +195,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } } - moveToStep(step: CheckoutStep) { + moveToStep(step: CheckoutStep): void { this._step = step; if (this.timeoutTimer) { clearTimeout(this.timeoutTimer); @@ -228,13 +221,18 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.insertSquare(); this.setupSquare(); this.scrollToElementWithTimeout('confirm-title', 'center', 100); + } else if (this._step === 'googlepay' && this.googlePayEnabled) { + this.loadingGooglePay = true; + this.insertSquare(); + this.setupSquare(); + this.scrollToElementWithTimeout('confirm-title', 'center', 100); } else if (this._step === 'paid') { this.timePaid = Date.now(); this.timeoutTimer = setTimeout(() => { if (this.step === 'paid') { this.accelerateError = 'internal_server_error'; } - }, 120000) + }, 120000); } this.hasDetails.emit(this._step === 'quote'); } @@ -252,7 +250,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.scrollToElement(id, position); }, timeout); } - scrollToElement(id: string, position: ScrollLogicalPosition) { + scrollToElement(id: string, position: ScrollLogicalPosition): void { const acceleratePreviewAnchor = document.getElementById(id); if (acceleratePreviewAnchor) { this.cd.markForCheck(); @@ -267,7 +265,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { /** * Accelerator */ - fetchEstimate() { + fetchEstimate(): void { if (this.estimateSubscription) { this.estimateSubscription.unsubscribe(); } @@ -331,7 +329,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }), - catchError((response) => { + catchError(() => { this.estimate = undefined; this.quoteError = `cannot_accelerate_tx`; this.estimateSubscription.unsubscribe(); @@ -402,8 +400,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * Square */ insertSquare(): void { - //@ts-ignore - if (window.Square) { + if (window['Square']) { return; } let statsUrl = 'https://sandbox.web.squarecdn.com/v1/square.js'; @@ -415,19 +412,17 @@ export class AccelerateCheckout implements OnInit, OnDestroy { statsUrl = 'https://web.squarecdn.com/v1/square.js'; } - (function() { + (function(): void { const d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; - // @ts-ignore g.type='text/javascript'; g.src=statsUrl; s.parentNode.insertBefore(g, s); })(); } - setupSquare() { - const init = () => { + setupSquare(): void { + const init = (): void => { this.initSquare(); }; - //@ts-ignore - if (!window.Square) { + if (!window['Square']) { console.debug('Square.js failed to load properly. Retrying in 1 second.'); setTimeout(init, 1000); } else { @@ -436,29 +431,37 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } async initSquare(): Promise { try { - //@ts-ignore - this.payments = window.Square.payments(this.square.appId, this.square.locationId) - const urlParams = new URLSearchParams(window.location.search); - if (this._step === 'cashapp' || urlParams.get('cash_request_id')) { - await this.requestCashAppPayment(); - } else if (this._step === 'applepay') { - await this.requestApplePayPayment(); - } + this.servicesApiService.setupSquare$().subscribe({ + next: async (ids) => { + this.payments = window['Square'].payments(ids.squareAppId, ids.squareLocationId); + const urlParams = new URLSearchParams(window.location.search); + if (this._step === 'cashapp' || urlParams.get('cash_request_id')) { + await this.requestCashAppPayment(); + } else if (this._step === 'applepay') { + await this.requestApplePayPayment(); + } else if (this._step === 'googlepay') { + await this.requestGooglePayPayment(); + } + }, + error: () => { + console.debug('Error loading Square Payments'); + this.accelerateError = 'cannot_setup_square'; + } + }); } catch (e) { console.debug('Error loading Square Payments', e); - this.cashappError = true; - return; + this.accelerateError = 'cannot_setup_square'; } } /** * APPLE PAY */ - async requestApplePayPayment() { + async requestApplePayPayment(): Promise { if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } - + this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -505,6 +508,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.accelerationUUID ).subscribe({ next: () => { + this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); if (this.applePay) { this.applePay.destroy(); @@ -542,13 +546,100 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } /** - * CASHAPP + * GOOGLE PAY */ - async requestCashAppPayment() { + async requestGooglePayPayment(): Promise { if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } - + + this.conversionsSubscription = this.stateService.conversions$.subscribe( + async (conversions) => { + this.conversions = conversions; + if (this.googlePay) { + this.googlePay.destroy(); + } + + const costUSD = this.cost / 100_000_000 * conversions.USD; + const paymentRequest = this.payments.paymentRequest({ + countryCode: 'US', + currencyCode: 'USD', + total: { + amount: costUSD.toFixed(2), + label: 'Total' + } + }); + this.googlePay = await this.payments.googlePay(paymentRequest , { + referenceId: `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, + }); + + await this.googlePay.attach(`#google-pay-button`, { + buttonType: 'pay', + buttonSizeMode: 'fill', + }); + this.loadingGooglePay = false; + + document.getElementById('google-pay-button').addEventListener('click', async event => { + event.preventDefault(); + const tokenResult = await this.googlePay.tokenize(); + if (tokenResult?.status === 'OK') { + const card = tokenResult.details?.card; + if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) { + console.error(`Cannot retreive payment card details`); + this.accelerateError = 'apple_pay_no_card_details'; + return; + } + const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase()); + this.servicesApiService.accelerateWithGooglePay$( + this.tx.txid, + tokenResult.token, + cardTag, + `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, + this.accelerationUUID + ).subscribe({ + next: () => { + this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); + this.audioService.playSound('ascend-chime-cartoon'); + if (this.googlePay) { + this.googlePay.destroy(); + } + setTimeout(() => { + this.moveToStep('paid'); + }, 1000); + }, + error: (response) => { + this.accelerateError = response.error; + if (!(response.status === 403 && response.error === 'not_available')) { + setTimeout(() => { + // Reset everything by reloading the page :D, can be improved + const urlParams = new URLSearchParams(window.location.search); + window.location.assign(window.location.toString().replace(`?cash_request_id=${urlParams.get('cash_request_id')}`, ``)); + }, 3000); + } + } + }); + } else { + let errorMessage = `Tokenization failed with status: ${tokenResult.status}`; + if (tokenResult.errors) { + errorMessage += ` and errors: ${JSON.stringify( + tokenResult.errors, + )}`; + } + throw new Error(errorMessage); + } + }); + } + ); + } + + /** + * CASHAPP + */ + async requestCashAppPayment(): Promise { + if (this.conversionsSubscription) { + this.conversionsSubscription.unsubscribe(); + } + this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -566,18 +657,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { label: 'Total', pending: true, productUrl: `${redirectHostname}/tracker/${this.tx.txid}`, - }, - button: { shape: 'semiround', size: 'small', theme: 'light'} + } }); this.cashAppPay = await this.payments.cashAppPay(paymentRequest, { redirectURL: `${redirectHostname}/tracker/${this.tx.txid}`, - referenceId: `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, - button: { shape: 'semiround', size: 'small', theme: 'light'} + referenceId: `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}` }); - if (this.step === 'cashapp') { - await this.cashAppPay.attach(`#cash-app-pay`, { theme: 'light', size: 'small', shape: 'semiround' }) - } + await this.cashAppPay.attach(`#cash-app-pay`, { theme: 'dark' }); this.loadingCashapp = false; this.cashAppPay.addEventListener('ontokenization', event => { @@ -626,7 +713,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { /** * BTCPay */ - async requestBTCPayInvoice() { + async requestBTCPayInvoice(): Promise { this.servicesApiService.generateBTCPayAcceleratorInvoice$(this.tx.txid, this.userBid).pipe( switchMap(response => { return this.servicesApiService.retreiveInvoice$(response.btcpayInvoiceId); @@ -656,53 +743,60 @@ export class AccelerateCheckout implements OnInit, OnDestroy { /** * UI events */ - selectedOptionChanged(event) { + selectedOptionChanged(event): void { this.selectedOption = event.target.id; } - get step() { + get step(): CheckoutStep { return this._step; } - get paymentMethods() { - return Object.keys(this.estimate?.availablePaymentMethods || {}); + get paymentMethods(): PaymentMethod[] { + return Object.keys(this.estimate?.availablePaymentMethods || {}) as PaymentMethod[]; } - get couldPayWithBitcoin() { + get couldPayWithBitcoin(): boolean { return !!this.estimate?.availablePaymentMethods?.bitcoin; } - get couldPayWithCashapp() { + get couldPayWithCashapp(): boolean { if (!this.cashappEnabled) { return false; } return !!this.estimate?.availablePaymentMethods?.cashapp; } - get couldPayWithApplePay() { + get couldPayWithApplePay(): boolean { if (!this.applePayEnabled) { return false; } return !!this.estimate?.availablePaymentMethods?.applePay; } - get couldPayWithBalance() { + get couldPayWithGooglePay(): boolean { + if (!this.googlePayEnabled) { + return false; + } + return !!this.estimate?.availablePaymentMethods?.googlePay; + } + + get couldPayWithBalance(): boolean { if (!this.hasAccessToBalanceMode) { return false; } return !!this.estimate?.availablePaymentMethods?.balance; } - get couldPay() { - return this.couldPayWithBalance || this.couldPayWithBitcoin || this.couldPayWithCashapp || this.couldPayWithApplePay; + get couldPay(): boolean { + return this.couldPayWithBalance || this.couldPayWithBitcoin || this.couldPayWithCashapp || this.couldPayWithApplePay || this.couldPayWithGooglePay; } - get canPayWithBitcoin() { + get canPayWithBitcoin(): boolean { const paymentMethod = this.estimate?.availablePaymentMethods?.bitcoin; return paymentMethod && this.cost >= paymentMethod.min && this.cost <= paymentMethod.max; } - get canPayWithCashapp() { + get canPayWithCashapp(): boolean { if (!this.cashappEnabled || !this.conversions) { return false; } @@ -718,7 +812,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return false; } - get canPayWithApplePay() { + get canPayWithApplePay(): boolean { if (!this.applePayEnabled || !this.conversions) { return false; } @@ -734,7 +828,23 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return false; } - get canPayWithBalance() { + get canPayWithGooglePay(): boolean { + if (!this.googlePayEnabled || !this.conversions) { + return false; + } + + const paymentMethod = this.estimate?.availablePaymentMethods?.googlePay; + if (paymentMethod) { + const costUSD = (this.cost / 100_000_000 * this.conversions.USD); + if (costUSD >= paymentMethod.min && costUSD <= paymentMethod.max) { + return true; + } + } + + return false; + } + + get canPayWithBalance(): boolean { if (!this.hasAccessToBalanceMode) { return false; } @@ -742,11 +852,11 @@ export class AccelerateCheckout implements OnInit, OnDestroy { return paymentMethod && this.cost >= paymentMethod.min && this.cost <= paymentMethod.max && this.cost <= this.estimate?.userBalance; } - get canPay() { - return this.canPayWithBalance || this.canPayWithBitcoin || this.canPayWithCashapp || this.canPayWithApplePay; + get canPay(): boolean { + return this.canPayWithBalance || this.canPayWithBitcoin || this.canPayWithCashapp || this.canPayWithApplePay || this.canPayWithGooglePay; } - get hasAccessToBalanceMode() { + get hasAccessToBalanceMode(): boolean { return this.isLoggedIn() && this.estimate?.hasAccess; } diff --git a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts index b5e575409..d78b663a4 100644 --- a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts @@ -23,7 +23,7 @@ import { RelativeUrlPipe } from '../../../shared/pipes/relative-url/relative-url position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/address-graph/address-graph.component.ts b/frontend/src/app/components/address-graph/address-graph.component.ts index 9793c6a2e..6d40a8ebb 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -30,7 +30,7 @@ const periodSeconds = { position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts index ba3489e17..c533626e7 100644 --- a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts +++ b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -23,7 +23,7 @@ import { ActivatedRoute, Router } from '@angular/router'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts index eb567c2a6..33e3eb19e 100644 --- a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts +++ b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts @@ -23,7 +23,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts b/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts index 18e57ada8..42d05510f 100644 --- a/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts +++ b/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts @@ -24,7 +24,7 @@ import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pi position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-health-graph/block-health-graph.component.ts b/frontend/src/app/components/block-health-graph/block-health-graph.component.ts index 59f34cd45..6a7168d6b 100644 --- a/frontend/src/app/components/block-health-graph/block-health-graph.component.ts +++ b/frontend/src/app/components/block-health-graph/block-health-graph.component.ts @@ -21,7 +21,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts index d0c154420..63a543674 100644 --- a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts +++ b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts @@ -23,7 +23,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts index bf591ad70..b0069dca2 100644 --- a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts +++ b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts @@ -21,7 +21,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts index 7db1367ea..438a50f74 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts @@ -15,7 +15,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts index 8aaa983fa..0d193514d 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -23,7 +23,7 @@ import { seoDescriptionNetwork } from '../../shared/common.utils'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss index fe38ce89b..87ee1b45d 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss @@ -59,7 +59,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } .loadingGraphs.widget { top: 75%; diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts index 5ac2cc10d..3fca15bf3 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -28,7 +28,7 @@ interface Hashrate { position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts index d3d7d8237..3487d6fb0 100644 --- a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts +++ b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts @@ -17,7 +17,7 @@ const OUTLIERS_MEDIAN_MULTIPLIER = 4; position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts index aca469ff8..a8ec36bec 100644 --- a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts +++ b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts @@ -11,7 +11,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } `], templateUrl: './lbtc-pegs-graph.component.html', diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss index 9881148fc..b58e706e5 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.scss @@ -2,5 +2,5 @@ position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } \ No newline at end of file diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.scss b/frontend/src/app/components/loading-indicator/loading-indicator.component.scss index b919fa2b8..9217263bd 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.scss +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.scss @@ -1,7 +1,7 @@ .sticky-loading { position: absolute; right: 10px; - z-index: 100; + z-index: 99; font-size: 14px; @media (width >= 992px) { left: 32px; diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index 63fb52a0c..3a707987f 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -18,7 +18,7 @@ import { download, formatterXAxis, formatterXAxisLabel } from '../../shared/grap position: absolute; top: 50%; left: calc(50% - 16px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss index 9001fc085..cf53ebe14 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss @@ -60,7 +60,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } .pool-distribution { diff --git a/frontend/src/app/components/pool/pool.component.scss b/frontend/src/app/components/pool/pool.component.scss index 36bdc93e9..5c2fedd26 100644 --- a/frontend/src/app/components/pool/pool.component.scss +++ b/frontend/src/app/components/pool/pool.component.scss @@ -167,7 +167,7 @@ div.scrollable { .loadingGraphs { position: absolute; left: calc(50% - 15px); - z-index: 100; + z-index: 99; top: 475px; @media (max-width: 992px) { top: 600px; diff --git a/frontend/src/app/components/tracker/tracker.component.scss b/frontend/src/app/components/tracker/tracker.component.scss index 56f0b5f0a..614691426 100644 --- a/frontend/src/app/components/tracker/tracker.component.scss +++ b/frontend/src/app/components/tracker/tracker.component.scss @@ -49,7 +49,7 @@ position: relative; background: var(--nav-bg); box-shadow: 0 -5px 15px #000; - z-index: 100; + z-index: 99; align-items: center; justify-content: space-between; diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index 22789986e..35e0ffa09 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -7,7 +7,7 @@ export interface WebsocketResponse { backend?: 'esplora' | 'electrum' | 'none'; block?: BlockExtended; blocks?: BlockExtended[]; - conversions?: any; + conversions?: Record; txConfirmed?: string; historicalDate?: string; mempoolInfo?: MempoolInfo; diff --git a/frontend/src/app/lightning/channel/channel.component.scss b/frontend/src/app/lightning/channel/channel.component.scss index 9451c8112..89a43acf3 100644 --- a/frontend/src/app/lightning/channel/channel.component.scss +++ b/frontend/src/app/lightning/channel/channel.component.scss @@ -68,7 +68,7 @@ h3 { .loading-spinner { position: absolute; top: 400px; - z-index: 100; + z-index: 99; width: 100%; left: 0; @media (max-width: 767.98px) { diff --git a/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts b/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts index 7f329eaf2..aa0837fce 100644 --- a/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts +++ b/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts @@ -16,7 +16,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts b/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts index 35cd8b236..91813400d 100644 --- a/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts +++ b/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts @@ -19,7 +19,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss index 16482a0da..ad71cfb8e 100644 --- a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss +++ b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.scss @@ -102,7 +102,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; @media (max-width: 767.98px) { top: 550px; } @@ -110,7 +110,7 @@ .loading-spinner.widget { position: absolute; top: 200px; - z-index: 100; + z-index: 99; width: 100%; left: 0; @media (max-width: 767.98px) { @@ -120,7 +120,7 @@ .loading-spinner.nodepage { position: absolute; top: 200px; - z-index: 100; + z-index: 99; width: 100%; left: 0; } @@ -128,7 +128,7 @@ .loading-spinner.channelpage { position: absolute; top: 400px; - z-index: 100; + z-index: 99; width: 100%; left: 0; @media (max-width: 767.98px) { diff --git a/frontend/src/app/lightning/nodes-channels/node-channels.component.scss b/frontend/src/app/lightning/nodes-channels/node-channels.component.scss index 78510203f..08dc5c2cb 100644 --- a/frontend/src/app/lightning/nodes-channels/node-channels.component.scss +++ b/frontend/src/app/lightning/nodes-channels/node-channels.component.scss @@ -8,7 +8,7 @@ left: 0; right: 0; width: 100%; - z-index: 100; + z-index: 99; } .spinner-border { diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.scss b/frontend/src/app/lightning/nodes-map/nodes-map.component.scss index 82362a257..d0fa1016f 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.scss +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.scss @@ -68,7 +68,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; @media (max-width: 767.98px) { top: 550px; } diff --git a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts index 9784e0a5b..d947bb327 100644 --- a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts +++ b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts @@ -22,7 +22,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], changeDetection: ChangeDetectionStrategy.OnPush, diff --git a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss index b9490d579..e1b66cc2b 100644 --- a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss +++ b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.scss @@ -46,7 +46,7 @@ position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } .pool-distribution { diff --git a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts index 44f359ae8..77ce42f26 100644 --- a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts +++ b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts @@ -22,7 +22,7 @@ import { StateService } from '../../services/state.service'; position: absolute; top: 50%; left: calc(50% - 15px); - z-index: 100; + z-index: 99; } `], }) diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index c26075198..1366342f7 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -118,6 +118,9 @@ export class ServicesApiServices { } getJWT$() { + if (!this.stateService.env.OFFICIAL_MEMPOOL_SPACE) { + return of(null); + } return this.httpClient.get(`${this.stateService.env.SERVICES_API}/auth/getJWT`); } @@ -141,6 +144,10 @@ export class ServicesApiServices { return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/applePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID }); } + accelerateWithGooglePay$(txInput: string, token: string, cardTag: string, referenceId: string, accelerationUUID: string) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/googlePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID }); + } + getAccelerations$(): Observable { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations`); } diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 05f1ac69f..8928245a7 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -138,7 +138,7 @@ export class StateService { blocksSubject$ = new BehaviorSubject([]); blocks$: Observable; transactions$ = new BehaviorSubject(null); - conversions$ = new ReplaySubject(1); + conversions$ = new ReplaySubject>(1); bsqPrice$ = new ReplaySubject(1); mempoolInfo$ = new ReplaySubject(1); mempoolBlocks$ = new ReplaySubject(1); diff --git a/frontend/src/locale/messages.nl.xlf b/frontend/src/locale/messages.nl.xlf index a8f5537c4..390a9df3b 100644 --- a/frontend/src/locale/messages.nl.xlf +++ b/frontend/src/locale/messages.nl.xlf @@ -417,6 +417,7 @@ Sorry, something went wrong! + Sorry, er ging iets mis! src/app/components/accelerate-checkout/accelerate-checkout.component.html 5 @@ -425,6 +426,7 @@ We were not able to accelerate this transaction. Please try again later. + We hebben deze transactie niet kunnen versnellen. Probeer het later opnieuw. src/app/components/accelerate-checkout/accelerate-checkout.component.html 11 @@ -433,6 +435,7 @@ Close + Sluiten src/app/components/accelerate-checkout/accelerate-checkout.component.html 18 @@ -633,6 +636,7 @@ How much faster? + Hoeveel sneller? src/app/components/accelerate-checkout/accelerate-checkout.component.html 71 @@ -641,6 +645,7 @@ This will reduce your expected waiting time until the first confirmation to + Dit verkort de verwachte wachttijd tot de eerste bevestiging tot src/app/components/accelerate-checkout/accelerate-checkout.component.html 76,77 @@ -649,6 +654,7 @@ Summary + Samenvatting src/app/components/accelerate-checkout/accelerate-checkout.component.html 100 @@ -697,6 +703,7 @@ Target rate + Doeltarief src/app/components/accelerate-checkout/accelerate-checkout.component.html 131 @@ -705,6 +712,7 @@ Extra fee required + Extra vergoeding vereist src/app/components/accelerate-checkout/accelerate-checkout.component.html 139 @@ -758,6 +766,7 @@ Acceleration cost + Acceleratiekosten src/app/components/accelerate-checkout/accelerate-checkout.component.html 206 @@ -775,6 +784,7 @@ Go back + Ga terug src/app/components/accelerate-checkout/accelerate-checkout.component.html 258 @@ -791,6 +801,7 @@ Accelerate your Bitcoin transaction? + Bitcoin-transactie versnellen? src/app/components/accelerate-checkout/accelerate-checkout.component.html 273 @@ -799,6 +810,7 @@ Wait + Wacht src/app/components/accelerate-checkout/accelerate-checkout.component.html 285 @@ -807,6 +819,7 @@ Confirmation expected + Bevestiging verwacht src/app/components/accelerate-checkout/accelerate-checkout.component.html 287 @@ -819,6 +832,7 @@ Confirmation not expected any time soon + Bevestiging wordt niet snel verwacht src/app/components/accelerate-checkout/accelerate-checkout.component.html 290 @@ -827,6 +841,7 @@ For an additional + Voor een extra src/app/components/accelerate-checkout/accelerate-checkout.component.html 345 @@ -835,6 +850,7 @@ Reducing expected confirmation time to + Verkort verwachte bevestigingstijd naar src/app/components/accelerate-checkout/accelerate-checkout.component.html 351,352 @@ -843,6 +859,7 @@ Payment to mempool.space for acceleration of txid .. + Betaling aan mempool.space voor versnelling van txid .. src/app/components/accelerate-checkout/accelerate-checkout.component.html 362,363 @@ -855,6 +872,7 @@ Your account will be debited no more than + Er wordt maximaal van uw rekening afgeschreven src/app/components/accelerate-checkout/accelerate-checkout.component.html 367 @@ -863,6 +881,7 @@ Pay + Betalen src/app/components/accelerate-checkout/accelerate-checkout.component.html 378 @@ -884,6 +903,7 @@ Failed to load invoice + Kan betaling niet laden src/app/components/accelerate-checkout/accelerate-checkout.component.html 381 @@ -892,6 +912,7 @@ Loading invoice... + Betaling laden... src/app/components/accelerate-checkout/accelerate-checkout.component.html 386 @@ -900,6 +921,7 @@ OR + OF src/app/components/accelerate-checkout/accelerate-checkout.component.html 394 @@ -908,6 +930,7 @@ Confirm your payment + Bevestig uw betaling src/app/components/accelerate-checkout/accelerate-checkout.component.html 428 @@ -916,6 +939,7 @@ Total additional cost + Totale extra kosten src/app/components/accelerate-checkout/accelerate-checkout.component.html 444 @@ -924,6 +948,7 @@ with + met src/app/components/accelerate-checkout/accelerate-checkout.component.html 448 @@ -932,6 +957,7 @@ Loading payment method... + Betaalmethode laden... src/app/components/accelerate-checkout/accelerate-checkout.component.html 462 @@ -940,6 +966,7 @@ Confirming your payment + Betaling aan het bevestigen src/app/components/accelerate-checkout/accelerate-checkout.component.html 480 @@ -948,6 +975,7 @@ We are processing your payment... + Wij verwerken uw betaling... src/app/components/accelerate-checkout/accelerate-checkout.component.html 490 @@ -956,6 +984,7 @@ Accelerating your transaction + Transactie aan het versnellen src/app/components/accelerate-checkout/accelerate-checkout.component.html 500 @@ -964,6 +993,7 @@ Confirming your acceleration with our mining pool partners... + Bevestiging van uw versnelling met onze mining-partners... src/app/components/accelerate-checkout/accelerate-checkout.component.html 507 @@ -972,6 +1002,7 @@ ...sorry, this is taking longer than expected... + ...sorry, dit duurt langer dan verwacht... src/app/components/accelerate-checkout/accelerate-checkout.component.html 509 @@ -980,6 +1011,7 @@ Your transaction is being accelerated! + Uw transactie wordt versneld! src/app/components/accelerate-checkout/accelerate-checkout.component.html 518 @@ -988,6 +1020,7 @@ Your transaction has been accepted for acceleration by our mining pool partners. + Uw transactie is geaccepteerd voor versnelling door onze mining-partners. src/app/components/accelerate-checkout/accelerate-checkout.component.html 524 @@ -996,6 +1029,7 @@ Calculating cost... + Kosten berekenen... src/app/components/accelerate-checkout/accelerate-checkout.component.html 543 @@ -1004,6 +1038,7 @@ customize + aanpassen src/app/components/accelerate-checkout/accelerate-checkout.component.html 549 @@ -1012,6 +1047,7 @@ Accelerate to ~ sat/vB + Versnellen naar ~ sat/vB src/app/components/accelerate-checkout/accelerate-checkout.component.html 552 @@ -1038,6 +1074,7 @@ Your transaction will be prioritized by up to % of miners. + Uw transactie krijgt prioriteit door maximaal % van de miners. src/app/components/accelerate-checkout/accelerate-checkout.component.html 580 @@ -1116,6 +1153,7 @@ accelerated + versneld src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts 91 @@ -1405,6 +1443,7 @@ Total vSize + Totaal vSize src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 20 @@ -1425,6 +1464,7 @@ of blocks + van blokken src/app/components/acceleration/acceleration-stats/acceleration-stats.component.html 23 @@ -1674,6 +1714,7 @@ (1 day) + (1 dag) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 27 @@ -1682,6 +1723,7 @@ (1 week) + (1 week) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 30 @@ -1690,6 +1732,7 @@ (1 month) + (1 maand) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 33 @@ -1698,6 +1741,7 @@ (all time) + (altijd) src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.html 36 @@ -1752,6 +1796,7 @@ Accelerated to + Versneld naar src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html 7 @@ -1761,6 +1806,7 @@ Accelerated by + Versneld door src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html 30 @@ -1770,6 +1816,7 @@ of hashrate + van hashrate src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html 32 @@ -1778,6 +1825,7 @@ not accelerating + niet versneld src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts 85 @@ -1807,6 +1855,7 @@ of block + van blok src/app/components/acceleration/pending-stats/pending-stats.component.html 23 @@ -2099,6 +2148,7 @@ all + alle src/app/components/address/address.component.html 84 @@ -2107,6 +2157,7 @@ recent + recent src/app/components/address/address.component.html 87 @@ -2115,6 +2166,7 @@ of transaction + van transactie src/app/components/address/address.component.html 101 @@ -2123,6 +2175,7 @@ of transactions + van transacties src/app/components/address/address.component.html 102 @@ -2144,6 +2197,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: + Er zijn te veel transacties op dit adres, meer dan uw backend aankan. Bekijk meer informatie over het opzetten van een sterkere backend. Bekijk in plaats daarvan dit adres op de officiële Mempool-website: src/app/components/address/address.component.html 204,207 @@ -2152,6 +2206,7 @@ Confirmed balance + Bevestigd saldo src/app/components/address/address.component.html 247 @@ -2160,6 +2215,7 @@ Confirmed UTXOs + Bevestigde UTXO's src/app/components/address/address.component.html 257 @@ -2168,6 +2224,7 @@ Pending UTXOs + UTXO's in behandeling src/app/components/address/address.component.html 262 @@ -2553,6 +2610,7 @@ Change (7d) + Wijziging (7d) src/app/components/balance-widget/balance-widget.component.html 14 @@ -2565,6 +2623,7 @@ Change (30d) + Wijziging (30d) src/app/components/balance-widget/balance-widget.component.html 23 @@ -2689,6 +2748,7 @@ Block Fees Vs Subsidy + Blokkosten versus subsidie src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.html 6 @@ -2705,6 +2765,7 @@ See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time. + Bekijk de verdiende miningkosten per Bitcoin-blok ten opzichte van de Bitcoin-bloksubsidie, gevisualiseerd in BTC en USD in de loop van de tijd. src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 79 @@ -2712,6 +2773,7 @@ At block + Bij blok src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 185 @@ -2719,6 +2781,7 @@ Around block + Rond blok src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 187 @@ -3459,6 +3522,7 @@ transaction + transactie src/app/components/block/block-transactions.component.html 4 @@ -3479,6 +3543,7 @@ transactions + transacties src/app/components/block/block-transactions.component.html 5 @@ -3875,6 +3940,7 @@ Error loading block data. + Fout bij het laden van blokgegevens. src/app/components/block/block.component.html 367 @@ -4343,6 +4409,7 @@ Treasury + Schatkist src/app/components/custom-dashboard/custom-dashboard.component.html 228 @@ -4351,6 +4418,7 @@ Treasury Transactions + Schatkisttransacties src/app/components/custom-dashboard/custom-dashboard.component.html 251 @@ -4359,6 +4427,7 @@ X Timeline + X Tijdlijn src/app/components/custom-dashboard/custom-dashboard.component.html 265 @@ -4706,6 +4775,7 @@ Testnet4 Faucet + Testnet4 kraan src/app/components/faucet/faucet.component.html 4 @@ -4714,6 +4784,7 @@ Amount (sats) + Bedrag (sat) src/app/components/faucet/faucet.component.html 51 @@ -4722,6 +4793,7 @@ Request Testnet4 Coins + Testnet4-munten aanvragen src/app/components/faucet/faucet.component.html 70 @@ -5467,6 +5539,7 @@ Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + Aantal keren dat de BTC-bezit van de Federatie onder de 95% van het totale L-BTC-aanbod daalt src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5575,6 +5648,7 @@ Faucet + Kraan src/app/components/master-page/master-page.component.html 105 @@ -6094,6 +6168,7 @@ Error loading pool data. + Fout bij het laden van poolgegevens. src/app/components/pool/pool.component.html 467 @@ -6390,6 +6465,7 @@ Mining Pools + Mining pools src/app/components/search-form/search-results/search-results.component.html 47 @@ -6530,6 +6606,7 @@ Test Transactions + Test-transacties src/app/components/test-transactions/test-transactions.component.html 2 @@ -6547,6 +6624,7 @@ Raw hex + Ruwe hexcode src/app/components/test-transactions/test-transactions.component.html 5 @@ -6555,6 +6633,7 @@ Comma-separated list of raw transactions + Komma-gescheiden lijst met ruwe transacties src/app/components/test-transactions/test-transactions.component.html 7 @@ -6563,6 +6642,7 @@ Maximum fee rate (sat/vB) + Maximale kosten (sat/vB) src/app/components/test-transactions/test-transactions.component.html 9 @@ -6571,6 +6651,7 @@ Allowed? + Toegestaan? src/app/components/test-transactions/test-transactions.component.html 23 @@ -6579,6 +6660,7 @@ Rejection reason + Reden van afwijzing src/app/components/test-transactions/test-transactions.component.html 26 @@ -6731,6 +6813,7 @@ within ~ + binnen ~ src/app/components/time/time.component.ts 211 @@ -6910,6 +6993,7 @@ Sent + Verstuurd src/app/components/tracker/tracker-bar.component.html 2 @@ -6918,6 +7002,7 @@ Soon + Spoedig src/app/components/tracker/tracker-bar.component.html 6 @@ -6954,6 +7039,7 @@ Not any time soon + Niet snel src/app/components/tracker/tracker.component.html 74 @@ -6967,6 +7053,7 @@ Confirmed at + Bevestigd om src/app/components/tracker/tracker.component.html 87 @@ -6975,6 +7062,7 @@ Block height + Blokhoogte src/app/components/tracker/tracker.component.html 96 @@ -6983,6 +7071,7 @@ Your transaction has been accelerated + Uw transactie is versneld src/app/components/tracker/tracker.component.html 143 @@ -6991,6 +7080,7 @@ Waiting for your transaction to appear in the mempool + Wachten tot uw transactie in de mempool verschijnt src/app/components/tracker/tracker.component.html 150 @@ -6999,6 +7089,7 @@ Your transaction is in the mempool, but it will not be confirmed for some time. + Uw transactie staat in de mempool, maar wordt binnenkort niet bevestigd. src/app/components/tracker/tracker.component.html 156 @@ -7007,6 +7098,7 @@ Your transaction is near the top of the mempool, and is expected to confirm soon. + Uw transactie staat bovenaan de mempool en zal naar verwachting binnenkort worden bevestigd. src/app/components/tracker/tracker.component.html 162 @@ -7015,6 +7107,7 @@ Your transaction is expected to confirm in the next block + Uw transactie wordt naar verwachting in het volgende blok bevestigd src/app/components/tracker/tracker.component.html 168 @@ -7023,6 +7116,7 @@ Your transaction is confirmed! + Uw transactie is bevestigd! src/app/components/tracker/tracker.component.html 174 @@ -7031,6 +7125,7 @@ Your transaction has been replaced by a newer version! + Uw transactie is vervangen door een nieuwere versie! src/app/components/tracker/tracker.component.html 180 @@ -7039,6 +7134,7 @@ See more details + Zie meer details src/app/components/tracker/tracker.component.html 189 @@ -7124,6 +7220,7 @@ Hide accelerator + Verberg versneller src/app/components/transaction/transaction.component.html 131 @@ -7132,6 +7229,7 @@ RBF Timeline + RBF-geschiedenis src/app/components/transaction/transaction.component.html 158 @@ -7141,6 +7239,7 @@ Acceleration Timeline + Accelatiegeschiedenis src/app/components/transaction/transaction.component.html 167 @@ -9650,6 +9749,7 @@ fee + kosten src/app/shared/components/address-type/address-type.component.html 3 @@ -9658,6 +9758,7 @@ empty + leeg src/app/shared/components/address-type/address-type.component.html 6 @@ -9666,6 +9767,7 @@ provably unspendable + aantoonbaar onbruikbaar src/app/shared/components/address-type/address-type.component.html 18 @@ -9674,6 +9776,7 @@ bare multisig + kale multisig src/app/shared/components/address-type/address-type.component.html 21 @@ -9758,6 +9861,7 @@ Test Transaction + Test transactie src/app/shared/components/global-footer/global-footer.component.html 64 @@ -9839,6 +9943,7 @@ Research + Onderzoek src/app/shared/components/global-footer/global-footer.component.html 75 @@ -9865,6 +9970,7 @@ Testnet3 Explorer + Testnet3 Verkenner src/app/shared/components/global-footer/global-footer.component.html 81 @@ -9873,6 +9979,7 @@ Testnet4 Explorer + Testnet4 Verkenner src/app/shared/components/global-footer/global-footer.component.html 82 @@ -9975,6 +10082,7 @@ Your balance is too low.Please top up your account. + Uw saldo is te laag.waardeer alstublieft uw account op . src/app/shared/components/mempool-error/mempool-error.component.html 9 @@ -9992,6 +10100,7 @@ Testnet3 is deprecated, and will soon be replaced by Testnet4 + Testnet3 is verouderd en wordt binnenkort vervangen door Testnet4 src/app/shared/components/testnet-alert/testnet-alert.component.html 6 @@ -10000,6 +10109,7 @@ Testnet4 is not yet finalized, and may be reset at anytime. + Testnet4 is nog niet afgerond en kan op elk moment worden gereset. src/app/shared/components/testnet-alert/testnet-alert.component.html 9 @@ -10008,6 +10118,7 @@ Batch payment + Batchbetaling src/app/shared/filters.utils.ts 108 @@ -10167,6 +10278,7 @@ Multisig of + Multisig van src/app/shared/script.utils.ts 168 diff --git a/frontend/src/locale/messages.pt.xlf b/frontend/src/locale/messages.pt.xlf index e13c9c7ea..01f35e4b1 100644 --- a/frontend/src/locale/messages.pt.xlf +++ b/frontend/src/locale/messages.pt.xlf @@ -409,6 +409,7 @@ Learn more about The Mempool Open Source Project®: enterprise sponsors, individual sponsors, integrations, who contributes, FOSS licensing, and more. + Saiba mais sobre o Mempool Open Source Project®: patrocinadores empresariais, patrocinadores individuais, integrações, quem contribui, licenciamento FOSS e muito mais. src/app/components/about/about.component.ts 50 @@ -2122,6 +2123,7 @@ See mempool transactions, confirmed transactions, balance, and more for address . + Veja transações no mempool, transações confirmadas, saldo, e mais para o endereço . src/app/components/address/address-preview.component.ts 72 @@ -2195,6 +2197,7 @@ There are too many transactions on this address, more than your backend can handle. See more on setting up a stronger backend. Consider viewing this address on the official Mempool website instead: + Há muitas transações neste endereço, mais do que seu back-end pode suportar. Veja mais sobre como configurar um back-end mais robusto. Considere visualizar este endereço no site oficial do Mempool: src/app/components/address/address.component.html 204,207 @@ -2221,6 +2224,7 @@ Pending UTXOs + UTXOs pendentes src/app/components/address/address.component.html 262 @@ -2409,6 +2413,7 @@ Browse an overview of the Liquid asset (): see issued amount, burned amount, circulating amount, related transactions, and more. + Navegue por uma visão geral do ativo Liquid (): veja valor emitido, valor queimado, valor circulante, transações relacionadas e mais. src/app/components/asset/asset.component.ts 108 @@ -2532,6 +2537,7 @@ Explore all the assets issued on the Liquid network like L-BTC, L-CAD, USDT, and more. + Explore todos os ativos emitidos na rede Liquid, como L-BTC, L-CAD, USDT e muito mais. src/app/components/assets/assets-nav/assets-nav.component.ts 43 @@ -2673,6 +2679,7 @@ See Bitcoin feerates visualized over time, including minimum and maximum feerates per block along with feerates at various percentiles. + Veja as taxas de Bitcoin visualizadas ao longo do tempo, incluindo taxas mínimas e máximas por bloco, juntamente com taxas em vários percentis. src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts 73 @@ -2697,6 +2704,7 @@ See the average mining fees earned per Bitcoin block visualized in BTC and USD over time. + Veja as taxas médias de mineração ganhas por bloco Bitcoin visualizadas em BTC e USD ao longo do tempo. src/app/components/block-fees-graph/block-fees-graph.component.ts 70 @@ -2740,6 +2748,7 @@ Block Fees Vs Subsidy + Taxas dos blocos versus subsídio src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.html 6 @@ -2756,6 +2765,7 @@ See the mining fees earned per Bitcoin block compared to the Bitcoin block subsidy, visualized in BTC and USD over time. + Veja as taxas de mineração ganhas por bloco Bitcoin em comparação com o subsídio do bloco Bitcoin, visualizadas em BTC e USD ao longo do tempo. src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts 79 @@ -2779,6 +2789,7 @@ select filter categories to highlight matching transactions + selecione categorias de filtro para destacar as transações correspondentes src/app/components/block-filters/block-filters.component.html 2 @@ -2812,7 +2823,7 @@ Match - Selecionar + Confere src/app/components/block-filters/block-filters.component.html 19 @@ -2882,6 +2893,7 @@ 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. + Veja a integridade do bloco Bitcoin visualizada ao longo do tempo. A integridade do bloco é uma medida de quantas transações esperadas foram incluídas em um bloco minado de fato. As transações esperadas são determinadas usando a reimplementação do algoritmo de seleção de transações do Bitcoin Core pelo Mempool. src/app/components/block-health-graph/block-health-graph.component.ts 64 @@ -3216,6 +3228,7 @@ See Bitcoin block rewards in BTC and USD visualized over time. Block rewards are the total funds miners earn from the block subsidy and fees. + Veja as recompensas do bloco Bitcoin em BTC e USD visualizadas ao longo do tempo. As recompensas do bloco são o total de fundos que os mineradores ganham com os subsídios e taxas do bloco. src/app/components/block-rewards-graph/block-rewards-graph.component.ts 68 @@ -3240,6 +3253,7 @@ See Bitcoin block sizes (MB) and block weights (weight units) visualized over time. + Veja os tamanhos dos blocos Bitcoin (MB) e os pesos dos blocos (unidades de peso) visualizados ao longo do tempo. src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts 65 @@ -3363,6 +3377,7 @@ See size, weight, fee range, included transactions, and more for Liquid block (). + Veja tamanho, peso, faixa de taxas, transações incluídas e muito mais para o bloco Liquid (). src/app/components/block-view/block-view.component.ts 112 @@ -3378,6 +3393,7 @@ See size, weight, fee range, included transactions, audit (expected v actual), and more for Bitcoin block (). + Veja tamanho, peso, faixa de taxas, transações incluídas, auditoria (esperada x real) e muito mais para Bitcoin bloco ( ). src/app/components/block-view/block-view.component.ts 114 @@ -4109,6 +4125,7 @@ See the most recent Liquid blocks along with basic stats such as block height, block size, and more. + Veja os blocos Liquid mais recentes junto com estatísticas básicas, como altura e tamanho do bloco e muito mais. src/app/components/blocks-list/blocks-list.component.ts 71 @@ -4116,6 +4133,7 @@ See the most recent Bitcoin blocks along with basic stats such as block height, block reward, block size, and more. + Veja os blocos Bitcoin mais recentes junto com estatísticas básicas, como altura do bloco, recompensa do bloco, tamanho do bloco e muito mais. src/app/components/blocks-list/blocks-list.component.ts 73 @@ -4409,6 +4427,7 @@ X Timeline + Linha do Tempo no 𝕏 src/app/components/custom-dashboard/custom-dashboard.component.html 265 @@ -5097,6 +5116,7 @@ See hashrate and difficulty for the Bitcoin network visualized over time. + Veja o hashrate e a dificuldade da rede Bitcoin visualizados ao longo do tempo. src/app/components/hashrate-chart/hashrate-chart.component.ts 76 @@ -5124,6 +5144,7 @@ See Bitcoin mining pool dominance visualized over time: see how top mining pools' share of total hashrate has fluctuated over time. + Veja o domínio do pool de mineração de Bitcoin visualizado ao longo do tempo: veja como a participação dos principais pools de mineração no hashrate total flutuou ao longo do tempo. src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts 75 @@ -5237,6 +5258,7 @@ Non-Dust Expired + Poeira Expirada src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 3 @@ -5245,6 +5267,7 @@ Total amount of BTC held in non-dust Federation UTXOs that have expired timelocks + Quantidade total de BTC mantidos em UTXOs da Federação sem poeira que têm timelocks expirados src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 5 @@ -5279,6 +5302,7 @@ Total amount of BTC held in Federation UTXOs that have expired timelocks + Quantidade total de BTC mantidos em UTXOs da Federação que possuem timelocks expirados src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.html 15 @@ -5388,6 +5412,7 @@ Timelock-Expired UTXOs + UTXOs expirados por timelock src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.html 12 @@ -5442,6 +5467,7 @@ Fund / Redemption Tx + Tx de Depósito/Resgate src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html 15 @@ -5459,6 +5485,7 @@ Peg out in progress... + Peg out em andamento... src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.html 70 @@ -5467,6 +5494,7 @@ 24h Peg-In Volume + Volume de Peg-In 24h src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html 12 @@ -5484,6 +5512,7 @@ 24h Peg-Out Volume + Volume de Peg-Out 24h src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.html 18 @@ -5510,6 +5539,7 @@ Number of times that the Federation's BTC holdings fall below 95% of the total L-BTC supply + Número de vezes que as participações de BTC da Federação caem abaixo de 95% do fornecimento total de L-BTC src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 6 @@ -5527,6 +5557,7 @@ Avg Peg Ratio + Razão Média de Peg src/app/components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component.html 14 @@ -5561,7 +5592,7 @@ L-BTC in circulation - L-BTC em circulação + L-BTC circulando src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.html 3 @@ -5626,6 +5657,7 @@ See stats for transactions in the mempool: fee range, aggregate size, and more. Mempool blocks are updated in real-time as the network receives new transactions. + Veja estatísticas de transações no mempool: faixa de taxas, tamanho agregado e muito mais. Os blocos no mempool são atualizados em tempo real à medida que a rede recebe novas transações. src/app/components/mempool-block/mempool-block.component.ts 62 @@ -5721,6 +5753,7 @@ Get real-time Bitcoin mining stats like hashrate, difficulty adjustment, block rewards, pool dominance, and more. + Obtenha estatísticas de mineração de Bitcoin em tempo real, como hashrate, ajuste de dificuldade, recompensas de bloco, domínio de pool e muito mais. src/app/components/mining-dashboard/mining-dashboard.component.ts 30 @@ -5905,6 +5938,7 @@ See the top Bitcoin mining pools ranked by number of blocks mined, over your desired timeframe. + Veja os principais pools de mineração de Bitcoin classificados por número de blocos minerados, durante o período desejado. src/app/components/pool-ranking/pool-ranking.component.ts 60 @@ -5998,6 +6032,7 @@ See mining pool stats for : most recent mined blocks, hashrate over time, total block reward to date, known coinbase addresses, and more. + Veja as estatísticas do pool de mineração : blocos minerados mais recentes, taxa de hash ao longo do tempo, recompensa total do bloco até o momento, endereços de coinbase conhecidos e muito mais. src/app/components/pool/pool-preview.component.ts 86 @@ -6202,6 +6237,7 @@ Broadcast a transaction to the network using the transaction's hash. + Transmita uma transação para a rede usando o hash da transação. src/app/components/push-transaction/push-transaction.component.ts 39 @@ -6231,6 +6267,7 @@ See the most recent RBF replacements on the Bitcoin network, updated in real-time. + Veja as substituições de RBF mais recentes na rede Bitcoin, atualizadas em tempo real. src/app/components/rbf-list/rbf-list.component.ts 62 @@ -6553,6 +6590,7 @@ See mempool size (in MvB) and transactions per second (in vB/s) visualized over time. + Veja o tamanho do mempool (em MvB) e as transações por segundo (em vB/s) visualizadas ao longo do tempo. src/app/components/statistics/statistics.component.ts 66 @@ -6560,6 +6598,7 @@ See Bitcoin blocks and mempool congestion in real-time in a simplified format perfect for a TV. + Veja blocos de Bitcoin e congestionamento da mempool em tempo real em um formato simplificado, perfeito para uma TV. src/app/components/television/television.component.ts 40 @@ -6621,6 +6660,7 @@ Rejection reason + Motivo da rejeição src/app/components/test-transactions/test-transactions.component.html 26 @@ -6833,7 +6873,7 @@ After - Depois de + Depois de src/app/components/time/time.component.ts 234 @@ -6893,6 +6933,7 @@ before + antes src/app/components/time/time.component.ts 257 @@ -7118,6 +7159,7 @@ Get real-time status, addresses, fees, script info, and more for transaction with txid . + Obtenha status em tempo real, endereços, taxas, informações de script e muito mais para transações com txid . src/app/components/tracker/tracker.component.ts 410 @@ -7247,7 +7289,7 @@ Inputs & Outputs - Entradas & Saídas + Entradas e Saídas src/app/components/transaction/transaction.component.html 218 @@ -7289,6 +7331,7 @@ Sigops + Sigops src/app/components/transaction/transaction.component.html 273 @@ -7343,6 +7386,7 @@ This transaction was projected to be included in the block + Esta transação foi projetada para ser incluída no bloco src/app/components/transaction/transaction.component.html 520 @@ -7361,6 +7405,7 @@ This transaction was seen in the mempool prior to mining + Esta transação foi vista na mempool antes da mineração src/app/components/transaction/transaction.component.html 522 @@ -7379,6 +7424,7 @@ This transaction was missing from our mempool prior to mining + Esta transação estava faltando em nossa mempool antes da mineração src/app/components/transaction/transaction.component.html 524 @@ -7793,6 +7839,7 @@ Liquid Federation Holdings + Holdings da Liquid Federation src/app/dashboard/dashboard.component.html 165 @@ -7805,6 +7852,7 @@ Federation Timelock-Expired UTXOs + UTXOs expirados por timelock da Federação src/app/dashboard/dashboard.component.html 174 @@ -7817,6 +7865,7 @@ L-BTC Supply Against BTC Holdings + Oferta de L-BTC contra holdings BTC src/app/dashboard/dashboard.component.html 184 @@ -7846,6 +7895,7 @@ mempool.space merely provides data about the Bitcoin network. It cannot help you with retrieving funds, wallet issues, etc.For any such requests, you need to get in touch with the entity that helped make the transaction (wallet software, exchange company, etc). + mempool.space apenas fornece dados sobre a rede Bitcoin. Ele não pode ajudá-lo a recuperar fundos, problemas de carteira etc.Para qualquer solicitação desse tipo, você precisa entrar em contato com a entidade que ajudou a fazer a transação (software de carteira, corretora, etc.). src/app/docs/api-docs/api-docs.component.html 15,16 @@ -7948,6 +7998,7 @@ Get answers to common questions like: What is a mempool? Why isn't my transaction confirming? How can I run my own instance of The Mempool Open Source Project? And more. + Obtenha respostas para perguntas comuns como: O que é um mempool? Por que minha transação não está sendo confirmada? Como posso executar minha própria instância do The Mempool Open Source Project? E mais. src/app/docs/docs/docs.component.ts 47 @@ -7963,6 +8014,7 @@ Documentation for the liquid.network REST API service: get info on addresses, transactions, assets, blocks, and more. + Documentação para o serviço API REST liquid.network: obtenha informações sobre endereços, transações, ativos, blocos e muito mais. src/app/docs/docs/docs.component.ts 53 @@ -7970,6 +8022,7 @@ Documentation for the mempool.space REST API service: get info on addresses, transactions, blocks, fees, mining, the Lightning network, and more. + Documentação para o serviço REST API mempool.space: obtenha informações sobre endereços, transações, blocos, taxas, mineração, rede Lightning e muito mais. src/app/docs/docs/docs.component.ts 55 @@ -7985,6 +8038,7 @@ Documentation for the liquid.network WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + Documentação para o serviço API WebSocket liquid.network: obtenha informações em tempo real sobre blocos, mempools, transações, endereços e muito mais. src/app/docs/docs/docs.component.ts 61 @@ -7992,6 +8046,7 @@ Documentation for the mempool.space WebSocket API service: get real-time info on blocks, mempools, transactions, addresses, and more. + Documentação para o serviço API WebSocket mempool.space: obtenha informações em tempo real sobre blocos, mempools, transações, endereços e muito mais. src/app/docs/docs/docs.component.ts 63 @@ -8007,6 +8062,7 @@ Documentation for our Electrum RPC interface: get instant, convenient, and reliable access to an Esplora instance. + Documentação para nossa interface Electrum RPC: obtenha acesso instantâneo, conveniente e confiável a uma instância Esplora. src/app/docs/docs/docs.component.ts 68 @@ -8323,6 +8379,7 @@ Overview for Lightning channel . See channel capacity, the Lightning nodes involved, related on-chain transactions, and more. + Visão geral do canal Lightning . Veja a capacidade do canal, os nós do Lightning envolvidos, as transações relacionadas on-chain e muito mais. src/app/lightning/channel/channel-preview.component.ts 37 @@ -8950,6 +9007,7 @@ Get stats on the Lightning network (aggregate capacity, connectivity, etc), Lightning nodes (channels, liquidity, etc) and Lightning channels (status, fees, etc). + Obtenha estatísticas sobre a rede Lightning (capacidade agregada, conectividade, etc.), nós Lightning (canais, liquidez, etc.) e canais Lightning (status, taxas, etc.). src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts 34 @@ -9059,6 +9117,7 @@ Overview for the Lightning network node named . See channels, capacity, location, fee stats, and more. + Visão geral do nó da rede Lightning denominado . Veja canais, capacidade, localização, estatísticas de taxas e muito mais. src/app/lightning/node/node-preview.component.ts 52 @@ -9258,6 +9317,7 @@ See the channels of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + Veja os canais de nós da rede não-Tor Lightning visualizados em um mapa mundial. Passe o mouse/toque nos pontos do mapa para obter nomes e detalhes dos nós. src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts 74 @@ -9282,6 +9342,7 @@ See the locations of non-Tor Lightning network nodes visualized on a world map. Hover/tap on points on the map for node names and details. + Veja as localizações dos nós da rede não-Tor Lightning visualizados em um mapa mundial. Passe o mouse/toque nos pontos do mapa para obter nomes e detalhes dos nós. src/app/lightning/nodes-map/nodes-map.component.ts 52 @@ -9289,6 +9350,7 @@ See the number of Lightning network nodes visualized over time by network: clearnet only (IPv4, IPv6), darknet (Tor, I2p, cjdns), and both. + Veja o número de nós da rede Lightning visualizados ao longo do tempo por rede: somente clearnet (IPv4, IPv6), darknet (Tor, I2p, cjdns) e ambos. src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts 74 @@ -9344,7 +9406,7 @@ Share - Compartilhar + Cota src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html 29 @@ -9357,6 +9419,7 @@ See a geographical breakdown of the Lightning network: how many Lightning nodes are hosted in countries around the world, aggregate BTC capacity for each country, and more. + Veja um detalhamento geográfico da rede Lightning: quantos nós Lightning estão hospedados em países ao redor do mundo, capacidade agregada de BTC para cada país e muito mais. src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts 47 @@ -9427,6 +9490,7 @@ Explore all the Lightning nodes hosted in and see an overview of each node's capacity, number of open channels, and more. + Explore todos os nós do Lightning hospedados em e tenha uma visão geral da capacidade de cada nó, número de canais abertos e muito mais. src/app/lightning/nodes-per-country/nodes-per-country.component.ts 44 @@ -9509,6 +9573,7 @@ Browse the top 100 ISPs hosting Lightning nodes along with stats like total number of nodes per ISP, aggregate BTC capacity per ISP, and more + Navegue pelos 100 principais provedores que hospedam nós Lightning junto com estatísticas como número total de nós por provedor, capacidade agregada de BTC por provedor e muito mais src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts 54 @@ -9571,6 +9636,7 @@ Browse all Bitcoin Lightning nodes using the [AS] ISP and see aggregate stats like total number of nodes, total capacity, and more for the ISP. + Navegue por todos os nós Bitcoin Lightning usando o provedor [AS] e veja estatísticas agregadas, como número total de nós, capacidade total, e muito mais para o provedor. src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts 45 @@ -9626,6 +9692,7 @@ See the oldest nodes on the Lightning network along with their capacity, number of channels, location, etc. + Veja os nós mais antigos da rede Lightning junto com sua capacidade, número de canais, localização, etc. src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts 28 @@ -9633,6 +9700,7 @@ See Lightning nodes with the most BTC liquidity deployed along with high-level stats like number of open channels, location, node age, and more. + Veja os nós do Lightning com a maior liquidez BTC implantada, juntamente com estatísticas de alto nível, como número de canais abertos, localização, idade do nó e muito mais. src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts 35 @@ -9640,6 +9708,7 @@ See Lightning nodes with the most channels open along with high-level stats like total node capacity, node age, and more. + Veja os nós do Lightning com o maior número de canais abertos, juntamente com estatísticas de alto nível, como capacidade total do nó, idade do nó e muito mais. src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts 39 @@ -9664,6 +9733,7 @@ See the top Lightning network nodes ranked by liquidity, connectivity, and age. + Veja os principais nós da rede Lightning classificados por liquidez, conectividade e idade. src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts 23 @@ -9671,6 +9741,7 @@ See the capacity of the Lightning network visualized over time in terms of the number of open channels and total bitcoin capacity. + Veja a capacidade da rede Lightning visualizada ao longo do tempo em termos de número de canais abertos e capacidade total de bitcoin. src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts 71 @@ -9696,6 +9767,7 @@ provably unspendable + comprovadamente impossível de gastar src/app/shared/components/address-type/address-type.component.html 18 @@ -9704,6 +9776,7 @@ bare multisig + multisig simples src/app/shared/components/address-type/address-type.component.html 21 diff --git a/frontend/src/locale/messages.ru.xlf b/frontend/src/locale/messages.ru.xlf index 82b63285f..b2c7867ad 100644 --- a/frontend/src/locale/messages.ru.xlf +++ b/frontend/src/locale/messages.ru.xlf @@ -645,7 +645,7 @@ This will reduce your expected waiting time until the first confirmation to - Это сократит время ожидания до первого подтверждения на + Это сократит время ожидания до первого подтверждения src/app/components/accelerate-checkout/accelerate-checkout.component.html 76,77 @@ -6813,7 +6813,7 @@ within ~ - в пределах ~ + примерно на src/app/components/time/time.component.ts 211 diff --git a/frontend/src/resources/apple-pay.png b/frontend/src/resources/apple-pay.png new file mode 100644 index 000000000..3c446c698 Binary files /dev/null and b/frontend/src/resources/apple-pay.png differ diff --git a/frontend/src/resources/apple-pay.svg b/frontend/src/resources/apple-pay.svg deleted file mode 100755 index 0c6ecafef..000000000 --- a/frontend/src/resources/apple-pay.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/frontend/src/resources/google-pay.png b/frontend/src/resources/google-pay.png new file mode 100644 index 000000000..a44046d37 Binary files /dev/null and b/frontend/src/resources/google-pay.png differ