Display block details and taproot signaling.
This commit is contained in:
parent
2d19d21532
commit
564df63277
@ -80,6 +80,51 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div [hidden]="!showDetails">
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm">
|
||||||
|
<table class="table table-borderless table-striped">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="td-width" i18n="transaction.version">Version</td>
|
||||||
|
<td>{{ block.version | decimal2hex }} <span class="badge ml-1" [ngClass]="{'badge-success': hasTaproot(block.version), 'badge-danger': !hasTaproot(block.version) }">Taproot</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td i18n="block.merkle-root">Merkle root</td>
|
||||||
|
<td><p class="break-all">{{ block.merkle_root }}</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td i18n="block.bits">Bits</td>
|
||||||
|
<td>{{ block.bits | decimal2hex }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm">
|
||||||
|
<table class="table table-borderless table-striped">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="td-width" i18n="block.difficulty">Difficulty</td>
|
||||||
|
<td>{{ block.difficulty }}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td i18n="block.nonce">Nonce</td>
|
||||||
|
<td>{{ block.nonce | decimal2hex }}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="text-right mt-3">
|
||||||
|
<button type="button" class="btn btn-outline-info btn-sm" (click)="toggleShowDetails()" i18n="transaction.details|Transaction Details">Details</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<h2 class="float-left">
|
<h2 class="float-left">
|
||||||
|
@ -14,3 +14,9 @@
|
|||||||
width: 140px;
|
width: 140px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.break-all {
|
||||||
|
white-space: normal;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
@ -32,6 +32,7 @@ export class BlockComponent implements OnInit, OnDestroy {
|
|||||||
page = 1;
|
page = 1;
|
||||||
itemsPerPage: number;
|
itemsPerPage: number;
|
||||||
txsLoadingStatus$: Observable<number>;
|
txsLoadingStatus$: Observable<number>;
|
||||||
|
showDetails = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
@ -144,6 +145,14 @@ export class BlockComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
this.stateService.networkChanged$
|
this.stateService.networkChanged$
|
||||||
.subscribe((network) => this.network = network);
|
.subscribe((network) => this.network = network);
|
||||||
|
|
||||||
|
this.route.queryParams.subscribe((params) => {
|
||||||
|
if (params.showDetails === 'true') {
|
||||||
|
this.showDetails = true;
|
||||||
|
} else {
|
||||||
|
this.showDetails = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
@ -175,4 +184,26 @@ export class BlockComponent implements OnInit, OnDestroy {
|
|||||||
this.isLoadingTransactions = false;
|
this.isLoadingTransactions = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleShowDetails() {
|
||||||
|
if (this.showDetails) {
|
||||||
|
this.showDetails = false;
|
||||||
|
this.router.navigate([], {
|
||||||
|
relativeTo: this.route,
|
||||||
|
queryParams: { showDetails: false },
|
||||||
|
queryParamsHandling: 'merge',
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.showDetails = true;
|
||||||
|
this.router.navigate([], {
|
||||||
|
relativeTo: this.route,
|
||||||
|
queryParams: { showDetails: true },
|
||||||
|
queryParamsHandling: 'merge',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hasTaproot(version: number): boolean {
|
||||||
|
return (Number(version) & (1 << 2)) > 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ export interface Block {
|
|||||||
version: number;
|
version: number;
|
||||||
timestamp: number;
|
timestamp: number;
|
||||||
bits: number;
|
bits: number;
|
||||||
nounce: number;
|
nonce: number;
|
||||||
difficulty: number;
|
difficulty: number;
|
||||||
merkle_root: string;
|
merkle_root: string;
|
||||||
tx_count: number;
|
tx_count: number;
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
|
|
||||||
|
@Pipe({
|
||||||
|
name: 'decimal2hex'
|
||||||
|
})
|
||||||
|
export class Decimal2HexPipe implements PipeTransform {
|
||||||
|
transform(decimal: number): string {
|
||||||
|
return `0x` + decimal.toString(16);
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import { VbytesPipe } from './pipes/bytes-pipe/vbytes.pipe';
|
|||||||
import { ShortenStringPipe } from './pipes/shorten-string-pipe/shorten-string.pipe';
|
import { ShortenStringPipe } from './pipes/shorten-string-pipe/shorten-string.pipe';
|
||||||
import { CeilPipe } from './pipes/math-ceil/math-ceil.pipe';
|
import { CeilPipe } from './pipes/math-ceil/math-ceil.pipe';
|
||||||
import { Hex2asciiPipe } from './pipes/hex2ascii/hex2ascii.pipe';
|
import { Hex2asciiPipe } from './pipes/hex2ascii/hex2ascii.pipe';
|
||||||
|
import { Decimal2HexPipe } from './pipes/decimal2hex/decimal2hex.pipe';
|
||||||
import { AsmStylerPipe } from './pipes/asm-styler/asm-styler.pipe';
|
import { AsmStylerPipe } from './pipes/asm-styler/asm-styler.pipe';
|
||||||
import { RelativeUrlPipe } from './pipes/relative-url/relative-url.pipe';
|
import { RelativeUrlPipe } from './pipes/relative-url/relative-url.pipe';
|
||||||
import { ScriptpubkeyTypePipe } from './pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe';
|
import { ScriptpubkeyTypePipe } from './pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe';
|
||||||
@ -35,6 +36,7 @@ import { ReactiveFormsModule } from '@angular/forms';
|
|||||||
WuBytesPipe,
|
WuBytesPipe,
|
||||||
CeilPipe,
|
CeilPipe,
|
||||||
ShortenStringPipe,
|
ShortenStringPipe,
|
||||||
|
Decimal2HexPipe,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
@ -71,6 +73,7 @@ import { ReactiveFormsModule } from '@angular/forms';
|
|||||||
WuBytesPipe,
|
WuBytesPipe,
|
||||||
CeilPipe,
|
CeilPipe,
|
||||||
ShortenStringPipe,
|
ShortenStringPipe,
|
||||||
|
Decimal2HexPipe,
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class SharedModule {}
|
export class SharedModule {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user