mirror of
https://github.com/mempool/mempool.git
synced 2025-03-14 11:58:30 +01:00
CPFP support (#395)
* CPFP support. fixes #5 fixes #353 fixes #360 * Use effectiveFeePerVsize for mempool statistics. * Renaming endpoint cpfp-info to just cpfp. * Renaming decended to BestDescendant. * Updating language file with new strings.
This commit is contained in:
parent
b2d08d69cf
commit
d3c53c7406
19 changed files with 487 additions and 289 deletions
backend/src
api
index.tsmempool.interfaces.tsroutes.tsfrontend/src
app
components
api-docs
transaction
tx-fee-rating
interfaces
services
locale
|
@ -3,7 +3,6 @@ import { IEsploraApi } from './esplora-api.interface';
|
|||
export interface AbstractBitcoinApi {
|
||||
$getRawMempool(): Promise<IEsploraApi.Transaction['txid'][]>;
|
||||
$getRawTransaction(txId: string, skipConversion?: boolean, addPrevout?: boolean): Promise<IEsploraApi.Transaction>;
|
||||
$getRawTransactionBitcoind(txId: string, skipConversion?: boolean, addPrevout?: boolean): Promise<IEsploraApi.Transaction>;
|
||||
$getBlockHeightTip(): Promise<number>;
|
||||
$getTxIdsForBlock(hash: string): Promise<string[]>;
|
||||
$getBlockHash(height: number): Promise<string>;
|
||||
|
|
|
@ -22,16 +22,6 @@ class BitcoinApi implements AbstractBitcoinApi {
|
|||
});
|
||||
}
|
||||
|
||||
$getRawTransactionBitcoind(txId: string, skipConversion = false, addPrevout = false): Promise<IEsploraApi.Transaction> {
|
||||
return this.bitcoindClient.getRawTransaction(txId, true)
|
||||
.then((transaction: IBitcoinApi.Transaction) => {
|
||||
if (skipConversion) {
|
||||
return transaction;
|
||||
}
|
||||
return this.$convertTransaction(transaction, addPrevout);
|
||||
});
|
||||
}
|
||||
|
||||
$getRawTransaction(txId: string, skipConversion = false, addPrevout = false): Promise<IEsploraApi.Transaction> {
|
||||
// If the transaction is in the mempool we already converted and fetched the fee. Only prevouts are missing
|
||||
const txInMempool = mempool.getMempool()[txId];
|
||||
|
@ -47,6 +37,9 @@ class BitcoinApi implements AbstractBitcoinApi {
|
|||
return this.bitcoindClient.getRawTransaction(txId, true)
|
||||
.then((transaction: IBitcoinApi.Transaction) => {
|
||||
if (skipConversion) {
|
||||
transaction.vout.forEach((vout) => {
|
||||
vout.value = vout.value * 100000000;
|
||||
});
|
||||
return transaction;
|
||||
}
|
||||
return this.$convertTransaction(transaction, addPrevout);
|
||||
|
|
|
@ -48,11 +48,6 @@ class ElectrsApi implements AbstractBitcoinApi {
|
|||
throw new Error('Method getAddressTransactions not implemented.');
|
||||
}
|
||||
|
||||
$getRawTransactionBitcoind(txId: string): Promise<IEsploraApi.Transaction> {
|
||||
return axios.get<IEsploraApi.Transaction>(config.ESPLORA.REST_API_URL + '/tx/' + txId, this.axiosConfig)
|
||||
.then((response) => response.data);
|
||||
}
|
||||
|
||||
$getAddressPrefix(prefix: string): string[] {
|
||||
throw new Error('Method not implemented.');
|
||||
}
|
||||
|
|
|
@ -84,14 +84,21 @@ class Blocks {
|
|||
}
|
||||
}
|
||||
|
||||
transactions.forEach((tx) => {
|
||||
if (!tx.cpfpChecked) {
|
||||
Common.setRelativesAndGetCpfpInfo(tx, mempool);
|
||||
}
|
||||
});
|
||||
|
||||
logger.debug(`${transactionsFound} of ${txIds.length} found in mempool. ${txIds.length - transactionsFound} not found.`);
|
||||
|
||||
const blockExtended: BlockExtended = Object.assign({}, block);
|
||||
blockExtended.reward = transactions[0].vout.reduce((acc, curr) => acc + curr.value, 0);
|
||||
blockExtended.coinbaseTx = transactionUtils.stripCoinbaseTransaction(transactions[0]);
|
||||
transactions.sort((a, b) => b.feePerVsize - a.feePerVsize);
|
||||
blockExtended.medianFee = transactions.length > 1 ? Common.median(transactions.map((tx) => tx.feePerVsize)) : 0;
|
||||
blockExtended.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions.slice(0, transactions.length - 1), 8) : [0, 0];
|
||||
transactions.shift();
|
||||
transactions.sort((a, b) => b.effectiveFeePerVsize - a.effectiveFeePerVsize);
|
||||
blockExtended.medianFee = transactions.length > 1 ? Common.median(transactions.map((tx) => tx.effectiveFeePerVsize)) : 0;
|
||||
blockExtended.feeRange = transactions.length > 1 ? Common.getFeesInRange(transactions, 8) : [0, 0];
|
||||
|
||||
if (block.height % 2016 === 0) {
|
||||
this.lastDifficultyAdjustmentTime = block.timestamp;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { TransactionExtended, TransactionStripped } from '../mempool.interfaces';
|
||||
import { CpfpInfo, TransactionExtended, TransactionStripped } from '../mempool.interfaces';
|
||||
|
||||
export class Common {
|
||||
static median(numbers: number[]) {
|
||||
|
@ -20,16 +20,16 @@ export class Common {
|
|||
}
|
||||
|
||||
static getFeesInRange(transactions: TransactionExtended[], rangeLength: number) {
|
||||
const arr = [transactions[transactions.length - 1].feePerVsize];
|
||||
const arr = [transactions[transactions.length - 1].effectiveFeePerVsize];
|
||||
const chunk = 1 / (rangeLength - 1);
|
||||
let itemsToAdd = rangeLength - 2;
|
||||
|
||||
while (itemsToAdd > 0) {
|
||||
arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].feePerVsize);
|
||||
arr.push(transactions[Math.floor(transactions.length * chunk * itemsToAdd)].effectiveFeePerVsize);
|
||||
itemsToAdd--;
|
||||
}
|
||||
|
||||
arr.push(transactions[0].feePerVsize);
|
||||
arr.push(transactions[0].effectiveFeePerVsize);
|
||||
return arr;
|
||||
}
|
||||
|
||||
|
@ -71,4 +71,63 @@ export class Common {
|
|||
}, ms);
|
||||
});
|
||||
}
|
||||
|
||||
static setRelativesAndGetCpfpInfo(tx: TransactionExtended, memPool: { [txid: string]: TransactionExtended }): CpfpInfo {
|
||||
const parents = this.findAllParents(tx, memPool);
|
||||
|
||||
let totalWeight = tx.weight + parents.reduce((prev, val) => prev + val.weight, 0);
|
||||
let totalFees = tx.fee + parents.reduce((prev, val) => prev + val.fee, 0);
|
||||
|
||||
tx.ancestors = parents
|
||||
.map((t) => {
|
||||
return {
|
||||
txid: t.txid,
|
||||
weight: t.weight,
|
||||
fee: t.fee,
|
||||
};
|
||||
});
|
||||
|
||||
// Add high (high fee) decendant weight and fees
|
||||
if (tx.bestDescendant) {
|
||||
totalWeight += tx.bestDescendant.weight;
|
||||
totalFees += tx.bestDescendant.fee;
|
||||
}
|
||||
|
||||
tx.effectiveFeePerVsize = totalFees / (totalWeight / 4);
|
||||
tx.cpfpChecked = true;
|
||||
|
||||
return {
|
||||
ancestors: tx.ancestors,
|
||||
bestDescendant: tx.bestDescendant || null,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
private static findAllParents(tx: TransactionExtended, memPool: { [txid: string]: TransactionExtended }): TransactionExtended[] {
|
||||
let parents: TransactionExtended[] = [];
|
||||
tx.vin.forEach((parent) => {
|
||||
const parentTx = memPool[parent.txid];
|
||||
if (parentTx) {
|
||||
if (tx.bestDescendant && tx.bestDescendant.fee / (tx.bestDescendant.weight / 4) > parentTx.feePerVsize) {
|
||||
if (parentTx.bestDescendant && parentTx.bestDescendant.fee < tx.fee + tx.bestDescendant.fee) {
|
||||
parentTx.bestDescendant = {
|
||||
weight: tx.weight + tx.bestDescendant.weight,
|
||||
fee: tx.fee + tx.bestDescendant.fee,
|
||||
txid: tx.txid,
|
||||
};
|
||||
}
|
||||
} else if (tx.feePerVsize > parentTx.feePerVsize) {
|
||||
parentTx.bestDescendant = {
|
||||
weight: tx.weight,
|
||||
fee: tx.fee,
|
||||
txid: tx.txid
|
||||
};
|
||||
}
|
||||
parents.push(parentTx);
|
||||
parents = parents.concat(this.findAllParents(parentTx, memPool));
|
||||
}
|
||||
});
|
||||
return parents;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import logger from '../logger';
|
||||
import { MempoolBlock, TransactionExtended, MempoolBlockWithTransactions } from '../mempool.interfaces';
|
||||
import { Common } from './common';
|
||||
import config from '../config';
|
||||
|
@ -33,9 +34,40 @@ class MempoolBlocks {
|
|||
memPoolArray.push(latestMempool[i]);
|
||||
}
|
||||
}
|
||||
const start = new Date().getTime();
|
||||
|
||||
// Clear bestDescendants & ancestors
|
||||
memPoolArray.forEach((tx) => {
|
||||
tx.bestDescendant = null;
|
||||
tx.ancestors = [];
|
||||
tx.cpfpChecked = false;
|
||||
if (!tx.effectiveFeePerVsize) {
|
||||
tx.effectiveFeePerVsize = tx.feePerVsize;
|
||||
}
|
||||
});
|
||||
|
||||
// First sort
|
||||
memPoolArray.sort((a, b) => b.feePerVsize - a.feePerVsize);
|
||||
const transactionsSorted = memPoolArray.filter((tx) => tx.feePerVsize);
|
||||
this.mempoolBlocks = this.calculateMempoolBlocks(transactionsSorted);
|
||||
|
||||
// Loop through and traverse all ancestors and sum up all the sizes + fees
|
||||
// Pass down size + fee to all unconfirmed children
|
||||
let sizes = 0;
|
||||
memPoolArray.forEach((tx, i) => {
|
||||
sizes += tx.weight
|
||||
if (sizes > 4000000 * 8) {
|
||||
return;
|
||||
}
|
||||
Common.setRelativesAndGetCpfpInfo(tx, memPool);
|
||||
});
|
||||
|
||||
// Final sort, by effective fee
|
||||
memPoolArray.sort((a, b) => b.effectiveFeePerVsize - a.effectiveFeePerVsize);
|
||||
|
||||
const end = new Date().getTime();
|
||||
const time = end - start;
|
||||
logger.debug('Mempool blocks calculated in ' + time / 1000 + ' seconds');
|
||||
|
||||
this.mempoolBlocks = this.calculateMempoolBlocks(memPoolArray);
|
||||
}
|
||||
|
||||
private calculateMempoolBlocks(transactionsSorted: TransactionExtended[]): MempoolBlockWithTransactions[] {
|
||||
|
@ -77,7 +109,7 @@ class MempoolBlocks {
|
|||
blockVSize: blockVSize,
|
||||
nTx: transactions.length,
|
||||
totalFees: transactions.reduce((acc, cur) => acc + cur.fee, 0),
|
||||
medianFee: Common.percentile(transactions.map((tx) => tx.feePerVsize), config.MEMPOOL.RECOMMENDED_FEE_PERCENTILE),
|
||||
medianFee: Common.percentile(transactions.map((tx) => tx.effectiveFeePerVsize), config.MEMPOOL.RECOMMENDED_FEE_PERCENTILE),
|
||||
feeRange: Common.getFeesInRange(transactions, rangeLength),
|
||||
transactionIds: transactions.map((tx) => tx.txid),
|
||||
};
|
||||
|
|
|
@ -68,13 +68,13 @@ class Statistics {
|
|||
}
|
||||
}
|
||||
// Remove 0 and undefined
|
||||
memPoolArray = memPoolArray.filter((tx) => tx.feePerVsize);
|
||||
memPoolArray = memPoolArray.filter((tx) => tx.effectiveFeePerVsize);
|
||||
|
||||
if (!memPoolArray.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
memPoolArray.sort((a, b) => a.feePerVsize - b.feePerVsize);
|
||||
memPoolArray.sort((a, b) => a.effectiveFeePerVsize - b.effectiveFeePerVsize);
|
||||
const totalWeight = memPoolArray.map((tx) => tx.vsize).reduce((acc, curr) => acc + curr) * 4;
|
||||
const totalFee = memPoolArray.map((tx) => tx.fee).reduce((acc, curr) => acc + curr);
|
||||
|
||||
|
@ -85,7 +85,7 @@ class Statistics {
|
|||
|
||||
memPoolArray.forEach((transaction) => {
|
||||
for (let i = 0; i < logFees.length; i++) {
|
||||
if ((logFees[i] === 2000 && transaction.feePerVsize >= 2000) || transaction.feePerVsize <= logFees[i]) {
|
||||
if ((logFees[i] === 2000 && transaction.effectiveFeePerVsize >= 2000) || transaction.effectiveFeePerVsize <= logFees[i]) {
|
||||
if (weightVsizeFees[logFees[i]]) {
|
||||
weightVsizeFees[logFees[i]] += transaction.vsize;
|
||||
} else {
|
||||
|
|
|
@ -26,9 +26,11 @@ class TransactionUtils {
|
|||
}
|
||||
|
||||
private extendTransaction(transaction: IEsploraApi.Transaction): TransactionExtended {
|
||||
const feePerVbytes = Math.max(1, (transaction.fee || 0) / (transaction.weight / 4));
|
||||
const transactionExtended: TransactionExtended = Object.assign({
|
||||
vsize: Math.round(transaction.weight / 4),
|
||||
feePerVsize: Math.max(1, (transaction.fee || 0) / (transaction.weight / 4)),
|
||||
feePerVsize: feePerVbytes,
|
||||
effectiveFeePerVsize: feePerVbytes,
|
||||
}, transaction);
|
||||
if (!transaction.status.confirmed) {
|
||||
transactionExtended.firstSeen = Math.round((new Date().getTime() / 1000));
|
||||
|
|
|
@ -73,6 +73,8 @@ class Server {
|
|||
this.server = http.createServer(this.app);
|
||||
this.wss = new WebSocket.Server({ server: this.server });
|
||||
|
||||
this.setUpWebsocketHandling();
|
||||
|
||||
diskCache.loadMempoolCache();
|
||||
|
||||
if (config.DATABASE.ENABLED) {
|
||||
|
@ -86,7 +88,6 @@ class Server {
|
|||
fiatConversion.startService();
|
||||
|
||||
this.setUpHttpApiRoutes();
|
||||
this.setUpWebsocketHandling();
|
||||
this.runMainUpdateLoop();
|
||||
|
||||
if (config.BISQ_BLOCKS.ENABLED) {
|
||||
|
@ -145,6 +146,7 @@ class Server {
|
|||
setUpHttpApiRoutes() {
|
||||
this.app
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'transaction-times', routes.getTransactionTimes)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'cpfp/:txId', routes.getCpfpInfo)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'fees/recommended', routes.getRecommendedFees)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'fees/mempool-blocks', routes.getMempoolBlocks)
|
||||
.get(config.MEMPOOL.API_URL_PREFIX + 'backend-info', routes.getBackendInfo)
|
||||
|
|
|
@ -26,6 +26,27 @@ export interface TransactionExtended extends IEsploraApi.Transaction {
|
|||
vsize: number;
|
||||
feePerVsize: number;
|
||||
firstSeen?: number;
|
||||
effectiveFeePerVsize: number;
|
||||
ancestors?: Ancestor[];
|
||||
bestDescendant?: BestDescendant | null;
|
||||
cpfpChecked?: boolean;
|
||||
}
|
||||
|
||||
interface Ancestor {
|
||||
txid: string;
|
||||
weight: number;
|
||||
fee: number;
|
||||
}
|
||||
|
||||
interface BestDescendant {
|
||||
txid: string;
|
||||
weight: number;
|
||||
fee: number;
|
||||
}
|
||||
|
||||
export interface CpfpInfo {
|
||||
ancestors: Ancestor[];
|
||||
bestDescendant: BestDescendant | null;
|
||||
}
|
||||
|
||||
export interface TransactionStripped {
|
||||
|
|
|
@ -94,6 +94,30 @@ class Routes {
|
|||
res.json(times);
|
||||
}
|
||||
|
||||
public getCpfpInfo(req: Request, res: Response) {
|
||||
if (!/^[a-fA-F0-9]{64}$/.test(req.params.txId)) {
|
||||
res.status(501).send(`Invalid transaction ID.`);
|
||||
return;
|
||||
}
|
||||
|
||||
const tx = mempool.getMempool()[req.params.txId];
|
||||
if (!tx) {
|
||||
res.status(404).send(`Transaction doesn't exist in the mempool.`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (tx.cpfpChecked) {
|
||||
res.json({
|
||||
ancestors: tx.ancestors,
|
||||
bestDescendant: tx.bestDescendant || null,
|
||||
});
|
||||
}
|
||||
|
||||
const cpfpInfo = Common.setRelativesAndGetCpfpInfo(tx, mempool.getMempool());
|
||||
|
||||
res.json(cpfpInfo);
|
||||
}
|
||||
|
||||
public getBackendInfo(req: Request, res: Response) {
|
||||
res.json(backendInfo.getBackendInfo());
|
||||
}
|
||||
|
|
|
@ -40,6 +40,10 @@
|
|||
<td class="nowrap"><a href="{{ network.val === '' ? '' : '/' + network.val }}/api/v1/fees/mempool-blocks" target="_blank">GET {{ network.val === '' ? '' : '/' + network.val }}/api/v1/fees/mempool-blocks</a></td>
|
||||
<td i18n="api-docs.fees.mempool-blocks|API Docs for /api/v1/fees/mempool-blocks">Returns current mempool as projected blocks.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="nowrap"><a href="{{ network.val === '' ? '' : '/' + network.val }}/api/v1/cpfp/TXID" target="_blank">GET {{ network.val === '' ? '' : '/' + network.val }}/api/v1/cpfp/:txid</a></td>
|
||||
<td i18n="api-docs.fees.cpfp|API Docs for /api/v1/fees/cpfp">Returns the ancestors and the best descendant fees for a transaction.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</ng-template>
|
||||
|
|
|
@ -73,22 +73,7 @@
|
|||
</table>
|
||||
</div>
|
||||
<div class="col-sm">
|
||||
<table class="table table-borderless table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="td-width" i18n="transaction.fee|Transaction fee">Fee</td>
|
||||
<td>{{ tx.fee | number }} <span i18n="transaction.fee.sat|Transaction Fee sat">sat</span> (<app-fiat [value]="tx.fee"></app-fiat>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td i18n="transaction.fee-per-vbyte|Transaction fee">Fee per vByte</td>
|
||||
<td>
|
||||
{{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} <span i18n="shared.sat-vbyte|sat/vB">sat/vB</span>
|
||||
|
||||
<app-tx-fee-rating *ngIf="tx.fee" [tx]="tx"></app-tx-fee-rating>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<ng-container *ngTemplateOutlet="feeTable"></ng-container>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -146,18 +131,7 @@
|
|||
</table>
|
||||
</div>
|
||||
<div class="col-sm">
|
||||
<table class="table table-borderless table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="td-width" i18n="transaction.fee|Transaction Fee">Fee</td>
|
||||
<td>{{ tx.fee | number }} <span i18n="transaction.fee.sat|Transaction Fee sat">sat</span> (<app-fiat [value]="tx.fee"></app-fiat>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td i18n="transaction.fee-per-vbyte|Transaction fee">Fee per vByte</td>
|
||||
<td>{{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} <span i18n="shared.sat-vbyte|sat/vB">sat/vB</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<ng-container *ngTemplateOutlet="feeTable"></ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -296,3 +270,35 @@
|
|||
|
||||
<ng-template #blocksSingular let-i i18n="shared.block">{{ i }} block</ng-template>
|
||||
<ng-template #blocksPlural let-i i18n="shared.blocks">{{ i }} blocks</ng-template>
|
||||
|
||||
<ng-template #feeTable>
|
||||
<table class="table table-borderless table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="td-width" i18n="transaction.fee|Transaction fee">Fee</td>
|
||||
<td>{{ tx.fee | number }} <span i18n="transaction.fee.sat|Transaction Fee sat">sat</span> (<app-fiat [value]="tx.fee"></app-fiat>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td i18n="transaction.fee-per-vbyte|Transaction fee">Fee per vByte</td>
|
||||
<td>
|
||||
{{ tx.fee / (tx.weight / 4) | number : '1.1-1' }} <span i18n="shared.sat-vbyte|sat/vB">sat/vB</span>
|
||||
<ng-template [ngIf]="tx.status.confirmed">
|
||||
|
||||
<app-tx-fee-rating *ngIf="tx.fee && (!tx.effectiveFeePerVsize || tx.effectiveFeePerVsize === tx.fee / (tx.weight / 4))" [tx]="tx"></app-tx-fee-rating>
|
||||
</ng-template>
|
||||
</td>
|
||||
</tr>
|
||||
<tr *ngIf="tx.effectiveFeePerVsize && tx.effectiveFeePerVsize !== tx.fee / (tx.weight / 4)">
|
||||
<td i18n="transaction.effective-fee|Effective transaction fee">Effective fee</td>
|
||||
<td>
|
||||
{{ tx.effectiveFeePerVsize | number : '1.1-1' }} <span i18n="shared.sat-vbyte|sat/vB">sat/vB</span>
|
||||
<ng-template [ngIf]="tx.status.confirmed">
|
||||
|
||||
<app-tx-fee-rating *ngIf="tx.fee" [tx]="tx"></app-tx-fee-rating>
|
||||
</ng-template>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</ng-template>
|
|
@ -91,10 +91,28 @@ export class TransactionComponent implements OnInit, OnDestroy {
|
|||
this.getTransactionTime();
|
||||
}
|
||||
}
|
||||
|
||||
if (this.tx.status.confirmed) {
|
||||
this.stateService.markBlock$.next({ blockHeight: tx.status.block_height });
|
||||
} else {
|
||||
this.stateService.markBlock$.next({ txFeePerVSize: tx.fee / (tx.weight / 4) });
|
||||
if (tx.effectiveFeePerVsize) {
|
||||
this.stateService.markBlock$.next({ txFeePerVSize: tx.effectiveFeePerVsize });
|
||||
} else {
|
||||
this.apiService.getCpfpinfo$(this.tx.txid)
|
||||
.subscribe((cpfpInfo) => {
|
||||
let totalWeight = tx.weight + cpfpInfo.ancestors.reduce((prev, val) => prev + val.weight, 0);
|
||||
let totalFees = tx.fee + cpfpInfo.ancestors.reduce((prev, val) => prev + val.fee, 0);
|
||||
|
||||
if (cpfpInfo.bestDescendant) {
|
||||
totalWeight += cpfpInfo.bestDescendant.weight;
|
||||
totalFees += cpfpInfo.bestDescendant.fee;
|
||||
}
|
||||
|
||||
const effectiveFeePerVsize = totalFees / (totalWeight / 4);
|
||||
this.tx.effectiveFeePerVsize = effectiveFeePerVsize;
|
||||
this.stateService.markBlock$.next({ txFeePerVSize: effectiveFeePerVsize });
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
|
@ -139,7 +157,7 @@ export class TransactionComponent implements OnInit, OnDestroy {
|
|||
return;
|
||||
}
|
||||
|
||||
const txFeePerVSize = this.tx.fee / (this.tx.weight / 4);
|
||||
const txFeePerVSize = this.tx.effectiveFeePerVsize || this.tx.fee / (this.tx.weight / 4);
|
||||
|
||||
for (const block of mempoolBlocks) {
|
||||
for (let i = 0; i < block.feeRange.length - 1; i++) {
|
||||
|
|
|
@ -52,7 +52,7 @@ export class TxFeeRatingComponent implements OnInit, OnChanges, OnDestroy {
|
|||
}
|
||||
|
||||
calculateRatings(block: Block) {
|
||||
const feePervByte = this.tx.fee / (this.tx.weight / 4);
|
||||
const feePervByte = this.tx.effectiveFeePerVsize || this.tx.fee / (this.tx.weight / 4);
|
||||
this.medianFeeNeeded = block.medianFee;
|
||||
|
||||
// Block not filled
|
||||
|
|
|
@ -11,6 +11,7 @@ export interface Transaction {
|
|||
|
||||
// Custom properties
|
||||
firstSeen?: number;
|
||||
effectiveFeePerVsize?: number;
|
||||
}
|
||||
|
||||
export interface Recent {
|
||||
|
|
|
@ -8,3 +8,20 @@ export interface OptimizedMempoolStats {
|
|||
mempool_byte_weight: number;
|
||||
vsizes: number[] | string[];
|
||||
}
|
||||
|
||||
interface Ancestor {
|
||||
txid: string;
|
||||
weight: number;
|
||||
fee: number;
|
||||
}
|
||||
|
||||
interface BestDescendant {
|
||||
txid: string;
|
||||
weight: number;
|
||||
fee: number;
|
||||
}
|
||||
|
||||
export interface CpfpInfo {
|
||||
ancestors: Ancestor[];
|
||||
bestDescendant: BestDescendant | null;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { HttpClient, HttpParams } from '@angular/common/http';
|
||||
import { OptimizedMempoolStats } from '../interfaces/node-api.interface';
|
||||
import { CpfpInfo, OptimizedMempoolStats } from '../interfaces/node-api.interface';
|
||||
import { Observable } from 'rxjs';
|
||||
import { StateService } from './state.service';
|
||||
import { WebsocketResponse } from '../interfaces/websocket.interface';
|
||||
|
@ -88,4 +88,8 @@ export class ApiService {
|
|||
getInitData$(): Observable<WebsocketResponse> {
|
||||
return this.httpClient.get<WebsocketResponse>(this.apiBaseUrl + this.apiBasePath + '/api/v1/init-data');
|
||||
}
|
||||
|
||||
getCpfpinfo$(txid: string): Observable<CpfpInfo> {
|
||||
return this.httpClient.get<CpfpInfo>(this.apiBaseUrl + this.apiBasePath + '/api/v1/cpfp/' + txid);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,7 +97,7 @@
|
|||
<source>Inputs & Outputs</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">168</context>
|
||||
<context context-type="linenumber">142</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
|
@ -114,7 +114,7 @@
|
|||
<source>Details</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">170</context>
|
||||
<context context-type="linenumber">144</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Details</note>
|
||||
<note priority="1" from="meaning">transaction.details</note>
|
||||
|
@ -123,11 +123,11 @@
|
|||
<source>Details</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">176</context>
|
||||
<context context-type="linenumber">150</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">252</context>
|
||||
<context context-type="linenumber">226</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
|
@ -143,7 +143,7 @@
|
|||
<source>Size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">181</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Size</note>
|
||||
<note priority="1" from="meaning">transaction.size</note>
|
||||
|
@ -152,7 +152,7 @@
|
|||
<source>Virtual size</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Virtual Size</note>
|
||||
<note priority="1" from="meaning">transaction.vsize</note>
|
||||
|
@ -161,7 +161,7 @@
|
|||
<source>Weight</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
<context context-type="linenumber">163</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Weight</note>
|
||||
<note priority="1" from="meaning">transaction.weight</note>
|
||||
|
@ -187,15 +187,156 @@
|
|||
<note priority="1" from="description">Transaction Timestamp</note>
|
||||
<note priority="1" from="meaning">transaction.timestamp</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0d6ed649666c5cdcf12be0216d82051bba3614b0" datatype="html">
|
||||
<source>Included in block</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction included in block</note>
|
||||
<note priority="1" from="meaning">transaction.included-in-block</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="bfa87f9724434e4245b30f2bdd11d97477048cd1" datatype="html">
|
||||
<source>Confirmed</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">62</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Confirmed state</note>
|
||||
<note priority="1" from="meaning">transaction.confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7917764f923dd6b723b1cff254c7f5b837d1c48a" datatype="html">
|
||||
<source>After <x id="START_TAG_APP_TIMESPAN" ctype="x-app_timespan" equiv-text="<app-timespan [time]="tx.status.block_time - transactionTime">"/><x id="CLOSE_TAG_APP_TIMESPAN" ctype="x-app_timespan" equiv-text="</app-timespan>"/></source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction confirmed after</note>
|
||||
<note priority="1" from="meaning">transaction.confirmed.after</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="885666551418fd59011ceb09d5c481095940193b" datatype="html">
|
||||
<source>Features</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction features</note>
|
||||
<note priority="1" from="meaning">transaction.features</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4e738ef3d2b4878f17f43002204f7b31aabb8e87" datatype="html">
|
||||
<source>ETA</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">104</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction ETA</note>
|
||||
<note priority="1" from="meaning">transaction.eta</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bc4a5de56ea48a832e32294c124009867b478d0" datatype="html">
|
||||
<source>First seen</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">98</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction first seen</note>
|
||||
<note priority="1" from="meaning">transaction.first-seen</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f9bad781ea9c5192160516ca55ddc5edc307ef07" datatype="html">
|
||||
<source>In several hours (or more)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">111</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction ETA in several hours or more</note>
|
||||
<note priority="1" from="meaning">transaction.eta.in-several-hours</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="c9d9612bcd520103486b5fc84d84c9476a1b7f78" datatype="html">
|
||||
<source>Transaction not found.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">251</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">transaction.error.transaction-not-found</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="66b65556acb90d8764fe166a260af0309671698c" datatype="html">
|
||||
<source>Waiting for it to appear in the mempool...</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">252</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">transaction.error.waiting-for-it-to-appear</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="02c35681bc187cde4d0d3a98a3a1f2035dfe7398" datatype="html">
|
||||
<source>In ~<x id="INTERPOLATION" equiv-text="{{ i }}"/> minutes</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">267</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/mempool-blocks/mempool-blocks.component.html</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Block Frequency (plural)</note>
|
||||
<note priority="1" from="meaning">mempool-blocks.eta-of-next-block-plural</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e8b52d333f9395e1ae9c541d45dfb8c1cd017424" datatype="html">
|
||||
<source>In ~<x id="INTERPOLATION" equiv-text="{{ i }}"/> minute</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">269</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/mempool-blocks/mempool-blocks.component.html</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Block Frequency</note>
|
||||
<note priority="1" from="meaning">mempool-blocks.eta-of-next-block</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3aef75db6f65e1371d54d8bed1767299de9457d8" datatype="html">
|
||||
<source><x id="INTERPOLATION" equiv-text="{{ i }}"/> block</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/footer/footer.component.html</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">shared.block</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="588930712875bfa0834655249093d99eaa3d162e" datatype="html">
|
||||
<source><x id="INTERPOLATION" equiv-text="{{ i }}"/> blocks</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/mempool-blocks/mempool-blocks.component.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/footer/footer.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">shared.blocks</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="cb1b52c13b95fa29ea4044f2bbe0ac623b890c80" datatype="html">
|
||||
<source>Fee</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">152</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction fee</note>
|
||||
<note priority="1" from="meaning">transaction.fee</note>
|
||||
|
@ -204,11 +345,7 @@
|
|||
<source>sat</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">153</context>
|
||||
<context context-type="linenumber">279</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Fee sat</note>
|
||||
<note priority="1" from="meaning">transaction.fee.sat</note>
|
||||
|
@ -217,11 +354,7 @@
|
|||
<source>Fee per vByte</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">83</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">156</context>
|
||||
<context context-type="linenumber">282</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
|
@ -234,11 +367,11 @@
|
|||
<source>sat/vB</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">157</context>
|
||||
<context context-type="linenumber">294</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transactions-list/transactions-list.component.html</context>
|
||||
|
@ -295,150 +428,14 @@
|
|||
<note priority="1" from="description">sat/vB</note>
|
||||
<note priority="1" from="meaning">shared.sat-vbyte</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0d6ed649666c5cdcf12be0216d82051bba3614b0" datatype="html">
|
||||
<source>Included in block</source>
|
||||
<trans-unit id="9f34e3c1751028c9bc6564547d07c927d7088fca" datatype="html">
|
||||
<source>Effective fee</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
<context context-type="linenumber">36</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction included in block</note>
|
||||
<note priority="1" from="meaning">transaction.included-in-block</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="bfa87f9724434e4245b30f2bdd11d97477048cd1" datatype="html">
|
||||
<source>Confirmed</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">62</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction Confirmed state</note>
|
||||
<note priority="1" from="meaning">transaction.confirmed</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7917764f923dd6b723b1cff254c7f5b837d1c48a" datatype="html">
|
||||
<source>After <x id="START_TAG_APP_TIMESPAN" ctype="x-app_timespan" equiv-text="<app-timespan [time]="tx.status.block_time - transactionTime">"/><x id="CLOSE_TAG_APP_TIMESPAN" ctype="x-app_timespan" equiv-text="</app-timespan>"/></source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction confirmed after</note>
|
||||
<note priority="1" from="meaning">transaction.confirmed.after</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="885666551418fd59011ceb09d5c481095940193b" datatype="html">
|
||||
<source>Features</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">140</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/bisq/bisq-transaction/bisq-transaction.component.html</context>
|
||||
<context context-type="linenumber">42</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction features</note>
|
||||
<note priority="1" from="meaning">transaction.features</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4e738ef3d2b4878f17f43002204f7b31aabb8e87" datatype="html">
|
||||
<source>ETA</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">119</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction ETA</note>
|
||||
<note priority="1" from="meaning">transaction.eta</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1bc4a5de56ea48a832e32294c124009867b478d0" datatype="html">
|
||||
<source>First seen</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction first seen</note>
|
||||
<note priority="1" from="meaning">transaction.first-seen</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="f9bad781ea9c5192160516ca55ddc5edc307ef07" datatype="html">
|
||||
<source>In several hours (or more)</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">126</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Transaction ETA in several hours or more</note>
|
||||
<note priority="1" from="meaning">transaction.eta.in-several-hours</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="c9d9612bcd520103486b5fc84d84c9476a1b7f78" datatype="html">
|
||||
<source>Transaction not found.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">277</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">transaction.error.transaction-not-found</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="66b65556acb90d8764fe166a260af0309671698c" datatype="html">
|
||||
<source>Waiting for it to appear in the mempool...</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">278</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">transaction.error.waiting-for-it-to-appear</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="02c35681bc187cde4d0d3a98a3a1f2035dfe7398" datatype="html">
|
||||
<source>In ~<x id="INTERPOLATION" equiv-text="{{ i }}"/> minutes</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">293</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/mempool-blocks/mempool-blocks.component.html</context>
|
||||
<context context-type="linenumber">41</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Block Frequency (plural)</note>
|
||||
<note priority="1" from="meaning">mempool-blocks.eta-of-next-block-plural</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="e8b52d333f9395e1ae9c541d45dfb8c1cd017424" datatype="html">
|
||||
<source>In ~<x id="INTERPOLATION" equiv-text="{{ i }}"/> minute</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/mempool-blocks/mempool-blocks.component.html</context>
|
||||
<context context-type="linenumber">43</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Block Frequency</note>
|
||||
<note priority="1" from="meaning">mempool-blocks.eta-of-next-block</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="3aef75db6f65e1371d54d8bed1767299de9457d8" datatype="html">
|
||||
<source><x id="INTERPOLATION" equiv-text="{{ i }}"/> block</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">297</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/footer/footer.component.html</context>
|
||||
<context context-type="linenumber">22</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">shared.block</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="588930712875bfa0834655249093d99eaa3d162e" datatype="html">
|
||||
<source><x id="INTERPOLATION" equiv-text="{{ i }}"/> blocks</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/transaction/transaction.component.html</context>
|
||||
<context context-type="linenumber">298</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/mempool-blocks/mempool-blocks.component.html</context>
|
||||
<context context-type="linenumber">30</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/footer/footer.component.html</context>
|
||||
<context context-type="linenumber">23</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">shared.blocks</note>
|
||||
<note priority="1" from="description">Effective transaction fee</note>
|
||||
<note priority="1" from="meaning">transaction.effective-fee</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e06b8dd9f29261827018351cd71efe1c87839de" datatype="html">
|
||||
<source>Coinbase</source>
|
||||
|
@ -929,7 +926,7 @@
|
|||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">75</context>
|
||||
<context context-type="linenumber">79</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8a7b4bd44c0ac71b2e72de0398b303257f7d2f54" datatype="html">
|
||||
|
@ -1060,7 +1057,7 @@
|
|||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.ts</context>
|
||||
<context context-type="linenumber">38</context>
|
||||
<context context-type="linenumber">40</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">master-page.about</note>
|
||||
</trans-unit>
|
||||
|
@ -1199,15 +1196,23 @@
|
|||
<source>Community Alliances</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.html</context>
|
||||
<context context-type="linenumber">255</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">about.alliances</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="2dd9b8a8997a6b57413ca3cd32dd38cef9fa39c2" datatype="html">
|
||||
<source>Project Contributors</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.html</context>
|
||||
<context context-type="linenumber">292</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">about.contributors</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="d177262e3a43b2a7221183812daf0ada97659436" datatype="html">
|
||||
<source>Project Maintainers</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.html</context>
|
||||
<context context-type="linenumber">271</context>
|
||||
<context context-type="linenumber">310</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">about.maintainers</note>
|
||||
</trans-unit>
|
||||
|
@ -1215,7 +1220,7 @@
|
|||
<source>Terms of Service</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/about/about.component.html</context>
|
||||
<context context-type="linenumber">295</context>
|
||||
<context context-type="linenumber">357</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/dashboard/dashboard.component.html</context>
|
||||
|
@ -1223,7 +1228,7 @@
|
|||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">284</context>
|
||||
<context context-type="linenumber">288</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">Terms of Service</note>
|
||||
<note priority="1" from="meaning">shared.terms-of-service</note>
|
||||
|
@ -1847,27 +1852,27 @@
|
|||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">54</context>
|
||||
<context context-type="linenumber">58</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">80</context>
|
||||
<context context-type="linenumber">84</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">134</context>
|
||||
<context context-type="linenumber">138</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">184</context>
|
||||
<context context-type="linenumber">188</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">218</context>
|
||||
<context context-type="linenumber">222</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">243</context>
|
||||
<context context-type="linenumber">247</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs Endpoint</note>
|
||||
<note priority="1" from="meaning">api-docs.shared.endpoint</note>
|
||||
|
@ -1884,27 +1889,27 @@
|
|||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">55</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">81</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">135</context>
|
||||
<context context-type="linenumber">139</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">185</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">219</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
</context-group>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">244</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs Description</note>
|
||||
<note priority="1" from="meaning">api-docs.shared.description</note>
|
||||
|
@ -1944,11 +1949,20 @@
|
|||
<note priority="1" from="description">API Docs for /api/v1/fees/mempool-blocks</note>
|
||||
<note priority="1" from="meaning">api-docs.fees.mempool-blocks</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="4ebf8d4a2433cca5a8a933ef8ccef1b01e45acef" datatype="html">
|
||||
<source>Returns the ancestors and the best descendant fees for a transaction.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">45</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs for /api/v1/fees/cpfp</note>
|
||||
<note priority="1" from="meaning">api-docs.fees.cpfp</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="19a8d63607ead7ba08364fe9f64aa3c503dff6c4" datatype="html">
|
||||
<source>Mempool</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">49</context>
|
||||
<context context-type="linenumber">53</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs tab for Mempool</note>
|
||||
<note priority="1" from="meaning">api-docs.tab.mempool</note>
|
||||
|
@ -1957,7 +1971,7 @@
|
|||
<source>Returns current mempool backlog statistics.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">59</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs for /api/mempool</note>
|
||||
<note priority="1" from="meaning">api-docs.mempool.mempool</note>
|
||||
|
@ -1966,7 +1980,7 @@
|
|||
<source>Get the full list of txids in the mempool as an array. The order of the txids is arbitrary and does not match bitcoind.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">63</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs for /api/mempool/txids</note>
|
||||
<note priority="1" from="meaning">api-docs.mempool.txids</note>
|
||||
|
@ -1975,7 +1989,7 @@
|
|||
<source>Get a list of the last 10 transactions to enter the mempool. Each transaction object contains simplified overview data, with the following fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>txid<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>fee<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>vsize<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>value<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">67</context>
|
||||
<context context-type="linenumber">71</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs for /api/mempool/recent</note>
|
||||
<note priority="1" from="meaning">api-docs.mempool.recent</note>
|
||||
|
@ -1984,77 +1998,77 @@
|
|||
<source>Returns the confirmation status of a block. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>in_best_chain<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (boolean, false for orphaned blocks), <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>next_best<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (the hash of the next block, only available for blocks in the best chain).</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
<context context-type="linenumber">93</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="1126cb2e03d0371d03b57047052d4ff1b6556753" datatype="html">
|
||||
<source>Returns a list of transactions in the block (up to 25 transactions beginning at <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>start_index<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/>). Transactions returned here do not have the <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>status<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> field, since all the transactions share the same block and confirmation status.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">93</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3846f2527c3c9a50bb84b2c941a876f66797449b" datatype="html">
|
||||
<source>Returns a list of all txids in the block.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">97</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="3e08815110b2e5ce8aa7256ed05a2faf6dbb7077" datatype="html">
|
||||
<source>Returns the transaction at index <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>:index<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> within the specified block.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">101</context>
|
||||
<context context-type="linenumber">105</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6d5aacdd7e6c375570a88c25bfd0be82beba4c7b" datatype="html">
|
||||
<source>Returns the raw block representation in binary.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">105</context>
|
||||
<context context-type="linenumber">109</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="36df9865e9099d98537ea69c9cfdc035d1b64116" datatype="html">
|
||||
<source>Returns the hash of the block currently at <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>:height<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">109</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f8380186899495340cbfe7fb836ba664fb4b52af" datatype="html">
|
||||
<source>Returns the 10 newest blocks starting at the tip or at <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>:start_height<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> if specified.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">113</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4767bdd2059533d5eed7f3fe7cf0be5c260cdb00" datatype="html">
|
||||
<source>Returns the height of the last block.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">117</context>
|
||||
<context context-type="linenumber">121</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="940153d58769f1a8f50dba2458693142675a5dcb" datatype="html">
|
||||
<source>Returns the hash of the last block.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">121</context>
|
||||
<context context-type="linenumber">125</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="194d480219559b855b01ea58459066e3c63acdb2" datatype="html">
|
||||
<source>Returns details about a block. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>id<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>height<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>version<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>timestamp<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>bits<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>nonce<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>merkle_root<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>tx_count<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>size<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>weight<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>,<x id="START_TAG_NG_CONTAINER" ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'"> "/><x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>proof<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>,<x id="CLOSE_TAG_NG_CONTAINER" ctype="x-ng_container" equiv-text="</ng-container> "/> and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>previousblockhash<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">85</context>
|
||||
<context context-type="linenumber">89</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="8a4a4b8f308aaaeae782f7c9847013348d969c2d" datatype="html">
|
||||
<source>Transactions</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">129</context>
|
||||
<context context-type="linenumber">133</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs tab for Transactions</note>
|
||||
<note priority="1" from="meaning">api-docs.tab.transactions</note>
|
||||
|
@ -2063,70 +2077,70 @@
|
|||
<source>Returns details about a transaction. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>txid<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>version<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>locktime<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>size<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>weight<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>fee<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>vin<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>vout<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>status<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">139</context>
|
||||
<context context-type="linenumber">143</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="7e784cfa5833e7b54d4dfc723fabde94f66ebde3" datatype="html">
|
||||
<source>Returns the confirmation status of a transaction. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>confirmed<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (boolean), <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>block_height<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (optional), and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>block_hash<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (optional).</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">143</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="34c21c242665d87bf22645c90f571bd5078eac93" datatype="html">
|
||||
<source>Returns a transaction serialized as hex.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">147</context>
|
||||
<context context-type="linenumber">151</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fd42ee72bb64b93578d7d2142ae50796d0056d7a" datatype="html">
|
||||
<source>Returns a transaction as binary data.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">151</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a57953199686e9980df838cb25edb51691941ac5" datatype="html">
|
||||
<source>Returns a merkle inclusion proof for the transaction using <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-transaction-get-merkle">"/>Electrum's blockchain.transaction.get_merkle format.<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a>"/></source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
<context context-type="linenumber">163</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="fe9a40b2ff9674b4ab7d82624ffed340c9ee5b89" datatype="html">
|
||||
<source>Returns the spending status of a transaction output. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>spent<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (boolean), <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>txid<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (optional), <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>vin<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (optional), and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>status<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (optional, the status of the spending tx).</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">163</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="0358265aa88614843e1f5e887b94c673808c84f1" datatype="html">
|
||||
<source>Returns the spending status of all transaction outputs.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">167</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="01723473ecc53cab60ef1b37dc39d8941994d56f" datatype="html">
|
||||
<source>Broadcast a raw transaction to the network. The transaction should be provided as hex in the request body. The <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>txid<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> will be returned on success.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">171</context>
|
||||
<context context-type="linenumber">175</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="d51106cc898981e9862d35a4db40796f0cf464f8" datatype="html">
|
||||
<source>Returns a merkle inclusion proof for the transaction using <x id="START_LINK" ctype="x-a" equiv-text="<a href="https://bitcoin.org/en/glossary/merkle-block">"/>bitcoind's merkleblock<x id="CLOSE_LINK" ctype="x-a" equiv-text="</a> "/> format.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">155</context>
|
||||
<context context-type="linenumber">159</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9885457131a86be85a59c5366767e82c12d0a288" datatype="html">
|
||||
<source>Addresses</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">179</context>
|
||||
<context context-type="linenumber">183</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs tab for Addresses</note>
|
||||
<note priority="1" from="meaning">api-docs.tab.addresses</note>
|
||||
|
@ -2135,42 +2149,42 @@
|
|||
<source>Returns details about an address. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>address<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>chain_stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>mempool_stats<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>. <x id="INTERPOLATION" equiv-text="{{ '{' }}"/>chain,mempool<x id="INTERPOLATION_1" equiv-text="{{ '}' }}"/>_stats each contain an object with <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>tx_count<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>funded_txo_count<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>funded_txo_sum<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>spent_txo_count<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>spent_txo_sum<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">189</context>
|
||||
<context context-type="linenumber">193</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="bdc501d28e02e07f692859977fdaee8c52eea401" datatype="html">
|
||||
<source>Get transaction history for the specified address/scripthash, sorted with newest first. Returns up to 50 mempool transactions plus the first 25 confirmed transactions. You can request more confirmed transactions using <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>:last_seen_txid<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code> "/> (see below). </source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">193,194</context>
|
||||
<context context-type="linenumber">197,198</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5676910aa3ffb568079a7499b366744fe3fd87ea" datatype="html">
|
||||
<source>Get confirmed transaction history for the specified address/scripthash, sorted with newest first. Returns 25 transactions per page. More can be requested by specifying the last txid seen by the previous query.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">197</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="f10009779c64e19e20414fae506f27118420aa33" datatype="html">
|
||||
<source>Get unconfirmed transaction history for the specified address/scripthash. Returns up to 50 transactions (no paging).</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">201</context>
|
||||
<context context-type="linenumber">205</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4eb50557085c85bfca995b6ee0de56ec3f5e97eb" datatype="html">
|
||||
<source>Get the list of unspent transaction outputs associated with the address/scripthash. Available fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>txid<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>vout<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>value<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>status<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/> (with the status of the funding tx).<x id="START_TAG_NG_CONTAINER" ctype="x-ng_container" equiv-text="<ng-container *ngIf="network.val === 'liquid'">"/>There is also a <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>valuecommitment<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/> field that may appear in place of <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>value<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, plus the following additional fields: <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>asset<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>/<x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>assetcommitment<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>nonce<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>/<x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>noncecommitment<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>surjection_proof<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>, and <x id="START_TAG_CODE" ctype="x-code" equiv-text="<code>"/>range_proof<x id="CLOSE_TAG_CODE" ctype="x-code" equiv-text="</code>"/>.<x id="CLOSE_TAG_NG_CONTAINER" ctype="x-ng_container" equiv-text="</ng-container>"/></source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">205</context>
|
||||
<context context-type="linenumber">209</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="b861fd11d5aa8772acc40c5412621b6dd52378e8" datatype="html">
|
||||
<source>Assets</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">213</context>
|
||||
<context context-type="linenumber">217</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs tab for Assets</note>
|
||||
<note priority="1" from="meaning">api-docs.tab.assets</note>
|
||||
|
@ -2179,28 +2193,28 @@
|
|||
<source>Returns information about a Liquid asset.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">223</context>
|
||||
<context context-type="linenumber">227</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="4a0bf20cf26a4f4a387bed5c3d47c23294cb606e" datatype="html">
|
||||
<source>Returns transactions associated with the specified Liquid asset. For the network's native asset, returns a list of peg in, peg out, and burn transactions. For user-issued assets, returns a list of issuance, reissuance, and burn transactions. Does not include regular transactions transferring this asset.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">227</context>
|
||||
<context context-type="linenumber">231</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="44a238eb28145f904f3a5bbfd4050987668f78d0" datatype="html">
|
||||
<source>Get the current total supply of the specified asset. For the native asset (L-BTC), this is calculated as [chain,mempool]_stats.peg_in_amount - [chain,mempool]_stats.peg_out_amount - [chain,mempool]_stats.burned_amount. For issued assets, this is calculated as [chain,mempool]_stats.issued_amount - [chain,mempool]_stats.burned_amount. Not available for assets with blinded issuances. If /decimal is specified, returns the supply as a decimal according to the asset's divisibility. Otherwise, returned in base units.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">231</context>
|
||||
<context context-type="linenumber">235</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="a29245620333b4788dee4c478c327d99846513c6" datatype="html">
|
||||
<source>BSQ</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">238</context>
|
||||
<context context-type="linenumber">242</context>
|
||||
</context-group>
|
||||
<note priority="1" from="description">API Docs tab for BSQ</note>
|
||||
<note priority="1" from="meaning">api-docs.tab.bsq</note>
|
||||
|
@ -2209,49 +2223,49 @@
|
|||
<source>Returns statistics about all Bisq transactions.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">248</context>
|
||||
<context context-type="linenumber">252</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="5d67fbdf2986058351024c16d526c444475ead37" datatype="html">
|
||||
<source>Returns details about a Bisq transaction.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">252</context>
|
||||
<context context-type="linenumber">256</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e9a58657c410cf65dba4c3cdfb1af7099dedb241" datatype="html">
|
||||
<source>Returns :length of latest Bisq transactions, starting from :index.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">256</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="e7e7c97535181ba299bc0ad02904f851088a0dd5" datatype="html">
|
||||
<source>Returns all Bisq transactions that exist in a Bitcoin block.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">260</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="6fdafaace68cb298c6281e89eedc704f3d8f3f6a" datatype="html">
|
||||
<source>Returns :length Bitcoin blocks that contain Bisq transactions, starting from :index.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">264</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="ac234ff46c8f499399a20fb5d74005094de7cdcd" datatype="html">
|
||||
<source>Returns the most recently processed Bitcoin block height processed by Bisq.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">268</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="9604b870a64e6635062828425fcb801371e716ad" datatype="html">
|
||||
<source>Returns all Bisq transactions belonging to a Bitcoin address, with 'B' prefixed in front of the address.</source>
|
||||
<context-group purpose="location">
|
||||
<context context-type="sourcefile">src/app/components/api-docs/api-docs.component.html</context>
|
||||
<context context-type="linenumber">272</context>
|
||||
<context context-type="linenumber">276</context>
|
||||
</context-group>
|
||||
</trans-unit>
|
||||
<trans-unit id="clipboard.copied-message" datatype="html">
|
||||
|
|
Loading…
Add table
Reference in a new issue