2023-02-15 09:26:12 -06:00
< div class = "container-xl" [ class . liquid-address ]=" network = == ' liquid ' || network = == ' liquidtestnet '" >
2021-10-11 22:33:20 -03:00
< div class = "title-address" >
< h1 i18n = "shared.address" > Address</ h1 >
< div class = "tx-link" >
2023-01-16 16:47:05 -06:00
< app-truncate [ text ]=" addressString " [ lastChars ]=" 8 " [ link ]="['/ address /' | relativeUrl , addressString ]" >
2024-06-15 20:52:46 +00:00
< app-clipboard [ text ]=" addressString " [ size ]=" isMobile ? ' large ' : ' normal '" ></ app-clipboard >
< span style = "position: relative; cursor: pointer" ( mouseover )=" showQR = true" ( mouseout )=" showQR = false" ( pointerdown )=" showQR = true" >
< fa-icon [ icon ]="[' fas ', ' qrcode ']" [ fixedWidth ]=" true " [ style . font-size ]=" isMobile ? ' 18px ' : ' 12px '" ></ fa-icon >
2024-06-10 23:12:41 +00:00
< div class = "qr-wrapper" [ hidden ]="! showQR " >
< app-qrcode [ size ]=" 200 " [ data ]=" addressString " ></ app-qrcode >
</ div >
</ span >
2023-01-16 16:47:05 -06:00
</ app-truncate >
2021-10-11 22:33:20 -03:00
</ div >
2021-05-03 10:11:30 -03:00
</ div >
2020-02-16 22:15:07 +07:00
< div class = "clearfix" ></ div >
< ng-template [ ngIf ]="! isLoadingAddress && ! error " >
< div class = "box" >
< div class = "row" >
2024-06-10 23:04:37 +00:00
@if (isMobile) {
< div class = "col-sm" >
2024-06-20 17:43:54 +09:00
< table class = "table table-borderless table-striped address-table" >
2024-06-10 23:04:37 +00:00
< tbody >
< ng-container * ngTemplateOutlet = "balanceRow" ></ ng-container >
< ng-container * ngTemplateOutlet = "pendingBalanceRow" ></ ng-container >
< ng-container * ngTemplateOutlet = "utxoRow" ></ ng-container >
< ng-container * ngTemplateOutlet = "pendingUtxoRow" ></ ng-container >
2024-06-14 15:51:00 +00:00
@if (network === 'liquid' || network === 'liquidtestnet') {
< ng-container * ngTemplateOutlet = "liquidRow" ></ ng-container >
} @else {
< ng-container * ngTemplateOutlet = "volumeRow" ></ ng-container >
}
2024-06-10 23:04:37 +00:00
< ng-container * ngTemplateOutlet = "typeRow" ></ ng-container >
</ tbody >
</ table >
2020-02-16 22:15:07 +07:00
</ div >
2024-06-10 23:04:37 +00:00
} @else {
< div class = "col-sm" >
2024-06-20 17:43:54 +09:00
< table class = "table table-borderless table-striped table-fixed address-table" >
2024-06-10 23:04:37 +00:00
< tbody >
< ng-container * ngTemplateOutlet = "balanceRow" ></ ng-container >
< ng-container * ngTemplateOutlet = "utxoRow" ></ ng-container >
2024-06-14 15:51:00 +00:00
@if (network === 'liquid' || network === 'liquidtestnet') {
< ng-container * ngTemplateOutlet = "liquidRow" ></ ng-container >
} @else {
< ng-container * ngTemplateOutlet = "volumeRow" ></ ng-container >
}
2024-06-10 23:04:37 +00:00
</ tbody >
</ table >
</ div >
< div class = "col-sm" >
2024-06-20 17:43:54 +09:00
< table class = "table table-borderless table-striped table-fixed address-table" >
2024-06-10 23:04:37 +00:00
< tbody >
< ng-container * ngTemplateOutlet = "pendingBalanceRow" ></ ng-container >
< ng-container * ngTemplateOutlet = "pendingUtxoRow" ></ ng-container >
< ng-container * ngTemplateOutlet = "typeRow" ></ ng-container >
</ tbody >
</ table >
</ div >
}
2020-02-16 22:15:07 +07:00
</ div >
</ div >
2024-04-01 03:49:56 +00:00
< ng-container * ngIf = "(stateService.backend$ | async) === 'esplora' && address && transactions && transactions.length > 2" >
2024-03-18 08:19:56 +00:00
< br >
2024-04-29 20:54:56 +00:00
< div class = "title-tx" >
< h2 class = "text-left" i18n = "address.balance-history" > Balance History</ h2 >
</ div >
2024-03-18 08:19:56 +00:00
< div class = "box" >
2024-04-29 20:54:56 +00:00
< div class = "widget-toggler" * ngIf = "showBalancePeriod()" >
< a href = "" ( click )=" setBalancePeriod (' all ')" class = "toggler-option"
[ ngClass ]="{' inactive ' : balancePeriod = == ' all '}" >< small i18n = "all" > all</ small ></ a >
< span style = "color: var(--transparent-fg); font-size: 8px" > | </ span >
< a href = "" ( click )=" setBalancePeriod (' 1m ')" class = "toggler-option"
[ ngClass ]="{' inactive ' : balancePeriod = == ' 1m '}" >< small i18n = "recent" > recent</ small ></ a >
</ div >
2024-03-18 08:19:56 +00:00
< div class = "row" >
< div class = "col-md" >
2024-05-31 17:20:07 +00:00
< app-address-graph [ address ]=" addressString " [ isPubkey ]=" address ?. is_pubkey " [ stats ]=" address . chain_stats " [ period ]=" balancePeriod " left = "80" />
2024-03-18 08:19:56 +00:00
</ div >
</ div >
</ div >
</ ng-container >
2020-02-16 22:15:07 +07:00
< br >
2021-10-26 21:47:17 -03:00
< div class = "title-tx" >
2022-04-05 20:37:18 +02:00
< h2 class = "text-left" >
2021-10-26 21:47:17 -03:00
< ng-template [ ngIf ]="! transactions ?. length " > </ ng-template >
2024-06-10 22:02:14 +00:00
< ng-template i18n = "X of X Address Transaction" [ ngIf ]=" transactions ?. length = == 1 " > {{ (transactions?.length | number) || '?' }} of {{ mempoolStats.tx_count + chainStats.tx_count | number }} transaction</ ng-template >
< ng-template i18n = "X of X Address Transactions (Plural)" [ ngIf ]=" transactions ?. length > 1">{{ (transactions?.length | number) || '?' }} of {{ mempoolStats.tx_count + chainStats.tx_count | number }} transactions</ ng-template >
2021-10-26 21:47:17 -03:00
</ h2 >
</ div >
2020-02-16 22:15:07 +07:00
2022-03-06 13:50:01 +01:00
< app-transactions-list [ transactions ]=" transactions " [ showConfirmations ]=" true " [ address ]=" address . address " ( loadMore )=" loadMore ()" ></ app-transactions-list >
2020-02-16 22:15:07 +07:00
< div class = "text-center" >
< ng-template [ ngIf ]=" isLoadingTransactions " >
2022-05-18 08:43:24 +04:00
< ng-container * ngIf = "addressLoadingStatus$ as addressLoadingStatus" >
< div class = "header-bg box" style = "padding: 12px; margin-bottom: 10px;" >
< div class = "progress progress-dark" >
< div class = "progress-bar progress-light" role = "progressbar" [ ngStyle ]="{' width ' : addressLoadingStatus + '%' }" ></ div >
</ div >
</ div >
</ ng-container >
2020-03-11 16:06:11 +07:00
< div class = "header-bg box" >
< div class = "row" style = "height: 107px;" >
< div class = "col-sm" >
< span class = "skeleton-loader" ></ span >
</ div >
< div class = "col-sm" >
< span class = "skeleton-loader" ></ span >
</ div >
</ div >
</ div >
2021-01-08 21:44:36 +07:00
2020-02-16 22:15:07 +07:00
</ ng-template >
2021-06-06 16:07:45 -04:00
2021-10-12 10:54:14 -03:00
< ng-template [ ngIf ]=" retryLoadMore " >
2021-06-06 16:07:45 -04:00
< br >
< button type = "button" class = "btn btn-outline-info btn-sm" ( click )=" loadMore ()" >< fa-icon [ icon ]="[' fas ', ' redo-alt ']" [ fixedWidth ]=" true " ></ fa-icon ></ button >
</ ng-template >
2020-02-16 22:15:07 +07:00
</ div >
</ ng-template >
< ng-template [ ngIf ]=" isLoadingAddress && ! error " >
< div class = "box" >
< div class = "row" >
< div class = "col" >
< table class = "table table-borderless table-striped" >
< tbody >
< tr >
< td colspan = "2" >< span class = "skeleton-loader" ></ span ></ td >
</ tr >
< tr >
< td colspan = "2" >< span class = "skeleton-loader" ></ span ></ td >
</ tr >
< tr >
< td colspan = "2" >< span class = "skeleton-loader" ></ span ></ td >
</ tr >
</ tbody >
</ table >
</ div >
2020-05-28 15:50:19 +07:00
< div class = "w-100 d-block d-md-none" ></ div >
2020-02-16 22:15:07 +07:00
< div class = "col" >
2021-10-12 10:54:14 -03:00
2020-02-16 22:15:07 +07:00
</ div >
</ div >
</ div >
</ ng-template >
< ng-template [ ngIf ]=" error " >
2021-10-23 11:46:38 +04:00
< br >
2024-03-21 07:57:13 +00:00
< ng-template [ ngIf ]=" error . status = == 413 || error . status = == 405 || error . status = == 504 " [ ngIfElse ]=" displayServerError " >
< div class = "text-center" >
< span i18n = "address.error.loading-address-data" > Error loading address data.</ span >
< br >
2021-04-27 14:21:33 +04:00
< ng-container i18n = "Electrum server limit exceeded error" >
2022-05-09 00:49:17 -04:00
< i > There many transactions on this address, more than your backend can handle. See more on < a href = "/docs/faq#address-lookup-issues" > setting up a stronger backend</ a > .</ i >
2021-04-27 14:21:33 +04:00
< br >< br >
Consider viewing this address on the official Mempool website instead:
</ ng-container >
2021-01-05 17:30:53 +07:00
< br >
< a href = "https://mempool.space/address/{{ addressString }}" target = "_blank" > https://mempool.space/address/{{ addressString }}</ a >
< br >
< a href = "http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/address/{{ addressString }}" target = "_blank" > http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/address/{{ addressString }}</ a >
2021-10-23 11:46:38 +04:00
< br >< br >
2024-03-21 07:57:13 +00:00
< i class = "small" > ({{ error | httpErrorMsg }})</ i >
</ div >
</ ng-template >
< ng-template # displayServerError >
< app-http-error [ error ]=" error " >
< span i18n = "address.error.loading-address-data" > Error loading address data.</ span >
</ app-http-error >
</ ng-template >
2020-02-16 22:15:07 +07:00
</ ng-template >
</ div >
2020-11-22 16:30:36 +07:00
< br >
< ng-template # confidentialTd >
2020-12-02 04:19:33 +09:00
< td i18n = "shared.confidential" > Confidential</ td >
2020-11-22 16:30:36 +07:00
</ ng-template >
2022-05-18 08:43:24 +04:00
< ng-template # headerLoader >
< div class = "header-bg box" style = "padding: 10px; margin-bottom: 10px;" >
< span class = "skeleton-loader" ></ span >
</ div >
</ ng-template >
2024-06-10 23:04:37 +00:00
< ng-template # balanceRow >
< tr >
< td i18n = "address.balance" > Balance</ td >
< td * ngIf = "chainStats.funded_txo_sum !== undefined; else confidentialTd" >< app-amount [ satoshis ]=" chainStats . balance " [ noFiat ]=" true " ></ app-amount > < span class = "fiat" >< app-fiat [ value ]=" chainStats . balance " ></ app-fiat ></ span ></ td >
</ tr >
</ ng-template >
< ng-template # pendingBalanceRow >
< tr >
2024-06-11 20:51:17 +00:00
< td i18n = "address.unconfirmed-balance" class = "font-italic" > unconfirmed balance</ td >
2024-06-10 23:04:37 +00:00
< td * ngIf = "mempoolStats.funded_txo_sum !== undefined; else confidentialTd" class = "font-italic" >< app-amount [ satoshis ]=" mempoolStats . balance " [ noFiat ]=" true " [ addPlus ]=" true " ></ app-amount > < span class = "fiat" >< app-fiat [ value ]=" mempoolStats . balance " ></ app-fiat ></ span ></ td >
</ tr >
</ ng-template >
< ng-template # utxoRow >
< tr >
2024-06-11 20:51:17 +00:00
< td i18n = "address.utxos" i18n-ngbTooltip = "unspent-transaction-outputs" ngbTooltip = "unspent transaction outputs" > UTXOs</ td >
2024-06-10 23:04:37 +00:00
< td > {{ chainStats.utxos }}</ td >
</ tr >
</ ng-template >
< ng-template # pendingUtxoRow >
< tr >
2024-06-11 20:51:17 +00:00
< td i18n = "address.unconfirmed-utxos" class = "font-italic" > unconfirmed UTXOs</ td >
2024-06-10 23:04:37 +00:00
< td class = "font-italic" > {{ mempoolStats.utxos > 0 ? '+' : ''}}{{ mempoolStats.utxos }}</ td >
</ tr >
</ ng-template >
< ng-template # volumeRow >
< tr >
< td i18n = "address.volume" > Volume</ td >
2024-06-12 04:16:58 +00:00
< td * ngIf = "chainStats.funded_txo_sum !== undefined; else confidentialTd" >< app-amount [ satoshis ]=" chainStats . volume + mempoolStats . volume " ></ app-amount ></ td >
2024-06-10 23:04:37 +00:00
</ tr >
</ ng-template >
< ng-template # typeRow >
< tr >
< td i18n = "address.type" > Type</ td >
2024-06-14 15:51:00 +00:00
< td class = "wrap-cell" >< app-address-type [ address ]=" addressTypeInfo " ></ app-address-type >< app-address-labels [ channel ]=" exampleChannel " [ address ]=" addressTypeInfo " class = "ml-1" ></ app-address-labels ></ td >
2024-06-10 23:04:37 +00:00
</ tr >
</ ng-template >
< ng-template # liquidRow >
< tr * ngIf = "addressInfo && addressInfo.unconfidential" >
< td i18n = "address.unconfidential" > Unconfidential</ td >
< td >
2024-06-14 15:51:00 +00:00
< app-truncate [ text ]=" addressInfo . unconfidential " [ lastChars ]=" 8 " [ textAlign ]=" isMobile ? ' end ' : ' start '" [ link ]="['/ address /' | relativeUrl , addressInfo . unconfidential ]" >
2024-06-10 23:04:37 +00:00
< app-clipboard [ text ]=" addressInfo . unconfidential " ></ app-clipboard >
</ app-truncate >
</ td >
</ tr >
</ ng-template >