Merge branch 'master' into mononaut/mobile-chain-jumping

This commit is contained in:
Felipe Knorr Kuhn 2023-02-19 14:00:10 -08:00 committed by GitHub
commit 0e0acff00f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
104 changed files with 3171 additions and 1737 deletions

View file

@ -218,3 +218,21 @@ Generate block at regular interval (every 10 seconds in this example):
```
watch -n 10 "./src/bitcoin-cli -regtest -rpcport=8332 generatetoaddress 1 $address"
```
### Re-index tables
You can manually force the nodejs backend to drop all data from a specified set of tables for future re-index. This is mostly useful for the mining dashboard and the lightning explorer.
Use the `--reindex` command to specify a list of comma separated table which will be truncated at start. Note that a 5 seconds delay will be observed before truncating tables in order to give you a chance to cancel (CTRL+C) in case of misuse of the command.
Usage:
```
npm run start --reindex=blocks,hashrates
```
Example output:
```
Feb 13 14:55:27 [63246] WARN: <lightning> Indexed data for "hashrates" tables will be erased in 5 seconds (using '--reindex')
Feb 13 14:55:32 [63246] NOTICE: <lightning> Table hashrates has been truncated
```
Reference: https://github.com/mempool/mempool/pull/1269

View file

@ -15,7 +15,6 @@
"MEMPOOL_BLOCKS_AMOUNT": 8,
"INDEXING_BLOCKS_AMOUNT": 11000,
"BLOCKS_SUMMARIES_INDEXING": false,
"PRICE_FEED_UPDATE_INTERVAL": 600,
"USE_SECOND_NODE_FOR_MINFEE": false,
"EXTERNAL_ASSETS": [],
"EXTERNAL_MAX_RETRY": 1,
@ -25,6 +24,7 @@
"AUTOMATIC_BLOCK_REINDEXING": false,
"POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools.json",
"POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master",
"AUDIT": false,
"ADVANCED_GBT_AUDIT": false,
"ADVANCED_GBT_MEMPOOL": false,
"CPFP_INDEXING": false

View file

@ -16,7 +16,6 @@
"BLOCK_WEIGHT_UNITS": 6,
"INITIAL_BLOCKS_AMOUNT": 7,
"MEMPOOL_BLOCKS_AMOUNT": 8,
"PRICE_FEED_UPDATE_INTERVAL": 9,
"USE_SECOND_NODE_FOR_MINFEE": 10,
"EXTERNAL_ASSETS": 11,
"EXTERNAL_MAX_RETRY": 12,
@ -26,6 +25,7 @@
"INDEXING_BLOCKS_AMOUNT": 14,
"POOLS_JSON_TREE_URL": "__POOLS_JSON_TREE_URL__",
"POOLS_JSON_URL": "__POOLS_JSON_URL__",
"AUDIT": "__MEMPOOL_AUDIT__",
"ADVANCED_GBT_AUDIT": "__MEMPOOL_ADVANCED_GBT_AUDIT__",
"ADVANCED_GBT_MEMPOOL": "__MEMPOOL_ADVANCED_GBT_MEMPOOL__",
"CPFP_INDEXING": "__MEMPOOL_CPFP_INDEXING__"

View file

