Merge pull request #3959 from mempool/simon/load-more-mempool-txs
Load more mempool transactions
This commit is contained in:
		
						commit
						8af64900d9
					
				| @ -121,7 +121,6 @@ class BitcoinRoutes { | |||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'block-height/:height', this.getBlockHeight) |           .get(config.MEMPOOL.API_URL_PREFIX + 'block-height/:height', this.getBlockHeight) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address', this.getAddress) |           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address', this.getAddress) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs', this.getAddressTransactions) |           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs', this.getAddressTransactions) | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'address/:address/txs/chain/:txId', this.getAddressTransactions) |  | ||||||
|           .get(config.MEMPOOL.API_URL_PREFIX + 'address-prefix/:prefix', this.getAddressPrefix) |           .get(config.MEMPOOL.API_URL_PREFIX + 'address-prefix/:prefix', this.getAddressPrefix) | ||||||
|           ; |           ; | ||||||
|       } |       } | ||||||
| @ -546,27 +545,28 @@ class BitcoinRoutes { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private async getAddressTransactions(req: Request, res: Response) { |   private async getAddressTransactions(req: Request, res: Response): Promise<void> { | ||||||
|     if (config.MEMPOOL.BACKEND === 'none') { |     if (config.MEMPOOL.BACKEND === 'none') { | ||||||
|       res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); |       res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     try { |     try { | ||||||
|       const transactions = await bitcoinApi.$getAddressTransactions(req.params.address, req.params.txId); |       let lastTxId: string = ''; | ||||||
|  |       if (req.query.after_txid && typeof req.query.after_txid === 'string') { | ||||||
|  |         lastTxId = req.query.after_txid; | ||||||
|  |       } | ||||||
|  |       const transactions = await bitcoinApi.$getAddressTransactions(req.params.address, lastTxId); | ||||||
|       res.json(transactions); |       res.json(transactions); | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|       if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { |       if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { | ||||||
|         return res.status(413).send(e instanceof Error ? e.message : e); |         res.status(413).send(e instanceof Error ? e.message : e); | ||||||
|  |         return; | ||||||
|       } |       } | ||||||
|       res.status(500).send(e instanceof Error ? e.message : e); |       res.status(500).send(e instanceof Error ? e.message : e); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   private async getAdressTxChain(req: Request, res: Response) { |  | ||||||
|     res.status(501).send('Not implemented'); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   private async getAddressPrefix(req: Request, res: Response) { |   private async getAddressPrefix(req: Request, res: Response) { | ||||||
|     try { |     try { | ||||||
|       const blockHash = await bitcoinApi.$getAddressPrefix(req.params.prefix); |       const blockHash = await bitcoinApi.$getAddressPrefix(req.params.prefix); | ||||||
|  | |||||||
| @ -207,7 +207,7 @@ export class AddressComponent implements OnInit, OnDestroy { | |||||||
|     } |     } | ||||||
|     this.isLoadingTransactions = true; |     this.isLoadingTransactions = true; | ||||||
|     this.retryLoadMore = false; |     this.retryLoadMore = false; | ||||||
|     this.electrsApiService.getAddressTransactionsFromHash$(this.address.address, this.lastTransactionTxId) |     this.electrsApiService.getAddressTransactions$(this.address.address, this.lastTransactionTxId) | ||||||
|       .subscribe((transactions: Transaction[]) => { |       .subscribe((transactions: Transaction[]) => { | ||||||
|         this.lastTransactionTxId = transactions[transactions.length - 1].txid; |         this.lastTransactionTxId = transactions[transactions.length - 1].txid; | ||||||
|         this.loadedConfirmedTxCount += transactions.length; |         this.loadedConfirmedTxCount += transactions.length; | ||||||
| @ -217,6 +217,10 @@ export class AddressComponent implements OnInit, OnDestroy { | |||||||
|       (error) => { |       (error) => { | ||||||
|         this.isLoadingTransactions = false; |         this.isLoadingTransactions = false; | ||||||
|         this.retryLoadMore = true; |         this.retryLoadMore = true; | ||||||
|  |         // In the unlikely event of the txid wasn't found in the mempool anymore and we must reload the page.
 | ||||||
|  |         if (error.status === 422) { | ||||||
|  |           window.location.reload(); | ||||||
|  |         } | ||||||
|       }); |       }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| import { Injectable } from '@angular/core'; | import { Injectable } from '@angular/core'; | ||||||
| import { HttpClient } from '@angular/common/http'; | import { HttpClient, HttpParams } from '@angular/common/http'; | ||||||
| import { Observable } from 'rxjs'; | import { Observable } from 'rxjs'; | ||||||
| import { Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface'; | import { Transaction, Address, Outspend, Recent, Asset } from '../interfaces/electrs.interface'; | ||||||
| import { StateService } from './state.service'; | import { StateService } from './state.service'; | ||||||
| @ -65,12 +65,12 @@ export class ElectrsApiService { | |||||||
|     return this.httpClient.get<Address>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address); |     return this.httpClient.get<Address>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   getAddressTransactions$(address: string): Observable<Transaction[]> { |   getAddressTransactions$(address: string,  txid?: string): Observable<Transaction[]> { | ||||||
|     return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs'); |     let params = new HttpParams(); | ||||||
|   } |     if (txid) { | ||||||
| 
 |       params = params.append('after_txid', txid); | ||||||
|   getAddressTransactionsFromHash$(address: string, txid: string): Observable<Transaction[]> { |     } | ||||||
|     return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs/chain/' + txid); |     return this.httpClient.get<Transaction[]>(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs', { params }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   getAsset$(assetId: string): Observable<Asset> { |   getAsset$(assetId: string): Observable<Asset> { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user