Update custom address widgets on new block transactions
This commit is contained in:
		
							parent
							
								
									1de028840e
								
							
						
					
					
						commit
						d49485c363
					
				| @ -88,7 +88,7 @@ export class AddressGraphComponent implements OnChanges { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   prepareChartOptions(summary): void { |   prepareChartOptions(summary): void { | ||||||
|     let total = (this.stats.funded_txo_sum - this.stats.spent_txo_sum); // + (summary[0]?.value || 0);
 |     let total = (this.stats.funded_txo_sum - this.stats.spent_txo_sum); | ||||||
|     this.data = summary.map(d => { |     this.data = summary.map(d => { | ||||||
|       const balance = total; |       const balance = total; | ||||||
|       total -= d.value; |       total -= d.value; | ||||||
| @ -102,13 +102,6 @@ export class AddressGraphComponent implements OnChanges { | |||||||
|       this.data.push( |       this.data.push( | ||||||
|         {value: [now, this.stats.funded_txo_sum - this.stats.spent_txo_sum], symbol: 'none', tooltip: { show: false }} |         {value: [now, this.stats.funded_txo_sum - this.stats.spent_txo_sum], symbol: 'none', tooltip: { show: false }} | ||||||
|       ); |       ); | ||||||
| 
 |  | ||||||
|         // [now, this.stats.funded_txo_sum - this.stats.spent_txo_sum, {
 |  | ||||||
|         // txid: null,
 |  | ||||||
|         // height: null,
 |  | ||||||
|         // value: this.stats.funded_txo_sum - this.stats.spent_txo_sum,
 |  | ||||||
|         // time: Math.floor(now / 1000),
 |  | ||||||
|       // }]);
 |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const maxValue = this.data.reduce((acc, d) => Math.max(acc, Math.abs(d[1] || d.value[1])), 0); |     const maxValue = this.data.reduce((acc, d) => Math.max(acc, Math.abs(d[1] || d.value[1])), 0); | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; | import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; | ||||||
| import { combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs'; | import { combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs'; | ||||||
| import { catchError, filter, map, scan, share, shareReplay, switchMap, tap } from 'rxjs/operators'; | import { catchError, filter, map, scan, share, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '../../interfaces/node-api.interface'; | import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '../../interfaces/node-api.interface'; | ||||||
| import { MempoolInfo, ReplacementInfo } from '../../interfaces/websocket.interface'; | import { MempoolInfo, ReplacementInfo } from '../../interfaces/websocket.interface'; | ||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| @ -61,6 +61,7 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni | |||||||
|   widgets; |   widgets; | ||||||
| 
 | 
 | ||||||
|   addressSubscription: Subscription; |   addressSubscription: Subscription; | ||||||
|  |   blockTxSubscription: Subscription; | ||||||
|   addressSummary$: Observable<AddressTxSummary[]>; |   addressSummary$: Observable<AddressTxSummary[]>; | ||||||
|   address: Address; |   address: Address; | ||||||
| 
 | 
 | ||||||
| @ -294,7 +295,7 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni | |||||||
|             console.log(err); |             console.log(err); | ||||||
|             return of(null); |             return of(null); | ||||||
|           }), |           }), | ||||||
|           filter((address) => !!address) |           filter((address) => !!address), | ||||||
|         ).subscribe((address: Address) => { |         ).subscribe((address: Address) => { | ||||||
|           this.websocketService.startTrackAddress(address.address); |           this.websocketService.startTrackAddress(address.address); | ||||||
|           this.address = address; |           this.address = address; | ||||||
| @ -307,6 +308,46 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni | |||||||
|         catchError(e => { |         catchError(e => { | ||||||
|           return of(null); |           return of(null); | ||||||
|         }), |         }), | ||||||
|  |         switchMap(initial => this.stateService.blockTransactions$.pipe( | ||||||
|  |           startWith(null), | ||||||
|  |           scan((summary, tx) => { | ||||||
|  |             if (tx && !summary.some(t => t.txid === tx.txid)) { | ||||||
|  |               let value = 0; | ||||||
|  |               let funded = 0; | ||||||
|  |               let fundedCount = 0; | ||||||
|  |               let spent = 0; | ||||||
|  |               let spentCount = 0; | ||||||
|  |               for (const vout of tx.vout) { | ||||||
|  |                 if (vout.scriptpubkey_address === addressString) { | ||||||
|  |                   value += vout.value; | ||||||
|  |                   funded += vout.value; | ||||||
|  |                   fundedCount++; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |               for (const vin of tx.vin) { | ||||||
|  |                 if (vin.prevout?.scriptpubkey_address === addressString) { | ||||||
|  |                   value -= vin.prevout?.value; | ||||||
|  |                   spent += vin.prevout?.value; | ||||||
|  |                   spentCount++; | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |               if (this.address && this.address.address === addressString) { | ||||||
|  |                 this.address.chain_stats.tx_count++; | ||||||
|  |                 this.address.chain_stats.funded_txo_sum += funded; | ||||||
|  |                 this.address.chain_stats.funded_txo_count += fundedCount; | ||||||
|  |                 this.address.chain_stats.spent_txo_sum += spent; | ||||||
|  |                 this.address.chain_stats.spent_txo_count += spentCount; | ||||||
|  |               } | ||||||
|  |               summary.unshift({ | ||||||
|  |                 txid: tx.txid, | ||||||
|  |                 time: tx.status?.block_time, | ||||||
|  |                 height: tx.status?.block_height, | ||||||
|  |                 value | ||||||
|  |               }); | ||||||
|  |             } | ||||||
|  |             return summary; | ||||||
|  |           }, initial) | ||||||
|  |         )), | ||||||
|         share(), |         share(), | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user