@ -29,7 +29,6 @@ describe('Mempool Backend Config', () => {
INITIAL_BLOCKS_AMOUNT: 8,
MEMPOOL_BLOCKS_AMOUNT: 8,
INDEXING_BLOCKS_AMOUNT: 11000,
PRICE_FEED_UPDATE_INTERVAL: 600,
USE_SECOND_NODE_FOR_MINFEE: false,
EXTERNAL_ASSETS: [],
EXTERNAL_MAX_RETRY: 1,
@ -38,6 +37,7 @@ describe('Mempool Backend Config', () => {
STDOUT_LOG_MIN_PRIORITY: 'debug',
POOLS_JSON_TREE_URL: 'https://api.github.com/repos/mempool/mining-pools/git/trees/master',
POOLS_JSON_URL: 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools.json',
AUDIT: false,
ADVANCED_GBT_AUDIT: false,
ADVANCED_GBT_MEMPOOL: false,
CPFP_INDEXING: false,

View file

@ -1,8 +1,13 @@
import config from '../../config';
import axios, { AxiosRequestConfig } from 'axios';
import http from 'http';
import { AbstractBitcoinApi } from './bitcoin-api-abstract-factory';
import { IEsploraApi } from './esplora-api.interface';
const axiosConnection = axios.create({
httpAgent: new http.Agent({ keepAlive: true })
});
class ElectrsApi implements AbstractBitcoinApi {
axiosConfig: AxiosRequestConfig = {
timeout: 10000,
@ -11,52 +16,52 @@ class ElectrsApi implements AbstractBitcoinApi {
constructor() { }
$getRawMempool(): Promise<IEsploraApi.Transaction['txid'][]> {
return axios.get<IEsploraApi.Transaction['txid'][]>(config.ESPLORA.REST_API_URL + '/mempool/txids', this.axiosConfig)
return axiosConnection.get<IEsploraApi.Transaction['txid'][]>(config.ESPLORA.REST_API_URL + '/mempool/txids', this.axiosConfig)
.then((response) => response.data);
}
$getRawTransaction(txId: string): Promise<IEsploraApi.Transaction> {
return axios.get<IEsploraApi.Transaction>(config.ESPLORA.REST_API_URL + '/tx/' + txId, this.axiosConfig)
return axiosConnection.get<IEsploraApi.Transaction>(config.ESPLORA.REST_API_URL + '/tx/' + txId, this.axiosConfig)
.then((response) => response.data);
}
$getTransactionHex(txId: string): Promise<string> {
return axios.get<string>(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/hex', this.axiosConfig)
return axiosConnection.get<string>(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/hex', this.axiosConfig)
.then((response) => response.data);
}
$getBlockHeightTip(): Promise<number> {
return axios.get<number>(config.ESPLORA.REST_API_URL + '/blocks/tip/height', this.axiosConfig)
return axiosConnection.get<number>(config.ESPLORA.REST_API_URL + '/blocks/tip/height', this.axiosConfig)
.then((response) => response.data);
}
$getBlockHashTip(): Promise<string> {
return axios.get<string>(config.ESPLORA.REST_API_URL + '/blocks/tip/hash', this.axiosConfig)
return axiosConnection.get<string>(config.ESPLORA.REST_API_URL + '/blocks/tip/hash', this.axiosConfig)
.then((response) => response.data);
}
$getTxIdsForBlock(hash: string): Promise<string[]> {
return axios.get<string[]>(config.ESPLORA.REST_API_URL + '/block/' + hash + '/txids', this.axiosConfig)
return axiosConnection.get<string[]>(config.ESPLORA.REST_API_URL + '/block/' + hash + '/txids', this.axiosConfig)
.then((response) => response.data);
}
$getBlockHash(height: number): Promise<string> {
return axios.get<string>(config.ESPLORA.REST_API_URL + '/block-height/' + height, this.axiosConfig)
return axiosConnection.get<string>(config.ESPLORA.REST_API_URL + '/block-height/' + height, this.axiosConfig)
.then((response) => response.data);
}
$getBlockHeader(hash: string): Promise<string> {
return axios.get<string>(config.ESPLORA.REST_API_URL + '/block/' + hash + '/header', this.axiosConfig)
return axiosConnection.get<string>(config.ESPLORA.REST_API_URL + '/block/' + hash + '/header', this.axiosConfig)
.then((response) => response.data);
}
$getBlock(hash: string): Promise<IEsploraApi.Block> {
return axios.get<IEsploraApi.Block>(config.ESPLORA.REST_API_URL + '/block/' + hash, this.axiosConfig)
return axiosConnection.get<IEsploraApi.Block>(config.ESPLORA.REST_API_URL + '/block/' + hash, this.axiosConfig)
.then((response) => response.data);
}
$getRawBlock(hash: string): Promise<Buffer> {
return axios.get<string>(config.ESPLORA.REST_API_URL + '/block/' + hash + "/raw", { ...this.axiosConfig, responseType: 'arraybuffer' })
return axiosConnection.get<string>(config.ESPLORA.REST_API_URL + '/block/' + hash + "/raw", { ...this.axiosConfig, responseType: 'arraybuffer' })
.then((response) => { return Buffer.from(response.data); });
}
@ -77,12 +82,12 @@ class ElectrsApi implements AbstractBitcoinApi {
}
$getOutspend(txId: string, vout: number): Promise<IEsploraApi.Outspend> {
return axios.get<IEsploraApi.Outspend>(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/outspend/' + vout, this.axiosConfig)
return axiosConnection.get<IEsploraApi.Outspend>(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/outspend/' + vout, this.axiosConfig)
.then((response) => response.data);
}
$getOutspends(txId: string): Promise<IEsploraApi.Outspend[]> {
return axios.get<IEsploraApi.Outspend[]>(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/outspends', this.axiosConfig)
return axiosConnection.get<IEsploraApi.Outspend[]>(config.ESPLORA.REST_API_URL + '/tx/' + txId + '/outspends', this.axiosConfig)
.then((response) => response.data);
}

View file

@ -17,7 +17,6 @@ import { prepareBlock } from '../utils/blocks-utils';
import BlocksRepository from '../repositories/BlocksRepository';
import HashratesRepository from '../repositories/HashratesRepository';
import indexer from '../indexer';
import fiatConversion from './fiat-conversion';
import poolsParser from './pools-parser';
import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository';
import BlocksAuditsRepository from '../repositories/BlocksAuditsRepository';
@ -170,7 +169,7 @@ class Blocks {
blockExtended.extras.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0);
blockExtended.extras.coinbaseTx = transactionUtils.stripCoinbaseTransaction(transactions[0]);
blockExtended.extras.coinbaseRaw = blockExtended.extras.coinbaseTx.vin[0].scriptsig;
blockExtended.extras.usd = fiatConversion.getConversionRates().USD;
blockExtended.extras.usd = priceUpdater.latestPrices.USD;
if (block.height === 0) {
blockExtended.extras.medianFee = 0; // 50th percentiles
@ -212,9 +211,11 @@ class Blocks {
};
}
const auditScore = await BlocksAuditsRepository.$getBlockAuditScore(block.id);
if (auditScore != null) {
blockExtended.extras.matchRate = auditScore.matchRate;
if (config.MEMPOOL.AUDIT) {
const auditScore = await BlocksAuditsRepository.$getBlockAuditScore(block.id);
if (auditScore != null) {
blockExtended.extras.matchRate = auditScore.matchRate;
}
}
}
@ -599,9 +600,11 @@ class Blocks {
* Index a block if it's missing from the database. Returns the block after indexing
*/
public async $indexBlock(height: number): Promise<BlockExtended> {
const dbBlock = await blocksRepository.$getBlockByHeight(height);
if (dbBlock != null) {
return prepareBlock(dbBlock);
if (Common.indexingEnabled()) {
const dbBlock = await blocksRepository.$getBlockByHeight(height);
if (dbBlock !== null) {
return prepareBlock(dbBlock);
}
}
const blockHash = await bitcoinApi.$getBlockHash(height);
@ -609,7 +612,9 @@ class Blocks {
const transactions = await this.$getTransactionsExtended(blockHash, block.height, true);
const blockExtended = await this.$getBlockExtended(block, transactions);
await blocksRepository.$saveBlockInDatabase(blockExtended);
if (Common.indexingEnabled()) {
await blocksRepository.$saveBlockInDatabase(blockExtended);
}
return prepareBlock(blockExtended);
}
@ -713,7 +718,7 @@ class Blocks {
block = await this.$indexBlock(currentHeight);
returnBlocks.push(block);
} else if (nextHash != null) {
block = prepareBlock(await bitcoinClient.getBlock(nextHash));
block = await this.$indexBlock(currentHeight);
nextHash = block.previousblockhash;
returnBlocks.push(block);
}

View file

@ -1,123 +0,0 @@
import logger from '../logger';
import * as http from 'http';
import * as https from 'https';
import axios, { AxiosResponse } from 'axios';
import { IConversionRates } from '../mempool.interfaces';
import config from '../config';
import backendInfo from './backend-info';
import { SocksProxyAgent } from 'socks-proxy-agent';
class FiatConversion {
private debasingFiatCurrencies = ['AED', 'AUD', 'BDT', 'BHD', 'BMD', 'BRL', 'CAD', 'CHF', 'CLP',
'CNY', 'CZK', 'DKK', 'EUR', 'GBP', 'HKD', 'HUF', 'IDR', 'ILS', 'INR', 'JPY', 'KRW', 'KWD',
'LKR', 'MMK', 'MXN', 'MYR', 'NGN', 'NOK', 'NZD', 'PHP', 'PKR', 'PLN', 'RUB', 'SAR', 'SEK',
'SGD', 'THB', 'TRY', 'TWD', 'UAH', 'USD', 'VND', 'ZAR'];
private conversionRates: IConversionRates = {};
private ratesChangedCallback: ((rates: IConversionRates) => void) | undefined;
public ratesInitialized = false; // If true, it means rates are ready for use
constructor() {
for (const fiat of this.debasingFiatCurrencies) {
this.conversionRates[fiat] = 0;
}
}
public setProgressChangedCallback(fn: (rates: IConversionRates) => void) {
this.ratesChangedCallback = fn;
}
public startService() {
const fiatConversionUrl = (config.SOCKS5PROXY.ENABLED === true) && (config.SOCKS5PROXY.USE_ONION === true) ? config.PRICE_DATA_SERVER.TOR_URL : config.PRICE_DATA_SERVER.CLEARNET_URL;
logger.info('Starting currency rates service');
if (config.SOCKS5PROXY.ENABLED) {
logger.info(`Currency rates service will be queried over the Tor network using ${fiatConversionUrl}`);
} else {
logger.info(`Currency rates service will be queried over clearnet using ${config.PRICE_DATA_SERVER.CLEARNET_URL}`);
}
setInterval(this.updateCurrency.bind(this), 1000 * config.MEMPOOL.PRICE_FEED_UPDATE_INTERVAL);
this.updateCurrency();
}
public getConversionRates() {
return this.conversionRates;
}
private async updateCurrency(): Promise<void> {
type axiosOptions = {
headers: {
'User-Agent': string
};
timeout: number;
httpAgent?: http.Agent;
httpsAgent?: https.Agent;
}
const setDelay = (secs: number = 1): Promise<void> => new Promise(resolve => setTimeout(() => resolve(), secs * 1000));
const fiatConversionUrl = (config.SOCKS5PROXY.ENABLED === true) && (config.SOCKS5PROXY.USE_ONION === true) ? config.PRICE_DATA_SERVER.TOR_URL : config.PRICE_DATA_SERVER.CLEARNET_URL;
const isHTTP = (new URL(fiatConversionUrl).protocol.split(':')[0] === 'http') ? true : false;
const axiosOptions: axiosOptions = {
headers: {
'User-Agent': (config.MEMPOOL.USER_AGENT === 'mempool') ? `mempool/v${backendInfo.getBackendInfo().version}` : `${config.MEMPOOL.USER_AGENT}`
},
timeout: config.SOCKS5PROXY.ENABLED ? 30000 : 10000
};
let retry = 0;
while(retry < config.MEMPOOL.EXTERNAL_MAX_RETRY) {
try {
if (config.SOCKS5PROXY.ENABLED) {
let socksOptions: any = {
agentOptions: {
keepAlive: true,
},
hostname: config.SOCKS5PROXY.HOST,
port: config.SOCKS5PROXY.PORT
};
if (config.SOCKS5PROXY.USERNAME && config.SOCKS5PROXY.PASSWORD) {
socksOptions.username = config.SOCKS5PROXY.USERNAME;
socksOptions.password = config.SOCKS5PROXY.PASSWORD;
} else {
// Retry with different tor circuits https://stackoverflow.com/a/64960234
socksOptions.username = `circuit${retry}`;
}
// Handle proxy agent for onion addresses
if (isHTTP) {
axiosOptions.httpAgent = new SocksProxyAgent(socksOptions);
} else {
axiosOptions.httpsAgent = new SocksProxyAgent(socksOptions);
}
}
logger.debug('Querying currency rates service...');
const response: AxiosResponse = await axios.get(`${fiatConversionUrl}`, axiosOptions);
if (response.statusText === 'error' || !response.data) {
throw new Error(`Could not fetch data from ${fiatConversionUrl}, Error: ${response.status}`);
}
for (const rate of response.data.data) {
if (this.debasingFiatCurrencies.includes(rate.currencyCode) && rate.provider === 'Bisq-Aggregate') {
this.conversionRates[rate.currencyCode] = Math.round(100 * rate.price) / 100;
}
}
this.ratesInitialized = true;
logger.debug(`USD Conversion Rate: ${this.conversionRates.USD}`);
if (this.ratesChangedCallback) {
this.ratesChangedCallback(this.conversionRates);
}
break;
} catch (e) {
logger.err('Error updating fiat conversion rates: ' + (e instanceof Error ? e.message : e));
await setDelay(config.MEMPOOL.EXTERNAL_RETRY_INTERVAL);
retry++;
}
}
}
}
export default new FiatConversion();

View file

@ -33,7 +33,7 @@ class MempoolBlocks {
return this.mempoolBlockDeltas;
}
public updateMempoolBlocks(memPool: { [txid: string]: TransactionExtended }): void {
public updateMempoolBlocks(memPool: { [txid: string]: TransactionExtended }, saveResults: boolean = false): MempoolBlockWithTransactions[] {
const latestMempool = memPool;
const memPoolArray: TransactionExtended[] = [];
for (const i in latestMempool) {
@ -75,10 +75,14 @@ class MempoolBlocks {
logger.debug('Mempool blocks calculated in ' + time / 1000 + ' seconds');
const blocks = this.calculateMempoolBlocks(memPoolArray, this.mempoolBlocks);
const deltas = this.calculateMempoolDeltas(this.mempoolBlocks, blocks);
this.mempoolBlocks = blocks;
this.mempoolBlockDeltas = deltas;
if (saveResults) {
const deltas = this.calculateMempoolDeltas(this.mempoolBlocks, blocks);
this.mempoolBlocks = blocks;
this.mempoolBlockDeltas = deltas;
}
return blocks;
}
private calculateMempoolBlocks(transactionsSorted: TransactionExtended[], prevBlocks: MempoolBlockWithTransactions[]): MempoolBlockWithTransactions[] {
@ -143,7 +147,7 @@ class MempoolBlocks {
return mempoolBlockDeltas;
}
public async makeBlockTemplates(newMempool: { [txid: string]: TransactionExtended }): Promise<void> {
public async makeBlockTemplates(newMempool: { [txid: string]: TransactionExtended }, saveResults: boolean = false): Promise<MempoolBlockWithTransactions[]> {
// prepare a stripped down version of the mempool with only the minimum necessary data
// to reduce the overhead of passing this data to the worker thread
const strippedMempool: { [txid: string]: ThreadTransaction } = {};
@ -184,19 +188,21 @@ class MempoolBlocks {
this.txSelectionWorker.postMessage({ type: 'set', mempool: strippedMempool });
const { blocks, clusters } = await workerResultPromise;
this.processBlockTemplates(newMempool, blocks, clusters);
// clean up thread error listener
this.txSelectionWorker?.removeListener('error', threadErrorListener);
return this.processBlockTemplates(newMempool, blocks, clusters, saveResults);
} catch (e) {
logger.err('makeBlockTemplates failed. ' + (e instanceof Error ? e.message : e));
}
return this.mempoolBlocks;
}
public async updateBlockTemplates(newMempool: { [txid: string]: TransactionExtended }, added: TransactionExtended[], removed: string[]): Promise<void> {
public async updateBlockTemplates(newMempool: { [txid: string]: TransactionExtended }, added: TransactionExtended[], removed: string[], saveResults: boolean = false): Promise<void> {
if (!this.txSelectionWorker) {
// need to reset the worker
return this.makeBlockTemplates(newMempool);
this.makeBlockTemplates(newMempool, saveResults);
return;
}
// prepare a stripped down version of the mempool with only the minimum necessary data
// to reduce the overhead of passing this data to the worker thread
@ -224,16 +230,16 @@ class MempoolBlocks {
this.txSelectionWorker.postMessage({ type: 'update', added: addedStripped, removed });
const { blocks, clusters } = await workerResultPromise;
this.processBlockTemplates(newMempool, blocks, clusters);
// clean up thread error listener
this.txSelectionWorker?.removeListener('error', threadErrorListener);
this.processBlockTemplates(newMempool, blocks, clusters, saveResults);
} catch (e) {
logger.err('updateBlockTemplates failed. ' + (e instanceof Error ? e.message : e));
}
}
private processBlockTemplates(mempool, blocks, clusters): void {
private processBlockTemplates(mempool, blocks, clusters, saveResults): MempoolBlockWithTransactions[] {
// update this thread's mempool with the results
blocks.forEach(block => {
block.forEach(tx => {
@ -278,10 +284,13 @@ class MempoolBlocks {
}).filter(tx => !!tx), undefined, undefined, blockIndex);
});
const deltas = this.calculateMempoolDeltas(this.mempoolBlocks, mempoolBlocks);
if (saveResults) {
const deltas = this.calculateMempoolDeltas(this.mempoolBlocks, mempoolBlocks);
this.mempoolBlocks = mempoolBlocks;
this.mempoolBlockDeltas = deltas;
}
this.mempoolBlocks = mempoolBlocks;
this.mempoolBlockDeltas = deltas;
return mempoolBlocks;
}
private dataToMempoolBlocks(transactions: TransactionExtended[],

View file

@ -127,7 +127,7 @@ class PoolsParser {
if (!equals(JSON.parse(existingPool.addresses), poolObj.addresses) || !equals(JSON.parse(existingPool.regexes), poolObj.regexes)) {
finalPoolDataUpdate.push(poolObj);
}
} else {
} else if (config.DATABASE.ENABLED) {
// Double check that if we're not just renaming a pool (same address same regex)
const [poolToRename]: any[] = await DB.query(`
SELECT * FROM pools

View file

@ -8,7 +8,6 @@ import blocks from './blocks';
import memPool from './mempool';
import backendInfo from './backend-info';
import mempoolBlocks from './mempool-blocks';
import fiatConversion from './fiat-conversion';
import { Common } from './common';
import loadingIndicators from './loading-indicators';
import config from '../config';
@ -19,6 +18,8 @@ import feeApi from './fee-api';
import BlocksAuditsRepository from '../repositories/BlocksAuditsRepository';
import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository';
import Audit from './audit';
import { deepClone } from '../utils/clone';
import priceUpdater from '../tasks/price-updater';
class WebsocketHandler {
private wss: WebSocket.Server | undefined;
@ -213,7 +214,7 @@ class WebsocketHandler {
'mempoolInfo': memPool.getMempoolInfo(),
'vBytesPerSecond': memPool.getVBytesPerSecond(),
'blocks': _blocks,
'conversions': fiatConversion.getConversionRates(),
'conversions': priceUpdater.latestPrices,
'mempool-blocks': mempoolBlocks.getMempoolBlocks(),
'transactions': memPool.getLatestTransactions(),
'backendInfo': backendInfo.getBackendInfo(),
@ -251,9 +252,9 @@ class WebsocketHandler {
}
if (config.MEMPOOL.ADVANCED_GBT_MEMPOOL) {
await mempoolBlocks.updateBlockTemplates(newMempool, newTransactions, deletedTransactions.map(tx => tx.txid));
await mempoolBlocks.updateBlockTemplates(newMempool, newTransactions, deletedTransactions.map(tx => tx.txid), true);
} else {
mempoolBlocks.updateMempoolBlocks(newMempool);
mempoolBlocks.updateMempoolBlocks(newMempool, true);
}
const mBlocks = mempoolBlocks.getMempoolBlocks();
@ -418,47 +419,51 @@ class WebsocketHandler {
const _memPool = memPool.getMempool();
if (config.MEMPOOL.ADVANCED_GBT_AUDIT) {
await mempoolBlocks.makeBlockTemplates(_memPool);
} else {
mempoolBlocks.updateMempoolBlocks(_memPool);
}
if (config.MEMPOOL.AUDIT) {
let projectedBlocks;
// template calculation functions have mempool side effects, so calculate audits using
// a cloned copy of the mempool if we're running a different algorithm for mempool updates
const auditMempool = (config.MEMPOOL.ADVANCED_GBT_AUDIT === config.MEMPOOL.ADVANCED_GBT_MEMPOOL) ? _memPool : deepClone(_memPool);
if (config.MEMPOOL.ADVANCED_GBT_AUDIT) {
projectedBlocks = await mempoolBlocks.makeBlockTemplates(auditMempool, false);
} else {
projectedBlocks = mempoolBlocks.updateMempoolBlocks(auditMempool, false);
}
if (Common.indexingEnabled() && memPool.isInSync()) {
const projectedBlocks = mempoolBlocks.getMempoolBlocksWithTransactions();
if (Common.indexingEnabled() && memPool.isInSync()) {
const { censored, added, fresh, score } = Audit.auditBlock(transactions, projectedBlocks, auditMempool);
const matchRate = Math.round(score * 100 * 100) / 100;
const { censored, added, fresh, score } = Audit.auditBlock(transactions, projectedBlocks, _memPool);
const matchRate = Math.round(score * 100 * 100) / 100;
const stripped = projectedBlocks[0]?.transactions ? projectedBlocks[0].transactions.map((tx) => {
return {
txid: tx.txid,
vsize: tx.vsize,
fee: tx.fee ? Math.round(tx.fee) : 0,
value: tx.value,
};
}) : [];
const stripped = projectedBlocks[0]?.transactions ? projectedBlocks[0].transactions.map((tx) => {
return {
txid: tx.txid,
vsize: tx.vsize,
fee: tx.fee ? Math.round(tx.fee) : 0,
value: tx.value,
};
}) : [];
BlocksSummariesRepository.$saveTemplate({
height: block.height,
template: {
id: block.id,
transactions: stripped
}
});
BlocksSummariesRepository.$saveTemplate({
height: block.height,
template: {
id: block.id,
transactions: stripped
BlocksAuditsRepository.$saveAudit({
time: block.timestamp,
height: block.height,
hash: block.id,
addedTxs: added,
missingTxs: censored,
freshTxs: fresh,
matchRate: matchRate,
});
if (block.extras) {
block.extras.matchRate = matchRate;
}
});
BlocksAuditsRepository.$saveAudit({
time: block.timestamp,
height: block.height,
hash: block.id,
addedTxs: added,
missingTxs: censored,
freshTxs: fresh,
matchRate: matchRate,
});
if (block.extras) {
block.extras.matchRate = matchRate;
}
}
@ -471,9 +476,9 @@ class WebsocketHandler {
}
if (config.MEMPOOL.ADVANCED_GBT_MEMPOOL) {
await mempoolBlocks.updateBlockTemplates(_memPool, [], removed);
await mempoolBlocks.updateBlockTemplates(_memPool, [], removed, true);
} else {
mempoolBlocks.updateMempoolBlocks(_memPool);
mempoolBlocks.updateMempoolBlocks(_memPool, true);
}
const mBlocks = mempoolBlocks.getMempoolBlocks();
const mBlockDeltas = mempoolBlocks.getMempoolBlockDeltas();

View file

@ -19,7 +19,6 @@ interface IConfig {
MEMPOOL_BLOCKS_AMOUNT: number;
INDEXING_BLOCKS_AMOUNT: number;
BLOCKS_SUMMARIES_INDEXING: boolean;
PRICE_FEED_UPDATE_INTERVAL: number;
USE_SECOND_NODE_FOR_MINFEE: boolean;
EXTERNAL_ASSETS: string[];
EXTERNAL_MAX_RETRY: number;
@ -29,6 +28,7 @@ interface IConfig {
AUTOMATIC_BLOCK_REINDEXING: boolean;
POOLS_JSON_URL: string,
POOLS_JSON_TREE_URL: string,
AUDIT: boolean;
ADVANCED_GBT_AUDIT: boolean;
ADVANCED_GBT_MEMPOOL: boolean;
CPFP_INDEXING: boolean;
@ -140,7 +140,6 @@ const defaults: IConfig = {
'MEMPOOL_BLOCKS_AMOUNT': 8,
'INDEXING_BLOCKS_AMOUNT': 11000, // 0 = disable indexing, -1 = index all blocks
'BLOCKS_SUMMARIES_INDEXING': false,
'PRICE_FEED_UPDATE_INTERVAL': 600,
'USE_SECOND_NODE_FOR_MINFEE': false,
'EXTERNAL_ASSETS': [],
'EXTERNAL_MAX_RETRY': 1,
@ -150,6 +149,7 @@ const defaults: IConfig = {
'AUTOMATIC_BLOCK_REINDEXING': false,
'POOLS_JSON_URL': 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools.json',
'POOLS_JSON_TREE_URL': 'https://api.github.com/repos/mempool/mining-pools/git/trees/master',
'AUDIT': false,
'ADVANCED_GBT_AUDIT': false,
'ADVANCED_GBT_MEMPOOL': false,
'CPFP_INDEXING': false,

View file

@ -10,7 +10,6 @@ import memPool from './api/mempool';
import diskCache from './api/disk-cache';
import statistics from './api/statistics/statistics';
import websocketHandler from './api/websocket-handler';
import fiatConversion from './api/fiat-conversion';
import bisq from './api/bisq/bisq';
import bisqMarkets from './api/bisq/markets';
import logger from './logger';
@ -36,6 +35,8 @@ import liquidRoutes from './api/liquid/liquid.routes';
import bitcoinRoutes from './api/bitcoin/bitcoin.routes';
import fundingTxFetcher from './tasks/lightning/sync-tasks/funding-tx-fetcher';
import forensicsService from './tasks/lightning/forensics.service';
import priceUpdater from './tasks/price-updater';
import { AxiosError } from 'axios';
class Server {
private wss: WebSocket.Server | undefined;
@ -78,25 +79,6 @@ class Server {
async startServer(worker = false): Promise<void> {
logger.notice(`Starting Mempool Server${worker ? ' (worker)' : ''}... (${backendInfo.getShortCommitHash()})`);
this.app
.use((req: Request, res: Response, next: NextFunction) => {
res.setHeader('Access-Control-Allow-Origin', '*');
next();
})
.use(express.urlencoded({ extended: true }))
.use(express.text({ type: ['text/plain', 'application/base64'] }))
;
this.server = http.createServer(this.app);
this.wss = new WebSocket.Server({ server: this.server });
this.setUpWebsocketHandling();
await syncAssets.syncAssets$();
if (config.MEMPOOL.ENABLED) {
diskCache.loadMempoolCache();
}
if (config.DATABASE.ENABLED) {
await DB.checkDbConnection();
try {
@ -115,6 +97,29 @@ class Server {
}
}
this.app
.use((req: Request, res: Response, next: NextFunction) => {
res.setHeader('Access-Control-Allow-Origin', '*');
next();
})
.use(express.urlencoded({ extended: true }))
.use(express.text({ type: ['text/plain', 'application/base64'] }))
;
if (config.DATABASE.ENABLED) {
await priceUpdater.$initializeLatestPriceWithDb();
}
this.server = http.createServer(this.app);
this.wss = new WebSocket.Server({ server: this.server });
this.setUpWebsocketHandling();
await syncAssets.syncAssets$();
if (config.MEMPOOL.ENABLED) {
diskCache.loadMempoolCache();
}
if (config.STATISTICS.ENABLED && config.DATABASE.ENABLED && cluster.isPrimary) {
statistics.startStatistics();
}
@ -127,7 +132,7 @@ class Server {
}
}
fiatConversion.startService();
priceUpdater.$run();
this.setUpHttpApiRoutes();
@ -174,7 +179,7 @@ class Server {
setTimeout(this.runMainUpdateLoop.bind(this), config.MEMPOOL.POLL_RATE_MS);
this.currentBackendRetryInterval = 5;
} catch (e) {
} catch (e: any) {
const loggerMsg = `runMainLoop error: ${(e instanceof Error ? e.message : e)}. Retrying in ${this.currentBackendRetryInterval} sec.`;
if (this.currentBackendRetryInterval > 5) {
logger.warn(loggerMsg);
@ -182,7 +187,9 @@ class Server {
} else {
logger.debug(loggerMsg);
}
logger.debug(JSON.stringify(e));
if (e instanceof AxiosError) {
logger.debug(`AxiosError: ${e?.message}`);
}
setTimeout(this.runMainUpdateLoop.bind(this), 1000 * this.currentBackendRetryInterval);
this.currentBackendRetryInterval *= 2;
this.currentBackendRetryInterval = Math.min(this.currentBackendRetryInterval, 60);
@ -221,7 +228,7 @@ class Server {
memPool.setAsyncMempoolChangedCallback(websocketHandler.handleMempoolChange.bind(websocketHandler));
blocks.setNewAsyncBlockCallback(websocketHandler.handleNewBlock.bind(websocketHandler));
}
fiatConversion.setProgressChangedCallback(websocketHandler.handleNewConversionRates.bind(websocketHandler));
priceUpdater.setRatesChangedCallback(websocketHandler.handleNewConversionRates.bind(websocketHandler));
loadingIndicators.setProgressChangedCallback(websocketHandler.handleLoadingChanged.bind(websocketHandler));
}

View file

@ -521,7 +521,7 @@ class BlocksRepository {
CAST(AVG(blocks.height) as INT) as avgHeight,
CAST(AVG(UNIX_TIMESTAMP(blockTimestamp)) as INT) as timestamp,
CAST(AVG(fees) as INT) as avgFees,
prices.USD
prices.*
FROM blocks
JOIN blocks_prices on blocks_prices.height = blocks.height
JOIN prices on prices.id = blocks_prices.price_id
@ -550,7 +550,7 @@ class BlocksRepository {
CAST(AVG(blocks.height) as INT) as avgHeight,
CAST(AVG(UNIX_TIMESTAMP(blockTimestamp)) as INT) as timestamp,
CAST(AVG(reward) as INT) as avgRewards,
prices.USD
prices.*
FROM blocks
JOIN blocks_prices on blocks_prices.height = blocks.height
JOIN prices on prices.id = blocks_prices.price_id

View file

@ -111,7 +111,7 @@ class CpfpRepository {
}
}
public async $getCluster(clusterRoot: string): Promise<Cluster> {
public async $getCluster(clusterRoot: string): Promise<Cluster | void> {
const [clusterRows]: any = await DB.query(
`
SELECT *
@ -121,8 +121,11 @@ class CpfpRepository {
[clusterRoot]
);
const cluster = clusterRows[0];
cluster.txs = this.unpack(cluster.txs);
return cluster;
if (cluster?.txs) {
cluster.txs = this.unpack(cluster.txs);
return cluster;
}
return;
}
public async $deleteClustersFrom(height: number): Promise<void> {
@ -136,9 +139,9 @@ class CpfpRepository {
[height]
) as RowDataPacket[][];
if (rows?.length) {
for (let clusterToDelete of rows) {
const txs = this.unpack(clusterToDelete.txs);
for (let tx of txs) {
for (const clusterToDelete of rows) {
const txs = this.unpack(clusterToDelete?.txs);
for (const tx of txs) {
await transactionRepository.$removeTransaction(tx.txid);
}
}
@ -204,20 +207,25 @@ class CpfpRepository {
return [];
}
const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
const txs: Ancestor[] = [];
const view = new DataView(arrayBuffer);
for (let offset = 0; offset < arrayBuffer.byteLength; offset += 44) {
const txid = Array.from(new Uint8Array(arrayBuffer, offset, 32)).reverse().map(b => b.toString(16).padStart(2, '0')).join('');
const weight = view.getUint32(offset + 32);
const fee = Number(view.getBigUint64(offset + 36));
txs.push({
txid,
weight,
fee
});
try {
const arrayBuffer = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
const txs: Ancestor[] = [];
const view = new DataView(arrayBuffer);
for (let offset = 0; offset < arrayBuffer.byteLength; offset += 44) {
const txid = Array.from(new Uint8Array(arrayBuffer, offset, 32)).reverse().map(b => b.toString(16).padStart(2, '0')).join('');
const weight = view.getUint32(offset + 32);
const fee = Number(view.getBigUint64(offset + 36));
txs.push({
txid,
weight,
fee
});
}
return txs;
} catch (e) {
logger.warn(`Failed to unpack CPFP cluster. Reason: ` + (e instanceof Error ? e.message : e));
return [];
}
return txs;
}
}

View file

@ -1,12 +1,13 @@
import DB from '../database';
import logger from '../logger';
import { Prices } from '../tasks/price-updater';
import { IConversionRates } from '../mempool.interfaces';
import priceUpdater from '../tasks/price-updater';
class PricesRepository {
public async $savePrices(time: number, prices: Prices): Promise<void> {
if (prices.USD === -1) {
// Some historical price entries have not USD prices, so we just ignore them to avoid future UX issues
// As of today there are only 4 (on 2013-09-05, 2013-09-19, 2013-09-12 and 2013-09-26) so that's fine
public async $savePrices(time: number, prices: IConversionRates): Promise<void> {
if (prices.USD === 0) {
// Some historical price entries have no USD prices, so we just ignore them to avoid future UX issues
// As of today there are only 4 (on 2013-09-05, 2013-0909, 2013-09-12 and 2013-09-26) so that's fine
return;
}
@ -23,22 +24,22 @@ class PricesRepository {
}
public async $getOldestPriceTime(): Promise<number> {
const [oldestRow] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time from prices WHERE USD != -1 ORDER BY time LIMIT 1`);
const [oldestRow] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time from prices WHERE USD != 0 ORDER BY time LIMIT 1`);
return oldestRow[0] ? oldestRow[0].time : 0;
}
public async $getLatestPriceId(): Promise<number | null> {
const [oldestRow] = await DB.query(`SELECT id from prices WHERE USD != -1 ORDER BY time DESC LIMIT 1`);
const [oldestRow] = await DB.query(`SELECT id from prices WHERE USD != 0 ORDER BY time DESC LIMIT 1`);
return oldestRow[0] ? oldestRow[0].id : null;
}
public async $getLatestPriceTime(): Promise<number> {
const [oldestRow] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time from prices WHERE USD != -1 ORDER BY time DESC LIMIT 1`);
const [oldestRow] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time from prices WHERE USD != 0 ORDER BY time DESC LIMIT 1`);
return oldestRow[0] ? oldestRow[0].time : 0;
}
public async $getPricesTimes(): Promise<number[]> {
const [times]: any[] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time from prices WHERE USD != -1 ORDER BY time`);
const [times]: any[] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time from prices WHERE USD != 0 ORDER BY time`);
return times.map(time => time.time);
}
@ -46,6 +47,19 @@ class PricesRepository {
const [times]: any[] = await DB.query(`SELECT UNIX_TIMESTAMP(time) as time, id, USD from prices ORDER BY time`);
return times;
}
public async $getLatestConversionRates(): Promise<any> {
const [rates]: any[] = await DB.query(`
SELECT USD, EUR, GBP, CAD, CHF, AUD, JPY
FROM prices
ORDER BY time DESC
LIMIT 1`
);
if (!rates || rates.length === 0) {
return priceUpdater.getEmptyPricesObj();
}
return rates[0];
}
}
export default new PricesRepository();

View file

@ -3,15 +3,6 @@ import logger from '../logger';
import { Ancestor, CpfpInfo } from '../mempool.interfaces';
import cpfpRepository from './CpfpRepository';
interface CpfpSummary {
txid: string;
cluster: string;
root: string;
txs: Ancestor[];
height: number;
fee_rate: number;
}
class TransactionRepository {
public async $setCluster(txid: string, clusterRoot: string): Promise<void> {
try {
@ -72,7 +63,9 @@ class TransactionRepository {
const txid = txRows[0].id.toLowerCase();
const clusterId = txRows[0].root.toLowerCase();
const cluster = await cpfpRepository.$getCluster(clusterId);
return this.convertCpfp(txid, cluster);
if (cluster) {
return this.convertCpfp(txid, cluster);
}
}
} catch (e) {
logger.err('Cannot get transaction cpfp info from db. Reason: ' + (e instanceof Error ? e.message : e));
@ -81,13 +74,18 @@ class TransactionRepository {
}
public async $removeTransaction(txid: string): Promise<void> {
await DB.query(
`
DELETE FROM compact_transactions
WHERE txid = UNHEX(?)
`,
[txid]
);
try {
await DB.query(
`
DELETE FROM compact_transactions
WHERE txid = UNHEX(?)
`,
[txid]
);
} catch (e) {
logger.warn('Cannot delete transaction cpfp info from db. Reason: ' + (e instanceof Error ? e.message : e));
throw e;
}
}
private convertCpfp(txid, cluster): CpfpInfo {
@ -95,7 +93,7 @@ class TransactionRepository {
const ancestors: Ancestor[] = [];
let matched = false;
for (const tx of cluster.txs) {
for (const tx of (cluster?.txs || [])) {
if (tx.txid === txid) {
matched = true;
} else if (!matched) {

View file

@ -13,7 +13,11 @@ class BitfinexApi implements PriceFeed {
public async $fetchPrice(currency): Promise<number> {
const response = await query(this.url + currency);
return response ? parseInt(response['last_price'], 10) : -1;
if (response && response['last_price']) {
return parseInt(response['last_price'], 10);
} else {
return -1;
}
}
public async $fetchRecentPrice(currencies: string[], type: 'hour' | 'day'): Promise<PriceHistory> {

View file

@ -13,7 +13,11 @@ class BitflyerApi implements PriceFeed {
public async $fetchPrice(currency): Promise<number> {
const response = await query(this.url + currency);
return response ? parseInt(response['ltp'], 10) : -1;
if (response && response['ltp']) {
return parseInt(response['ltp'], 10);
} else {
return -1;
}
}
public async $fetchRecentPrice(currencies: string[], type: 'hour' | 'day'): Promise<PriceHistory> {

View file

@ -13,7 +13,11 @@ class CoinbaseApi implements PriceFeed {
public async $fetchPrice(currency): Promise<number> {
const response = await query(this.url + currency);
return response ? parseInt(response['data']['amount'], 10) : -1;
if (response && response['data'] && response['data']['amount']) {
return parseInt(response['data']['amount'], 10);
} else {
return -1;
}
}
public async $fetchRecentPrice(currencies: string[], type: 'hour' | 'day'): Promise<PriceHistory> {

View file

@ -13,7 +13,11 @@ class GeminiApi implements PriceFeed {
public async $fetchPrice(currency): Promise<number> {
const response = await query(this.url + currency);
return response ? parseInt(response['last'], 10) : -1;
if (response && response['last']) {
return parseInt(response['last'], 10);
} else {
return -1;
}
}
public async $fetchRecentPrice(currencies: string[], type: 'hour' | 'day'): Promise<PriceHistory> {

View file

@ -23,7 +23,14 @@ class KrakenApi implements PriceFeed {
public async $fetchPrice(currency): Promise<number> {
const response = await query(this.url + currency);
return response ? parseInt(response['result'][this.getTicker(currency)]['c'][0], 10) : -1;
const ticker = this.getTicker(currency);
if (response && response['result'] && response['result'][ticker] &&
response['result'][ticker]['c'] && response['result'][ticker]['c'].length > 0
) {
return parseInt(response['result'][ticker]['c'][0], 10);
} else {
return -1;
}
}
public async $fetchRecentPrice(currencies: string[], type: 'hour' | 'day'): Promise<PriceHistory> {

View file

@ -1,7 +1,8 @@
import * as fs from 'fs';
import path from "path";
import path from 'path';
import config from '../config';
import logger from '../logger';
import { IConversionRates } from '../mempool.interfaces';
import PricesRepository from '../repositories/PricesRepository';
import BitfinexApi from './price-feeds/bitfinex-api';
import BitflyerApi from './price-feeds/bitflyer-api';
@ -20,17 +21,7 @@ export interface PriceFeed {
}
export interface PriceHistory {
[timestamp: number]: Prices;
}
export interface Prices {
USD: number;
EUR: number;
GBP: number;
CAD: number;
CHF: number;
AUD: number;
JPY: number;
[timestamp: number]: IConversionRates;
}
class PriceUpdater {
@ -40,7 +31,8 @@ class PriceUpdater {
running = false;
feeds: PriceFeed[] = [];
currencies: string[] = ['USD', 'EUR', 'GBP', 'CAD', 'CHF', 'AUD', 'JPY'];
latestPrices: Prices;
latestPrices: IConversionRates;
private ratesChangedCallback: ((rates: IConversionRates) => void) | undefined;
constructor() {
this.latestPrices = this.getEmptyPricesObj();
@ -52,18 +44,30 @@ class PriceUpdater {
this.feeds.push(new GeminiApi());
}
public getEmptyPricesObj(): Prices {
public getEmptyPricesObj(): IConversionRates {
return {
USD: -1,
EUR: -1,
GBP: -1,
CAD: -1,
CHF: -1,
AUD: -1,
JPY: -1,
USD: 0,
EUR: 0,
GBP: 0,
CAD: 0,
CHF: 0,
AUD: 0,
JPY: 0,
};
}
public setRatesChangedCallback(fn: (rates: IConversionRates) => void) {
this.ratesChangedCallback = fn;
}
/**
* We execute this function before the websocket initialization since
* the websocket init is not done asyncronously
*/
public async $initializeLatestPriceWithDb(): Promise<void> {
this.latestPrices = await PricesRepository.$getLatestConversionRates();
}
public async $run(): Promise<void> {
if (this.running === true) {
return;
@ -76,10 +80,9 @@ class PriceUpdater {
}
try {
await this.$updatePrice();
if (this.historyInserted === false && config.DATABASE.ENABLED === true) {
await this.$insertHistoricalPrices();
} else {
await this.$updatePrice();
}
} catch (e) {
logger.err(`Cannot save BTC prices in db. Reason: ${e instanceof Error ? e.message : e}`, logger.tags.mining);
@ -127,7 +130,11 @@ class PriceUpdater {
// Compute average price, non weighted
prices = prices.filter(price => price > 0);
this.latestPrices[currency] = Math.round((prices.reduce((partialSum, a) => partialSum + a, 0)) / prices.length);
if (prices.length === 0) {
this.latestPrices[currency] = -1;
} else {
this.latestPrices[currency] = Math.round((prices.reduce((partialSum, a) => partialSum + a, 0)) / prices.length);
}
}
logger.info(`Latest BTC fiat averaged price: ${JSON.stringify(this.latestPrices)}`);
@ -144,6 +151,10 @@ class PriceUpdater {
}
}
if (this.ratesChangedCallback) {
this.ratesChangedCallback(this.latestPrices);
}
this.lastRun = new Date().getTime() / 1000;
}
@ -213,7 +224,7 @@ class PriceUpdater {
// Group them by timestamp and currency, for example
// grouped[123456789]['USD'] = [1, 2, 3, 4];
const grouped: Object = {};
const grouped: any = {};
for (const historicalEntry of historicalPrices) {
for (const time in historicalEntry) {
if (existingPriceTimes.includes(parseInt(time, 10))) {
@ -229,7 +240,7 @@ class PriceUpdater {
for (const currency of this.currencies) {
const price = historicalEntry[time][currency];
if (price > 0) {
grouped[time][currency].push(parseInt(price, 10));
grouped[time][currency].push(typeof price === 'string' ? parseInt(price, 10) : price);
}
}
}
@ -238,7 +249,7 @@ class PriceUpdater {
// Average prices and insert everything into the db
let totalInserted = 0;
for (const time in grouped) {
const prices: Prices = this.getEmptyPricesObj();
const prices: IConversionRates = this.getEmptyPricesObj();
for (const currency in grouped[time]) {
if (grouped[time][currency].length === 0) {
continue;

View file

@ -17,7 +17,7 @@ export function prepareBlock(block: any): BlockExtended {
extras: {
coinbaseRaw: block.coinbase_raw ?? block.extras?.coinbaseRaw,
medianFee: block.medianFee ?? block.median_fee ?? block.extras?.medianFee,
feeRange: block.feeRange ?? block.fee_span,
feeRange: block.feeRange ?? block?.extras?.feeRange ?? block.fee_span,
reward: block.reward ?? block?.extras?.reward,
totalFees: block.totalFees ?? block?.fees ?? block?.extras?.totalFees,
avgFee: block?.extras?.avgFee ?? block.avg_fee,

View file

@ -0,0 +1,14 @@
// simple recursive deep clone for literal-type objects
// does not preserve Dates, Maps, Sets etc
// does not support recursive objects
// properties deeper than maxDepth will be shallow cloned
export function deepClone(obj: any, maxDepth: number = 50, depth: number = 0): any {
let cloned = obj;
if (depth < maxDepth && typeof obj === 'object') {
cloned = Array.isArray(obj) ? [] : {};
for (const key in obj) {
cloned[key] = deepClone(obj[key], maxDepth, depth + 1);
}
}
return cloned;
}

View file

@ -0,0 +1,3 @@
I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of January 25, 2022.
Signed: AlexLloyd0

View file

@ -0,0 +1,3 @@
I hereby accept the terms of the Contributor License Agreement in the CONTRIBUTING.md file of the mempool/mempool git repository as of January 25, 2022.
Signed: Arooba-git

View file

@ -101,7 +101,6 @@ Below we list all settings from `mempool-config.json` and the corresponding over
"INITIAL_BLOCKS_AMOUNT": 8,
"MEMPOOL_BLOCKS_AMOUNT": 8,
"BLOCKS_SUMMARIES_INDEXING": false,
"PRICE_FEED_UPDATE_INTERVAL": 600,
"USE_SECOND_NODE_FOR_MINFEE": false,
"EXTERNAL_ASSETS": ["https://raw.githubusercontent.com/mempool/mining-pools/master/pools.json"],
"STDOUT_LOG_MIN_PRIORITY": "info",
@ -132,7 +131,6 @@ Corresponding `docker-compose.yml` overrides:
MEMPOOL_INITIAL_BLOCKS_AMOUNT: ""
MEMPOOL_MEMPOOL_BLOCKS_AMOUNT: ""
MEMPOOL_BLOCKS_SUMMARIES_INDEXING: ""
MEMPOOL_PRICE_FEED_UPDATE_INTERVAL: ""
MEMPOOL_USE_SECOND_NODE_FOR_MINFEE: ""
MEMPOOL_EXTERNAL_ASSETS: ""
MEMPOOL_STDOUT_LOG_MIN_PRIORITY: ""

View file

@ -13,7 +13,6 @@
"BLOCK_WEIGHT_UNITS": __MEMPOOL_BLOCK_WEIGHT_UNITS__,
"INITIAL_BLOCKS_AMOUNT": __MEMPOOL_INITIAL_BLOCKS_AMOUNT__,
"MEMPOOL_BLOCKS_AMOUNT": __MEMPOOL_MEMPOOL_BLOCKS_AMOUNT__,
"PRICE_FEED_UPDATE_INTERVAL": __MEMPOOL_PRICE_FEED_UPDATE_INTERVAL__,
"USE_SECOND_NODE_FOR_MINFEE": __MEMPOOL_USE_SECOND_NODE_FOR_MINFEE__,
"EXTERNAL_ASSETS": __MEMPOOL_EXTERNAL_ASSETS__,
"EXTERNAL_MAX_RETRY": __MEMPOOL_EXTERNAL_MAX_RETRY__,
@ -23,6 +22,7 @@
"INDEXING_BLOCKS_AMOUNT": __MEMPOOL_INDEXING_BLOCKS_AMOUNT__,
"BLOCKS_SUMMARIES_INDEXING": __MEMPOOL_BLOCKS_SUMMARIES_INDEXING__,
"AUTOMATIC_BLOCK_REINDEXING": __MEMPOOL_AUTOMATIC_BLOCK_REINDEXING__,
"AUDIT": __MEMPOOL_AUDIT__,
"ADVANCED_GBT_AUDIT": __MEMPOOL_ADVANCED_GBT_AUDIT__,
"ADVANCED_GBT_MEMPOOL": __MEMPOOL_ADVANCED_GBT_MEMPOOL__,
"CPFP_INDEXING": __MEMPOOL_CPFP_INDEXING__

View file

@ -16,7 +16,6 @@ __MEMPOOL_INITIAL_BLOCKS_AMOUNT__=${MEMPOOL_INITIAL_BLOCKS_AMOUNT:=8}
__MEMPOOL_MEMPOOL_BLOCKS_AMOUNT__=${MEMPOOL_MEMPOOL_BLOCKS_AMOUNT:=8}
__MEMPOOL_INDEXING_BLOCKS_AMOUNT__=${MEMPOOL_INDEXING_BLOCKS_AMOUNT:=11000}
__MEMPOOL_BLOCKS_SUMMARIES_INDEXING__=${MEMPOOL_BLOCKS_SUMMARIES_INDEXING:=false}
__MEMPOOL_PRICE_FEED_UPDATE_INTERVAL__=${MEMPOOL_PRICE_FEED_UPDATE_INTERVAL:=600}
__MEMPOOL_USE_SECOND_NODE_FOR_MINFEE__=${MEMPOOL_USE_SECOND_NODE_FOR_MINFEE:=false}
__MEMPOOL_EXTERNAL_ASSETS__=${MEMPOOL_EXTERNAL_ASSETS:=[]}
__MEMPOOL_EXTERNAL_MAX_RETRY__=${MEMPOOL_EXTERNAL_MAX_RETRY:=1}
@ -27,6 +26,7 @@ __MEMPOOL_INDEXING_BLOCKS_AMOUNT__=${MEMPOOL_INDEXING_BLOCKS_AMOUNT:=false}
__MEMPOOL_AUTOMATIC_BLOCK_REINDEXING__=${MEMPOOL_AUTOMATIC_BLOCK_REINDEXING:=false}
__MEMPOOL_POOLS_JSON_URL__=${MEMPOOL_POOLS_JSON_URL:=https://raw.githubusercontent.com/mempool/mining-pools/master/pools.json}
__MEMPOOL_POOLS_JSON_TREE_URL__=${MEMPOOL_POOLS_JSON_TREE_URL:=https://api.github.com/repos/mempool/mining-pools/git/trees/master}
__MEMPOOL_AUDIT__=${MEMPOOL_AUDIT:=false}
__MEMPOOL_ADVANCED_GBT_AUDIT__=${MEMPOOL_ADVANCED_GBT_AUDIT:=false}
__MEMPOOL_ADVANCED_GBT_MEMPOOL__=${MEMPOOL_ADVANCED_GBT_MEMPOOL:=false}
__MEMPOOL_CPFP_INDEXING__=${MEMPOOL_CPFP_INDEXING:=false}
@ -128,7 +128,6 @@ sed -i "s/__MEMPOOL_INITIAL_BLOCKS_AMOUNT__/${__MEMPOOL_INITIAL_BLOCKS_AMOUNT__}
sed -i "s/__MEMPOOL_MEMPOOL_BLOCKS_AMOUNT__/${__MEMPOOL_MEMPOOL_BLOCKS_AMOUNT__}/g" mempool-config.json
sed -i "s/__MEMPOOL_INDEXING_BLOCKS_AMOUNT__/${__MEMPOOL_INDEXING_BLOCKS_AMOUNT__}/g" mempool-config.json
sed -i "s/__MEMPOOL_BLOCKS_SUMMARIES_INDEXING__/${__MEMPOOL_BLOCKS_SUMMARIES_INDEXING__}/g" mempool-config.json
sed -i "s/__MEMPOOL_PRICE_FEED_UPDATE_INTERVAL__/${__MEMPOOL_PRICE_FEED_UPDATE_INTERVAL__}/g" mempool-config.json
sed -i "s/__MEMPOOL_USE_SECOND_NODE_FOR_MINFEE__/${__MEMPOOL_USE_SECOND_NODE_FOR_MINFEE__}/g" mempool-config.json
sed -i "s!__MEMPOOL_EXTERNAL_ASSETS__!${__MEMPOOL_EXTERNAL_ASSETS__}!g" mempool-config.json
sed -i "s!__MEMPOOL_EXTERNAL_MAX_RETRY__!${__MEMPOOL_EXTERNAL_MAX_RETRY__}!g" mempool-config.json
@ -139,6 +138,7 @@ sed -i "s/__MEMPOOL_INDEXING_BLOCKS_AMOUNT__/${__MEMPOOL_INDEXING_BLOCKS_AMOUNT_
sed -i "s/__MEMPOOL_AUTOMATIC_BLOCK_REINDEXING__/${__MEMPOOL_AUTOMATIC_BLOCK_REINDEXING__}/g" mempool-config.json
sed -i "s!__MEMPOOL_POOLS_JSON_URL__!${__MEMPOOL_POOLS_JSON_URL__}!g" mempool-config.json
sed -i "s!__MEMPOOL_POOLS_JSON_TREE_URL__!${__MEMPOOL_POOLS_JSON_TREE_URL__}!g" mempool-config.json
sed -i "s!__MEMPOOL_AUDIT__!${__MEMPOOL_AUDIT__}!g" mempool-config.json
sed -i "s!__MEMPOOL_ADVANCED_GBT_MEMPOOL__!${__MEMPOOL_ADVANCED_GBT_MEMPOOL__}!g" mempool-config.json
sed -i "s!__MEMPOOL_ADVANCED_GBT_AUDIT__!${__MEMPOOL_ADVANCED_GBT_AUDIT__}!g" mempool-config.json
sed -i "s!__MEMPOOL_CPFP_INDEXING__!${__MEMPOOL_CPFP_INDEXING__}!g" mempool-config.json

View file

@ -31,6 +31,7 @@ __LIQUID_WEBSITE_URL__=${LIQUID_WEBSITE_URL:=https://liquid.network}
__BISQ_WEBSITE_URL__=${BISQ_WEBSITE_URL:=https://bisq.markets}
__MINING_DASHBOARD__=${MINING_DASHBOARD:=true}
__LIGHTNING__=${LIGHTNING:=false}
__AUDIT__=${AUDIT:=false}
__MAINNET_BLOCK_AUDIT_START_HEIGHT__=${MAINNET_BLOCK_AUDIT_START_HEIGHT:=0}
__TESTNET_BLOCK_AUDIT_START_HEIGHT__=${TESTNET_BLOCK_AUDIT_START_HEIGHT:=0}
__SIGNET_BLOCK_AUDIT_START_HEIGHT__=${SIGNET_BLOCK_AUDIT_START_HEIGHT:=0}
@ -55,6 +56,7 @@ export __LIQUID_WEBSITE_URL__
export __BISQ_WEBSITE_URL__
export __MINING_DASHBOARD__
export __LIGHTNING__
export __AUDIT__
export __MAINNET_BLOCK_AUDIT_START_HEIGHT__
export __TESTNET_BLOCK_AUDIT_START_HEIGHT__
export __SIGNET_BLOCK_AUDIT_START_HEIGHT__

View file

@ -1,7 +1,9 @@
[main]
host = https://www.transifex.com
[mempool.frontend-src-locale-messages-xlf--master]
[o:mempool:p:mempool:r:frontend-src-locale-messages-xlf--master]
file_filter = frontend/src/locale/messages.<lang>.xlf
source_file = frontend/src/locale/messages.en-US.xlf
source_lang = en-US
type = XLIFF
type = XLIFF

View file

@ -132,3 +132,4 @@ https://www.transifex.com/mempool/mempool/dashboard/
* Russian @TonyCrusoe @Bitconan
* Romanian @mirceavesa
* Macedonian @SkechBoy
* Nepalese @kebinm

View file

@ -64,7 +64,7 @@ describe('Mainnet', () => {
it('loads the status screen', () => {
cy.visit('/status');
cy.get('#mempool-block-0').should('be.visible');
cy.get('[id^="bitcoin-block-"]').should('have.length', 8);
cy.get('[id^="bitcoin-block-"]').should('have.length', 22);
cy.get('.footer').should('be.visible');
cy.get('.row > :nth-child(1)').invoke('text').then((text) => {
expect(text).to.match(/Incoming transactions.* vB\/s/);
@ -219,11 +219,11 @@ describe('Mainnet', () => {
describe('blocks navigation', () => {
describe('keyboard events', () => {
it('loads first blockchain blocks visible and keypress arrow right', () => {
it('loads first blockchain block visible and keypress arrow right', () => {
cy.viewport('macbook-16');
cy.visit('/');
cy.waitForSkeletonGone();
cy.get('.blockchain-blocks-0 > a').click().then(() => {
cy.get('[data-cy="bitcoin-block-offset-0-index-0"]').click().then(() => {
cy.get('[ngbtooltip="Next Block"] > .ng-fa-icon > .svg-inline--fa').should('not.exist');
cy.get('[ngbtooltip="Previous Block"] > .ng-fa-icon > .svg-inline--fa').should('be.visible');
cy.waitForPageIdle();
@ -233,11 +233,11 @@ describe('Mainnet', () => {
});
});
it('loads first blockchain blocks visible and keypress arrow left', () => {
it('loads first blockchain block visible and keypress arrow left', () => {
cy.viewport('macbook-16');
cy.visit('/');
cy.waitForSkeletonGone();
cy.get('.blockchain-blocks-0 > a').click().then(() => {
cy.get('[data-cy="bitcoin-block-offset-0-index-0"]').click().then(() => {
cy.waitForPageIdle();
cy.get('[ngbtooltip="Next Block"] > .ng-fa-icon > .svg-inline--fa').should('not.exist');
cy.get('[ngbtooltip="Previous Block"] > .ng-fa-icon > .svg-inline--fa').should('be.visible');
@ -246,11 +246,11 @@ describe('Mainnet', () => {
});
});
it('loads last blockchain blocks and keypress arrow right', () => {
it.skip('loads last blockchain block and keypress arrow right', () => { //Skip for now as "last" doesn't really work with infinite scrolling
cy.viewport('macbook-16');
cy.visit('/');
cy.waitForSkeletonGone();
cy.get('.blockchain-blocks-4 > a').click().then(() => {
cy.get('bitcoin-block-offset-0-index-7').click().then(() => {
cy.waitForPageIdle();
// block 6
@ -309,7 +309,7 @@ describe('Mainnet', () => {
cy.viewport('macbook-16');
cy.visit('/');
cy.waitForSkeletonGone();
cy.get('.blockchain-blocks-0 > a').click().then(() => {
cy.get('[data-cy="bitcoin-block-offset-0-index-0"]').click().then(() => {
cy.waitForPageIdle();
cy.get('[ngbtooltip="Next Block"] > .ng-fa-icon > .svg-inline--fa').should('not.exist');
cy.get('[ngbtooltip="Previous Block"] > .ng-fa-icon > .svg-inline--fa').should('be.visible');

View file

@ -17,6 +17,7 @@
"LIQUID_WEBSITE_URL": "https://liquid.network",
"BISQ_WEBSITE_URL": "https://bisq.markets",
"MINING_DASHBOARD": true,
"AUDIT": false,
"MAINNET_BLOCK_AUDIT_START_HEIGHT": 0,
"TESTNET_BLOCK_AUDIT_START_HEIGHT": 0,
"SIGNET_BLOCK_AUDIT_START_HEIGHT": 0,

View file

@ -3,8 +3,8 @@ const fs = require('fs');
let PROXY_CONFIG = require('./proxy.conf');
PROXY_CONFIG.forEach(entry => {
entry.target = entry.target.replace("mempool.space", "mempool-staging.tk7.mempool.space");
entry.target = entry.target.replace("liquid.network", "liquid-staging.tk7.mempool.space");
entry.target = entry.target.replace("mempool.space", "mempool-staging.fra.mempool.space");
entry.target = entry.target.replace("liquid.network", "liquid-staging.fra.mempool.space");
entry.target = entry.target.replace("bisq.markets", "bisq-staging.fra.mempool.space");
});

View file

@ -72,22 +72,10 @@ export const chartColors = [
];
export const poolsColor = {
'foundryusa': '#D81B60',
'antpool': '#8E24AA',
'f2pool': '#5E35B1',
'poolin': '#3949AB',
'binancepool': '#1E88E5',
'viabtc': '#039BE5',
'btccom': '#00897B',
'braiinspool': '#00ACC1',
'sbicrypto': '#43A047',
'marapool': '#7CB342',
'luxor': '#C0CA33',
'unknown': '#FDD835',
'okkong': '#FFB300',
}
'unknown': '#9C9C9C',
};
export const feeLevels = [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200,
export const feeLevels = [1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 125, 150, 175, 200,
250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000];
export interface Language {
@ -157,3 +145,41 @@ export const specialBlocks = {
labelEventCompleted: 'Block Subsidy has halved to 3.125 BTC per block',
}
};
export const fiatCurrencies = {
AUD: {
name: 'Australian Dollar',
code: 'AUD',
indexed: true,
},
CAD: {
name: 'Canadian Dollar',
code: 'CAD',
indexed: true,
},
CHF: {
name: 'Swiss Franc',
code: 'CHF',
indexed: true,
},
EUR: {
name: 'Euro',
code: 'EUR',
indexed: true,
},
GBP: {
name: 'Pound Sterling',
code: 'GBP',
indexed: true,
},
JPY: {
name: 'Japanese Yen',
code: 'JPY',
indexed: true,
},
USD: {
name: 'US Dollar',
code: 'USD',
indexed: true,
},
};

View file

@ -17,6 +17,7 @@ import { StorageService } from './services/storage.service';
import { HttpCacheInterceptor } from './services/http-cache.interceptor';
import { LanguageService } from './services/language.service';
import { FiatShortenerPipe } from './shared/pipes/fiat-shortener.pipe';
import { FiatCurrencyPipe } from './shared/pipes/fiat-currency.pipe';
import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-string.pipe';
import { CapAddressPipe } from './shared/pipes/cap-address-pipe/cap-address-pipe';
import { AppPreloadingStrategy } from './app.preloading-strategy';
@ -34,6 +35,7 @@ const providers = [
LanguageService,
ShortenStringPipe,
FiatShortenerPipe,
FiatCurrencyPipe,
CapAddressPipe,
AppPreloadingStrategy,
{ provide: HTTP_INTERCEPTORS, useClass: HttpCacheInterceptor, multi: true }

View file

@ -68,8 +68,8 @@
.community-sponsor {
img {
width: 67px;
height: 67px;
width: 57px;
height: 57px;
}
}

View file

@ -1,4 +1,4 @@
<div class="container-xl">
<div class="container-xl" [class.liquid-address]="network === 'liquid' || network === 'liquidtestnet'">
<div class="title-address">
<h1 i18n="shared.address">Address</h1>
<div class="tx-link">
@ -15,7 +15,7 @@
<div class="row">
<div class="col-md">
<table class="table table-borderless table-striped">
<table class="table table-borderless table-striped address-table">
<tbody>
<tr *ngIf="addressInfo && addressInfo.unconfidential">
<td i18n="address.unconfidential">Unconfidential</td>

View file

@ -91,3 +91,20 @@ h1 {
margin-bottom: 10px;
}
}
.liquid-address {
.address-table {
table-layout: fixed;
tr td:first-child {
width: 170px;
}
tr td:last-child {
width: 80%;
}
}
.qrcode-col {
flex-grow: 0.5;
}
}

View file

@ -1,5 +1,5 @@
<ng-container *ngIf="!noFiat && (viewFiat$ | async) && (conversions$ | async) as conversions; else viewFiatVin">
<span class="fiat">{{ addPlus && satoshis >= 0 ? '+' : '' }}{{ conversions.USD * (satoshis / 100000000) | currency:'USD':'symbol':'1.2-2' }}</span>
<span class="fiat">{{ addPlus && satoshis >= 0 ? '+' : '' }}{{ (conversions ? conversions[currency] : 0) * satoshis / 100000000 | fiatCurrency : digitsInfo : currency }}</span>
</ng-container>
<ng-template #viewFiatVin>
<ng-template [ngIf]="(network === 'liquid' || network === 'liquidtestnet') && (satoshis === undefined || satoshis === null)" [ngIfElse]="default">

View file

@ -1,4 +1,4 @@
import { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy } from '@angular/core';
import { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';
import { StateService } from '../../services/state.service';
import { Observable, Subscription } from 'rxjs';
@ -10,10 +10,12 @@ import { Observable, Subscription } from 'rxjs';
})
export class AmountComponent implements OnInit, OnDestroy {
conversions$: Observable<any>;
currency: string;
viewFiat$: Observable<boolean>;
network = '';
stateSubscription: Subscription;
currencySubscription: Subscription;
@Input() satoshis: number;
@Input() digitsInfo = '1.8-8';
@ -22,7 +24,13 @@ export class AmountComponent implements OnInit, OnDestroy {
constructor(
private stateService: StateService,
) { }
private cd: ChangeDetectorRef,
) {
this.currencySubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
this.currency = fiat;
this.cd.markForCheck();
});
}
ngOnInit() {
this.viewFiat$ = this.stateService.viewFiat$.asObservable();
@ -34,6 +42,7 @@ export class AmountComponent implements OnInit, OnDestroy {
if (this.stateSubscription) {
this.stateSubscription.unsubscribe();
}
this.currencySubscription.unsubscribe();
}
}

View file

@ -1,16 +1,19 @@
import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';
import { EChartsOption, graphic } from 'echarts';
import { Observable } from 'rxjs';
import { Observable, Subscription } from 'rxjs';
import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
import { ApiService } from '../../services/api.service';
import { SeoService } from '../../services/seo.service';
import { formatCurrency, formatNumber, getCurrencySymbol } from '@angular/common';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils';
import { StateService } from '../../services/state.service';
import { StorageService } from '../../services/storage.service';
import { MiningService } from '../../services/mining.service';
import { ActivatedRoute } from '@angular/router';
import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe';
import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe';
import { fiatCurrencies } from '../../app.constants';
@Component({
selector: 'app-block-fees-graph',
@ -44,6 +47,9 @@ export class BlockFeesGraphComponent implements OnInit {
timespan = '';
chartInstance: any = undefined;
currencySubscription: Subscription;
currency: string;
constructor(
@Inject(LOCALE_ID) public locale: string,
private seoService: SeoService,
@ -51,11 +57,21 @@ export class BlockFeesGraphComponent implements OnInit {
private formBuilder: UntypedFormBuilder,
private storageService: StorageService,
private miningService: MiningService,
private stateService: StateService,
private route: ActivatedRoute,
private fiatShortenerPipe: FiatShortenerPipe,
private fiatCurrencyPipe: FiatCurrencyPipe,
) {
this.radioGroupForm = this.formBuilder.group({ dateSpan: '1y' });
this.radioGroupForm.controls.dateSpan.setValue('1y');
this.currencySubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
if (fiat && fiatCurrencies[fiat]?.indexed) {
this.currency = fiat;
} else {
this.currency = 'USD';
}
});
}
ngOnInit(): void {
@ -84,7 +100,7 @@ export class BlockFeesGraphComponent implements OnInit {
tap((response) => {
this.prepareChartOptions({
blockFees: response.body.map(val => [val.timestamp * 1000, val.avgFees / 100000000, val.avgHeight]),
blockFeesUSD: response.body.filter(val => val.USD > 0).map(val => [val.timestamp * 1000, val.avgFees / 100000000 * val.USD, val.avgHeight]),
blockFeesFiat: response.body.filter(val => val[this.currency] > 0).map(val => [val.timestamp * 1000, val.avgFees / 100000000 * val[this.currency], val.avgHeight]),
});
this.isLoading = false;
}),
@ -157,7 +173,7 @@ export class BlockFeesGraphComponent implements OnInit {
if (tick.seriesIndex === 0) {
tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.3-3')} BTC<br>`;
} else if (tick.seriesIndex === 1) {
tooltip += `${tick.marker} ${tick.seriesName}: ${formatCurrency(tick.data[1], this.locale, getCurrencySymbol('USD', 'narrow'), 'USD', '1.0-0')}<br>`;
tooltip += `${tick.marker} ${tick.seriesName}: ${this.fiatCurrencyPipe.transform(tick.data[1], null, this.currency) }<br>`;
}
}
@ -184,7 +200,7 @@ export class BlockFeesGraphComponent implements OnInit {
icon: 'roundRect',
},
{
name: 'Fees USD',
name: 'Fees ' + this.currency,
inactiveColor: 'rgb(110, 112, 121)',
textStyle: {
color: 'white',
@ -216,7 +232,7 @@ export class BlockFeesGraphComponent implements OnInit {
axisLabel: {
color: 'rgb(110, 112, 121)',
formatter: function(val) {
return this.fiatShortenerPipe.transform(val);
return this.fiatShortenerPipe.transform(val, null, this.currency);
}.bind(this)
},
splitLine: {
@ -243,8 +259,8 @@ export class BlockFeesGraphComponent implements OnInit {
legendHoverLink: false,
zlevel: 1,
yAxisIndex: 1,
name: 'Fees USD',
data: data.blockFeesUSD,
name: 'Fees ' + this.currency,
data: data.blockFeesFiat,
type: 'line',
smooth: 0.25,
symbol: 'none',

View file

@ -1,16 +1,19 @@
import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';
import { EChartsOption, graphic } from 'echarts';
import { Observable } from 'rxjs';
import { Observable, Subscription } from 'rxjs';
import { map, share, startWith, switchMap, tap } from 'rxjs/operators';
import { ApiService } from '../../services/api.service';
import { SeoService } from '../../services/seo.service';
import { formatCurrency, formatNumber, getCurrencySymbol } from '@angular/common';
import { formatNumber } from '@angular/common';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils';
import { MiningService } from '../../services/mining.service';
import { StateService } from '../../services/state.service';
import { StorageService } from '../../services/storage.service';
import { ActivatedRoute } from '@angular/router';
import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe';
import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe';
import { fiatCurrencies } from '../../app.constants';
@Component({
selector: 'app-block-rewards-graph',
@ -44,16 +47,28 @@ export class BlockRewardsGraphComponent implements OnInit {
timespan = '';
chartInstance: any = undefined;
currencySubscription: Subscription;
currency: string;
constructor(
@Inject(LOCALE_ID) public locale: string,
private seoService: SeoService,
private apiService: ApiService,
private formBuilder: UntypedFormBuilder,
private miningService: MiningService,
private stateService: StateService,
private storageService: StorageService,
private route: ActivatedRoute,
private fiatShortenerPipe: FiatShortenerPipe,
private fiatCurrencyPipe: FiatCurrencyPipe,
) {
this.currencySubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
if (fiat && fiatCurrencies[fiat]?.indexed) {
this.currency = fiat;
} else {
this.currency = 'USD';
}
});
}
ngOnInit(): void {
@ -82,7 +97,7 @@ export class BlockRewardsGraphComponent implements OnInit {
tap((response) => {
this.prepareChartOptions({
blockRewards: response.body.map(val => [val.timestamp * 1000, val.avgRewards / 100000000, val.avgHeight]),
blockRewardsUSD: response.body.filter(val => val.USD > 0).map(val => [val.timestamp * 1000, val.avgRewards / 100000000 * val.USD, val.avgHeight]),
blockRewardsFiat: response.body.filter(val => val[this.currency] > 0).map(val => [val.timestamp * 1000, val.avgRewards / 100000000 * val[this.currency], val.avgHeight]),
});
this.isLoading = false;
}),
@ -157,7 +172,7 @@ export class BlockRewardsGraphComponent implements OnInit {
if (tick.seriesIndex === 0) {
tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.3-3')} BTC<br>`;
} else if (tick.seriesIndex === 1) {
tooltip += `${tick.marker} ${tick.seriesName}: ${formatCurrency(tick.data[1], this.locale, getCurrencySymbol('USD', 'narrow'), 'USD', '1.0-0')}<br>`;
tooltip += `${tick.marker} ${tick.seriesName}: ${this.fiatCurrencyPipe.transform(tick.data[1], null, this.currency)}<br>`;
}
}
@ -184,7 +199,7 @@ export class BlockRewardsGraphComponent implements OnInit {
icon: 'roundRect',
},
{
name: 'Rewards USD',
name: 'Rewards ' + this.currency,
inactiveColor: 'rgb(110, 112, 121)',
textStyle: {
color: 'white',
@ -228,7 +243,7 @@ export class BlockRewardsGraphComponent implements OnInit {
axisLabel: {
color: 'rgb(110, 112, 121)',
formatter: function(val) {
return this.fiatShortenerPipe.transform(val);
return this.fiatShortenerPipe.transform(val, null, this.currency);
}.bind(this)
},
splitLine: {
@ -251,8 +266,8 @@ export class BlockRewardsGraphComponent implements OnInit {
legendHoverLink: false,
zlevel: 1,
yAxisIndex: 1,
name: 'Rewards USD',
data: data.blockRewardsUSD,
name: 'Rewards ' + this.currency,
data: data.blockRewardsFiat,
type: 'line',
smooth: 0.25,
symbol: 'none',

View file

@ -90,6 +90,7 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
this.prepareChartOptions({
sizes: data.sizes.map(val => [val.timestamp * 1000, val.avgSize / 1000000, val.avgHeight]),
weights: data.weights.map(val => [val.timestamp * 1000, val.avgWeight / 1000000, val.avgHeight]),
sizePerWeight: data.weights.map((val, i) => [val.timestamp * 1000, data.sizes[i].avgSize / (val.avgWeight / 4), val.avgHeight]),
});
this.isLoading = false;
}),
@ -124,6 +125,7 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
color: [
'#FDD835',
'#D81B60',
'#039BE5',
],
grid: {
top: 30,
@ -153,6 +155,8 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.2-2')} MB`;
} else if (tick.seriesIndex === 1) { // Weight
tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.2-2')} MWU`;
} else if (tick.seriesIndex === 2) { // Size per weight
tooltip += `${tick.marker} ${tick.seriesName}: ${formatNumber(tick.data[1], this.locale, '1.2-2')} B/vB`;
}
tooltip += `<br>`;
}
@ -192,10 +196,19 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
},
icon: 'roundRect',
},
{
name: $localize`Size per weight`,
inactiveColor: 'rgb(110, 112, 121)',
textStyle: {
color: 'white',
},
icon: 'roundRect',
},
],
selected: JSON.parse(this.storageService.getValue('sizes_weights_legend')) ?? {
'Size': true,
'Weight': true,
'Size per weight': true,
}
},
yAxis: data.sizes.length === 0 ? undefined : [
@ -262,6 +275,18 @@ export class BlockSizesWeightsGraphComponent implements OnInit {
lineStyle: {
width: 2,
}
},
{
zlevel: 1,
yAxisIndex: 0,
name: $localize`Size per weight`,
showSymbol: false,
symbol: 'none',
data: data.sizePerWeight,
type: 'line',
lineStyle: {
width: 2,
}
}
],
dataZoom: [{

View file

@ -53,7 +53,7 @@
<td [innerHTML]="'&lrm;' + (block.weight | wuBytes: 2)"></td>
</tr>
<tr *ngIf="auditAvailable">
<td i18n="latest-blocks.health">Health</td>
<td><ng-container i18n="latest-blocks.health">Health</ng-container> <a class="info-link" [routerLink]="['/docs/faq' | relativeUrl ]" fragment="what-is-block-health"><fa-icon [icon]="['fas', 'info-circle']" [fixedWidth]="true"></fa-icon></a></td>
<td>
<span
class="health-badge badge"
@ -143,7 +143,7 @@
</ng-template>
</tr>
<tr *ngIf="network !== 'liquid' && network !== 'liquidtestnet'">
<td i18n="block.subsidy-and-fees|Total subsidy and fees in a block">Subsidy + fees:</td>
<td i18n="block.subsidy-and-fees|Total subsidy and fees in a block">Subsidy + fees</td>
<td>
<app-amount [satoshis]="block.extras.reward" digitsInfo="1.2-3" [noFiat]="true"></app-amount>
<span class="fiat">
@ -158,7 +158,7 @@
<td style="width: 75%;"><span class="skeleton-loader"></span></td>
</tr>
<tr *ngIf="network !== 'liquid' && network !== 'liquidtestnet'">
<td i18n="block.subsidy-and-fees|Total subsidy and fees in a block">Subsidy + fees:</td>
<td i18n="block.subsidy-and-fees|Total subsidy and fees in a block">Subsidy + fees</td>
<td><span class="skeleton-loader"></span></td>
</tr>
</ng-template>
@ -206,13 +206,13 @@
<div class="box" *ngIf="!error && webGlEnabled && showAudit">
<div class="nav nav-tabs" *ngIf="isMobile && showAudit">
<a class="nav-link" [class.active]="mode === 'projected'"
fragment="projected" (click)="changeMode('projected')"><ng-container i18n="block.projected">Projected</ng-container>&nbsp;&nbsp;<span class="badge badge-pill badge-warning" i18n="beta">beta</span></a>
fragment="projected" (click)="changeMode('projected')"><ng-container i18n="block.expected">Expected</ng-container>&nbsp;&nbsp;<span class="badge badge-pill badge-warning" i18n="beta">beta</span></a>
<a class="nav-link" [class.active]="mode === 'actual'" i18n="block.actual"
fragment="actual" (click)="changeMode('actual')">Actual</a>
</div>
<div class="row">
<div class="col-sm">
<h3 class="block-subtitle" *ngIf="!isMobile"><ng-container i18n="block.projected-block">Projected Block</ng-container> <span class="badge badge-pill badge-warning beta" i18n="beta">beta</span></h3>
<h3 class="block-subtitle" *ngIf="!isMobile"><ng-container i18n="block.expected-block">Expected Block</ng-container> <span class="badge badge-pill badge-warning beta" i18n="beta">beta</span></h3>
<div class="block-graph-wrapper">
<app-block-overview-graph #blockGraphProjected [isLoading]="isLoadingOverview" [resolution]="75"
[blockLimit]="stateService.blockVSize" [orientation]="'top'" [flip]="false" [mirrorTxid]="hoverTx" [auditHighlighting]="showAudit"
@ -221,7 +221,7 @@
</div>
</div>
<div class="col-sm" *ngIf="!isMobile">
<h3 class="block-subtitle" *ngIf="!isMobile" i18n="block.actual-block">Actual Block</h3>
<h3 class="block-subtitle actual" *ngIf="!isMobile"><ng-container i18n="block.actual-block">Actual Block</ng-container> <a class="info-link" [routerLink]="['/docs/faq' | relativeUrl ]" fragment="how-do-block-audits-work"><fa-icon [icon]="['fas', 'info-circle']" [fixedWidth]="true"></fa-icon></a></h3>
<div class="block-graph-wrapper">
<app-block-overview-graph #blockGraphActual [isLoading]="isLoadingOverview" [resolution]="75"
[blockLimit]="stateService.blockVSize" [orientation]="'top'" [flip]="false" [mirrorTxid]="hoverTx" mode="mined" [auditHighlighting]="showAudit"
@ -231,7 +231,7 @@
</div>
</div>
</div>
<ng-template [ngIf]="!isLoadingBlock && !error">
<div [hidden]="!showDetails" id="details">
<br>

View file

@ -34,9 +34,24 @@
text-align: left;
}
}
.info-link {
color: rgba(255, 255, 255, 0.4);
margin-left: 5px;
}
}
}
.block-subtitle.actual a {
position: absolute;
top: -3px;
}
.block-subtitle.actual fa-icon {
color: rgba(255, 255, 255, 0.4);
font-size: 18px;
margin-left: 8px;
}
h1 {
margin: 0px;
padding: 0px;

View file

@ -57,7 +57,7 @@ export class BlockComponent implements OnInit, OnDestroy {
transactionsError: any = null;
overviewError: any = null;
webGlEnabled = true;
indexingAvailable = false;
auditSupported: boolean = this.stateService.env.AUDIT && this.stateService.env.BASE_MODULE === 'mempool' && this.stateService.env.MINING_DASHBOARD === true;
auditModeEnabled: boolean = !this.stateService.hideAudit.value;
auditAvailable = true;
showAudit: boolean;
@ -109,13 +109,14 @@ export class BlockComponent implements OnInit, OnDestroy {
this.timeLtr = !!ltr;
});
this.indexingAvailable = (this.stateService.env.BASE_MODULE === 'mempool' && this.stateService.env.MINING_DASHBOARD === true);
this.setAuditAvailable(this.indexingAvailable);
this.setAuditAvailable(this.auditSupported);
this.auditPrefSubscription = this.stateService.hideAudit.subscribe((hide) => {
this.auditModeEnabled = !hide;
this.showAudit = this.auditAvailable && this.auditModeEnabled;
});
if (this.auditSupported) {
this.auditPrefSubscription = this.stateService.hideAudit.subscribe((hide) => {
this.auditModeEnabled = !hide;
this.showAudit = this.auditAvailable && this.auditModeEnabled;
});
}
this.txsLoadingStatus$ = this.route.paramMap
.pipe(
@ -221,7 +222,9 @@ export class BlockComponent implements OnInit, OnDestroy {
setTimeout(() => {
this.nextBlockSubscription = this.apiService.getBlock$(block.previousblockhash).subscribe();
this.nextBlockTxListSubscription = this.electrsApiService.getBlockTransactions$(block.previousblockhash).subscribe();
this.apiService.getBlockAudit$(block.previousblockhash);
if (this.auditSupported) {
this.apiService.getBlockAudit$(block.previousblockhash);
}
}, 100);
}
this.updateAuditAvailableFromBlockHeight(block.height);
@ -269,7 +272,7 @@ export class BlockComponent implements OnInit, OnDestroy {
this.isLoadingOverview = false;
});
if (!this.indexingAvailable) {
if (!this.auditSupported) {
this.overviewSubscription = block$.pipe(
startWith(null),
pairwise(),
@ -300,7 +303,7 @@ export class BlockComponent implements OnInit, OnDestroy {
});
}
if (this.indexingAvailable) {
if (this.auditSupported) {
this.auditSubscription = block$.pipe(
startWith(null),
pairwise(),
@ -605,7 +608,7 @@ export class BlockComponent implements OnInit, OnDestroy {
setAuditAvailable(available: boolean): void {
this.auditAvailable = available;
this.showAudit = this.auditAvailable && this.auditModeEnabled;
this.showAudit = this.auditAvailable && this.auditModeEnabled && this.auditSupported;
}
toggleAuditMode(): void {
@ -613,6 +616,9 @@ export class BlockComponent implements OnInit, OnDestroy {
}
updateAuditAvailableFromBlockHeight(blockHeight: number): void {
if (!this.auditSupported) {
this.setAuditAvailable(false);
}
switch (this.stateService.network) {
case 'testnet':
if (blockHeight < this.stateService.env.TESTNET_BLOCK_AUDIT_START_HEIGHT) {

View file

@ -1,64 +1,86 @@
<div class="blocks-container blockchain-blocks-container" [class.time-ltr]="timeLtr" [style.left]="static ? (offset || 0) + 'px' : null" *ngIf="(loadingBlocks$ | async) === false; else loadingBlocksTemplate">
<div class="blocks-container blockchain-blocks-container" [class.time-ltr]="timeLtr"
[style.left]="static ? (offset || 0) + 'px' : null"
*ngIf="(loadingBlocks$ | async) === false; else loadingBlocksTemplate">
<div *ngFor="let block of blocks; let i = index; trackBy: trackByBlocksFn">
<ng-container *ngIf="block && !block.loading && !block.placeholder; else placeholderBlock">
<div [attr.data-cy]="'bitcoin-block-' + i" class="text-center bitcoin-block mined-block blockchain-blocks-{{ i }}" id="bitcoin-block-{{ block.height }}" [ngStyle]="blockStyles[i]" [class.blink-bg]="(specialBlocks[block.height] !== undefined)">
<div [attr.data-cy]="'bitcoin-block-offset-' + offset + '-index-' + i"
class="text-center bitcoin-block mined-block blockchain-blocks-offset-{{ offset }}-index-{{ i }}"
id="bitcoin-block-{{ block.height }}" [ngStyle]="blockStyles[i]"
[class.blink-bg]="(specialBlocks[block.height] !== undefined)">
<a draggable="false" [routerLink]="['/block/' | relativeUrl, block.id]" [state]="{ data: { block: block } }"
class="blockLink" [ngClass]="{'disabled': (this.stateService.blockScrolling$ | async)}">&nbsp;</a>
<div [attr.data-cy]="'bitcoin-block-' + i + '-height'" class="block-height">
<a [routerLink]="['/block/' | relativeUrl, block.id]" [state]="{ data: { block: block } }">{{ block.height }}</a>
<a [routerLink]="['/block/' | relativeUrl, block.id]" [state]="{ data: { block: block } }">{{ block.height
}}</a>
</div>
<div class="block-body">
<div [attr.data-cy]="'bitcoin-block-' + i + '-fees'" class="fees">
~{{ block?.extras?.medianFee | number:feeRounding }} <ng-container i18n="shared.sat-vbyte|sat/vB">sat/vB</ng-container>
<div [attr.data-cy]="'bitcoin-block-offset=' + offset + '-index-' + i + '-fees'" class="fees">
~{{ block?.extras?.medianFee | number:feeRounding }} <ng-container
i18n="shared.sat-vbyte|sat/vB">sat/vB</ng-container>
</div>
<div [attr.data-cy]="'bitcoin-block-' + i + '-fee-span'" class="fee-span" *ngIf="block?.extras?.feeRange">
{{ block?.extras?.feeRange?.[1] | number:feeRounding }} - {{ block?.extras?.feeRange[block?.extras?.feeRange?.length - 1] | number:feeRounding }} <ng-container i18n="shared.sat-vbyte|sat/vB">sat/vB</ng-container>
<div [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i + '-fee-span'" class="fee-span"
*ngIf="block?.extras?.feeRange">
{{ block?.extras?.feeRange?.[1] | number:feeRounding }} - {{
block?.extras?.feeRange[block?.extras?.feeRange?.length - 1] | number:feeRounding }} <ng-container
i18n="shared.sat-vbyte|sat/vB">sat/vB</ng-container>
</div>
<div [attr.data-cy]="'bitcoin-block-' + i + '-fee-span'" class="fee-span" *ngIf="!block?.extras?.feeRange">
<div [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i + '-fee-span'" class="fee-span"
*ngIf="!block?.extras?.feeRange">
&nbsp;
</div>
<div [attr.data-cy]="'bitcoin-block-' + i + '-total-fees'" *ngIf="showMiningInfo" class="block-size">
<div [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i + '-total-fees'" *ngIf="showMiningInfo"
class="block-size">
<app-amount [satoshis]="block.extras?.totalFees ?? 0" digitsInfo="1.2-3" [noFiat]="true"></app-amount>
</div>
<div [attr.data-cy]="'bitcoin-block-' + i + 'block-size'" *ngIf="!showMiningInfo" class="block-size" [innerHTML]="'&lrm;' + (block.size | bytes: 2)"></div>
<div [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i + 'block-size'" *ngIf="!showMiningInfo"
class="block-size" [innerHTML]="'&lrm;' + (block.size | bytes: 2)"></div>
<div [attr.data-cy]="'bitcoin-block-' + i + '-transactions'" class="transaction-count">
<ng-container *ngTemplateOutlet="block.tx_count === 1 ? transactionsSingular : transactionsPlural; context: {$implicit: block.tx_count | number}"></ng-container>
<ng-template #transactionsSingular let-i i18n="shared.transaction-count.singular">{{ i }} transaction</ng-template>
<ng-template #transactionsPlural let-i i18n="shared.transaction-count.plural">{{ i }} transactions</ng-template>
<ng-container
*ngTemplateOutlet="block.tx_count === 1 ? transactionsSingular : transactionsPlural; context: {$implicit: block.tx_count | number}"></ng-container>
<ng-template #transactionsSingular let-i i18n="shared.transaction-count.singular">{{ i }}
transaction</ng-template>
<ng-template #transactionsPlural let-i i18n="shared.transaction-count.plural">{{ i }}
transactions</ng-template>
</div>
<div [attr.data-cy]="'bitcoin-block-' + i + '-time'" class="time-difference"><app-time-since [time]="block.timestamp" [fastRender]="true"></app-time-since></div>
<div [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i + '-time'" class="time-difference">
<app-time-since [time]="block.timestamp" [fastRender]="true"></app-time-since></div>
</div>
<div class="animated" [class]="showMiningInfo ? 'show' : 'hide'" *ngIf="block.extras?.pool != undefined">
<a [attr.data-cy]="'bitcoin-block-' + i + '-pool'" class="badge badge-primary" [routerLink]="[('/mining/pool/' + block.extras.pool.slug) | relativeUrl]">
<a [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i + '-pool'" class="badge badge-primary"
[routerLink]="[('/mining/pool/' + block.extras.pool.slug) | relativeUrl]">
{{ block.extras.pool.name}}</a>
</div>
</div>
</ng-container>
<ng-template #placeholderBlock>
<ng-container *ngIf="block && block.placeholder; else loadingBlock">
<div [attr.data-cy]="'bitcoin-block-' + i" class="text-center bitcoin-block mined-block placeholder-block blockchain-blocks-{{ i }}" id="bitcoin-block-{{ block.height }}" [ngStyle]="blockStyles[i]">
<div [attr.data-cy]="'bitcoin-block-' + offset + '-index-' + i"
class="text-center bitcoin-block mined-block placeholder-block blockchain-blocks-{{ i }}"
id="bitcoin-block-{{ block.height }}" [ngStyle]="blockStyles[i]">
</div>
</ng-container>
</ng-template>
<ng-template #loadingBlock>
<ng-container *ngIf="block && block.loading">
<div class="flashing">
<div class="text-center bitcoin-block mined-block" id="bitcoin-block-{{ block.height }}" [ngStyle]="blockStyles[i]"></div>
<div class="text-center bitcoin-block mined-block" id="bitcoin-block-{{ block.height }}"
[ngStyle]="blockStyles[i]"></div>
</div>
</ng-container>
</ng-template>
</div>
<div [hidden]="!arrowVisible" id="arrow-up" [style.transition]="arrowTransition" [ngStyle]="{'left': arrowLeftPx + 'px' }"></div>
<div [hidden]="!arrowVisible" id="arrow-up" [style.transition]="arrowTransition"
[ngStyle]="{'left': arrowLeftPx + 'px' }"></div>
</div>
<ng-template #loadingBlocksTemplate>
<div class="blocks-container" [class.time-ltr]="timeLtr">
<div class="flashing">
<div *ngFor="let block of emptyBlocks; let i = index; trackBy: trackByBlocksFn" >
<div class="text-center bitcoin-block mined-block" id="bitcoin-block-{{ block.height }}" [ngStyle]="emptyBlockStyles[i]"></div>
<div *ngFor="let block of emptyBlocks; let i = index; trackBy: trackByBlocksFn">
<div class="text-center bitcoin-block mined-block" id="bitcoin-block-{{ block.height }}"
[ngStyle]="emptyBlockStyles[i]"></div>
</div>
</div>
</div>
</ng-template>

View file

@ -14,7 +14,7 @@
i18n-ngbTooltip="mining.pool-name" ngbTooltip="Pool" placement="bottom" #miningpool [disableTooltip]="!isEllipsisActive(miningpool)">Pool</th>
<th class="timestamp" i18n="latest-blocks.timestamp" *ngIf="!widget" [class]="indexingAvailable ? '' : 'legacy'">Timestamp</th>
<th class="mined" i18n="latest-blocks.mined" *ngIf="!widget" [class]="indexingAvailable ? '' : 'legacy'">Mined</th>
<th *ngIf="indexingAvailable" class="health text-right" i18n="latest-blocks.health" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}"
<th *ngIf="auditAvailable" class="health text-right" i18n="latest-blocks.health" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}"
i18n-ngbTooltip="latest-blocks.health" ngbTooltip="Health" placement="bottom" #health [disableTooltip]="!isEllipsisActive(health)">Health</th>
<th *ngIf="indexingAvailable" class="reward text-right" i18n="latest-blocks.reward" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}"
i18n-ngbTooltip="latest-blocks.reward" ngbTooltip="Reward" placement="bottom" #reward [disableTooltip]="!isEllipsisActive(reward)">Reward</th>
@ -45,7 +45,7 @@
<td class="mined" *ngIf="!widget" [class]="indexingAvailable ? '' : 'legacy'">
<app-time-since [time]="block.timestamp" [fastRender]="true"></app-time-since>
</td>
<td *ngIf="indexingAvailable" class="health text-right" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}">
<td *ngIf="auditAvailable" class="health text-right" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}">
<a
class="health-badge badge"
[class.badge-success]="auditScores[block.id] >= 99"
@ -98,7 +98,7 @@
<td class="mined" *ngIf="!widget" [class]="indexingAvailable ? '' : 'legacy'">
<span class="skeleton-loader" style="max-width: 125px"></span>
</td>
<td *ngIf="indexingAvailable" class="health text-left" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}">
<td *ngIf="auditAvailable" class="health text-left" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}">
<span class="skeleton-loader" style="max-width: 75px"></span>
</td>
<td *ngIf="indexingAvailable" class="reward text-right" [ngClass]="{'widget': widget, 'legacy': !indexingAvailable}">
@ -123,8 +123,10 @@
(pageChange)="pageChange(page)" [boundaryLinks]="true" [ellipses]="false">
</ngb-pagination>
<div class="clearfix"></div>
<br>
<ng-template [ngIf]="!widget">
<div class="clearfix"></div>
<br>
</ng-template>
</div>
</div>

View file

@ -22,6 +22,7 @@ export class BlocksList implements OnInit, OnDestroy {
latestScoreSubscription: Subscription;
indexingAvailable = false;
auditAvailable = false;
isLoading = true;
loadingScores = true;
fromBlockHeight = undefined;
@ -44,6 +45,7 @@ export class BlocksList implements OnInit, OnDestroy {
ngOnInit(): void {
this.indexingAvailable = (this.stateService.env.BASE_MODULE === 'mempool' &&
this.stateService.env.MINING_DASHBOARD === true);
this.auditAvailable = this.indexingAvailable && this.stateService.env.AUDIT;
if (!this.widget) {
this.websocketService.want(['blocks']);
@ -111,7 +113,7 @@ export class BlocksList implements OnInit, OnDestroy {
}, [])
);
if (this.indexingAvailable) {
if (this.indexingAvailable && this.auditAvailable) {
this.auditScoreSubscription = this.fromHeightSubject.pipe(
switchMap((fromBlockHeight) => {
this.loadingScores = true;

View file

@ -0,0 +1,5 @@
<div [formGroup]="fiatForm" class="text-small text-center">
<select formControlName="fiat" class="custom-select custom-select-sm form-control-secondary form-control mx-auto" style="width: 200px;" (change)="changeFiat()">
<option *ngFor="let currency of currencies" [value]="currency[1].code">{{ currency[1].name + " (" + currency[1].code + ")" }}</option>
</select>
</div>

View file

@ -0,0 +1,45 @@
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';
import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
import { StorageService } from '../../services/storage.service';
import { fiatCurrencies } from '../../app.constants';
import { StateService } from '../../services/state.service';
@Component({
selector: 'app-fiat-selector',
templateUrl: './fiat-selector.component.html',
styleUrls: ['./fiat-selector.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class FiatSelectorComponent implements OnInit {
fiatForm: UntypedFormGroup;
currencies = Object.entries(fiatCurrencies).sort((a: any, b: any) => {
if (a[1].name < b[1].name) {
return -1;
}
if (a[1].name > b[1].name) {
return 1;
}
return 0;
});
constructor(
private formBuilder: UntypedFormBuilder,
private stateService: StateService,
private storageService: StorageService,
) { }
ngOnInit() {
this.fiatForm = this.formBuilder.group({
fiat: ['USD']
});
this.stateService.fiatCurrency$.subscribe((fiat) => {
this.fiatForm.get('fiat')?.setValue(fiat);
});
}
changeFiat() {
const newFiat = this.fiatForm.get('fiat')?.value;
this.storageService.setValue('fiat-preference', newFiat);
this.stateService.fiatCurrency$.next(newFiat);
}
}

View file

@ -22,7 +22,7 @@
i18n="mining.block-rewards">Block Rewards</a>
<a class="dropdown-item" routerLinkActive="active"
[routerLink]="['/graphs/mining/block-sizes-weights' | relativeUrl]" i18n="mining.block-sizes-weights">Block Sizes and Weights</a>
<a class="dropdown-item" routerLinkActive="active"
<a *ngIf="stateService.env.AUDIT" class="dropdown-item" routerLinkActive="active"
[routerLink]="['/graphs/mining/block-prediction' | relativeUrl]" i18n="mining.block-prediction-accuracy">Block Prediction Accuracy</a>
</div>
</div>

View file

@ -1,5 +1,5 @@
<div [formGroup]="languageForm" class="text-small text-center">
<select formControlName="language" class="custom-select custom-select-sm form-control-secondary form-control mx-auto" style="width: 130px;" (change)="changeLanguage()">
<select formControlName="language" class="custom-select custom-select-sm form-control-secondary form-control mx-auto" style="width: 200px;" (change)="changeLanguage()">
<option *ngFor="let lang of languages" [value]="lang.code">{{ lang.name }}</option>
</select>
</div>

View file

@ -74,4 +74,24 @@
</div>
</div>
<div class="pref-selectors">
<div class="selector">
<app-language-selector></app-language-selector>
</div>
<div class="selector">
<app-fiat-selector></app-fiat-selector>
</div>
</div>
<div class="terms-of-service">
<a [routerLink]="['/terms-of-service']" i18n="shared.terms-of-service|Terms of Service">Terms of Service</a>
|
<a [routerLink]="['/privacy-policy']" i18n="shared.privacy-policy|Privacy Policy">Privacy Policy</a>
|
<a [routerLink]="['/tx/push' | relativeUrl]" i18n="shared.broadcast-transaction|Broadcast Transaction">Broadcast Transaction</a>
</div>
<br>
</div>

View file

@ -103,4 +103,23 @@
margin-bottom: 10px;
text-decoration: none;
color: inherit;
}
.terms-of-service {
margin-top: 1rem;
}
.pref-selectors {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
.selector {
margin-left: .5em;
margin-bottom: .5em;
&:first {
margin-left: 0;
}
}
}

View file

@ -176,7 +176,7 @@ export class PoolRankingComponent implements OnInit {
// 'Other'
data.push({
itemStyle: {
color: 'grey',
color: '#6b6b6b',
},
value: totalShareOther,
name: 'Other' + (isMobile() ? `` : ` (${totalShareOther.toFixed(2)}%)`),

View file

@ -235,10 +235,10 @@
</span>
</td>
<td class="reward text-right">
<app-amount [satoshis]="block.extras.reward" digitsInfo="1.2-2"></app-amount>
<app-amount [satoshis]="block.extras.reward" digitsInfo="1.2-2" [noFiat]="true"></app-amount>
</td>
<td class="fees text-right">
<app-amount [satoshis]="block.extras.totalFees" digitsInfo="1.2-2"></app-amount>
<app-amount [satoshis]="block.extras.totalFees" digitsInfo="1.2-2" [noFiat]="true"></app-amount>
</td>
<td class="txs text-right">
{{ block.tx_count | number }}

View file

@ -17,7 +17,7 @@
<app-blockchain [pageIndex]="pageIndex" [pages]="pages" [blocksPerPage]="blocksPerPage" [minScrollWidth]="minScrollWidth"></app-blockchain>
</div>
<div class="reset-scroll" [class.hidden]="pageIndex === 0" (click)="resetScroll()">
<fa-icon [icon]="['fas', 'circle-left']" [fixedWidth]="true" i18n-title="blocks.return-to-tip" title="Return to tip"></fa-icon>
<fa-icon [icon]="['fas', 'circle-left']" [fixedWidth]="true"></fa-icon>
</div>
</div>

View file

@ -300,6 +300,10 @@ export class StartComponent implements OnInit, OnDestroy {
}
ngOnDestroy() {
if (this.blockchainContainer?.nativeElement) {
// clean up scroll position to prevent caching wrong scroll in Firefox
this.blockchainContainer.nativeElement.scrollLeft = 0;
}
this.timeLtrSubscription.unsubscribe();
this.chainTipSubscription.unsubscribe();
this.markBlockSubscription.unsubscribe();

View file

@ -122,7 +122,7 @@
<thead>
<th class="table-cell-txid" i18n="dashboard.latest-transactions.txid">TXID</th>
<th class="table-cell-satoshis" i18n="dashboard.latest-transactions.amount">Amount</th>
<th class="table-cell-fiat" *ngIf="(network$ | async) === ''" i18n="dashboard.latest-transactions.USD">USD</th>
<th class="table-cell-fiat" *ngIf="(network$ | async) === ''">{{ currency }}</th>
<th class="table-cell-fees" i18n="transaction.fee|Transaction fee">Fee</th>
</thead>
<tbody>
@ -144,7 +144,14 @@
</div>
</div>
<app-language-selector></app-language-selector>
<div class="pref-selectors">
<div class="selector">
<app-language-selector></app-language-selector>
</div>
<div class="selector">
<app-fiat-selector></app-fiat-selector>
</div>
</div>
<div class="terms-of-service">
<a [routerLink]="['/terms-of-service']" i18n="shared.terms-of-service|Terms of Service">Terms of Service</a>

View file

@ -323,4 +323,19 @@
margin-bottom: 10px;
text-decoration: none;
color: inherit;
}
.pref-selectors {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
.selector {
margin-left: .5em;
margin-bottom: .5em;
&:first {
margin-left: 0;
}
}
}

View file

@ -1,5 +1,5 @@
import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, OnInit } from '@angular/core';
import { combineLatest, merge, Observable, of } from 'rxjs';
import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core';
import { combineLatest, merge, Observable, of, Subscription } from 'rxjs';
import { filter, map, scan, share, switchMap, tap } from 'rxjs/operators';
import { BlockExtended, OptimizedMempoolStats } from '../interfaces/node-api.interface';
import { MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface';
@ -7,7 +7,6 @@ import { ApiService } from '../services/api.service';
import { StateService } from '../services/state.service';
import { WebsocketService } from '../services/websocket.service';
import { SeoService } from '../services/seo.service';
import { StorageService } from '../services/storage.service';
interface MempoolBlocksData {
blocks: number;
@ -32,7 +31,7 @@ interface MempoolStatsData {
styleUrls: ['./dashboard.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class DashboardComponent implements OnInit {
export class DashboardComponent implements OnInit, OnDestroy {
featuredAssets$: Observable<any>;
network$: Observable<string>;
mempoolBlocksData$: Observable<MempoolBlocksData>;
@ -47,16 +46,20 @@ export class DashboardComponent implements OnInit {
transactionsWeightPerSecondOptions: any;
isLoadingWebSocket$: Observable<boolean>;
liquidPegsMonth$: Observable<any>;
currencySubscription: Subscription;
currency: string;
constructor(
@Inject(LOCALE_ID) private locale: string,
public stateService: StateService,
private apiService: ApiService,
private websocketService: WebsocketService,
private seoService: SeoService,
private storageService: StorageService,
private seoService: SeoService
) { }
ngOnDestroy(): void {
this.currencySubscription.unsubscribe();
}
ngOnInit(): void {
this.isLoadingWebSocket$ = this.stateService.isLoadingWebSocket$;
this.seoService.resetTitle();
@ -213,6 +216,10 @@ export class DashboardComponent implements OnInit {
share(),
);
}
this.currencySubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
this.currency = fiat;
});
}
handleNewMempoolData(mempoolStats: OptimizedMempoolStats[]) {

View file

@ -8667,6 +8667,22 @@ export const faqData = [
fragment: "why-dont-fee-ranges-match",
title: "Why doesn't the fee range shown for a block match the feerates of transactions within the block?",
},
{
type: "endpoint",
category: "advanced",
showConditions: bitcoinNetworks,
options: { auditOnly: true },
fragment: "how-do-block-audits-work",
title: "How do block audits work?",
},
{
type: "endpoint",
category: "advanced",
showConditions: bitcoinNetworks,
options: { auditOnly: true },
fragment: "what-is-block-health",
title: "What is block health?",
},
{
type: "category",
category: "self-hosting",

View file

@ -1,4 +1,4 @@
<div *ngFor="let item of tabData">
<p *ngIf="( item.type === 'category' ) && ( item.showConditions.indexOf(network.val) > -1 )">{{ item.title }}</p>
<a *ngIf="( item.type !== 'category' ) && ( item.showConditions.indexOf(network.val) > -1 )" [routerLink]="['./']" fragment="{{ item.fragment }}" (click)="navLinkClick($event)">{{ item.title }}</a>
<a *ngIf="( item.type !== 'category' ) && ( item.showConditions.indexOf(network.val) > -1 ) && ( !item.hasOwnProperty('options') || ( item.hasOwnProperty('options') && item.options.hasOwnProperty('auditOnly') && item.options.auditOnly && auditEnabled ) )" [routerLink]="['./']" fragment="{{ item.fragment }}" (click)="navLinkClick($event)">{{ item.title }}</a>
</div>

View file

@ -1,4 +1,5 @@
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { Env, StateService } from '../../services/state.service';
import { restApiDocsData } from './api-docs-data';
import { faqData } from './api-docs-data';
@ -12,11 +13,17 @@ export class ApiDocsNavComponent implements OnInit {
@Input() network: any;
@Input() whichTab: string;
@Output() navLinkClickEvent: EventEmitter<any> = new EventEmitter();
env: Env;
tabData: any[];
auditEnabled: boolean;
constructor() { }
constructor(
private stateService: StateService
) { }
ngOnInit(): void {
this.env = this.stateService.env;
this.auditEnabled = this.env.AUDIT;
if (this.whichTab === 'rest') {
this.tabData = restApiDocsData;
} else if (this.whichTab === 'faq') {

View file

@ -15,11 +15,13 @@
</div>
<div class="doc-item-container" *ngFor="let item of faq">
<h3 *ngIf="item.type === 'category'">{{ item.title }}</h3>
<div *ngIf="item.type !== 'category'" class="endpoint-container" id="{{ item.fragment }}">
<a id="{{ item.fragment + '-tab-header' }}" class="section-header" (click)="anchorLinkClick( $event )" [routerLink]="['./']" fragment="{{ item.fragment }}"><table><tr><td>{{ item.title }}</td><td><span>{{ item.category }}</span></td></tr></table></a>
<div class="endpoint-content">
<ng-container *ngTemplateOutlet="dict[item.fragment]" class="endpoint"></ng-container>
<div *ngIf="!item.hasOwnProperty('options') || ( item.hasOwnProperty('options') && item.options.hasOwnProperty('auditOnly') && item.options.auditOnly && auditEnabled )">
<h3 *ngIf="item.type === 'category'">{{ item.title }}</h3>
<div *ngIf="item.type !== 'category'" class="endpoint-container" id="{{ item.fragment }}">
<a id="{{ item.fragment + '-tab-header' }}" class="section-header" (click)="anchorLinkClick( $event )" [routerLink]="['./']" fragment="{{ item.fragment }}"><table><tr><td>{{ item.title }}</td><td><span>{{ item.category }}</span></td></tr></table></a>
<div class="endpoint-content">
<ng-container *ngTemplateOutlet="dict[item.fragment]" class="endpoint"></ng-container>
</div>
</div>
</div>
</div>
@ -214,8 +216,46 @@
<ng-template type="why-dont-fee-ranges-match">
<p>Mempool aims to show you the <i>effective feerate</i> range for blocks—how much would you actually need to pay to get a transaction included in a block.</p>
<p>A transaction's effective feerate is not always the same as the feerate explicitly set for it. For example, if you see a 1 s/vb transaction in a block with a displayed feerate range of 5 s/vb to 72 s/vb, chances are that 1 s/vb transaction had a high-feerate child transaction that boosted its effective feerate to 5 s/vb or higher (this is how CPFP fee-bumping works). In such a case, it would be misleading to use 1 s/vb as the lower bound of the block's feerate range because it actually required more than 1 s/vb to confirm that transaction in that block.</p>
<p>For unconfirmed CPFP transactions, Mempool will show the effective feerate (along with descendent & ancestor transaction information) on the transaction page. For confirmed transactions, CPFP relationships are not stored, so this additional information is not shown.</p>
<p>A transaction's effective feerate is not always the same as the feerate explicitly set for it. For example, if you see a 1 s/vb transaction in a block with a displayed feerate range of 5 s/vb to 72 s/vb, chances are that 1 s/vb transaction had a high-feerate child transaction that boosted its effective feerate to 5 s/vb or higher (this is how CPFP fee-bumping works). In such a case, it would be misleading to use 1 s/vb as the lower bound of the block's feerate range since it actually required more than 1 s/vb to confirm that transaction in that block.</p>
<p>You can find a transaction's feerate on its transaction details page. If the transaction has any CPFP relationships, the page will also show the transaction's effective feerate along with links to descendent and/or ancestor transactions.</p>
</ng-template>
<ng-template type="how-do-block-audits-work">
<p>A block audit visually compares Mempool's expected block to the actual block for a particular block height.</p>
<p>How is the expected block determined? Mempool monitors its view of the mempool and runs a re-implementation of Bitcoin Core's transaction selection algorithm to determine the transactions it expects to see in upcoming blocks (<a href="https://github.com/mempool/mempool/blob/master/backend/src/api/mempool-blocks.ts" target="_blank">source code here</a>). Since there is a continual flow of new transactions, this algorithm runs every 2 seconds, and as a result, you will see the transactions <a href="/mempool-block/0">projected to be in upcoming blocks</a> change in near real-time.</p>
<p>At the moment a new block is mined, Mempool saves a snapshot of its projected block template for the next block. We call this snapshot the <b>expected block</b> for the block height in question, and it serves as the basis for the block audit.</p>
<p>When details for an expected block and actual block are available, we can compare them. <b>The purpose of block audits is to deduce when miners intentionally include or exclude transactions from blocks they mine.</b> Since this information cannot be precisely known, Mempool uses a handful of heuristics to accomplish this.</p>
<p>Block audits highlight transactions in different colors to convey these heuristics:</p>
<ul class="no-bull block-audit">
<li><span class="block-audit-highlight-color added"></span><code>Added</code><p>A transaction is highlighted blue if it is not present in the expected block, present in the actual block, and also either:</p>
<ul>
<li>far out of the expected feerate range, meaning the miner may have intentionally prioritized the transaction</li>
<li>not in the mempool at all, meaning the miner may have accepted the transaction out-of-band</li>
</ul>
<p>Added transactions do not negatively affect <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="what-is-block-health">block health</a>.</p></li>
<li><span class="block-audit-highlight-color recent"></span><code>Recently broadcasted</code><p>A transaction is highlighted dark pink if it is present in the expected block, not present in the actual block, and was first seen by Mempool's Bitcoin node within 3 minutes of the block being mined.</p><p>Due to network latency and other factors, it can take time for a miner's Bitcoin nodes to receive a transaction, so we do not assume a miner has intentionally excluded such a transaction from a block.</p><p>Recently-broadcasted transactions do not negatively affect <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="what-is-block-health">block health</a>.</p></li>
<li><span class="block-audit-highlight-color marginal"></span><code>Marginal fee</code>
<p>A transaction is darkened if it is in the low end of the expected feerate range and missing in either the expected block or the actual block.</p><p>Such a transaction may have been displaced by an added transaction, or it may have been displaced by another transaction from the mempool that was also at the low end of the expected feerate range for the block. In either case, the deviation is not considered notable.</p>
<p>Marginal fee transactions do not negatively affect <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="what-is-block-health">block health</a>.</p></li>
<li><span class="block-audit-highlight-color removed"></span><code>Removed</code><p>A transaction is highlighted bright pink if it is present in the expected block, not present in the actual block, and qualifies as neither recently-broadcasted nor marginal-fee. In other words, it has been in the mempool long enough to be widely propagated and has a feerate that is well within the range expected for the block. There is a chance such a transaction may have been intentionally excluded from the block.<p>Removed transactions do negatively affect <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="what-is-block-health">block health</a>.</p></li>
</ul>
<p>See how results of the block audit are used to devise the block health score <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="what-is-block-health">below</a>.</p>
<p class='note'>Because of this feature's resource usage and availability requirements, it is only supported on official mempool.space instances.</p>
</ng-template>
<ng-template type="what-is-block-health">
<p>Block health is a measure of how many transactions appear to be intentionally excluded from a block—a block without any transactions that appear intentionally excluded will have 100% health, while a block with 1 or more transactions that appear intentionally excluded will have sub-100% health.</p>
<p>How is it calculated? Let <span class='math'>s<sub>expected</sub></span> be the set of all transactions in Mempool's expected block and let <span class='math'>s<sub>actual</sub></span> be the set of all transactions in the actual block. Then let <span class='math'>n</span> be the number of all transactions in both <span class='math'>s<sub>expected</sub></span> and <span class='math'>s<sub>actual</sub></span>.</p>
<p>Furthermore, let <span class='math'>r</span> be the number of transactions Mempool deduces were <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="how-do-block-audits-work">intentionally excluded</a> from <span class='math'>s<sub>actual</sub></span>.</p>
<p>Block health is calculated as <span class='math'>n / ( n + r</span> ).</p>
<p>The number of transactions appearing in both <span class='math'>s<sub>expected</sub></span> and <span class='math'>s<sub>actual</sub></span> is used (instead of a block's full transaction count) in order to minimize chances that block health is inadvertently impacted by transactions that were most likely not intentionally excluded:</p>
<ul>
<li>recently-broadcast transactions, since the miner may simply not have received them</li>
<li>certain low-feerate transactions, since the miner may have opted to replace them with more profitable out-of-band transactions</li>
</ul>
<p>As a result, block health is <i>not</i> intended to be a measure of how closely an expected block resembles an actual block. The actual block can be vastly different from the expected block, but if no transactions appear to be intentionally excluded, it will have a high health rating (<a [routerLink]="['/block/0000000000000000000515e202c8ae73c8155fc472422d7593af87aa74f2cf3d']">extreme example</a>).</p>
<p>See more context in our FAQ on <a [routerLink]="['/docs/faq' | relativeUrl]" fragment="how-do-block-audits-work">block audits</a>.</p>
<p class='note'>Because of this feature's resource usage and availability requirements, it is only supported on official mempool.space instances.</p>
</ng-template>
<ng-template type="who-runs-this-website">

View file

@ -21,6 +21,12 @@ code {
font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New;
}
.math {
font-family: monospace;
margin-left: 4px;
margin-right: 4px;
}
tr {
white-space: inherit;
}
@ -36,6 +42,48 @@ li.nav-item {
}
}
ul.no-bull {
list-style: none;
}
ul.no-bull.block-audit li code {
text-transform: uppercase;
}
ul.no-bull.block-audit li span {
margin-right: 10px;
}
ul.no-bull.block-audit li span.block-audit-highlight-color.added {
color: #0099ff;
}
ul.no-bull.block-audit li span.block-audit-highlight-color.removed {
color: #f344df;
}
ul.no-bull.block-audit li span.block-audit-highlight-color.recent {
color: #8a3480;
}
ul.no-bull.block-audit li span.block-audit-highlight-color.marginal {
color: #414127;
}
ul.no-bull.block-audit li p {
margin-left: 25px;
margin-top: 5px;
}
ul.no-bull.block-audit li ul {
margin-left: 15px;
margin-bottom: 15px;
}
ul.no-bull.block-audit code{
background-color: inherit;
}
.doc-welcome-note {
margin-bottom: 0;
}

View file

@ -1,7 +1,7 @@
import { Component, OnInit, Input, QueryList, AfterViewInit, ViewChildren } from '@angular/core';
import { Env, StateService } from '../../services/state.service';
import { Observable, merge, of } from 'rxjs';
import { tap } from 'rxjs/operators';
import { Observable, merge, of, Subject } from 'rxjs';
import { tap, takeUntil } from 'rxjs/operators';
import { ActivatedRoute } from "@angular/router";
import { faqData, restApiDocsData, wsApiDocsData } from './api-docs-data';
import { FaqTemplateDirective } from '../faq-template/faq-template.component';
@ -12,6 +12,7 @@ import { FaqTemplateDirective } from '../faq-template/faq-template.component';
styleUrls: ['./api-docs.component.scss']
})
export class ApiDocsComponent implements OnInit, AfterViewInit {
private destroy$: Subject<any> = new Subject<any>();
plainHostname = document.location.hostname;
electrsPort = 0;
hostname = document.location.hostname;
@ -27,6 +28,7 @@ export class ApiDocsComponent implements OnInit, AfterViewInit {
wsDocs: any;
screenWidth: number;
officialMempoolInstance: boolean;
auditEnabled: boolean;
@ViewChildren(FaqTemplateDirective) faqTemplates: QueryList<FaqTemplateDirective>;
dict = {};
@ -59,6 +61,7 @@ export class ApiDocsComponent implements OnInit, AfterViewInit {
ngOnInit(): void {
this.env = this.stateService.env;
this.officialMempoolInstance = this.env.OFFICIAL_MEMPOOL_SPACE;
this.auditEnabled = this.env.AUDIT;
this.network$ = merge(of(''), this.stateService.networkChanged$).pipe(
tap((network: string) => {
if (this.env.BASE_MODULE === 'mempool' && network !== '') {
@ -82,7 +85,7 @@ export class ApiDocsComponent implements OnInit, AfterViewInit {
this.restDocs = restApiDocsData;
this.wsDocs = wsApiDocsData;
this.network$.subscribe((network) => {
this.network$.pipe(takeUntil(this.destroy$)).subscribe((network) => {
this.active = (network === 'liquid' || network === 'liquidtestnet') ? 2 : 0;
switch( network ) {
case "":
@ -102,6 +105,8 @@ export class ApiDocsComponent implements OnInit, AfterViewInit {
}
ngOnDestroy(): void {
this.destroy$.next(true);
this.destroy$.complete();
window.removeEventListener('scroll', this.onDocScroll);
}

View file

@ -1 +1 @@
<span class="green-color">{{ (conversions$ | async)?.USD * value / 100000000 | currency:'USD':'symbol':digitsInfo }}</span>
<span class="green-color" *ngIf="(conversions$ | async) as conversions">{{ (conversions ? conversions[currency] : 0) * value / 100000000 | fiatCurrency : digitsInfo : currency }}</span>

View file

@ -1,5 +1,5 @@
import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core';
import { Observable } from 'rxjs';
import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnDestroy } from '@angular/core';
import { Observable, Subscription } from 'rxjs';
import { StateService } from '../services/state.service';
@Component({
@ -8,18 +8,30 @@ import { StateService } from '../services/state.service';
styleUrls: ['./fiat.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class FiatComponent implements OnInit {
export class FiatComponent implements OnInit, OnDestroy {
conversions$: Observable<any>;
currencySubscription: Subscription;
currency: string;
@Input() value: number;
@Input() digitsInfo = '1.2-2';
constructor(
private stateService: StateService,
) { }
private cd: ChangeDetectorRef,
) {
this.currencySubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
this.currency = fiat;
this.cd.markForCheck();
});
}
ngOnInit(): void {
this.conversions$ = this.stateService.conversions$.asObservable();
}
ngOnDestroy(): void {
this.currencySubscription.unsubscribe();
}
}

View file

@ -151,6 +151,19 @@ export interface RewardStats {
totalTx: number;
}
export interface BlockSizesAndWeights {
sizes: {
timestamp: number;
avgHeight: number;
avgSize: number;
}[];
weights: {
timestamp: number;
avgHeight: number;
avgWeight: number;
}[];
}
export interface AuditScore {
hash: string;
matchRate?: number;

View file

@ -7,7 +7,7 @@
</div>
<div class="box-right">
<div class="second-line"><ng-container *ngTemplateOutlet="xChannels; context: {$implicit: channel.channels }"></ng-container></div>
<div class="second-line"><app-amount [satoshis]="channel.capacity" digitsInfo="1.2-2"></app-amount></div>
<div class="second-line"><app-amount [satoshis]="channel.capacity" digitsInfo="1.2-2" [noFiat]="true"></app-amount></div>
</div>
</div>

View file

@ -17,7 +17,7 @@
<span i18n="shared.sats">sats</span>
</div>
<span class="fiat" *ngIf="statistics.previous">
<app-change [current]="statistics.latest?.avg_capacity" [previous]="statistics.previous?.avg_capacity"></app-change>
<app-fiat [value]="statistics.latest?.avg_capacity" digitsInfo="1.0-0" ></app-fiat>
</span>
</div>
</div>
@ -63,7 +63,7 @@
<span i18n="shared.sats">sats</span>
</div>
<span class="fiat" *ngIf="statistics.previous">
<app-change [current]="statistics.latest?.med_capacity" [previous]="statistics.previous?.med_capacity"></app-change>
<app-fiat [value]="statistics.latest?.med_capacity" digitsInfo="1.0-0" ></app-fiat>
</span>
</div>
</div>

View file

@ -84,11 +84,24 @@
</div>
<div class="text-small text-center mt-1" *ngIf="officialMempoolSpace">
<a [routerLink]="['/lightning/group/the-mempool-open-source-project' | relativeUrl]">Connect to our nodes</a>
<div class="pref-selectors">
<div class="selector">
<app-language-selector></app-language-selector>
</div>
<div class="selector">
<app-fiat-selector></app-fiat-selector>
</div>
</div>
<div class="terms-of-service">
<a [routerLink]="['/terms-of-service']" i18n="shared.terms-of-service|Terms of Service">Terms of Service</a>
|
<a [routerLink]="['/privacy-policy']" i18n="shared.privacy-policy|Privacy Policy">Privacy Policy</a>
|
<a *ngIf="officialMempoolSpace" [routerLink]="['/lightning/group/the-mempool-open-source-project' | relativeUrl]">Connect to our nodes</a>
<a *ngIf="!officialMempoolSpace" [routerLink]="['/tx/push' | relativeUrl]" i18n="shared.broadcast-transaction|Broadcast Transaction">Broadcast Transaction</a>
</div>
<br>
</div>
<br>
</div>

View file

@ -103,4 +103,23 @@
margin-bottom: 10px;
text-decoration: none;
color: inherit;
}
.terms-of-service {
margin-top: 1rem;
}
.pref-selectors {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
.selector {
margin-left: .5em;
margin-bottom: .5em;
&:first {
margin-left: 0;
}
}
}

View file

@ -5,11 +5,10 @@
<div class="card-text" i18n-ngbTooltip="mining.percentage-change-last-week" ngbTooltip="Percentage change past week"
[disableTooltip]="!statistics.previous" placement="bottom">
<div class="fee-text" [class]="!statistics.previous ? 'no-border' : ''">
<app-amount [satoshis]="statistics.latest?.total_capacity" digitsInfo="1.2-2"></app-amount>
<app-amount [satoshis]="statistics.latest?.total_capacity" digitsInfo="1.2-2" [noFiat]="true"></app-amount>
</div>
<span class="fiat" *ngIf="statistics.previous">
<app-change [current]="statistics.latest?.total_capacity" [previous]="statistics.previous?.total_capacity">
</app-change>
<app-fiat [value]="statistics.latest?.total_capacity" digitsInfo="1.0-0" ></app-fiat>
</span>
</div>
</div>

View file

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';
import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';
import { CpfpInfo, OptimizedMempoolStats, AddressInformation, LiquidPegs, ITranslators,
PoolStat, BlockExtended, TransactionStripped, RewardStats, AuditScore } from '../interfaces/node-api.interface';
PoolStat, BlockExtended, TransactionStripped, RewardStats, AuditScore, BlockSizesAndWeights } from '../interfaces/node-api.interface';
import { Observable } from 'rxjs';
import { StateService } from './state.service';
import { WebsocketResponse } from '../interfaces/websocket.interface';
@ -222,8 +222,8 @@ export class ApiService {
);
}
getHistoricalBlockSizesAndWeights$(interval: string | undefined) : Observable<any> {
return this.httpClient.get<any[]>(
getHistoricalBlockSizesAndWeights$(interval: string | undefined) : Observable<HttpResponse<BlockSizesAndWeights>> {
return this.httpClient.get<BlockSizesAndWeights>(
this.apiBaseUrl + this.apiBasePath + `/api/v1/mining/blocks/sizes-weights` +
(interval !== undefined ? `/${interval}` : ''), { observe: 'response' }
);

View file

@ -39,6 +39,7 @@ export interface Env {
BISQ_WEBSITE_URL: string;
MINING_DASHBOARD: boolean;
LIGHTNING: boolean;
AUDIT: boolean;
MAINNET_BLOCK_AUDIT_START_HEIGHT: number;
TESTNET_BLOCK_AUDIT_START_HEIGHT: number;
SIGNET_BLOCK_AUDIT_START_HEIGHT: number;
@ -67,6 +68,7 @@ const defaultEnv: Env = {
'BISQ_WEBSITE_URL': 'https://bisq.markets',
'MINING_DASHBOARD': true,
'LIGHTNING': false,
'AUDIT': false,
'MAINNET_BLOCK_AUDIT_START_HEIGHT': 0,
'TESTNET_BLOCK_AUDIT_START_HEIGHT': 0,
'SIGNET_BLOCK_AUDIT_START_HEIGHT': 0,
@ -119,6 +121,7 @@ export class StateService {
timeLtr: BehaviorSubject<boolean>;
hideFlow: BehaviorSubject<boolean>;
hideAudit: BehaviorSubject<boolean>;
fiatCurrency$: BehaviorSubject<string>;
constructor(
@Inject(PLATFORM_ID) private platformId: any,
@ -184,6 +187,9 @@ export class StateService {
this.hideAudit.subscribe((hide) => {
this.storageService.setValue('audit-preference', hide ? 'hide' : 'show');
});
const fiatPreference = this.storageService.getValue('fiat-preference');
this.fiatCurrency$ = new BehaviorSubject<string>(fiatPreference || 'USD');
}
setNetworkBasedonUrl(url: string) {

View file

@ -0,0 +1,28 @@
import { formatCurrency, getCurrencySymbol } from '@angular/common';
import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';
import { Subscription } from 'rxjs';
import { StateService } from '../../services/state.service';
@Pipe({
name: 'fiatCurrency'
})
export class FiatCurrencyPipe implements PipeTransform {
fiatSubscription: Subscription;
currency: string;
constructor(
@Inject(LOCALE_ID) public locale: string,
private stateService: StateService,
) {
this.fiatSubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
this.currency = fiat;
});
}
transform(num: number, ...args: any[]): unknown {
const digits = args[0] || 1;
const currency = args[1] || this.currency || 'USD';
return new Intl.NumberFormat(this.locale, { style: 'currency', currency }).format(num);
}
}

View file

@ -1,20 +1,30 @@
import { formatCurrency, getCurrencySymbol } from '@angular/common';
import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';
import { Subscription } from 'rxjs';
import { StateService } from '../../services/state.service';
@Pipe({
name: 'fiatShortener'
})
export class FiatShortenerPipe implements PipeTransform {
fiatSubscription: Subscription;
currency: string;
constructor(
@Inject(LOCALE_ID) public locale: string
) {}
@Inject(LOCALE_ID) public locale: string,
private stateService: StateService,
) {
this.fiatSubscription = this.stateService.fiatCurrency$.subscribe((fiat) => {
this.currency = fiat;
});
}
transform(num: number, ...args: any[]): unknown {
const digits = args[0] || 1;
const unit = args[1] || undefined;
const currency = args[1] || this.currency || 'USD';
if (num < 1000) {
return num.toFixed(digits);
return new Intl.NumberFormat(this.locale, { style: 'currency', currency, maximumFractionDigits: 1 }).format(num);
}
const lookup = [
@ -30,8 +40,8 @@ export class FiatShortenerPipe implements PipeTransform {
const item = lookup.slice().reverse().find((item) => num >= item.value);
let result = item ? (num / item.value).toFixed(digits).replace(rx, '$1') : '0';
result = formatCurrency(parseInt(result, 10), this.locale, getCurrencySymbol('USD', 'narrow'), 'USD', '1.0-0');
result = new Intl.NumberFormat(this.locale, { style: 'currency', currency, maximumFractionDigits: 0 }).format(item ? num / item.value : 0);
return result + item.symbol;
}
}

View file

@ -23,6 +23,7 @@ import { RelativeUrlPipe } from './pipes/relative-url/relative-url.pipe';
import { ScriptpubkeyTypePipe } from './pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe';
import { BytesPipe } from './pipes/bytes-pipe/bytes.pipe';
import { WuBytesPipe } from './pipes/bytes-pipe/wubytes.pipe';
import { FiatCurrencyPipe } from './pipes/fiat-currency.pipe';
import { BlockchainComponent } from '../components/blockchain/blockchain.component';
import { TimeSinceComponent } from '../components/time-since/time-since.component';
import { TimeUntilComponent } from '../components/time-until/time-until.component';
@ -34,6 +35,7 @@ import { TxFeaturesComponent } from '../components/tx-features/tx-features.compo
import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component';
import { ReactiveFormsModule } from '@angular/forms';
import { LanguageSelectorComponent } from '../components/language-selector/language-selector.component';
import { FiatSelectorComponent } from '../components/fiat-selector/fiat-selector.component';
import { ColoredPriceDirective } from './directives/colored-price.directive';
import { NoSanitizePipe } from './pipes/no-sanitize.pipe';
import { MempoolBlocksComponent } from '../components/mempool-blocks/mempool-blocks.component';
@ -93,6 +95,7 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati
TxFeaturesComponent,
TxFeeRatingComponent,
LanguageSelectorComponent,
FiatSelectorComponent,
ScriptpubkeyTypePipe,
RelativeUrlPipe,
NoSanitizePipe,
@ -107,6 +110,7 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati
CapAddressPipe,
Decimal2HexPipe,
FeeRoundingPipe,
FiatCurrencyPipe,
ColoredPriceDirective,
BlockchainComponent,
MempoolBlocksComponent,
@ -199,6 +203,7 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati
TxFeaturesComponent,
TxFeeRatingComponent,
LanguageSelectorComponent,
FiatSelectorComponent,
ScriptpubkeyTypePipe,
RelativeUrlPipe,
Hex2asciiPipe,
@ -207,6 +212,7 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati
BytesPipe,
VbytesPipe,
WuBytesPipe,
FiatCurrencyPipe,
CeilPipe,
ShortenStringPipe,
CapAddressPipe,

File diff suppressed because it is too large Load diff

View file

@ -11,6 +11,7 @@
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
<source> Slide <x id="INTERPOLATION" equiv-text="true`, will pau"/> of <x id="INTERPOLATION_1" equiv-text="n mouse cursor"/> </source>
<target> Slide <x id="INTERPOLATION" equiv-text="true`, will pau"/> z <x id="INTERPOLATION_1" equiv-text="n mouse cursor"/> </target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
<context context-type="linenumber">175,181</context>
@ -147,6 +148,7 @@
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source><x id="INTERPOLATION" equiv-text="* The maximal"/></source>
<target><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
<context context-type="linenumber">30,33</context>
@ -357,7 +359,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,291</context>
<context context-type="linenumber">303,304</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -382,7 +384,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">291,292</context>
<context context-type="linenumber">304,305</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -424,7 +426,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">40,41</context>
<context context-type="linenumber">38,39</context>
</context-group>
<note priority="1" from="description">block.hash</note>
</trans-unit>
@ -449,7 +451,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">44,46</context>
<context context-type="linenumber">42,44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -592,7 +594,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">49,51</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/pool-ranking/pool-ranking.component.html</context>
@ -1052,7 +1054,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">246,247</context>
<context context-type="linenumber">245,246</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -1530,7 +1532,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">57,60</context>
</context-group>
</trans-unit>
<trans-unit id="address-label.multisig" datatype="html">
@ -1666,7 +1668,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">29,31</context>
<context context-type="linenumber">31,33</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html</context>
@ -1888,7 +1890,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">30,31</context>
<context context-type="linenumber">32,33</context>
</context-group>
<note priority="1" from="description">Asset ticker header</note>
</trans-unit>
@ -1901,7 +1903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">31,34</context>
<context context-type="linenumber">33,36</context>
</context-group>
<note priority="1" from="description">Asset Issuer Domain header</note>
</trans-unit>
@ -1914,7 +1916,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">32,36</context>
<context context-type="linenumber">34,38</context>
</context-group>
<note priority="1" from="description">Asset ID header</note>
</trans-unit>
@ -1923,7 +1925,7 @@
<target>Chyba při načítání dat aktiv.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">48,53</context>
<context context-type="linenumber">50,55</context>
</context-group>
<note priority="1" from="description">Asset data load error</note>
</trans-unit>
@ -2121,6 +2123,7 @@
</trans-unit>
<trans-unit id="86c50fc2171298179283e3c9b6d79b57b821599b" datatype="html">
<source>not available</source>
<target>není k dispozici</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-graph/block-overview-graph.component.html</context>
<context context-type="linenumber">5</context>
@ -2140,7 +2143,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476</context>
<context context-type="linenumber">478</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html</context>
@ -2166,7 +2169,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476,477</context>
<context context-type="linenumber">478,479</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2188,7 +2191,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">479,481</context>
<context context-type="linenumber">481,483</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-box/channel-box.component.html</context>
@ -2200,7 +2203,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">38,39</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">Transaction fee rate</note>
<note priority="1" from="meaning">transaction.fee-rate</note>
@ -2218,11 +2221,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">125,128</context>
<context context-type="linenumber">123,126</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129</context>
<context context-type="linenumber">127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -2282,11 +2285,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">481,484</context>
<context context-type="linenumber">483,486</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">492,494</context>
<context context-type="linenumber">494,496</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2298,7 +2301,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">204,208</context>
<context context-type="linenumber">206,210</context>
</context-group>
<note priority="1" from="description">sat/vB</note>
<note priority="1" from="meaning">shared.sat-vbyte</note>
@ -2323,6 +2326,7 @@
</trans-unit>
<trans-unit id="1a8035ac608b083c29407327290b7cc9d6cbb95d" datatype="html">
<source>Audit status</source>
<target>Stav auditu</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">36</context>
@ -2331,6 +2335,7 @@
</trans-unit>
<trans-unit id="180092a6b8a6151a05f4a7552a2fb75fd159dfa8" datatype="html">
<source>Match</source>
<target>Shoda</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">38</context>
@ -2339,6 +2344,7 @@
</trans-unit>
<trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">
<source>Removed</source>
<target>Odstraněno</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">39</context>
@ -2347,6 +2353,7 @@
</trans-unit>
<trans-unit id="f0136f1a1d77aa656e0ebd0f3c023118dd2a2776" datatype="html">
<source>Marginal fee rate</source>
<target>Mezní sazba poplatku</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">40</context>
@ -2359,6 +2366,7 @@
</trans-unit>
<trans-unit id="d702ad6f00c620c9658ac1ad8184d5fe5bc099fb" datatype="html">
<source>Recently broadcasted</source>
<target>Nedávno odvysílané</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">41</context>
@ -2462,7 +2470,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">50,52</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2510,7 +2518,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">54,56</context>
<context context-type="linenumber">52,54</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2548,7 +2556,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">128,129</context>
<context context-type="linenumber">126,127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2565,11 +2573,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">133,135</context>
<context context-type="linenumber">131,133</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">159,162</context>
<context context-type="linenumber">157,160</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2587,7 +2595,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">168,170</context>
<context context-type="linenumber">166,168</context>
</context-group>
<note priority="1" from="description">block.miner</note>
</trans-unit>
@ -2600,7 +2608,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.ts</context>
<context context-type="linenumber">227</context>
<context context-type="linenumber">234</context>
</context-group>
</trans-unit>
<trans-unit id="bdf0e930eb22431140a2eaeacd809cc5f8ebd38c" datatype="html">
@ -2625,20 +2633,29 @@
</context-group>
<note priority="1" from="description">Previous Block</note>
</trans-unit>
<trans-unit id="930c93e0c7afdf0f8d926773d5157c803bdc86e1" datatype="html">
<source>Block health</source>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<target>Zdraví</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">56</context>
</context-group>
<note priority="1" from="description">block.health</note>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">
<source>Unknown</source>
<target>Neznámo</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">69,72</context>
<context context-type="linenumber">67,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2667,7 +2684,7 @@
<target>Rozsah poplatků</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">124,125</context>
<context context-type="linenumber">122,123</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2680,7 +2697,7 @@
<target>Na základě průměrné transakce nativního segwitu 140 vBytů</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129,131</context>
<context context-type="linenumber">127,129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/fees-box/fees-box.component.html</context>
@ -2709,44 +2726,61 @@
<target>Vytěžené + poplatky:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">148,151</context>
<context context-type="linenumber">146,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">163,167</context>
<context context-type="linenumber">161,165</context>
</context-group>
<note priority="1" from="description">Total subsidy and fees in a block</note>
<note priority="1" from="meaning">block.subsidy-and-fees</note>
</trans-unit>
<trans-unit id="26f41d32df1646d45fcb03fe6952fb3eccf60b0f" datatype="html">
<source>Projected</source>
<trans-unit id="23fa95fce7b4badf5ad584d4a1712d558266266f" datatype="html">
<source>Expected</source>
<target>Očekávané</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">210,212</context>
<context context-type="linenumber">209</context>
</context-group>
<note priority="1" from="description">block.projected</note>
<note priority="1" from="description">block.expected</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,210</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="1da6d9283e3222148d76c10c8e37abeeb66c93cb" datatype="html">
<source>Actual</source>
<target>Aktuální</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">212,216</context>
<context context-type="linenumber">211,215</context>
</context-group>
<note priority="1" from="description">block.actual</note>
</trans-unit>
<trans-unit id="a37e529c0d7b39d95861dd019cb78bb9ac9a3c5d" datatype="html">
<source>Projected Block</source>
<trans-unit id="97577daae15cc7f30ab4d0f4f4dfb8045477aefd" datatype="html">
<source>Expected Block</source>
<target>Očekávaný blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">216,218</context>
<context context-type="linenumber">215</context>
</context-group>
<note priority="1" from="description">block.projected-block</note>
<note priority="1" from="description">block.expected-block</note>
</trans-unit>
<trans-unit id="6efa73f0d6f0844a1e0c341c9b88323f51852d91" datatype="html">
<source>Actual Block</source>
<target>Aktuální blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">225,227</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">block.actual-block</note>
</trans-unit>
@ -2755,7 +2789,7 @@
<target>Bity</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">250,252</context>
<context context-type="linenumber">249,251</context>
</context-group>
<note priority="1" from="description">block.bits</note>
</trans-unit>
@ -2764,7 +2798,7 @@
<target>Merklův kořen</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">254,256</context>
<context context-type="linenumber">253,255</context>
</context-group>
<note priority="1" from="description">block.merkle-root</note>
</trans-unit>
@ -2773,7 +2807,7 @@
<target>Obtížnost</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">265,268</context>
<context context-type="linenumber">264,267</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html</context>
@ -2802,7 +2836,7 @@
<target>Nonce</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">269,271</context>
<context context-type="linenumber">268,270</context>
</context-group>
<note priority="1" from="description">block.nonce</note>
</trans-unit>
@ -2811,16 +2845,26 @@
<target>Hlavička bloku Hex</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">273,274</context>
<context context-type="linenumber">272,273</context>
</context-group>
<note priority="1" from="description">block.header</note>
</trans-unit>
<trans-unit id="ccf00caac258749fa1c5fd488fb15368fa6fce37" datatype="html">
<source>Audit</source>
<target>Audit</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,294</context>
</context-group>
<note priority="1" from="description">Toggle Audit</note>
<note priority="1" from="meaning">block.toggle-audit</note>
</trans-unit>
<trans-unit id="5f32c623f92bf3ca31202cc6281d4abd5febaf6a" datatype="html">
<source>Details</source>
<target>Detaily</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">284,288</context>
<context context-type="linenumber">297,301</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2846,11 +2890,11 @@
<target>Chyba při načítání dat.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">303,305</context>
<context context-type="linenumber">316,318</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">339,343</context>
<context context-type="linenumber">355,359</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-preview.component.html</context>
@ -2872,9 +2916,10 @@
</trans-unit>
<trans-unit id="9f63968580fcea609d6b9e7a5b6ba7180b54e18f" datatype="html">
<source>Why is this block empty?</source>
<target>Proč je tento blok prázdný?</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">361,367</context>
<context context-type="linenumber">377,383</context>
</context-group>
<note priority="1" from="description">block.empty-block-explanation</note>
</trans-unit>
@ -2920,18 +2965,6 @@
</context-group>
<note priority="1" from="description">latest-blocks.mined</note>
</trans-unit>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="12f86e6747a5ad39e62d3480ddc472b1aeab5b76" datatype="html">
<source>Reward</source>
<target>Odměna</target>
@ -2995,7 +3028,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">210,214</context>
<context context-type="linenumber">212,216</context>
</context-group>
<note priority="1" from="description">dashboard.txs</note>
</trans-unit>
@ -3234,7 +3267,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">237,238</context>
<context context-type="linenumber">239,240</context>
</context-group>
<note priority="1" from="description">dashboard.incoming-transactions</note>
</trans-unit>
@ -3247,7 +3280,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">240,243</context>
<context context-type="linenumber">242,245</context>
</context-group>
<note priority="1" from="description">dashboard.backend-is-synchronizing</note>
</trans-unit>
@ -3260,7 +3293,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">245,250</context>
<context context-type="linenumber">247,252</context>
</context-group>
<note priority="1" from="description">vB/s</note>
<note priority="1" from="meaning">shared.vbytes-per-second</note>
@ -3274,7 +3307,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">208,209</context>
<context context-type="linenumber">210,211</context>
</context-group>
<note priority="1" from="description">Unconfirmed count</note>
<note priority="1" from="meaning">dashboard.unconfirmed</note>
@ -3531,7 +3564,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">52,54</context>
<context context-type="linenumber">51,53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/statistics/statistics.component.ts</context>
@ -3557,7 +3590,7 @@
<target>Lightning průzkumník</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">44,45</context>
<context context-type="linenumber">44,47</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts</context>
@ -3565,21 +3598,12 @@
</context-group>
<note priority="1" from="description">master-page.lightning</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">45,48</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<target>Dokumentace</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">55,57</context>
<context context-type="linenumber">54,56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/docs/docs.component.html</context>
@ -4037,7 +4061,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">154,161</context>
<context context-type="linenumber">154,162</context>
</context-group>
<note priority="1" from="description">Broadcast Transaction</note>
<note priority="1" from="meaning">shared.broadcast-transaction</note>
@ -4083,6 +4107,7 @@
</trans-unit>
<trans-unit id="1d9f405ab98a5f79d98b439de29fc8baca46b97c" datatype="html">
<source>Avg Block Fees</source>
<target>Průměrné poplatky za blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">17</context>
@ -4095,6 +4120,7 @@
</trans-unit>
<trans-unit id="a0d4ab5b063e7be1c9ea980f5fd6ce1b5384ad0b" datatype="html">
<source>Average fees per block in the past 144 blocks</source>
<target>Průměrné poplatky za blok v posledních 144 blocích</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">18,20</context>
@ -4103,6 +4129,7 @@
</trans-unit>
<trans-unit id="0705223420d290a218e4ed83bd4d904454a9cee8" datatype="html">
<source>BTC/block</source>
<target>BTC/blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">21,24</context>
@ -4112,6 +4139,7 @@
</trans-unit>
<trans-unit id="cf3a97b1c1546b843411cfe101bc55ba2ac46bac" datatype="html">
<source>Avg Tx Fee</source>
<target>Prům. poplatek Tx</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">30</context>
@ -4429,6 +4457,7 @@
</trans-unit>
<trans-unit id="72cfda88d5ab4851cba76abb402cae8f03ab6c6b" datatype="html">
<source>This transaction replaced:</source>
<target>Tato transakce nahradila:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">10,12</context>
@ -4438,6 +4467,7 @@
</trans-unit>
<trans-unit id="ed1b6bfe4b7beca445156e6bb92a76d3cdebe945" datatype="html">
<source>Replaced</source>
<target>Nahrazeno</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">36,39</context>
@ -4631,7 +4661,7 @@
<target>Efektivní poplatek</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">489,492</context>
<context context-type="linenumber">491,494</context>
</context-group>
<note priority="1" from="description">Effective transaction fee rate</note>
<note priority="1" from="meaning">transaction.effective-fee-rate</note>
@ -4777,6 +4807,7 @@
</trans-unit>
<trans-unit id="d70397ee91f6c9ec91f1c1dff88126f8f9b7c2c4" datatype="html">
<source>Show more inputs to reveal fee data</source>
<target>Zobrazit další vstupy pro odhalení údajů o poplatcích</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
<context context-type="linenumber">288,291</context>
@ -4785,6 +4816,7 @@
</trans-unit>
<trans-unit id="ea7c261363dc5f6134b7bacba2a1ef97f4ff7859" datatype="html">
<source><x id="INTERPOLATION" equiv-text="remaining&lt;/ng-template&gt;"/> remaining</source>
<target><x id="INTERPOLATION" equiv-text="remaining&lt;/ng-template&gt;"/> zbývající</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
<context context-type="linenumber">330,331</context>
@ -4935,6 +4967,7 @@
</trans-unit>
<trans-unit id="b0fb884cf71b19e3a4d146146d260ccedd9d50a5" datatype="html">
<source>This transaction does not use Taproot</source>
<target>Tato transakce nepoužívá Taproot</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">18</context>
@ -5051,7 +5084,7 @@
<target>Minimální poplatek</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">201,202</context>
<context context-type="linenumber">203,204</context>
</context-group>
<note priority="1" from="description">Minimum mempool fee</note>
<note priority="1" from="meaning">dashboard.minimum-fee</note>
@ -5061,7 +5094,7 @@
<target>Čištění</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">202,203</context>
<context context-type="linenumber">204,205</context>
</context-group>
<note priority="1" from="description">Purgin below fee</note>
<note priority="1" from="meaning">dashboard.purging</note>
@ -5071,7 +5104,7 @@
<target>Využití paměti</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">214,215</context>
<context context-type="linenumber">216,217</context>
</context-group>
<note priority="1" from="description">Memory usage</note>
<note priority="1" from="meaning">dashboard.memory-usage</note>
@ -5081,7 +5114,7 @@
<target>L-BTC v oběhu</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">228,230</context>
<context context-type="linenumber">230,232</context>
</context-group>
<note priority="1" from="description">dashboard.lbtc-pegs-in-circulation</note>
</trans-unit>
@ -5090,7 +5123,7 @@
<target>Služba REST API</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">api-docs.title</note>
</trans-unit>
@ -5099,11 +5132,11 @@
<target>Endpoint</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">48,49</context>
<context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">102,105</context>
<context context-type="linenumber">104,107</context>
</context-group>
<note priority="1" from="description">Api docs endpoint</note>
</trans-unit>
@ -5112,11 +5145,11 @@
<target>Popis</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67,68</context>
<context context-type="linenumber">69,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">106,107</context>
<context context-type="linenumber">108,109</context>
</context-group>
</trans-unit>
<trans-unit id="a706b1ded7506620b153dbcdea8108e6691bbbd9" datatype="html">
@ -5124,7 +5157,7 @@
<target>Výchozí push: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/>akce: 'want', data: ['blocks', ...] <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> pro vyjádření toho, co chcete pushnout. K dispozici: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>mempool-blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>live-2h-chart<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> a <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>. <x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/><x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/>Push transakce související s adresou: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/>'track-address': '3PbJ...bF9B' <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> pro příjem všech nových transakcí obsahujících tuto adresu jako vstup nebo výstup. Vrací pole transakcí. <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>address-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> pro nové transakce mempoolu a <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>block-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> pro nové transakce potvrzené blokem.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">107,108</context>
<context context-type="linenumber">109,110</context>
</context-group>
<note priority="1" from="description">api-docs.websocket.websocket</note>
</trans-unit>
@ -5297,12 +5330,13 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">120,121</context>
<context context-type="linenumber">123,124</context>
</context-group>
<note priority="1" from="description">lightning.x-channels</note>
</trans-unit>
<trans-unit id="4e64e04c01e8f5fc09c41cb8942dcc3af0398b28" datatype="html">
<source>Starting balance</source>
<target>Počáteční zůstatek</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-close-box/channel-close-box.component.html</context>
<context context-type="linenumber">6</context>
@ -5312,6 +5346,7 @@
</trans-unit>
<trans-unit id="5c4bfd47a4f4d7cb99912f028494fe2530d36d57" datatype="html">
<source>Closing balance</source>
<target>Konečný zůstatek</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-close-box/channel-close-box.component.html</context>
<context context-type="linenumber">12</context>
@ -5341,7 +5376,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">65,66</context>
<context context-type="linenumber">68,69</context>
</context-group>
<note priority="1" from="description">status.inactive</note>
</trans-unit>
@ -5358,7 +5393,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">66,68</context>
<context context-type="linenumber">69,71</context>
</context-group>
<note priority="1" from="description">status.active</note>
</trans-unit>
@ -5379,7 +5414,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">68,70</context>
<context context-type="linenumber">71,73</context>
</context-group>
<note priority="1" from="description">status.closed</note>
</trans-unit>
@ -5409,7 +5444,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">40,43</context>
<context context-type="linenumber">43,46</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-statistics/node-statistics.component.html</context>
@ -5525,12 +5560,13 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">42,43</context>
</context-group>
<note priority="1" from="description">lightning.closing_date</note>
</trans-unit>
<trans-unit id="1f0b0f2c90de4f3f0eb2c138eed38f4e9ac7a13e" datatype="html">
<source>Closed by</source>
<target>Uzavřeno</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel.component.html</context>
<context context-type="linenumber">52,54</context>
@ -5577,7 +5613,7 @@
<target>Žádné kanály k zobrazení</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">29,35</context>
<context context-type="linenumber">29,37</context>
</context-group>
<note priority="1" from="description">lightning.empty-channels-list</note>
</trans-unit>
@ -5586,7 +5622,7 @@
<target>Alias</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">35,37</context>
<context context-type="linenumber">38,40</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/group/group.component.html</context>
@ -5623,7 +5659,7 @@
<target>Status</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">37,38</context>
<context context-type="linenumber">40,41</context>
</context-group>
<note priority="1" from="description">status</note>
</trans-unit>
@ -5632,7 +5668,7 @@
<target>ID kanálu</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">41,45</context>
<context context-type="linenumber">44,48</context>
</context-group>
<note priority="1" from="description">channels.id</note>
</trans-unit>
@ -5641,11 +5677,11 @@
<target>sats</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">60,64</context>
<context context-type="linenumber">63,67</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">84,88</context>
<context context-type="linenumber">87,91</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-statistics/channels-statistics.component.html</context>
@ -6052,6 +6088,7 @@
</trans-unit>
<trans-unit id="7b8687bbc13bbf62288689606dcab9784a3eb53b" datatype="html">
<source>Fee distribution</source>
<target>Rozložení poplatků</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-fee-chart/node-fee-chart.component.html</context>
<context context-type="linenumber">2</context>
@ -6147,6 +6184,7 @@
</trans-unit>
<trans-unit id="008e9fb48f07f545af73b3f676dc60cc3a829765" datatype="html">
<source>Avg channel distance</source>
<target>Průměrná vzdálenost kanálů</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">56,57</context>
@ -6186,6 +6224,7 @@
</trans-unit>
<trans-unit id="e128630e07a4c467f51b246a31c5734d5fb1a2c2" datatype="html">
<source>Liquidity ad</source>
<target>Inzerát na likviditu</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">138,141</context>
@ -6194,6 +6233,7 @@
</trans-unit>
<trans-unit id="bc84b5a9a70217104a53c7139e30b392be6520b7" datatype="html">
<source>Lease fee rate</source>
<target>Sazba poplatku za pronájem</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">144,147</context>
@ -6203,6 +6243,7 @@
</trans-unit>
<trans-unit id="ee807dd54b4a45eeba284744c64774de1ab5e4f1" datatype="html">
<source>Lease base fee</source>
<target>Základní poplatek za pronájem</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">152,154</context>
@ -6211,6 +6252,7 @@
</trans-unit>
<trans-unit id="5e348f3d51c3bb283c16572bee1e293ea991cf49" datatype="html">
<source>Funding weight</source>
<target>Váha financování</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">158,159</context>
@ -6219,6 +6261,7 @@
</trans-unit>
<trans-unit id="8af4768ed9112268945c697923ce017fbe23e1b7" datatype="html">
<source>Channel fee rate</source>
<target>Sazba poplatku za kanál</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">168,171</context>
@ -6228,6 +6271,7 @@
</trans-unit>
<trans-unit id="4e6d03f01a59434dee25104fe9478041db186ca8" datatype="html">
<source>Channel base fee</source>
<target>Základní poplatek za kanál</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">176,178</context>
@ -6236,6 +6280,7 @@
</trans-unit>
<trans-unit id="e8e09fa12864e94f094a2a7c8c97cfdf0cff8aab" datatype="html">
<source>Compact lease</source>
<target>Kompaktní pronájem</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">188,190</context>
@ -6244,6 +6289,7 @@
</trans-unit>
<trans-unit id="aa687f4987e2d4e0010be692d402174962ece70e" datatype="html">
<source>TLV extension records</source>
<target>Záznamy o rozšíření TLV</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">199,202</context>
@ -6324,6 +6370,7 @@
</trans-unit>
<trans-unit id="6391724349488018234" datatype="html">
<source>Indexing in progress</source>
<target>Probíhá indexování</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts</context>
<context context-type="linenumber">121,116</context>
@ -6591,6 +6638,7 @@
</trans-unit>
<trans-unit id="e422817608e8d55e08b45a1da2e118eb42815af4" datatype="html">
<source>Active nodes</source>
<target>Aktivní uzly</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-isp/nodes-per-isp.component.html</context>
<context context-type="linenumber">14,18</context>

View file

@ -11,6 +11,7 @@
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
<source> Slide <x id="INTERPOLATION" equiv-text="true`, will pau"/> of <x id="INTERPOLATION_1" equiv-text="n mouse cursor"/> </source>
<target> Slide <x id="INTERPOLATION" equiv-text="true`, will pau"/> von <x id="INTERPOLATION_1" equiv-text="n mouse cursor"/> </target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
<context context-type="linenumber">175,181</context>
@ -147,6 +148,7 @@
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source><x id="INTERPOLATION" equiv-text="* The maximal"/></source>
<target><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
<context context-type="linenumber">30,33</context>
@ -357,7 +359,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,291</context>
<context context-type="linenumber">303,304</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -382,7 +384,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">291,292</context>
<context context-type="linenumber">304,305</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -424,7 +426,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">40,41</context>
<context context-type="linenumber">38,39</context>
</context-group>
<note priority="1" from="description">block.hash</note>
</trans-unit>
@ -449,7 +451,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">44,46</context>
<context context-type="linenumber">42,44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -592,7 +594,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">49,51</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/pool-ranking/pool-ranking.component.html</context>
@ -1052,7 +1054,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">246,247</context>
<context context-type="linenumber">245,246</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -1530,7 +1532,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">57,60</context>
</context-group>
</trans-unit>
<trans-unit id="address-label.multisig" datatype="html">
@ -1666,7 +1668,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">29,31</context>
<context context-type="linenumber">31,33</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html</context>
@ -1888,7 +1890,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">30,31</context>
<context context-type="linenumber">32,33</context>
</context-group>
<note priority="1" from="description">Asset ticker header</note>
</trans-unit>
@ -1901,7 +1903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">31,34</context>
<context context-type="linenumber">33,36</context>
</context-group>
<note priority="1" from="description">Asset Issuer Domain header</note>
</trans-unit>
@ -1914,7 +1916,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">32,36</context>
<context context-type="linenumber">34,38</context>
</context-group>
<note priority="1" from="description">Asset ID header</note>
</trans-unit>
@ -1923,7 +1925,7 @@
<target>Fehler beim Laden der Daten der Vermögenswerte.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">48,53</context>
<context context-type="linenumber">50,55</context>
</context-group>
<note priority="1" from="description">Asset data load error</note>
</trans-unit>
@ -2121,6 +2123,7 @@
</trans-unit>
<trans-unit id="86c50fc2171298179283e3c9b6d79b57b821599b" datatype="html">
<source>not available</source>
<target>nicht verfügbar</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-graph/block-overview-graph.component.html</context>
<context context-type="linenumber">5</context>
@ -2140,7 +2143,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476</context>
<context context-type="linenumber">478</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html</context>
@ -2166,7 +2169,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476,477</context>
<context context-type="linenumber">478,479</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2188,7 +2191,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">479,481</context>
<context context-type="linenumber">481,483</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-box/channel-box.component.html</context>
@ -2200,7 +2203,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">38,39</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">Transaction fee rate</note>
<note priority="1" from="meaning">transaction.fee-rate</note>
@ -2218,11 +2221,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">125,128</context>
<context context-type="linenumber">123,126</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129</context>
<context context-type="linenumber">127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -2282,11 +2285,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">481,484</context>
<context context-type="linenumber">483,486</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">492,494</context>
<context context-type="linenumber">494,496</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2298,7 +2301,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">204,208</context>
<context context-type="linenumber">206,210</context>
</context-group>
<note priority="1" from="description">sat/vB</note>
<note priority="1" from="meaning">shared.sat-vbyte</note>
@ -2323,6 +2326,7 @@
</trans-unit>
<trans-unit id="1a8035ac608b083c29407327290b7cc9d6cbb95d" datatype="html">
<source>Audit status</source>
<target>Audit Status</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">36</context>
@ -2331,6 +2335,7 @@
</trans-unit>
<trans-unit id="180092a6b8a6151a05f4a7552a2fb75fd159dfa8" datatype="html">
<source>Match</source>
<target>Treffer</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">38</context>
@ -2339,6 +2344,7 @@
</trans-unit>
<trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">
<source>Removed</source>
<target>Entfernt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">39</context>
@ -2347,6 +2353,7 @@
</trans-unit>
<trans-unit id="f0136f1a1d77aa656e0ebd0f3c023118dd2a2776" datatype="html">
<source>Marginal fee rate</source>
<target>Grenz-Gebührensatz</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">40</context>
@ -2359,6 +2366,7 @@
</trans-unit>
<trans-unit id="d702ad6f00c620c9658ac1ad8184d5fe5bc099fb" datatype="html">
<source>Recently broadcasted</source>
<target>Jüngst ausgestrahlt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">41</context>
@ -2462,7 +2470,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">50,52</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2510,7 +2518,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">54,56</context>
<context context-type="linenumber">52,54</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2548,7 +2556,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">128,129</context>
<context context-type="linenumber">126,127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2565,11 +2573,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">133,135</context>
<context context-type="linenumber">131,133</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">159,162</context>
<context context-type="linenumber">157,160</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2587,7 +2595,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">168,170</context>
<context context-type="linenumber">166,168</context>
</context-group>
<note priority="1" from="description">block.miner</note>
</trans-unit>
@ -2600,7 +2608,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.ts</context>
<context context-type="linenumber">227</context>
<context context-type="linenumber">234</context>
</context-group>
</trans-unit>
<trans-unit id="bdf0e930eb22431140a2eaeacd809cc5f8ebd38c" datatype="html">
@ -2625,20 +2633,29 @@
</context-group>
<note priority="1" from="description">Previous Block</note>
</trans-unit>
<trans-unit id="930c93e0c7afdf0f8d926773d5157c803bdc86e1" datatype="html">
<source>Block health</source>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<target>Gesundheit</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">56</context>
</context-group>
<note priority="1" from="description">block.health</note>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">
<source>Unknown</source>
<target>Unbekannt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">69,72</context>
<context context-type="linenumber">67,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2667,7 +2684,7 @@
<target>Gebührenspanne</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">124,125</context>
<context context-type="linenumber">122,123</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2680,7 +2697,7 @@
<target>Basierend auf einer durchschnittlichen nativen Segwit-Transaktion von 140 vByte</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129,131</context>
<context context-type="linenumber">127,129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/fees-box/fees-box.component.html</context>
@ -2709,44 +2726,61 @@
<target>Subvention + Gebühr</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">148,151</context>
<context context-type="linenumber">146,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">163,167</context>
<context context-type="linenumber">161,165</context>
</context-group>
<note priority="1" from="description">Total subsidy and fees in a block</note>
<note priority="1" from="meaning">block.subsidy-and-fees</note>
</trans-unit>
<trans-unit id="26f41d32df1646d45fcb03fe6952fb3eccf60b0f" datatype="html">
<source>Projected</source>
<trans-unit id="23fa95fce7b4badf5ad584d4a1712d558266266f" datatype="html">
<source>Expected</source>
<target>Erwartet</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">210,212</context>
<context context-type="linenumber">209</context>
</context-group>
<note priority="1" from="description">block.projected</note>
<note priority="1" from="description">block.expected</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,210</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="1da6d9283e3222148d76c10c8e37abeeb66c93cb" datatype="html">
<source>Actual</source>
<target>Tatsächlich</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">212,216</context>
<context context-type="linenumber">211,215</context>
</context-group>
<note priority="1" from="description">block.actual</note>
</trans-unit>
<trans-unit id="a37e529c0d7b39d95861dd019cb78bb9ac9a3c5d" datatype="html">
<source>Projected Block</source>
<trans-unit id="97577daae15cc7f30ab4d0f4f4dfb8045477aefd" datatype="html">
<source>Expected Block</source>
<target>Erwarteter Block</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">216,218</context>
<context context-type="linenumber">215</context>
</context-group>
<note priority="1" from="description">block.projected-block</note>
<note priority="1" from="description">block.expected-block</note>
</trans-unit>
<trans-unit id="6efa73f0d6f0844a1e0c341c9b88323f51852d91" datatype="html">
<source>Actual Block</source>
<target>Tatsächlicher Block</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">225,227</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">block.actual-block</note>
</trans-unit>
@ -2755,7 +2789,7 @@
<target>Bits</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">250,252</context>
<context context-type="linenumber">249,251</context>
</context-group>
<note priority="1" from="description">block.bits</note>
</trans-unit>
@ -2764,7 +2798,7 @@
<target>Merkle root</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">254,256</context>
<context context-type="linenumber">253,255</context>
</context-group>
<note priority="1" from="description">block.merkle-root</note>
</trans-unit>
@ -2773,7 +2807,7 @@
<target>Schwierigkeit</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">265,268</context>
<context context-type="linenumber">264,267</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html</context>
@ -2802,7 +2836,7 @@
<target>Nonce</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">269,271</context>
<context context-type="linenumber">268,270</context>
</context-group>
<note priority="1" from="description">block.nonce</note>
</trans-unit>
@ -2811,16 +2845,26 @@
<target>Block-Header Hex</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">273,274</context>
<context context-type="linenumber">272,273</context>
</context-group>
<note priority="1" from="description">block.header</note>
</trans-unit>
<trans-unit id="ccf00caac258749fa1c5fd488fb15368fa6fce37" datatype="html">
<source>Audit</source>
<target>Prüfung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,294</context>
</context-group>
<note priority="1" from="description">Toggle Audit</note>
<note priority="1" from="meaning">block.toggle-audit</note>
</trans-unit>
<trans-unit id="5f32c623f92bf3ca31202cc6281d4abd5febaf6a" datatype="html">
<source>Details</source>
<target>Details</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">284,288</context>
<context context-type="linenumber">297,301</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2846,11 +2890,11 @@
<target>Fehler beim Laden der Daten.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">303,305</context>
<context context-type="linenumber">316,318</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">339,343</context>
<context context-type="linenumber">355,359</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-preview.component.html</context>
@ -2872,9 +2916,10 @@
</trans-unit>
<trans-unit id="9f63968580fcea609d6b9e7a5b6ba7180b54e18f" datatype="html">
<source>Why is this block empty?</source>
<target>Weshalb dieser leere Block?</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">361,367</context>
<context context-type="linenumber">377,383</context>
</context-group>
<note priority="1" from="description">block.empty-block-explanation</note>
</trans-unit>
@ -2920,18 +2965,6 @@
</context-group>
<note priority="1" from="description">latest-blocks.mined</note>
</trans-unit>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="12f86e6747a5ad39e62d3480ddc472b1aeab5b76" datatype="html">
<source>Reward</source>
<target>Belohnung</target>
@ -2995,7 +3028,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">210,214</context>
<context context-type="linenumber">212,216</context>
</context-group>
<note priority="1" from="description">dashboard.txs</note>
</trans-unit>
@ -3234,7 +3267,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">237,238</context>
<context context-type="linenumber">239,240</context>
</context-group>
<note priority="1" from="description">dashboard.incoming-transactions</note>
</trans-unit>
@ -3247,7 +3280,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">240,243</context>
<context context-type="linenumber">242,245</context>
</context-group>
<note priority="1" from="description">dashboard.backend-is-synchronizing</note>
</trans-unit>
@ -3260,7 +3293,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">245,250</context>
<context context-type="linenumber">247,252</context>
</context-group>
<note priority="1" from="description">vB/s</note>
<note priority="1" from="meaning">shared.vbytes-per-second</note>
@ -3274,7 +3307,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">208,209</context>
<context context-type="linenumber">210,211</context>
</context-group>
<note priority="1" from="description">Unconfirmed count</note>
<note priority="1" from="meaning">dashboard.unconfirmed</note>
@ -3531,7 +3564,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">52,54</context>
<context context-type="linenumber">51,53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/statistics/statistics.component.ts</context>
@ -3557,7 +3590,7 @@
<target>Lightning Explorer</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">44,45</context>
<context context-type="linenumber">44,47</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts</context>
@ -3565,21 +3598,12 @@
</context-group>
<note priority="1" from="description">master-page.lightning</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">45,48</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<target>Dokumentation</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">55,57</context>
<context context-type="linenumber">54,56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/docs/docs.component.html</context>
@ -4037,7 +4061,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">154,161</context>
<context context-type="linenumber">154,162</context>
</context-group>
<note priority="1" from="description">Broadcast Transaction</note>
<note priority="1" from="meaning">shared.broadcast-transaction</note>
@ -4083,6 +4107,7 @@
</trans-unit>
<trans-unit id="1d9f405ab98a5f79d98b439de29fc8baca46b97c" datatype="html">
<source>Avg Block Fees</source>
<target>Durchschn. Blockgebühren</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">17</context>
@ -4095,6 +4120,7 @@
</trans-unit>
<trans-unit id="a0d4ab5b063e7be1c9ea980f5fd6ce1b5384ad0b" datatype="html">
<source>Average fees per block in the past 144 blocks</source>
<target>Durchschnittliche Gebühren pro Block über die letzten 144 Blocks</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">18,20</context>
@ -4103,6 +4129,7 @@
</trans-unit>
<trans-unit id="0705223420d290a218e4ed83bd4d904454a9cee8" datatype="html">
<source>BTC/block</source>
<target>BTC/Block</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">21,24</context>
@ -4112,6 +4139,7 @@
</trans-unit>
<trans-unit id="cf3a97b1c1546b843411cfe101bc55ba2ac46bac" datatype="html">
<source>Avg Tx Fee</source>
<target>Durchschn. TX Gebühr</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">30</context>
@ -4429,6 +4457,7 @@
</trans-unit>
<trans-unit id="72cfda88d5ab4851cba76abb402cae8f03ab6c6b" datatype="html">
<source>This transaction replaced:</source>
<target>Diese Transaktion ersetzte:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">10,12</context>
@ -4438,6 +4467,7 @@
</trans-unit>
<trans-unit id="ed1b6bfe4b7beca445156e6bb92a76d3cdebe945" datatype="html">
<source>Replaced</source>
<target>Ersetzt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">36,39</context>
@ -4631,7 +4661,7 @@
<target>Effektiver Gebührensatz</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">489,492</context>
<context context-type="linenumber">491,494</context>
</context-group>
<note priority="1" from="description">Effective transaction fee rate</note>
<note priority="1" from="meaning">transaction.effective-fee-rate</note>
@ -4777,6 +4807,7 @@
</trans-unit>
<trans-unit id="d70397ee91f6c9ec91f1c1dff88126f8f9b7c2c4" datatype="html">
<source>Show more inputs to reveal fee data</source>
<target>Mehr Inputs anzeigen, um Gebührendaten anzuzeigen</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
<context context-type="linenumber">288,291</context>
@ -4785,6 +4816,7 @@
</trans-unit>
<trans-unit id="ea7c261363dc5f6134b7bacba2a1ef97f4ff7859" datatype="html">
<source><x id="INTERPOLATION" equiv-text="remaining&lt;/ng-template&gt;"/> remaining</source>
<target><x id="INTERPOLATION" equiv-text="remaining&lt;/ng-template&gt;"/> verbleiben</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
<context context-type="linenumber">330,331</context>
@ -4935,6 +4967,7 @@
</trans-unit>
<trans-unit id="b0fb884cf71b19e3a4d146146d260ccedd9d50a5" datatype="html">
<source>This transaction does not use Taproot</source>
<target>Diese Transaktion verwendet kein Taproot°</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">18</context>
@ -5051,7 +5084,7 @@
<target>Mindestgebühr</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">201,202</context>
<context context-type="linenumber">203,204</context>
</context-group>
<note priority="1" from="description">Minimum mempool fee</note>
<note priority="1" from="meaning">dashboard.minimum-fee</note>
@ -5061,7 +5094,7 @@
<target>Streichung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">202,203</context>
<context context-type="linenumber">204,205</context>
</context-group>
<note priority="1" from="description">Purgin below fee</note>
<note priority="1" from="meaning">dashboard.purging</note>
@ -5071,7 +5104,7 @@
<target>Speichernutzung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">214,215</context>
<context context-type="linenumber">216,217</context>
</context-group>
<note priority="1" from="description">Memory usage</note>
<note priority="1" from="meaning">dashboard.memory-usage</note>
@ -5081,7 +5114,7 @@
<target>L-BTC im Umlauf</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">228,230</context>
<context context-type="linenumber">230,232</context>
</context-group>
<note priority="1" from="description">dashboard.lbtc-pegs-in-circulation</note>
</trans-unit>
@ -5090,7 +5123,7 @@
<target>REST-API-Dienst</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">api-docs.title</note>
</trans-unit>
@ -5099,11 +5132,11 @@
<target>Endpunkt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">48,49</context>
<context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">102,105</context>
<context context-type="linenumber">104,107</context>
</context-group>
<note priority="1" from="description">Api docs endpoint</note>
</trans-unit>
@ -5112,11 +5145,11 @@
<target>Beschreibung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67,68</context>
<context context-type="linenumber">69,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">106,107</context>
<context context-type="linenumber">108,109</context>
</context-group>
</trans-unit>
<trans-unit id="a706b1ded7506620b153dbcdea8108e6691bbbd9" datatype="html">
@ -5124,7 +5157,7 @@
<target>Standard Senden: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/> action: 'want', data: ['blocks', ...] <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> um auszudrücken, was gepusht werden soll. Verfügbar: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>mempool-blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>live-2h-chart<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, und <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>.<x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/><x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/>Sende Transaktionen bezogen auf die Adresse: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/> 'track-address': '3PbJ...bF9B' <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> um alle neuen Transaktionen mit der Adresse als Input oder Output enthalten zu empfangen. Gibt Array von Tansaktionen zurück. <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>address-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> für neue Mempool-Transaktionen, und <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>block-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/></target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">107,108</context>
<context context-type="linenumber">109,110</context>
</context-group>
<note priority="1" from="description">api-docs.websocket.websocket</note>
</trans-unit>
@ -5297,12 +5330,13 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">120,121</context>
<context context-type="linenumber">123,124</context>
</context-group>
<note priority="1" from="description">lightning.x-channels</note>
</trans-unit>
<trans-unit id="4e64e04c01e8f5fc09c41cb8942dcc3af0398b28" datatype="html">
<source>Starting balance</source>
<target>Anfangsstand</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-close-box/channel-close-box.component.html</context>
<context context-type="linenumber">6</context>
@ -5312,6 +5346,7 @@
</trans-unit>
<trans-unit id="5c4bfd47a4f4d7cb99912f028494fe2530d36d57" datatype="html">
<source>Closing balance</source>
<target>Schlussstand</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-close-box/channel-close-box.component.html</context>
<context context-type="linenumber">12</context>
@ -5341,7 +5376,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">65,66</context>
<context context-type="linenumber">68,69</context>
</context-group>
<note priority="1" from="description">status.inactive</note>
</trans-unit>
@ -5358,7 +5393,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">66,68</context>
<context context-type="linenumber">69,71</context>
</context-group>
<note priority="1" from="description">status.active</note>
</trans-unit>
@ -5379,7 +5414,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">68,70</context>
<context context-type="linenumber">71,73</context>
</context-group>
<note priority="1" from="description">status.closed</note>
</trans-unit>
@ -5409,7 +5444,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">40,43</context>
<context context-type="linenumber">43,46</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-statistics/node-statistics.component.html</context>
@ -5525,12 +5560,13 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">42,43</context>
</context-group>
<note priority="1" from="description">lightning.closing_date</note>
</trans-unit>
<trans-unit id="1f0b0f2c90de4f3f0eb2c138eed38f4e9ac7a13e" datatype="html">
<source>Closed by</source>
<target>Geschlossen von</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel.component.html</context>
<context context-type="linenumber">52,54</context>
@ -5577,7 +5613,7 @@
<target>Keine Kanäle zum Anzeigen</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">29,35</context>
<context context-type="linenumber">29,37</context>
</context-group>
<note priority="1" from="description">lightning.empty-channels-list</note>
</trans-unit>
@ -5586,7 +5622,7 @@
<target>Alias</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">35,37</context>
<context context-type="linenumber">38,40</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/group/group.component.html</context>
@ -5623,7 +5659,7 @@
<target>Status</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">37,38</context>
<context context-type="linenumber">40,41</context>
</context-group>
<note priority="1" from="description">status</note>
</trans-unit>
@ -5632,7 +5668,7 @@
<target>Kanal ID</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">41,45</context>
<context context-type="linenumber">44,48</context>
</context-group>
<note priority="1" from="description">channels.id</note>
</trans-unit>
@ -5641,11 +5677,11 @@
<target>sats</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">60,64</context>
<context context-type="linenumber">63,67</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">84,88</context>
<context context-type="linenumber">87,91</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-statistics/channels-statistics.component.html</context>
@ -6052,6 +6088,7 @@
</trans-unit>
<trans-unit id="7b8687bbc13bbf62288689606dcab9784a3eb53b" datatype="html">
<source>Fee distribution</source>
<target>Gebührenverteilung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-fee-chart/node-fee-chart.component.html</context>
<context context-type="linenumber">2</context>
@ -6147,6 +6184,7 @@
</trans-unit>
<trans-unit id="008e9fb48f07f545af73b3f676dc60cc3a829765" datatype="html">
<source>Avg channel distance</source>
<target>Durchschn. Kanalentfernung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">56,57</context>
@ -6186,6 +6224,7 @@
</trans-unit>
<trans-unit id="e128630e07a4c467f51b246a31c5734d5fb1a2c2" datatype="html">
<source>Liquidity ad</source>
<target>Liquiditätswerbung</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">138,141</context>
@ -6194,6 +6233,7 @@
</trans-unit>
<trans-unit id="bc84b5a9a70217104a53c7139e30b392be6520b7" datatype="html">
<source>Lease fee rate</source>
<target>Lease Gebührensatz</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">144,147</context>
@ -6203,6 +6243,7 @@
</trans-unit>
<trans-unit id="ee807dd54b4a45eeba284744c64774de1ab5e4f1" datatype="html">
<source>Lease base fee</source>
<target>Lease Basisgebühr</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">152,154</context>
@ -6211,6 +6252,7 @@
</trans-unit>
<trans-unit id="5e348f3d51c3bb283c16572bee1e293ea991cf49" datatype="html">
<source>Funding weight</source>
<target>Finanzierungsgewicht</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">158,159</context>
@ -6219,6 +6261,7 @@
</trans-unit>
<trans-unit id="8af4768ed9112268945c697923ce017fbe23e1b7" datatype="html">
<source>Channel fee rate</source>
<target>Kanal-Gebührenrate</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">168,171</context>
@ -6228,6 +6271,7 @@
</trans-unit>
<trans-unit id="4e6d03f01a59434dee25104fe9478041db186ca8" datatype="html">
<source>Channel base fee</source>
<target>Kanal-Basisgebühr</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">176,178</context>
@ -6236,6 +6280,7 @@
</trans-unit>
<trans-unit id="e8e09fa12864e94f094a2a7c8c97cfdf0cff8aab" datatype="html">
<source>Compact lease</source>
<target>Compact_lease</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">188,190</context>
@ -6244,6 +6289,7 @@
</trans-unit>
<trans-unit id="aa687f4987e2d4e0010be692d402174962ece70e" datatype="html">
<source>TLV extension records</source>
<target>LV Erweiterungs-Datensätze</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">199,202</context>
@ -6324,6 +6370,7 @@
</trans-unit>
<trans-unit id="6391724349488018234" datatype="html">
<source>Indexing in progress</source>
<target>Indizierung läuft</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts</context>
<context context-type="linenumber">121,116</context>
@ -6591,6 +6638,7 @@
</trans-unit>
<trans-unit id="e422817608e8d55e08b45a1da2e118eb42815af4" datatype="html">
<source>Active nodes</source>
<target>Aktive Knoten</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-isp/nodes-per-isp.component.html</context>
<context context-type="linenumber">14,18</context>

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

@ -11,6 +11,7 @@
</trans-unit>
<trans-unit id="ngb.carousel.slide-number" datatype="html">
<source> Slide <x id="INTERPOLATION" equiv-text="true`, will pau"/> of <x id="INTERPOLATION_1" equiv-text="n mouse cursor"/> </source>
<target> Slajd <x id="INTERPOLATION" equiv-text="true`, will pau"/> z <x id="INTERPOLATION_1" equiv-text="n mouse cursor"/> </target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/carousel/carousel.ts</context>
<context context-type="linenumber">175,181</context>
@ -147,6 +148,7 @@
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source><x id="INTERPOLATION" equiv-text="* The maximal"/></source>
<target><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
<context context-type="linenumber">30,33</context>
@ -357,7 +359,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,291</context>
<context context-type="linenumber">303,304</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -382,7 +384,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">291,292</context>
<context context-type="linenumber">304,305</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -424,7 +426,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">40,41</context>
<context context-type="linenumber">38,39</context>
</context-group>
<note priority="1" from="description">block.hash</note>
</trans-unit>
@ -449,7 +451,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">44,46</context>
<context context-type="linenumber">42,44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -592,7 +594,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">49,51</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/pool-ranking/pool-ranking.component.html</context>
@ -1052,7 +1054,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">246,247</context>
<context context-type="linenumber">245,246</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -1530,7 +1532,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">57,60</context>
</context-group>
</trans-unit>
<trans-unit id="address-label.multisig" datatype="html">
@ -1666,7 +1668,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">29,31</context>
<context context-type="linenumber">31,33</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html</context>
@ -1888,7 +1890,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">30,31</context>
<context context-type="linenumber">32,33</context>
</context-group>
<note priority="1" from="description">Asset ticker header</note>
</trans-unit>
@ -1901,7 +1903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">31,34</context>
<context context-type="linenumber">33,36</context>
</context-group>
<note priority="1" from="description">Asset Issuer Domain header</note>
</trans-unit>
@ -1914,7 +1916,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">32,36</context>
<context context-type="linenumber">34,38</context>
</context-group>
<note priority="1" from="description">Asset ID header</note>
</trans-unit>
@ -1923,7 +1925,7 @@
<target>Błąd podczas ładowania danych zasobów.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">48,53</context>
<context context-type="linenumber">50,55</context>
</context-group>
<note priority="1" from="description">Asset data load error</note>
</trans-unit>
@ -2121,6 +2123,7 @@
</trans-unit>
<trans-unit id="86c50fc2171298179283e3c9b6d79b57b821599b" datatype="html">
<source>not available</source>
<target>nie dostępne</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-graph/block-overview-graph.component.html</context>
<context context-type="linenumber">5</context>
@ -2140,7 +2143,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476</context>
<context context-type="linenumber">478</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html</context>
@ -2166,7 +2169,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476,477</context>
<context context-type="linenumber">478,479</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2188,7 +2191,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">479,481</context>
<context context-type="linenumber">481,483</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-box/channel-box.component.html</context>
@ -2200,7 +2203,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">38,39</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">Transaction fee rate</note>
<note priority="1" from="meaning">transaction.fee-rate</note>
@ -2218,11 +2221,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">125,128</context>
<context context-type="linenumber">123,126</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129</context>
<context context-type="linenumber">127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -2282,11 +2285,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">481,484</context>
<context context-type="linenumber">483,486</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">492,494</context>
<context context-type="linenumber">494,496</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2298,7 +2301,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">204,208</context>
<context context-type="linenumber">206,210</context>
</context-group>
<note priority="1" from="description">sat/vB</note>
<note priority="1" from="meaning">shared.sat-vbyte</note>
@ -2323,6 +2326,7 @@
</trans-unit>
<trans-unit id="1a8035ac608b083c29407327290b7cc9d6cbb95d" datatype="html">
<source>Audit status</source>
<target>Status audytu</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">36</context>
@ -2331,6 +2335,7 @@
</trans-unit>
<trans-unit id="180092a6b8a6151a05f4a7552a2fb75fd159dfa8" datatype="html">
<source>Match</source>
<target>Dopasowanie</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">38</context>
@ -2339,6 +2344,7 @@
</trans-unit>
<trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">
<source>Removed</source>
<target>Usunięte</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">39</context>
@ -2347,6 +2353,7 @@
</trans-unit>
<trans-unit id="f0136f1a1d77aa656e0ebd0f3c023118dd2a2776" datatype="html">
<source>Marginal fee rate</source>
<target>Marginalna stopa opłat</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">40</context>
@ -2359,6 +2366,7 @@
</trans-unit>
<trans-unit id="d702ad6f00c620c9658ac1ad8184d5fe5bc099fb" datatype="html">
<source>Recently broadcasted</source>
<target>Ostatnio rozgłoszone</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">41</context>
@ -2462,7 +2470,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">50,52</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2510,7 +2518,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">54,56</context>
<context context-type="linenumber">52,54</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2548,7 +2556,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">128,129</context>
<context context-type="linenumber">126,127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2565,11 +2573,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">133,135</context>
<context context-type="linenumber">131,133</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">159,162</context>
<context context-type="linenumber">157,160</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2587,7 +2595,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">168,170</context>
<context context-type="linenumber">166,168</context>
</context-group>
<note priority="1" from="description">block.miner</note>
</trans-unit>
@ -2600,7 +2608,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.ts</context>
<context context-type="linenumber">227</context>
<context context-type="linenumber">234</context>
</context-group>
</trans-unit>
<trans-unit id="bdf0e930eb22431140a2eaeacd809cc5f8ebd38c" datatype="html">
@ -2625,20 +2633,29 @@
</context-group>
<note priority="1" from="description">Previous Block</note>
</trans-unit>
<trans-unit id="930c93e0c7afdf0f8d926773d5157c803bdc86e1" datatype="html">
<source>Block health</source>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<target>Zdrowie</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">56</context>
</context-group>
<note priority="1" from="description">block.health</note>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">
<source>Unknown</source>
<target>Nieznany</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">69,72</context>
<context context-type="linenumber">67,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2667,7 +2684,7 @@
<target>Zakres opłat</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">124,125</context>
<context context-type="linenumber">122,123</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2680,7 +2697,7 @@
<target>Na podstawie przeciętnej transakcji w natywnym segwit o długości 140 vBajtów</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129,131</context>
<context context-type="linenumber">127,129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/fees-box/fees-box.component.html</context>
@ -2709,44 +2726,61 @@
<target>Subsydium + opłaty:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">148,151</context>
<context context-type="linenumber">146,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">163,167</context>
<context context-type="linenumber">161,165</context>
</context-group>
<note priority="1" from="description">Total subsidy and fees in a block</note>
<note priority="1" from="meaning">block.subsidy-and-fees</note>
</trans-unit>
<trans-unit id="26f41d32df1646d45fcb03fe6952fb3eccf60b0f" datatype="html">
<source>Projected</source>
<trans-unit id="23fa95fce7b4badf5ad584d4a1712d558266266f" datatype="html">
<source>Expected</source>
<target>Prognoza</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">210,212</context>
<context context-type="linenumber">209</context>
</context-group>
<note priority="1" from="description">block.projected</note>
<note priority="1" from="description">block.expected</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,210</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="1da6d9283e3222148d76c10c8e37abeeb66c93cb" datatype="html">
<source>Actual</source>
<target>Wartość aktualna</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">212,216</context>
<context context-type="linenumber">211,215</context>
</context-group>
<note priority="1" from="description">block.actual</note>
</trans-unit>
<trans-unit id="a37e529c0d7b39d95861dd019cb78bb9ac9a3c5d" datatype="html">
<source>Projected Block</source>
<trans-unit id="97577daae15cc7f30ab4d0f4f4dfb8045477aefd" datatype="html">
<source>Expected Block</source>
<target>Prognozowany blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">216,218</context>
<context context-type="linenumber">215</context>
</context-group>
<note priority="1" from="description">block.projected-block</note>
<note priority="1" from="description">block.expected-block</note>
</trans-unit>
<trans-unit id="6efa73f0d6f0844a1e0c341c9b88323f51852d91" datatype="html">
<source>Actual Block</source>
<target>Rzeczywisty blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">225,227</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">block.actual-block</note>
</trans-unit>
@ -2755,7 +2789,7 @@
<target>Bity</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">250,252</context>
<context context-type="linenumber">249,251</context>
</context-group>
<note priority="1" from="description">block.bits</note>
</trans-unit>
@ -2764,7 +2798,7 @@
<target>Korzeń Merkle'a</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">254,256</context>
<context context-type="linenumber">253,255</context>
</context-group>
<note priority="1" from="description">block.merkle-root</note>
</trans-unit>
@ -2773,7 +2807,7 @@
<target>Trudność</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">265,268</context>
<context context-type="linenumber">264,267</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html</context>
@ -2802,7 +2836,7 @@
<target>Unikalna liczba</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">269,271</context>
<context context-type="linenumber">268,270</context>
</context-group>
<note priority="1" from="description">block.nonce</note>
</trans-unit>
@ -2811,16 +2845,26 @@
<target>Nagłówek bloku w postaci szesnastkowej</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">273,274</context>
<context context-type="linenumber">272,273</context>
</context-group>
<note priority="1" from="description">block.header</note>
</trans-unit>
<trans-unit id="ccf00caac258749fa1c5fd488fb15368fa6fce37" datatype="html">
<source>Audit</source>
<target>Audyt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,294</context>
</context-group>
<note priority="1" from="description">Toggle Audit</note>
<note priority="1" from="meaning">block.toggle-audit</note>
</trans-unit>
<trans-unit id="5f32c623f92bf3ca31202cc6281d4abd5febaf6a" datatype="html">
<source>Details</source>
<target>Szczegóły</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">284,288</context>
<context context-type="linenumber">297,301</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2846,11 +2890,11 @@
<target>Błąd ładowania danych.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">303,305</context>
<context context-type="linenumber">316,318</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">339,343</context>
<context context-type="linenumber">355,359</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-preview.component.html</context>
@ -2872,9 +2916,10 @@
</trans-unit>
<trans-unit id="9f63968580fcea609d6b9e7a5b6ba7180b54e18f" datatype="html">
<source>Why is this block empty?</source>
<target>Czemu ten blok jest pusty?</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">361,367</context>
<context context-type="linenumber">377,383</context>
</context-group>
<note priority="1" from="description">block.empty-block-explanation</note>
</trans-unit>
@ -2920,18 +2965,6 @@
</context-group>
<note priority="1" from="description">latest-blocks.mined</note>
</trans-unit>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="12f86e6747a5ad39e62d3480ddc472b1aeab5b76" datatype="html">
<source>Reward</source>
<target>Nagroda</target>
@ -2995,7 +3028,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">210,214</context>
<context context-type="linenumber">212,216</context>
</context-group>
<note priority="1" from="description">dashboard.txs</note>
</trans-unit>
@ -3234,7 +3267,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">237,238</context>
<context context-type="linenumber">239,240</context>
</context-group>
<note priority="1" from="description">dashboard.incoming-transactions</note>
</trans-unit>
@ -3247,7 +3280,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">240,243</context>
<context context-type="linenumber">242,245</context>
</context-group>
<note priority="1" from="description">dashboard.backend-is-synchronizing</note>
</trans-unit>
@ -3260,7 +3293,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">245,250</context>
<context context-type="linenumber">247,252</context>
</context-group>
<note priority="1" from="description">vB/s</note>
<note priority="1" from="meaning">shared.vbytes-per-second</note>
@ -3274,7 +3307,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">208,209</context>
<context context-type="linenumber">210,211</context>
</context-group>
<note priority="1" from="description">Unconfirmed count</note>
<note priority="1" from="meaning">dashboard.unconfirmed</note>
@ -3531,7 +3564,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">52,54</context>
<context context-type="linenumber">51,53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/statistics/statistics.component.ts</context>
@ -3557,7 +3590,7 @@
<target>Eksplorator Lightning</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">44,45</context>
<context context-type="linenumber">44,47</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts</context>
@ -3565,21 +3598,12 @@
</context-group>
<note priority="1" from="description">master-page.lightning</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">45,48</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<target>Dokumentacja</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">55,57</context>
<context context-type="linenumber">54,56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/docs/docs.component.html</context>
@ -4037,7 +4061,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">154,161</context>
<context context-type="linenumber">154,162</context>
</context-group>
<note priority="1" from="description">Broadcast Transaction</note>
<note priority="1" from="meaning">shared.broadcast-transaction</note>
@ -4083,6 +4107,7 @@
</trans-unit>
<trans-unit id="1d9f405ab98a5f79d98b439de29fc8baca46b97c" datatype="html">
<source>Avg Block Fees</source>
<target>Średnie opłaty bloku</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">17</context>
@ -4095,6 +4120,7 @@
</trans-unit>
<trans-unit id="a0d4ab5b063e7be1c9ea980f5fd6ce1b5384ad0b" datatype="html">
<source>Average fees per block in the past 144 blocks</source>
<target>Średnie opłaty na blok w ciągu ostatnich 144 bloków</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">18,20</context>
@ -4103,6 +4129,7 @@
</trans-unit>
<trans-unit id="0705223420d290a218e4ed83bd4d904454a9cee8" datatype="html">
<source>BTC/block</source>
<target>BTC/blok</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">21,24</context>
@ -4112,6 +4139,7 @@
</trans-unit>
<trans-unit id="cf3a97b1c1546b843411cfe101bc55ba2ac46bac" datatype="html">
<source>Avg Tx Fee</source>
<target>Średnia stopa opłat</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">30</context>
@ -4429,6 +4457,7 @@
</trans-unit>
<trans-unit id="72cfda88d5ab4851cba76abb402cae8f03ab6c6b" datatype="html">
<source>This transaction replaced:</source>
<target>Ta transakcja zastąpiła:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">10,12</context>
@ -4438,6 +4467,7 @@
</trans-unit>
<trans-unit id="ed1b6bfe4b7beca445156e6bb92a76d3cdebe945" datatype="html">
<source>Replaced</source>
<target>Zastąpiona</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">36,39</context>
@ -4631,7 +4661,7 @@
<target>Efektywny poziom opłaty</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">489,492</context>
<context context-type="linenumber">491,494</context>
</context-group>
<note priority="1" from="description">Effective transaction fee rate</note>
<note priority="1" from="meaning">transaction.effective-fee-rate</note>
@ -4777,6 +4807,7 @@
</trans-unit>
<trans-unit id="d70397ee91f6c9ec91f1c1dff88126f8f9b7c2c4" datatype="html">
<source>Show more inputs to reveal fee data</source>
<target>Pokaż więcej wejść by ujawnić dane o opłatach</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
<context context-type="linenumber">288,291</context>
@ -4785,6 +4816,7 @@
</trans-unit>
<trans-unit id="ea7c261363dc5f6134b7bacba2a1ef97f4ff7859" datatype="html">
<source><x id="INTERPOLATION" equiv-text="remaining&lt;/ng-template&gt;"/> remaining</source>
<target>pozostało <x id="INTERPOLATION" equiv-text="remaining&lt;/ng-template&gt;"/></target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
<context context-type="linenumber">330,331</context>
@ -4935,6 +4967,7 @@
</trans-unit>
<trans-unit id="b0fb884cf71b19e3a4d146146d260ccedd9d50a5" datatype="html">
<source>This transaction does not use Taproot</source>
<target>Ta transakcja nie używa Taproot</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-features/tx-features.component.html</context>
<context context-type="linenumber">18</context>
@ -5051,7 +5084,7 @@
<target>Minimalna opłata</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">201,202</context>
<context context-type="linenumber">203,204</context>
</context-group>
<note priority="1" from="description">Minimum mempool fee</note>
<note priority="1" from="meaning">dashboard.minimum-fee</note>
@ -5061,7 +5094,7 @@
<target>Próg odrzucenia</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">202,203</context>
<context context-type="linenumber">204,205</context>
</context-group>
<note priority="1" from="description">Purgin below fee</note>
<note priority="1" from="meaning">dashboard.purging</note>
@ -5071,7 +5104,7 @@
<target>Zużycie pamięci</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">214,215</context>
<context context-type="linenumber">216,217</context>
</context-group>
<note priority="1" from="description">Memory usage</note>
<note priority="1" from="meaning">dashboard.memory-usage</note>
@ -5081,7 +5114,7 @@
<target>L-BTC w obiegu</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">228,230</context>
<context context-type="linenumber">230,232</context>
</context-group>
<note priority="1" from="description">dashboard.lbtc-pegs-in-circulation</note>
</trans-unit>
@ -5090,7 +5123,7 @@
<target>Usługa REST API</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">api-docs.title</note>
</trans-unit>
@ -5099,11 +5132,11 @@
<target>Końcówka</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">48,49</context>
<context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">102,105</context>
<context context-type="linenumber">104,107</context>
</context-group>
<note priority="1" from="description">Api docs endpoint</note>
</trans-unit>
@ -5112,11 +5145,11 @@
<target>Opis</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67,68</context>
<context context-type="linenumber">69,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">106,107</context>
<context context-type="linenumber">108,109</context>
</context-group>
</trans-unit>
<trans-unit id="a706b1ded7506620b153dbcdea8108e6691bbbd9" datatype="html">
@ -5124,7 +5157,7 @@
<target>Domyślny push: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/> action: 'want', data: ['blocks', ...] <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> aby wyrazić co chcesz wysłać. Dostępne: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>mempool-blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>live-2h-chart<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> i <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>.<x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/><x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/>Wysłanie transakcji związanych z adresem: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/> 'track-address': '3PbJ...bF9B' <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> aby otrzymać wszystkie nowe transakcje zawierające ten adres jako wejście lub wyjście. Zwraca tablicę transakcji. <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>address-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> dla nowych transakcji mempool, i <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>block-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> dla nowo potwierdzonych transakcji w bloku.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">107,108</context>
<context context-type="linenumber">109,110</context>
</context-group>
<note priority="1" from="description">api-docs.websocket.websocket</note>
</trans-unit>
@ -5297,12 +5330,13 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">120,121</context>
<context context-type="linenumber">123,124</context>
</context-group>
<note priority="1" from="description">lightning.x-channels</note>
</trans-unit>
<trans-unit id="4e64e04c01e8f5fc09c41cb8942dcc3af0398b28" datatype="html">
<source>Starting balance</source>
<target>Saldo początkowe</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-close-box/channel-close-box.component.html</context>
<context context-type="linenumber">6</context>
@ -5312,6 +5346,7 @@
</trans-unit>
<trans-unit id="5c4bfd47a4f4d7cb99912f028494fe2530d36d57" datatype="html">
<source>Closing balance</source>
<target>Saldo końcowe</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-close-box/channel-close-box.component.html</context>
<context context-type="linenumber">12</context>
@ -5341,7 +5376,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">65,66</context>
<context context-type="linenumber">68,69</context>
</context-group>
<note priority="1" from="description">status.inactive</note>
</trans-unit>
@ -5358,7 +5393,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">66,68</context>
<context context-type="linenumber">69,71</context>
</context-group>
<note priority="1" from="description">status.active</note>
</trans-unit>
@ -5379,7 +5414,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">68,70</context>
<context context-type="linenumber">71,73</context>
</context-group>
<note priority="1" from="description">status.closed</note>
</trans-unit>
@ -5409,7 +5444,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">40,43</context>
<context context-type="linenumber">43,46</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-statistics/node-statistics.component.html</context>
@ -5525,12 +5560,13 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">42,43</context>
</context-group>
<note priority="1" from="description">lightning.closing_date</note>
</trans-unit>
<trans-unit id="1f0b0f2c90de4f3f0eb2c138eed38f4e9ac7a13e" datatype="html">
<source>Closed by</source>
<target>Zamknięty przez</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel.component.html</context>
<context context-type="linenumber">52,54</context>
@ -5577,7 +5613,7 @@
<target>Brak kanałów do wyświetlenia</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">29,35</context>
<context context-type="linenumber">29,37</context>
</context-group>
<note priority="1" from="description">lightning.empty-channels-list</note>
</trans-unit>
@ -5586,7 +5622,7 @@
<target>Alias</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">35,37</context>
<context context-type="linenumber">38,40</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/group/group.component.html</context>
@ -5623,7 +5659,7 @@
<target>Stan</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">37,38</context>
<context context-type="linenumber">40,41</context>
</context-group>
<note priority="1" from="description">status</note>
</trans-unit>
@ -5632,7 +5668,7 @@
<target>ID kanału</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">41,45</context>
<context context-type="linenumber">44,48</context>
</context-group>
<note priority="1" from="description">channels.id</note>
</trans-unit>
@ -5641,11 +5677,11 @@
<target>sats</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">60,64</context>
<context context-type="linenumber">63,67</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">84,88</context>
<context context-type="linenumber">87,91</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-statistics/channels-statistics.component.html</context>
@ -6052,6 +6088,7 @@
</trans-unit>
<trans-unit id="7b8687bbc13bbf62288689606dcab9784a3eb53b" datatype="html">
<source>Fee distribution</source>
<target>Rozkład opłat</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-fee-chart/node-fee-chart.component.html</context>
<context context-type="linenumber">2</context>
@ -6147,6 +6184,7 @@
</trans-unit>
<trans-unit id="008e9fb48f07f545af73b3f676dc60cc3a829765" datatype="html">
<source>Avg channel distance</source>
<target>Średnia odległość kanałów</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">56,57</context>
@ -6186,6 +6224,7 @@
</trans-unit>
<trans-unit id="e128630e07a4c467f51b246a31c5734d5fb1a2c2" datatype="html">
<source>Liquidity ad</source>
<target>Reklama płynności</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">138,141</context>
@ -6194,6 +6233,7 @@
</trans-unit>
<trans-unit id="bc84b5a9a70217104a53c7139e30b392be6520b7" datatype="html">
<source>Lease fee rate</source>
<target>Stawka opłat dzierżawy</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">144,147</context>
@ -6203,6 +6243,7 @@
</trans-unit>
<trans-unit id="ee807dd54b4a45eeba284744c64774de1ab5e4f1" datatype="html">
<source>Lease base fee</source>
<target>Opłata bazowa dzierżawy</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">152,154</context>
@ -6211,6 +6252,7 @@
</trans-unit>
<trans-unit id="5e348f3d51c3bb283c16572bee1e293ea991cf49" datatype="html">
<source>Funding weight</source>
<target>Blok finansujący</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">158,159</context>
@ -6219,6 +6261,7 @@
</trans-unit>
<trans-unit id="8af4768ed9112268945c697923ce017fbe23e1b7" datatype="html">
<source>Channel fee rate</source>
<target>Stawka opłat kanału</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">168,171</context>
@ -6228,6 +6271,7 @@
</trans-unit>
<trans-unit id="4e6d03f01a59434dee25104fe9478041db186ca8" datatype="html">
<source>Channel base fee</source>
<target>Opłata bazowa kanału</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">176,178</context>
@ -6236,6 +6280,7 @@
</trans-unit>
<trans-unit id="e8e09fa12864e94f094a2a7c8c97cfdf0cff8aab" datatype="html">
<source>Compact lease</source>
<target>Kompaktowa dzierżawa</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">188,190</context>
@ -6244,6 +6289,7 @@
</trans-unit>
<trans-unit id="aa687f4987e2d4e0010be692d402174962ece70e" datatype="html">
<source>TLV extension records</source>
<target>Rekordy rozszerzeń TLV</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">199,202</context>
@ -6324,6 +6370,7 @@
</trans-unit>
<trans-unit id="6391724349488018234" datatype="html">
<source>Indexing in progress</source>
<target>Indeksowanie w toku</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts</context>
<context context-type="linenumber">121,116</context>
@ -6591,6 +6638,7 @@
</trans-unit>
<trans-unit id="e422817608e8d55e08b45a1da2e118eb42815af4" datatype="html">
<source>Active nodes</source>
<target>Aktywne węzły</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-isp/nodes-per-isp.component.html</context>
<context context-type="linenumber">14,18</context>

View file

@ -359,7 +359,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,291</context>
<context context-type="linenumber">303,304</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -384,7 +384,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">291,292</context>
<context context-type="linenumber">304,305</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -426,7 +426,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">40,41</context>
<context context-type="linenumber">38,39</context>
</context-group>
<note priority="1" from="description">block.hash</note>
</trans-unit>
@ -451,7 +451,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">44,46</context>
<context context-type="linenumber">42,44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -594,7 +594,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">49,51</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/pool-ranking/pool-ranking.component.html</context>
@ -1054,7 +1054,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">246,247</context>
<context context-type="linenumber">245,246</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -1532,7 +1532,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">57,60</context>
</context-group>
</trans-unit>
<trans-unit id="address-label.multisig" datatype="html">
@ -1668,7 +1668,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">29,31</context>
<context context-type="linenumber">31,33</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html</context>
@ -1890,7 +1890,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">30,31</context>
<context context-type="linenumber">32,33</context>
</context-group>
<note priority="1" from="description">Asset ticker header</note>
</trans-unit>
@ -1903,7 +1903,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">31,34</context>
<context context-type="linenumber">33,36</context>
</context-group>
<note priority="1" from="description">Asset Issuer Domain header</note>
</trans-unit>
@ -1916,7 +1916,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">32,36</context>
<context context-type="linenumber">34,38</context>
</context-group>
<note priority="1" from="description">Asset ID header</note>
</trans-unit>
@ -1925,7 +1925,7 @@
<target>Fel vid inläsning av assets-data.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">48,53</context>
<context context-type="linenumber">50,55</context>
</context-group>
<note priority="1" from="description">Asset data load error</note>
</trans-unit>
@ -2143,7 +2143,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476</context>
<context context-type="linenumber">478</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html</context>
@ -2169,7 +2169,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476,477</context>
<context context-type="linenumber">478,479</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2191,7 +2191,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">479,481</context>
<context context-type="linenumber">481,483</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-box/channel-box.component.html</context>
@ -2203,7 +2203,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">38,39</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">Transaction fee rate</note>
<note priority="1" from="meaning">transaction.fee-rate</note>
@ -2221,11 +2221,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">125,128</context>
<context context-type="linenumber">123,126</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129</context>
<context context-type="linenumber">127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -2285,11 +2285,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">481,484</context>
<context context-type="linenumber">483,486</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">492,494</context>
<context context-type="linenumber">494,496</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2301,7 +2301,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">204,208</context>
<context context-type="linenumber">206,210</context>
</context-group>
<note priority="1" from="description">sat/vB</note>
<note priority="1" from="meaning">shared.sat-vbyte</note>
@ -2470,7 +2470,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">50,52</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2518,7 +2518,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">54,56</context>
<context context-type="linenumber">52,54</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2556,7 +2556,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">128,129</context>
<context context-type="linenumber">126,127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2573,11 +2573,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">133,135</context>
<context context-type="linenumber">131,133</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">159,162</context>
<context context-type="linenumber">157,160</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2595,7 +2595,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">168,170</context>
<context context-type="linenumber">166,168</context>
</context-group>
<note priority="1" from="description">block.miner</note>
</trans-unit>
@ -2608,7 +2608,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.ts</context>
<context context-type="linenumber">227</context>
<context context-type="linenumber">234</context>
</context-group>
</trans-unit>
<trans-unit id="bdf0e930eb22431140a2eaeacd809cc5f8ebd38c" datatype="html">
@ -2633,21 +2633,29 @@
</context-group>
<note priority="1" from="description">Previous Block</note>
</trans-unit>
<trans-unit id="930c93e0c7afdf0f8d926773d5157c803bdc86e1" datatype="html">
<source>Block health</source>
<target>Blockhälsa</target>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<target>Hälsa</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">56</context>
</context-group>
<note priority="1" from="description">block.health</note>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">
<source>Unknown</source>
<target>Okända</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">69,72</context>
<context context-type="linenumber">67,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2676,7 +2684,7 @@
<target>Avgiftspann</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">124,125</context>
<context context-type="linenumber">122,123</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2689,7 +2697,7 @@
<target>Baserat på en genomsnittlig native segwit-transaktion på 140 vBytes</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129,131</context>
<context context-type="linenumber">127,129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/fees-box/fees-box.component.html</context>
@ -2718,48 +2726,61 @@
<target>Subvention + avgifter:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">148,151</context>
<context context-type="linenumber">146,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">163,167</context>
<context context-type="linenumber">161,165</context>
</context-group>
<note priority="1" from="description">Total subsidy and fees in a block</note>
<note priority="1" from="meaning">block.subsidy-and-fees</note>
</trans-unit>
<trans-unit id="26f41d32df1646d45fcb03fe6952fb3eccf60b0f" datatype="html">
<source>Projected</source>
<target>Projekterad</target>
<trans-unit id="23fa95fce7b4badf5ad584d4a1712d558266266f" datatype="html">
<source>Expected</source>
<target>Förväntat</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">210,212</context>
<context context-type="linenumber">209</context>
</context-group>
<note priority="1" from="description">block.projected</note>
<note priority="1" from="description">block.expected</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,210</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="1da6d9283e3222148d76c10c8e37abeeb66c93cb" datatype="html">
<source>Actual</source>
<target>Faktiskt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">212,216</context>
<context context-type="linenumber">211,215</context>
</context-group>
<note priority="1" from="description">block.actual</note>
</trans-unit>
<trans-unit id="a37e529c0d7b39d95861dd019cb78bb9ac9a3c5d" datatype="html">
<source>Projected Block</source>
<target>Projekterat block</target>
<trans-unit id="97577daae15cc7f30ab4d0f4f4dfb8045477aefd" datatype="html">
<source>Expected Block</source>
<target>Förväntat block</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">216,218</context>
<context context-type="linenumber">215</context>
</context-group>
<note priority="1" from="description">block.projected-block</note>
<note priority="1" from="description">block.expected-block</note>
</trans-unit>
<trans-unit id="6efa73f0d6f0844a1e0c341c9b88323f51852d91" datatype="html">
<source>Actual Block</source>
<target>Faktiskt block</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">225,227</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">block.actual-block</note>
</trans-unit>
@ -2768,7 +2789,7 @@
<target>Bitar</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">250,252</context>
<context context-type="linenumber">249,251</context>
</context-group>
<note priority="1" from="description">block.bits</note>
</trans-unit>
@ -2777,7 +2798,7 @@
<target>Merkle root</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">254,256</context>
<context context-type="linenumber">253,255</context>
</context-group>
<note priority="1" from="description">block.merkle-root</note>
</trans-unit>
@ -2786,7 +2807,7 @@
<target>Svårighet</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">265,268</context>
<context context-type="linenumber">264,267</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html</context>
@ -2815,7 +2836,7 @@
<target>Nonce</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">269,271</context>
<context context-type="linenumber">268,270</context>
</context-group>
<note priority="1" from="description">block.nonce</note>
</trans-unit>
@ -2824,16 +2845,26 @@
<target>Block Header Hex</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">273,274</context>
<context context-type="linenumber">272,273</context>
</context-group>
<note priority="1" from="description">block.header</note>
</trans-unit>
<trans-unit id="ccf00caac258749fa1c5fd488fb15368fa6fce37" datatype="html">
<source>Audit</source>
<target>Granskning</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,294</context>
</context-group>
<note priority="1" from="description">Toggle Audit</note>
<note priority="1" from="meaning">block.toggle-audit</note>
</trans-unit>
<trans-unit id="5f32c623f92bf3ca31202cc6281d4abd5febaf6a" datatype="html">
<source>Details</source>
<target>Detaljer</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">284,288</context>
<context context-type="linenumber">297,301</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2859,11 +2890,11 @@
<target>Fel vid laddning av data.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">303,305</context>
<context context-type="linenumber">316,318</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">339,343</context>
<context context-type="linenumber">355,359</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-preview.component.html</context>
@ -2888,7 +2919,7 @@
<target>Varför är blocket tomt?</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">361,367</context>
<context context-type="linenumber">377,383</context>
</context-group>
<note priority="1" from="description">block.empty-block-explanation</note>
</trans-unit>
@ -2934,19 +2965,6 @@
</context-group>
<note priority="1" from="description">latest-blocks.mined</note>
</trans-unit>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<target>Hälsa</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="12f86e6747a5ad39e62d3480ddc472b1aeab5b76" datatype="html">
<source>Reward</source>
<target>Belöning</target>
@ -3010,7 +3028,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">210,214</context>
<context context-type="linenumber">212,216</context>
</context-group>
<note priority="1" from="description">dashboard.txs</note>
</trans-unit>
@ -3249,7 +3267,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">237,238</context>
<context context-type="linenumber">239,240</context>
</context-group>
<note priority="1" from="description">dashboard.incoming-transactions</note>
</trans-unit>
@ -3262,7 +3280,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">240,243</context>
<context context-type="linenumber">242,245</context>
</context-group>
<note priority="1" from="description">dashboard.backend-is-synchronizing</note>
</trans-unit>
@ -3275,7 +3293,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">245,250</context>
<context context-type="linenumber">247,252</context>
</context-group>
<note priority="1" from="description">vB/s</note>
<note priority="1" from="meaning">shared.vbytes-per-second</note>
@ -3289,7 +3307,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">208,209</context>
<context context-type="linenumber">210,211</context>
</context-group>
<note priority="1" from="description">Unconfirmed count</note>
<note priority="1" from="meaning">dashboard.unconfirmed</note>
@ -3546,7 +3564,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">52,54</context>
<context context-type="linenumber">51,53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/statistics/statistics.component.ts</context>
@ -3572,7 +3590,7 @@
<target>Lightningutforskare</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">44,45</context>
<context context-type="linenumber">44,47</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts</context>
@ -3580,21 +3598,12 @@
</context-group>
<note priority="1" from="description">master-page.lightning</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>beta</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">45,48</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<target>Dokumentation</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">55,57</context>
<context context-type="linenumber">54,56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/docs/docs.component.html</context>
@ -4052,7 +4061,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">154,161</context>
<context context-type="linenumber">154,162</context>
</context-group>
<note priority="1" from="description">Broadcast Transaction</note>
<note priority="1" from="meaning">shared.broadcast-transaction</note>
@ -4652,7 +4661,7 @@
<target>Effektiv avgiftssats</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">489,492</context>
<context context-type="linenumber">491,494</context>
</context-group>
<note priority="1" from="description">Effective transaction fee rate</note>
<note priority="1" from="meaning">transaction.effective-fee-rate</note>
@ -5075,7 +5084,7 @@
<target>Minimumavgift</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">201,202</context>
<context context-type="linenumber">203,204</context>
</context-group>
<note priority="1" from="description">Minimum mempool fee</note>
<note priority="1" from="meaning">dashboard.minimum-fee</note>
@ -5085,7 +5094,7 @@
<target>Förkastar</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">202,203</context>
<context context-type="linenumber">204,205</context>
</context-group>
<note priority="1" from="description">Purgin below fee</note>
<note priority="1" from="meaning">dashboard.purging</note>
@ -5095,7 +5104,7 @@
<target>Minnesanvändning</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">214,215</context>
<context context-type="linenumber">216,217</context>
</context-group>
<note priority="1" from="description">Memory usage</note>
<note priority="1" from="meaning">dashboard.memory-usage</note>
@ -5105,7 +5114,7 @@
<target>L-BTC i cirkulation</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">228,230</context>
<context context-type="linenumber">230,232</context>
</context-group>
<note priority="1" from="description">dashboard.lbtc-pegs-in-circulation</note>
</trans-unit>
@ -5114,7 +5123,7 @@
<target>REST API service</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">api-docs.title</note>
</trans-unit>
@ -5123,11 +5132,11 @@
<target>Slutpunkt</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">48,49</context>
<context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">102,105</context>
<context context-type="linenumber">104,107</context>
</context-group>
<note priority="1" from="description">Api docs endpoint</note>
</trans-unit>
@ -5136,11 +5145,11 @@
<target>Beskrivning</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67,68</context>
<context context-type="linenumber">69,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">106,107</context>
<context context-type="linenumber">108,109</context>
</context-group>
</trans-unit>
<trans-unit id="a706b1ded7506620b153dbcdea8108e6691bbbd9" datatype="html">
@ -5148,7 +5157,7 @@
<target>Standard push: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/> action: 'want', data: ['blocks', ...] <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> för att uttrycka vad du vill ha pushat. Tillgängligt: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>mempool-blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>live-2h-chart<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, och <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>.<x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/><x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/>Pusha transaktioner relaterat till address: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/> 'track-address': '3PbJ...bF9B' <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> för att ta emot alla nya transaktioner innehållandes den addressen som input eller output. Returnerar en lista av transaktioner. <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>address-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> för nya mempooltransaktioner, och <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>block-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> för nya blockbekräftade transaktioner.</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">107,108</context>
<context context-type="linenumber">109,110</context>
</context-group>
<note priority="1" from="description">api-docs.websocket.websocket</note>
</trans-unit>
@ -5321,7 +5330,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">120,121</context>
<context context-type="linenumber">123,124</context>
</context-group>
<note priority="1" from="description">lightning.x-channels</note>
</trans-unit>
@ -5367,7 +5376,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">65,66</context>
<context context-type="linenumber">68,69</context>
</context-group>
<note priority="1" from="description">status.inactive</note>
</trans-unit>
@ -5384,7 +5393,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">66,68</context>
<context context-type="linenumber">69,71</context>
</context-group>
<note priority="1" from="description">status.active</note>
</trans-unit>
@ -5405,7 +5414,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">68,70</context>
<context context-type="linenumber">71,73</context>
</context-group>
<note priority="1" from="description">status.closed</note>
</trans-unit>
@ -5435,7 +5444,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">40,43</context>
<context context-type="linenumber">43,46</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-statistics/node-statistics.component.html</context>
@ -5551,7 +5560,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">42,43</context>
</context-group>
<note priority="1" from="description">lightning.closing_date</note>
</trans-unit>
@ -5604,7 +5613,7 @@
<target>Inga kanaler att visa</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">29,35</context>
<context context-type="linenumber">29,37</context>
</context-group>
<note priority="1" from="description">lightning.empty-channels-list</note>
</trans-unit>
@ -5613,7 +5622,7 @@
<target>Alias</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">35,37</context>
<context context-type="linenumber">38,40</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/group/group.component.html</context>
@ -5650,7 +5659,7 @@
<target>Status</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">37,38</context>
<context context-type="linenumber">40,41</context>
</context-group>
<note priority="1" from="description">status</note>
</trans-unit>
@ -5659,7 +5668,7 @@
<target>Kanal-ID</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">41,45</context>
<context context-type="linenumber">44,48</context>
</context-group>
<note priority="1" from="description">channels.id</note>
</trans-unit>
@ -5668,11 +5677,11 @@
<target>sats</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">60,64</context>
<context context-type="linenumber">63,67</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">84,88</context>
<context context-type="linenumber">87,91</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-statistics/channels-statistics.component.html</context>

View file

@ -546,7 +546,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">49,51</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/pool-ranking/pool-ranking.component.html</context>
@ -1420,7 +1420,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">57,60</context>
</context-group>
</trans-unit>
<trans-unit id="address-label.multisig" datatype="html">
@ -2457,7 +2457,7 @@
<source>Health</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">56,59</context>
<context context-type="linenumber">56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2550,13 +2550,25 @@
<note priority="1" from="description">Total subsidy and fees in a block</note>
<note priority="1" from="meaning">block.subsidy-and-fees</note>
</trans-unit>
<trans-unit id="26f41d32df1646d45fcb03fe6952fb3eccf60b0f" datatype="html">
<source>Projected</source>
<trans-unit id="23fa95fce7b4badf5ad584d4a1712d558266266f" datatype="html">
<source>Expected</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,211</context>
<context context-type="linenumber">209</context>
</context-group>
<note priority="1" from="description">block.projected</note>
<note priority="1" from="description">block.expected</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,210</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="1da6d9283e3222148d76c10c8e37abeeb66c93cb" datatype="html">
<source>Actual</source>
@ -2566,19 +2578,19 @@
</context-group>
<note priority="1" from="description">block.actual</note>
</trans-unit>
<trans-unit id="a37e529c0d7b39d95861dd019cb78bb9ac9a3c5d" datatype="html">
<source>Projected Block</source>
<trans-unit id="97577daae15cc7f30ab4d0f4f4dfb8045477aefd" datatype="html">
<source>Expected Block</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
<context context-type="linenumber">215</context>
</context-group>
<note priority="1" from="description">block.projected-block</note>
<note priority="1" from="description">block.expected-block</note>
</trans-unit>
<trans-unit id="6efa73f0d6f0844a1e0c341c9b88323f51852d91" datatype="html">
<source>Actual Block</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">224,226</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">block.actual-block</note>
</trans-unit>
@ -3308,7 +3320,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">52,54</context>
<context context-type="linenumber">51,53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/statistics/statistics.component.ts</context>
@ -3332,7 +3344,7 @@
<source>Lightning Explorer</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">44,45</context>
<context context-type="linenumber">44,47</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts</context>
@ -3340,19 +3352,11 @@
</context-group>
<note priority="1" from="description">master-page.lightning</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">45,48</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">55,57</context>
<context context-type="linenumber">54,56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/docs/docs.component.html</context>
@ -3901,14 +3905,6 @@
</context-group>
<note priority="1" from="description">search-form.search-title</note>
</trans-unit>
<trans-unit id="7150c828c25c15df9ed0e2a819110c90aabd9881" datatype="html">
<source>Return to tip</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/start/start.component.html</context>
<context context-type="linenumber">20</context>
</context-group>
<note priority="1" from="description">blocks.return-to-tip</note>
</trans-unit>
<trans-unit id="75c20c8a9cd9723d45bee0230dd582d7c2e4ecbc" datatype="html">
<source>Mempool by vBytes (sat/vByte)</source>
<context-group purpose="location">
@ -4760,7 +4756,7 @@
<source>REST API service</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">api-docs.title</note>
</trans-unit>
@ -4768,11 +4764,11 @@
<source>Endpoint</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">48,49</context>
<context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">102,105</context>
<context context-type="linenumber">104,107</context>
</context-group>
<note priority="1" from="description">Api docs endpoint</note>
</trans-unit>
@ -4780,18 +4776,18 @@
<source>Description</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67,68</context>
<context context-type="linenumber">69,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">106,107</context>
<context context-type="linenumber">108,109</context>
</context-group>
</trans-unit>
<trans-unit id="a706b1ded7506620b153dbcdea8108e6691bbbd9" datatype="html">
<source>Default push: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="&apos;track-ad"/> action: &apos;want&apos;, data: [&apos;blocks&apos;, ...] <x id="INTERPOLATION_1" equiv-text="{{ &apos;}&apos; }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> to express what you want pushed. Available: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>mempool-blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>live-2h-chart<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>.<x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/><x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/>Push transactions related to address: <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="&apos;track-ad"/> &apos;track-address&apos;: &apos;3PbJ...bF9B&apos; <x id="INTERPOLATION_1" equiv-text="{{ &apos;}&apos; }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> to receive all new transactions containing that address as input or output. Returns an array of transactions. <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>address-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> for new mempool transactions, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>block-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/> for new block confirmed transactions.</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">107,108</context>
<context context-type="linenumber">109,110</context>
</context-group>
<note priority="1" from="description">api-docs.websocket.websocket</note>
</trans-unit>

View file

@ -147,6 +147,7 @@
</trans-unit>
<trans-unit id="ngb.progressbar.value" datatype="html">
<source><x id="INTERPOLATION" equiv-text="* The maximal"/></source>
<target><x id="INTERPOLATION" equiv-text="* The maximal"/></target>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/src/progressbar/progressbar.ts</context>
<context context-type="linenumber">30,33</context>
@ -357,7 +358,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,291</context>
<context context-type="linenumber">303,304</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -382,7 +383,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">291,292</context>
<context context-type="linenumber">304,305</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -424,7 +425,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">40,41</context>
<context context-type="linenumber">38,39</context>
</context-group>
<note priority="1" from="description">block.hash</note>
</trans-unit>
@ -449,7 +450,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">44,46</context>
<context context-type="linenumber">42,44</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -592,7 +593,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">49,51</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/pool-ranking/pool-ranking.component.html</context>
@ -1052,7 +1053,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">246,247</context>
<context context-type="linenumber">245,246</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -1530,7 +1531,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">57,60</context>
</context-group>
</trans-unit>
<trans-unit id="address-label.multisig" datatype="html">
@ -1666,7 +1667,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">29,31</context>
<context context-type="linenumber">31,33</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.html</context>
@ -1888,7 +1889,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">30,31</context>
<context context-type="linenumber">32,33</context>
</context-group>
<note priority="1" from="description">Asset ticker header</note>
</trans-unit>
@ -1901,7 +1902,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">31,34</context>
<context context-type="linenumber">33,36</context>
</context-group>
<note priority="1" from="description">Asset Issuer Domain header</note>
</trans-unit>
@ -1914,7 +1915,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">32,36</context>
<context context-type="linenumber">34,38</context>
</context-group>
<note priority="1" from="description">Asset ID header</note>
</trans-unit>
@ -1923,7 +1924,7 @@
<target>加载资产数据时出错。</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/assets/assets.component.html</context>
<context context-type="linenumber">48,53</context>
<context context-type="linenumber">50,55</context>
</context-group>
<note priority="1" from="description">Asset data load error</note>
</trans-unit>
@ -2121,6 +2122,7 @@
</trans-unit>
<trans-unit id="86c50fc2171298179283e3c9b6d79b57b821599b" datatype="html">
<source>not available</source>
<target>不可用</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-graph/block-overview-graph.component.html</context>
<context context-type="linenumber">5</context>
@ -2140,7 +2142,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476</context>
<context context-type="linenumber">478</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.html</context>
@ -2166,7 +2168,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">476,477</context>
<context context-type="linenumber">478,479</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2188,7 +2190,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">479,481</context>
<context context-type="linenumber">481,483</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-box/channel-box.component.html</context>
@ -2200,7 +2202,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">38,39</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">Transaction fee rate</note>
<note priority="1" from="meaning">transaction.fee-rate</note>
@ -2218,11 +2220,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">125,128</context>
<context context-type="linenumber">123,126</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129</context>
<context context-type="linenumber">127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blockchain-blocks/blockchain-blocks.component.html</context>
@ -2282,11 +2284,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">481,484</context>
<context context-type="linenumber">483,486</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">492,494</context>
<context context-type="linenumber">494,496</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
@ -2298,7 +2300,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">204,208</context>
<context context-type="linenumber">206,210</context>
</context-group>
<note priority="1" from="description">sat/vB</note>
<note priority="1" from="meaning">shared.sat-vbyte</note>
@ -2323,6 +2325,7 @@
</trans-unit>
<trans-unit id="1a8035ac608b083c29407327290b7cc9d6cbb95d" datatype="html">
<source>Audit status</source>
<target>审计情况</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">36</context>
@ -2331,6 +2334,7 @@
</trans-unit>
<trans-unit id="180092a6b8a6151a05f4a7552a2fb75fd159dfa8" datatype="html">
<source>Match</source>
<target>匹配</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">38</context>
@ -2339,6 +2343,7 @@
</trans-unit>
<trans-unit id="1aa4883bc4f1352f7a0bdd94810a9bf6dc22bd02" datatype="html">
<source>Removed</source>
<target>已移除</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block-overview-tooltip/block-overview-tooltip.component.html</context>
<context context-type="linenumber">39</context>
@ -2462,7 +2467,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">50,52</context>
<context context-type="linenumber">48,50</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2510,7 +2515,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">54,56</context>
<context context-type="linenumber">52,54</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2548,7 +2553,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">128,129</context>
<context context-type="linenumber">126,127</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2565,11 +2570,11 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">133,135</context>
<context context-type="linenumber">131,133</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">159,162</context>
<context context-type="linenumber">157,160</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2587,7 +2592,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">168,170</context>
<context context-type="linenumber">166,168</context>
</context-group>
<note priority="1" from="description">block.miner</note>
</trans-unit>
@ -2600,7 +2605,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.ts</context>
<context context-type="linenumber">227</context>
<context context-type="linenumber">234</context>
</context-group>
</trans-unit>
<trans-unit id="bdf0e930eb22431140a2eaeacd809cc5f8ebd38c" datatype="html">
@ -2625,20 +2630,29 @@
</context-group>
<note priority="1" from="description">Previous Block</note>
</trans-unit>
<trans-unit id="930c93e0c7afdf0f8d926773d5157c803bdc86e1" datatype="html">
<source>Block health</source>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<target>健康度</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">58,61</context>
<context context-type="linenumber">56</context>
</context-group>
<note priority="1" from="description">block.health</note>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="e5d8bb389c702588877f039d72178f219453a72d" datatype="html">
<source>Unknown</source>
<target>未知</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">69,72</context>
<context context-type="linenumber">67,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
@ -2667,7 +2681,7 @@
<target>费用范围</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">124,125</context>
<context context-type="linenumber">122,123</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/mempool-block/mempool-block.component.html</context>
@ -2680,7 +2694,7 @@
<target>基于平均140字节的本地segwit交易</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">129,131</context>
<context context-type="linenumber">127,129</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/fees-box/fees-box.component.html</context>
@ -2709,44 +2723,57 @@
<target>奖励+手续费:</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">148,151</context>
<context context-type="linenumber">146,149</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">163,167</context>
<context context-type="linenumber">161,165</context>
</context-group>
<note priority="1" from="description">Total subsidy and fees in a block</note>
<note priority="1" from="meaning">block.subsidy-and-fees</note>
</trans-unit>
<trans-unit id="26f41d32df1646d45fcb03fe6952fb3eccf60b0f" datatype="html">
<source>Projected</source>
<trans-unit id="23fa95fce7b4badf5ad584d4a1712d558266266f" datatype="html">
<source>Expected</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">210,212</context>
<context context-type="linenumber">209</context>
</context-group>
<note priority="1" from="description">block.projected</note>
<note priority="1" from="description">block.expected</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>测试</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">209,210</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">215,217</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="1da6d9283e3222148d76c10c8e37abeeb66c93cb" datatype="html">
<source>Actual</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">212,216</context>
<context context-type="linenumber">211,215</context>
</context-group>
<note priority="1" from="description">block.actual</note>
</trans-unit>
<trans-unit id="a37e529c0d7b39d95861dd019cb78bb9ac9a3c5d" datatype="html">
<source>Projected Block</source>
<trans-unit id="97577daae15cc7f30ab4d0f4f4dfb8045477aefd" datatype="html">
<source>Expected Block</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">216,218</context>
<context context-type="linenumber">215</context>
</context-group>
<note priority="1" from="description">block.projected-block</note>
<note priority="1" from="description">block.expected-block</note>
</trans-unit>
<trans-unit id="6efa73f0d6f0844a1e0c341c9b88323f51852d91" datatype="html">
<source>Actual Block</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">225,227</context>
<context context-type="linenumber">224</context>
</context-group>
<note priority="1" from="description">block.actual-block</note>
</trans-unit>
@ -2755,7 +2782,7 @@
<target>字节</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">250,252</context>
<context context-type="linenumber">249,251</context>
</context-group>
<note priority="1" from="description">block.bits</note>
</trans-unit>
@ -2764,7 +2791,7 @@
<target>哈希树</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">254,256</context>
<context context-type="linenumber">253,255</context>
</context-group>
<note priority="1" from="description">block.merkle-root</note>
</trans-unit>
@ -2773,7 +2800,7 @@
<target>难度</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">265,268</context>
<context context-type="linenumber">264,267</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.component.html</context>
@ -2802,7 +2829,7 @@
<target>随机数</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">269,271</context>
<context context-type="linenumber">268,270</context>
</context-group>
<note priority="1" from="description">block.nonce</note>
</trans-unit>
@ -2811,16 +2838,25 @@
<target>区块头字节</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">273,274</context>
<context context-type="linenumber">272,273</context>
</context-group>
<note priority="1" from="description">block.header</note>
</trans-unit>
<trans-unit id="ccf00caac258749fa1c5fd488fb15368fa6fce37" datatype="html">
<source>Audit</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">290,294</context>
</context-group>
<note priority="1" from="description">Toggle Audit</note>
<note priority="1" from="meaning">block.toggle-audit</note>
</trans-unit>
<trans-unit id="5f32c623f92bf3ca31202cc6281d4abd5febaf6a" datatype="html">
<source>Details</source>
<target>明细</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">284,288</context>
<context context-type="linenumber">297,301</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
@ -2846,11 +2882,11 @@
<target>加载数据时出错。</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">303,305</context>
<context context-type="linenumber">316,318</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">339,343</context>
<context context-type="linenumber">355,359</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channel/channel-preview.component.html</context>
@ -2874,7 +2910,7 @@
<source>Why is this block empty?</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/block/block.component.html</context>
<context context-type="linenumber">361,367</context>
<context context-type="linenumber">377,383</context>
</context-group>
<note priority="1" from="description">block.empty-block-explanation</note>
</trans-unit>
@ -2920,18 +2956,6 @@
</context-group>
<note priority="1" from="description">latest-blocks.mined</note>
</trans-unit>
<trans-unit id="d2bcd3296d2850de762fb943060b7e086a893181" datatype="html">
<source>Health</source>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/blocks-list/blocks-list.component.html</context>
<context context-type="linenumber">18,19</context>
</context-group>
<note priority="1" from="description">latest-blocks.health</note>
</trans-unit>
<trans-unit id="12f86e6747a5ad39e62d3480ddc472b1aeab5b76" datatype="html">
<source>Reward</source>
<target>奖励</target>
@ -2995,7 +3019,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">210,214</context>
<context context-type="linenumber">212,216</context>
</context-group>
<note priority="1" from="description">dashboard.txs</note>
</trans-unit>
@ -3234,7 +3258,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">237,238</context>
<context context-type="linenumber">239,240</context>
</context-group>
<note priority="1" from="description">dashboard.incoming-transactions</note>
</trans-unit>
@ -3247,7 +3271,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">240,243</context>
<context context-type="linenumber">242,245</context>
</context-group>
<note priority="1" from="description">dashboard.backend-is-synchronizing</note>
</trans-unit>
@ -3260,7 +3284,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">245,250</context>
<context context-type="linenumber">247,252</context>
</context-group>
<note priority="1" from="description">vB/s</note>
<note priority="1" from="meaning">shared.vbytes-per-second</note>
@ -3274,7 +3298,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">208,209</context>
<context context-type="linenumber">210,211</context>
</context-group>
<note priority="1" from="description">Unconfirmed count</note>
<note priority="1" from="meaning">dashboard.unconfirmed</note>
@ -3531,7 +3555,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">52,54</context>
<context context-type="linenumber">51,53</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/statistics/statistics.component.ts</context>
@ -3557,7 +3581,7 @@
<target>闪电网络浏览器</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">44,45</context>
<context context-type="linenumber">44,47</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts</context>
@ -3565,21 +3589,12 @@
</context-group>
<note priority="1" from="description">master-page.lightning</note>
</trans-unit>
<trans-unit id="7cbedd89f60daafaf0e56363900d666a4e02ffb1" datatype="html">
<source>beta</source>
<target>测试</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">45,48</context>
</context-group>
<note priority="1" from="description">beta</note>
</trans-unit>
<trans-unit id="fcfd4675b4c90f08d18d3abede9a9a4dff4cfdc7" datatype="html">
<source>Documentation</source>
<target>文档</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/master-page/master-page.component.html</context>
<context context-type="linenumber">55,57</context>
<context context-type="linenumber">54,56</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/docs/docs.component.html</context>
@ -4037,7 +4052,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">154,161</context>
<context context-type="linenumber">154,162</context>
</context-group>
<note priority="1" from="description">Broadcast Transaction</note>
<note priority="1" from="meaning">shared.broadcast-transaction</note>
@ -4103,6 +4118,7 @@
</trans-unit>
<trans-unit id="0705223420d290a218e4ed83bd4d904454a9cee8" datatype="html">
<source>BTC/block</source>
<target>BTC/块</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">21,24</context>
@ -4112,6 +4128,7 @@
</trans-unit>
<trans-unit id="cf3a97b1c1546b843411cfe101bc55ba2ac46bac" datatype="html">
<source>Avg Tx Fee</source>
<target>平均单笔交易费率</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/reward-stats/reward-stats.component.html</context>
<context context-type="linenumber">30</context>
@ -4631,7 +4648,7 @@
<target>有效收费率</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
<context context-type="linenumber">489,492</context>
<context context-type="linenumber">491,494</context>
</context-group>
<note priority="1" from="description">Effective transaction fee rate</note>
<note priority="1" from="meaning">transaction.effective-fee-rate</note>
@ -5051,7 +5068,7 @@
<target>最低费用</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">201,202</context>
<context context-type="linenumber">203,204</context>
</context-group>
<note priority="1" from="description">Minimum mempool fee</note>
<note priority="1" from="meaning">dashboard.minimum-fee</note>
@ -5061,7 +5078,7 @@
<target>吹扫中</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">202,203</context>
<context context-type="linenumber">204,205</context>
</context-group>
<note priority="1" from="description">Purgin below fee</note>
<note priority="1" from="meaning">dashboard.purging</note>
@ -5071,7 +5088,7 @@
<target>内存占用</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">214,215</context>
<context context-type="linenumber">216,217</context>
</context-group>
<note priority="1" from="description">Memory usage</note>
<note priority="1" from="meaning">dashboard.memory-usage</note>
@ -5081,7 +5098,7 @@
<target>流通中的L-BTC</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
<context context-type="linenumber">228,230</context>
<context context-type="linenumber">230,232</context>
</context-group>
<note priority="1" from="description">dashboard.lbtc-pegs-in-circulation</note>
</trans-unit>
@ -5090,7 +5107,7 @@
<target>REST API 服务</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">41,42</context>
</context-group>
<note priority="1" from="description">api-docs.title</note>
</trans-unit>
@ -5099,11 +5116,11 @@
<target>Endpoint</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">48,49</context>
<context context-type="linenumber">50,51</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">102,105</context>
<context context-type="linenumber">104,107</context>
</context-group>
<note priority="1" from="description">Api docs endpoint</note>
</trans-unit>
@ -5112,11 +5129,11 @@
<target>描述</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">67,68</context>
<context context-type="linenumber">69,70</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">106,107</context>
<context context-type="linenumber">108,109</context>
</context-group>
</trans-unit>
<trans-unit id="a706b1ded7506620b153dbcdea8108e6691bbbd9" datatype="html">
@ -5124,7 +5141,7 @@
<target>默认推送:<x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/>操作: 'want', 数据: ['blocks', ...] <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>来表达你想要推送的内容。可用字段:<x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/><x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>mempool-blocks<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/><x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>live-2h-chart<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>,和<x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>。<x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/><x id="LINE_BREAK" ctype="lb" equiv-text="Push transa"/>推送与地址有关的事务。<x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/><x id="INTERPOLATION" equiv-text="'track-ad"/>'track-address': '3PbJ...bF9B' <x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/><x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>接收所有包含该地址的新事务作为输入或输出。返回一个交易数组。<x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>address-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>用于新的mempool交易<x id="START_TAG_CODE" ctype="x-code" equiv-text="&lt;code&gt;"/>block-transactions<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="&lt;/code&gt;"/>用于新的块确认交易。</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/docs/api-docs/api-docs.component.html</context>
<context context-type="linenumber">107,108</context>
<context context-type="linenumber">109,110</context>
</context-group>
<note priority="1" from="description">api-docs.websocket.websocket</note>
</trans-unit>
@ -5297,7 +5314,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">120,121</context>
<context context-type="linenumber">123,124</context>
</context-group>
<note priority="1" from="description">lightning.x-channels</note>
</trans-unit>
@ -5341,7 +5358,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">65,66</context>
<context context-type="linenumber">68,69</context>
</context-group>
<note priority="1" from="description">status.inactive</note>
</trans-unit>
@ -5358,7 +5375,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">66,68</context>
<context context-type="linenumber">69,71</context>
</context-group>
<note priority="1" from="description">status.active</note>
</trans-unit>
@ -5379,7 +5396,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">68,70</context>
<context context-type="linenumber">71,73</context>
</context-group>
<note priority="1" from="description">status.closed</note>
</trans-unit>
@ -5409,7 +5426,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">40,43</context>
<context context-type="linenumber">43,46</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node-statistics/node-statistics.component.html</context>
@ -5525,7 +5542,7 @@
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">39,40</context>
<context context-type="linenumber">42,43</context>
</context-group>
<note priority="1" from="description">lightning.closing_date</note>
</trans-unit>
@ -5577,7 +5594,7 @@
<target>没有可展示的频道</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">29,35</context>
<context context-type="linenumber">29,37</context>
</context-group>
<note priority="1" from="description">lightning.empty-channels-list</note>
</trans-unit>
@ -5586,7 +5603,7 @@
<target>备注</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">35,37</context>
<context context-type="linenumber">38,40</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/group/group.component.html</context>
@ -5623,7 +5640,7 @@
<target>状态</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">37,38</context>
<context context-type="linenumber">40,41</context>
</context-group>
<note priority="1" from="description">status</note>
</trans-unit>
@ -5632,7 +5649,7 @@
<target>频道 ID</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">41,45</context>
<context context-type="linenumber">44,48</context>
</context-group>
<note priority="1" from="description">channels.id</note>
</trans-unit>
@ -5641,11 +5658,11 @@
<target>sats</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">60,64</context>
<context context-type="linenumber">63,67</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-list/channels-list.component.html</context>
<context context-type="linenumber">84,88</context>
<context context-type="linenumber">87,91</context>
</context-group>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/channels-statistics/channels-statistics.component.html</context>
@ -6219,6 +6236,7 @@
</trans-unit>
<trans-unit id="8af4768ed9112268945c697923ce017fbe23e1b7" datatype="html">
<source>Channel fee rate</source>
<target>频道费率</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">168,171</context>
@ -6228,6 +6246,7 @@
</trans-unit>
<trans-unit id="4e6d03f01a59434dee25104fe9478041db186ca8" datatype="html">
<source>Channel base fee</source>
<target>频道基础费率</target>
<context-group purpose="location">
<context context-type="sourcefile">src/app/lightning/node/node.component.html</context>
<context context-type="linenumber">176,178</context>

View file

@ -48,9 +48,9 @@ BITCOIN_MAINNET_ENABLE=ON
BITCOIN_MAINNET_MINFEE_ENABLE=ON
BITCOIN_TESTNET_ENABLE=ON
BITCOIN_SIGNET_ENABLE=ON
LN_BITCOIN_MAINNET_ENABLE=ON
LN_BITCOIN_TESTNET_ENABLE=ON
LN_BITCOIN_SIGNET_ENABLE=ON
BITCOIN_MAINNET_LIGHTNING_ENABLE=ON
BITCOIN_TESTNET_LIGHTNING_ENABLE=ON
BITCOIN_SIGNET_LIGHTNING_ENABLE=ON
BISQ_MAINNET_ENABLE=ON
ELEMENTS_LIQUID_ENABLE=ON
ELEMENTS_LIQUIDTESTNET_ENABLE=ON
@ -230,9 +230,9 @@ MYSQL_GROUP=mysql
MEMPOOL_MAINNET_USER='mempool'
MEMPOOL_TESTNET_USER='mempool_testnet'
MEMPOOL_SIGNET_USER='mempool_signet'
LN_MEMPOOL_MAINNET_USER='mempool_mainnet_lightning'
LN_MEMPOOL_TESTNET_USER='mempool_testnet_lightning'
LN_MEMPOOL_SIGNET_USER='mempool_signet_lightning'
MEMPOOL_MAINNET_LIGHTNING_USER='mempool_mainnet_lightning'
MEMPOOL_TESTNET_LIGHTNING_USER='mempool_testnet_lightning'
MEMPOOL_SIGNET_LIGHTNING_USER='mempool_signet_lightning'
MEMPOOL_LIQUID_USER='mempool_liquid'
MEMPOOL_LIQUIDTESTNET_USER='mempool_liquidtestnet'
MEMPOOL_BISQ_USER='mempool_bisq'
@ -240,9 +240,9 @@ MEMPOOL_BISQ_USER='mempool_bisq'
MEMPOOL_MAINNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_TESTNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_SIGNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
LN_MEMPOOL_MAINNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
LN_MEMPOOL_TESTNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
LN_MEMPOOL_SIGNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_MAINNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_TESTNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_SIGNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_LIQUID_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_LIQUIDTESTNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
MEMPOOL_BISQ_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}')
@ -827,21 +827,21 @@ else
fi
if grep LN-Mainnet $tempfile >/dev/null 2>&1;then
LN_BITCOIN_MAINNET_ENABLE=ON
BITCOIN_MAINNET_LIGHTNING_ENABLE=ON
else
LN_BITCOIN_MAINNET_ENABLE=OFF
BITCOIN_MAINNET_LIGHTNING_ENABLE=OFF
fi
if grep LN-Testnet $tempfile >/dev/null 2>&1;then
LN_BITCOIN_TESTNET_ENABLE=ON
BITCOIN_TESTNET_LIGHTNING_ENABLE=ON
else
LN_BITCOIN_TESTNET_ENABLE=OFF
BITCOIN_TESTNET_LIGHTNING_ENABLE=OFF
fi
if grep LN-Signet $tempfile >/dev/null 2>&1;then
LN_BITCOIN_SIGNET_ENABLE=ON
BITCOIN_SIGNET_LIGHTNING_ENABLE=ON
else
LN_BITCOIN_SIGNET_ENABLE=OFF
BITCOIN_SIGNET_LIGHTNING_ENABLE=OFF
fi
if grep Liquid $tempfile >/dev/null 2>&1;then
@ -1756,7 +1756,7 @@ if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${
osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/mainnet && git checkout ${MEMPOOL_LATEST_RELEASE}"
fi
if [ "${LN_BITCOIN_MAINNET_ENABLE}" = ON ];then
if [ "${BITCOIN_MAINNET_LIGHTNING_ENABLE}" = ON ];then
echo "[*] Creating Mempool instance for Lightning Network on Bitcoin Mainnet"
osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false
osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/mainnet-lightning"
@ -1774,7 +1774,7 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then
osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/testnet && git checkout ${MEMPOOL_LATEST_RELEASE}"
fi
if [ "${LN_BITCOIN_TESTNET_ENABLE}" = ON ];then
if [ "${BITCOIN_TESTNET_LIGHTNING_ENABLE}" = ON ];then
echo "[*] Creating Mempool instance for Lightning Network on Bitcoin Testnet"
osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false
osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/testnet-lightning"
@ -1792,7 +1792,7 @@ if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then
osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/signet && git checkout ${MEMPOOL_LATEST_RELEASE}"
fi
if [ "${LN_BITCOIN_SIGNET_ENABLE}" = ON ];then
if [ "${BITCOIN_SIGNET_LIGHTNING_ENABLE}" = ON ];then
echo "[*] Creating Mempool instance for Lightning Network on Bitcoin Signet"
osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false
osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/signet-lightning"
@ -1852,13 +1852,13 @@ create database mempool_signet;
grant all on mempool_signet.* to '${MEMPOOL_SIGNET_USER}'@'localhost' identified by '${MEMPOOL_SIGNET_PASS}';
create database mempool_mainnet_lightning;
grant all on mempool_mainnet_lightning.* to '${LN_MEMPOOL_MAINNET_USER}'@'localhost' identified by '${LN_MEMPOOL_MAINNET_PASS}';
grant all on mempool_mainnet_lightning.* to '${MEMPOOL_MAINNET_LIGHTNING_USER}'@'localhost' identified by '${MEMPOOL_MAINNET_LIGHTNING_PASS}';
create database mempool_testnet_lightning;
grant all on mempool_testnet_lightning.* to '${LN_MEMPOOL_TESTNET_USER}'@'localhost' identified by '${LN_MEMPOOL_TESTNET_PASS}';
grant all on mempool_testnet_lightning.* to '${MEMPOOL_TESTNET_LIGHTNING_USER}'@'localhost' identified by '${MEMPOOL_TESTNET_LIGHTNING_PASS}';
create database mempool_signet_lightning;
grant all on mempool_signet_lightning.* to '${LN_MEMPOOL_SIGNET_USER}'@'localhost' identified by '${LN_MEMPOOL_SIGNET_PASS}';
grant all on mempool_signet_lightning.* to '${MEMPOOL_SIGNET_LIGHTNING_USER}'@'localhost' identified by '${MEMPOOL_SIGNET_LIGHTNING_PASS}';
create database mempool_liquid;
grant all on mempool_liquid.* to '${MEMPOOL_LIQUID_USER}'@'localhost' identified by '${MEMPOOL_LIQUID_PASS}';
@ -1878,12 +1878,12 @@ declare -x MEMPOOL_TESTNET_USER="${MEMPOOL_TESTNET_USER}"
declare -x MEMPOOL_TESTNET_PASS="${MEMPOOL_TESTNET_PASS}"
declare -x MEMPOOL_SIGNET_USER="${MEMPOOL_SIGNET_USER}"
declare -x MEMPOOL_SIGNET_PASS="${MEMPOOL_SIGNET_PASS}"
declare -x LN_MEMPOOL_MAINNET_USER="${LN_MEMPOOL_MAINNET_USER}"
declare -x LN_MEMPOOL_MAINNET_PASS="${LN_MEMPOOL_MAINNET_PASS}"
declare -x LN_MEMPOOL_TESTNET_USER="${LN_MEMPOOL_TESTNET_USER}"
declare -x LN_MEMPOOL_TESTNET_PASS="${LN_MEMPOOL_TESTNET_PASS}"
declare -x LN_MEMPOOL_SIGNET_USER="${LN_MEMPOOL_SIGNET_USER}"
declare -x LN_MEMPOOL_SIGNET_PASS="${LN_MEMPOOL_SIGNET_PASS}"
declare -x MEMPOOL_MAINNET_LIGHTNING_USER="${MEMPOOL_MAINNET_LIGHTNING_USER}"
declare -x MEMPOOL_MAINNET_LIGHTNING_PASS="${MEMPOOL_MAINNET_LIGHTNING_PASS}"
declare -x MEMPOOL_TESTNET_LIGHTNING_USER="${MEMPOOL_TESTNET_LIGHTNING_USER}"
declare -x MEMPOOL_TESTNET_LIGHTNING_PASS="${MEMPOOL_TESTNET_LIGHTNING_PASS}"
declare -x MEMPOOL_SIGNET_LIGHTNING_USER="${MEMPOOL_SIGNET_LIGHTNING_USER}"
declare -x MEMPOOL_SIGNET_LIGHTNING_PASS="${MEMPOOL_SIGNET_LIGHTNING_PASS}"
declare -x MEMPOOL_LIQUID_USER="${MEMPOOL_LIQUID_USER}"
declare -x MEMPOOL_LIQUID_PASS="${MEMPOOL_LIQUID_PASS}"
declare -x MEMPOOL_LIQUIDTESTNET_USER="${MEMPOOL_LIQUIDTESTNET_USER}"

View file

@ -98,12 +98,12 @@ build_backend()
-e "s!__MEMPOOL_TESTNET_PASS__!${MEMPOOL_TESTNET_PASS}!" \
-e "s!__MEMPOOL_SIGNET_USER__!${MEMPOOL_SIGNET_USER}!" \
-e "s!__MEMPOOL_SIGNET_PASS__!${MEMPOOL_SIGNET_PASS}!" \
-e "s!__LN_MEMPOOL_MAINNET_USER__!${LN_MEMPOOL_MAINNET_USER}!" \
-e "s!__LN_MEMPOOL_MAINNET_PASS__!${LN_MEMPOOL_MAINNET_PASS}!" \
-e "s!__LN_MEMPOOL_TESTNET_USER__!${LN_MEMPOOL_TESTNET_USER}!" \
-e "s!__LN_MEMPOOL_TESTNET_PASS__!${LN_MEMPOOL_TESTNET_PASS}!" \
-e "s!__LN_MEMPOOL_SIGNET_USER__!${LN_MEMPOOL_SIGNET_USER}!" \
-e "s!__LN_MEMPOOL_SIGNET_PASS__!${LN_MEMPOOL_SIGNET_PASS}!" \
-e "s!__MEMPOOL_MAINNET_LIGHTNING_USER__!${MEMPOOL_MAINNET_LIGHTNING_USER}!" \
-e "s!__MEMPOOL_MAINNET_LIGHTNING_PASS__!${MEMPOOL_MAINNET_LIGHTNING_PASS}!" \
-e "s!__MEMPOOL_TESTNET_LIGHTNING_USER__!${MEMPOOL_TESTNET_LIGHTNING_USER}!" \
-e "s!__MEMPOOL_TESTNET_LIGHTNING_PASS__!${MEMPOOL_TESTNET_LIGHTNING_PASS}!" \
-e "s!__MEMPOOL_SIGNET_LIGHTNING_USER__!${MEMPOOL_SIGNET_LIGHTNING_USER}!" \
-e "s!__MEMPOOL_SIGNET_LIGHTNING_PASS__!${MEMPOOL_SIGNET_LIGHTNING_PASS}!" \
-e "s!__MEMPOOL_LIQUID_USER__!${MEMPOOL_LIQUID_USER}!" \
-e "s!__MEMPOOL_LIQUID_PASS__!${MEMPOOL_LIQUID_PASS}!" \
-e "s!__MEMPOOL_LIQUIDTESTNET_USER__!${LIQUIDTESTNET_USER}!" \

View file

@ -43,8 +43,8 @@
"ENABLED": true,
"HOST": "127.0.0.1",
"PORT": 3306,
"DATABASE": "mempool_mainnet_lightning",
"USERNAME": "mempool_mainnet_lightning",
"USERNAME": "__MEMPOOL_MAINNET_LIGHTNING_USER__",
"PASSWORD": "__MEMPOOL_MAINNET_LIGHTNING_PASS__",
"PASSWORD": "mempool_mainnet_lightning"
}
}

View file

@ -10,6 +10,7 @@
"POLL_RATE_MS": 1000,
"INDEXING_BLOCKS_AMOUNT": -1,
"BLOCKS_SUMMARIES_INDEXING": true,
"AUDIT": true,
"ADVANCED_GBT_AUDIT": true,
"ADVANCED_GBT_MEMPOOL": false,
"USE_SECOND_NODE_FOR_MINFEE": true

View file

@ -38,8 +38,8 @@
"ENABLED": true,
"HOST": "127.0.0.1",
"PORT": 3306,
"USERNAME": "mempool_signet_lightning",
"PASSWORD": "mempool_signet_lightning",
"USERNAME": "__MEMPOOL_SIGNET_LIGHTNING_USER__",
"PASSWORD": "__MEMPOOL_SIGNET_LIGHTNING_PASS__",
"DATABASE": "mempool_signet_lightning"
}
}

Some files were not shown because too many files have changed in this diff Show more