2020-02-16 22:15:07 +07:00
|
|
|
<div class="container">
|
|
|
|
|
2020-02-24 03:42:29 +07:00
|
|
|
<app-blockchain position="top" [txFeePerVSize]="tx?.fee / (tx?.weight / 4)" [markHeight]="tx?.status?.block_height"></app-blockchain>
|
2020-02-16 22:15:07 +07:00
|
|
|
|
2020-02-19 23:50:23 +07:00
|
|
|
<div class="title-block">
|
|
|
|
<h1 style="float: left;">Transaction</h1>
|
2020-02-23 05:23:24 +07:00
|
|
|
<a [routerLink]="['/tx/', txId]" style="line-height: 56px; margin-left: 10px;">{{ txId }}</a>
|
2020-02-19 23:50:23 +07:00
|
|
|
<app-clipboard [text]="txId"></app-clipboard>
|
2020-02-23 05:23:24 +07:00
|
|
|
|
|
|
|
<ng-template [ngIf]="tx?.status?.confirmed" [ngIfElse]="unconfirmedBtn">
|
|
|
|
<button *ngIf="latestBlock" type="button" class="btn btn-sm btn-success float-right mr-2" style="margin-top: 0.75rem;">{{ latestBlock.height - tx.status.block_height + 1 }} confirmation<ng-container *ngIf="latestBlock.height - tx.status.block_height + 1 > 1">s</ng-container></button>
|
|
|
|
</ng-template>
|
|
|
|
<ng-template #unconfirmedBtn>
|
2020-02-23 19:16:50 +07:00
|
|
|
<button type="button" class="btn btn-sm btn-danger float-right mr-2" style="margin-top: 0.75rem;">Unconfirmed</button>
|
2020-02-23 05:23:24 +07:00
|
|
|
</ng-template>
|
2020-02-19 23:50:23 +07:00
|
|
|
</div>
|
2020-02-16 22:15:07 +07:00
|
|
|
|
2020-02-19 23:50:23 +07:00
|
|
|
<br>
|
2020-02-16 22:15:07 +07:00
|
|
|
|
|
|
|
<ng-template [ngIf]="!isLoadingTx && !error">
|
|
|
|
|
|
|
|
<ng-template [ngIf]="tx.status.confirmed" [ngIfElse]="unconfirmedTemplate">
|
|
|
|
|
|
|
|
<div class="box">
|
|
|
|
|
|
|
|
<table class="table table-borderless table-striped">
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td>Included in block</td>
|
|
|
|
<td><a [routerLink]="['/block/', tx.status.block_hash]" [state]="{ data: { blockHeight: tx.status.block_height } }">#{{ tx.status.block_height }}</a> at {{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm' }} <i>(<app-time-since [time]="tx.status.block_time"></app-time-since> ago)</i></td>
|
|
|
|
</tr>
|
2020-02-17 20:39:20 +07:00
|
|
|
<ng-template [ngIf]="tx.fee">
|
|
|
|
<tr>
|
|
|
|
<td>Fees</td>
|
2020-03-02 17:29:00 +07:00
|
|
|
<td>{{ tx.fee | number }} sats (<app-fiat [value]="tx.fee"></app-fiat>)</td>
|
2020-02-17 20:39:20 +07:00
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>Fees per vByte</td>
|
|
|
|
<td>{{ tx.fee / (tx.weight / 4) | number : '1.2-2' }} sat/vB</td>
|
|
|
|
</tr>
|
|
|
|
</ng-template>
|
2020-02-16 22:15:07 +07:00
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
</ng-template>
|
|
|
|
|
|
|
|
<ng-template #unconfirmedTemplate>
|
|
|
|
|
|
|
|
<div class="box">
|
|
|
|
|
|
|
|
<table class="table table-borderless table-striped">
|
|
|
|
<tbody>
|
2020-02-28 01:09:07 +07:00
|
|
|
<ng-template [ngIf]="transactionTime !== 0">
|
|
|
|
<tr *ngIf="transactionTime === -1; else firstSeenTmpl">
|
|
|
|
<td><span class="skeleton-loader"></span></td>
|
|
|
|
<td><span class="skeleton-loader"></span></td>
|
|
|
|
</tr>
|
|
|
|
<ng-template #firstSeenTmpl>
|
|
|
|
<tr>
|
|
|
|
<td>First seen</td>
|
2020-02-28 05:28:23 +07:00
|
|
|
<td><i><app-time-since [time]="transactionTime"></app-time-since> ago</i></td>
|
2020-02-28 01:09:07 +07:00
|
|
|
</tr>
|
|
|
|
</ng-template>
|
|
|
|
</ng-template>
|
2020-02-16 22:15:07 +07:00
|
|
|
<tr>
|
2020-02-23 05:23:24 +07:00
|
|
|
<td>Fees</td>
|
2020-03-02 17:29:00 +07:00
|
|
|
<td>{{ tx.fee | number }} sats (<app-fiat [value]="tx.fee"></app-fiat>)</td>
|
2020-02-16 22:15:07 +07:00
|
|
|
</tr>
|
|
|
|
<tr>
|
2020-02-23 05:23:24 +07:00
|
|
|
<td>Fees per vByte</td>
|
|
|
|
<td>{{ tx.fee / (tx.weight / 4) | number : '1.2-2' }} sat/vB</td>
|
2020-02-16 22:15:07 +07:00
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</ng-template>
|
|
|
|
|
2020-02-17 20:39:20 +07:00
|
|
|
<br>
|
|
|
|
|
2020-02-16 22:15:07 +07:00
|
|
|
<h2>Inputs & Outputs</h2>
|
|
|
|
|
|
|
|
<app-transactions-list [transactions]="[tx]" [transactionPage]="true"></app-transactions-list>
|
|
|
|
|
|
|
|
<h2>Details</h2>
|
|
|
|
<div class="box">
|
|
|
|
<div class="row">
|
|
|
|
<table class="table table-borderless table-striped">
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td>Size</td>
|
|
|
|
<td>{{ tx.size | bytes: 2 }}</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td>Weight</td>
|
|
|
|
<td>{{ tx.weight | wuBytes: 2 }}</td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</ng-template>
|
|
|
|
|
|
|
|
<ng-template [ngIf]="isLoadingTx && !error">
|
|
|
|
|
|
|
|
<div class="box">
|
|
|
|
<table class="table table-borderless table-striped">
|
|
|
|
<tbody>
|
|
|
|
<tr>
|
|
|
|
<td><span class="skeleton-loader"></span></td>
|
|
|
|
<td><span class="skeleton-loader"></span></td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<td><span class="skeleton-loader"></span></td>
|
|
|
|
<td><span class="skeleton-loader"></span></td>
|
|
|
|
</tr>
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<br>
|
|
|
|
|
|
|
|
<div class="text-center">
|
|
|
|
<div class="spinner-border"></div>
|
|
|
|
<br><br>
|
|
|
|
</div>
|
|
|
|
</ng-template>
|
|
|
|
|
|
|
|
<ng-template [ngIf]="error">
|
|
|
|
<div class="text-center">
|
|
|
|
Error loading transaction data.
|
|
|
|
<br>
|
|
|
|
<i>{{ error.error }}</i>
|
|
|
|
</div>
|
|
|
|
</ng-template>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<br>
|