Add track-scriptpubkeys websocket subscription
This commit is contained in:
		
							parent
							
								
									57c3861ca6
								
							
						
					
					
						commit
						8642956dc2
					
				| @ -245,6 +245,20 @@ class WebsocketHandler { | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           if (parsedMessage && parsedMessage['track-scriptpubkeys'] && Array.isArray(parsedMessage['track-scriptpubkeys'])) { | ||||
|             const spks: string[] = []; | ||||
|             for (const spk of parsedMessage['track-scriptpubkeys']) { | ||||
|               if (/^[a-fA-F0-9]+$/.test(spk)) { | ||||
|                 spks.push(spk); | ||||
|               } | ||||
|             } | ||||
|             if (spks.length) { | ||||
|               client['track-scriptpubkeys'] = spks; | ||||
|             } else { | ||||
|               client['track-scriptpubkeys'] = null; | ||||
|             } | ||||
|           } | ||||
| 
 | ||||
|           if (parsedMessage && parsedMessage['track-asset']) { | ||||
|             if (/^[a-fA-F0-9]{64}$/.test(parsedMessage['track-asset'])) { | ||||
|               client['track-asset'] = parsedMessage['track-asset']; | ||||
| @ -597,6 +611,27 @@ class WebsocketHandler { | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (client['track-scriptpubkeys']) { | ||||
|         const spkMap: { [spk: string]: AddressTransactions } = {}; | ||||
|         for (const spk of client['track-scriptpubkeys'] || []) { | ||||
|           const foundTransactions = Array.from(addressCache[spk as string]?.values() || []); | ||||
|           // txs may be missing prevouts in non-esplora backends
 | ||||
|           // so fetch the full transactions now
 | ||||
|           const fullTransactions = (config.MEMPOOL.BACKEND !== 'esplora') ? await this.getFullTransactions(foundTransactions) : foundTransactions; | ||||
|           if (fullTransactions?.length) { | ||||
|             spkMap[spk] = { | ||||
|               mempool: fullTransactions, | ||||
|               confirmed: [], | ||||
|               removed: [], | ||||
|             }; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         if (Object.keys(spkMap).length > 0) { | ||||
|           response['multi-scriptpubkey-transactions'] = JSON.stringify(spkMap); | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (client['track-asset']) { | ||||
|         const foundTransactions: TransactionExtended[] = []; | ||||
| 
 | ||||
| @ -914,6 +949,24 @@ class WebsocketHandler { | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (client['track-scriptpubkeys']) { | ||||
|         const spkMap: { [spk: string]: AddressTransactions } = {}; | ||||
|         for (const spk of client['track-scriptpubkeys'] || []) { | ||||
|           const fullTransactions = Array.from(addressCache[spk as string]?.values() || []); | ||||
|           if (fullTransactions?.length) { | ||||
|             spkMap[spk] = { | ||||
|               mempool: [], | ||||
|               confirmed: fullTransactions, | ||||
|               removed: [], | ||||
|             }; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         if (Object.keys(spkMap).length > 0) { | ||||
|           response['multi-scriptpubkey-transactions'] = JSON.stringify(spkMap); | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       if (client['track-asset']) { | ||||
|         const foundTransactions: TransactionExtended[] = []; | ||||
| 
 | ||||
|  | ||||
| @ -28,6 +28,7 @@ export interface WebsocketResponse { | ||||
|   'track-tx'?: string; | ||||
|   'track-address'?: string; | ||||
|   'track-addresses'?: string[]; | ||||
|   'track-scriptpubkeys'?: string[]; | ||||
|   'track-asset'?: string; | ||||
|   'track-mempool-block'?: number; | ||||
|   'track-rbf'?: string; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user