Avoid repeated tx classification work
This commit is contained in:
		
							parent
							
								
									472a86ffd4
								
							
						
					
					
						commit
						c2f52ac1f3
					
				@ -222,7 +222,25 @@ export class Common {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static getTransactionFlags(tx: TransactionExtended): number {
 | 
			
		||||
    let flags = 0n;
 | 
			
		||||
    let flags = tx.flags ? BigInt(tx.flags) : 0n;
 | 
			
		||||
 | 
			
		||||
    // Update variable flags (CPFP, RBF)
 | 
			
		||||
    if (tx.ancestors?.length) {
 | 
			
		||||
      flags |= TransactionFlags.cpfp_child;
 | 
			
		||||
    }
 | 
			
		||||
    if (tx.descendants?.length) {
 | 
			
		||||
      flags |= TransactionFlags.cpfp_parent;
 | 
			
		||||
    }
 | 
			
		||||
    if (rbfCache.getRbfTree(tx.txid)) {
 | 
			
		||||
      flags |= TransactionFlags.replacement;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Already processed static flags, no need to do it again
 | 
			
		||||
    if (tx.flags) {
 | 
			
		||||
      return Number(flags);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Process static flags
 | 
			
		||||
    if (tx.version === 1) {
 | 
			
		||||
      flags |= TransactionFlags.v1;
 | 
			
		||||
    } else if (tx.version === 2) {
 | 
			
		||||
@ -306,15 +324,7 @@ export class Common {
 | 
			
		||||
    if (hasFakePubkey) {
 | 
			
		||||
      flags |= TransactionFlags.fake_pubkey;
 | 
			
		||||
    }
 | 
			
		||||
    if (tx.ancestors?.length) {
 | 
			
		||||
      flags |= TransactionFlags.cpfp_child;
 | 
			
		||||
    }
 | 
			
		||||
    if (tx.descendants?.length) {
 | 
			
		||||
      flags |= TransactionFlags.cpfp_parent;
 | 
			
		||||
    }
 | 
			
		||||
    if (rbfCache.getRbfTree(tx.txid)) {
 | 
			
		||||
      flags |= TransactionFlags.replacement;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    // fast but bad heuristic to detect possible coinjoins
 | 
			
		||||
    // (at least 5 inputs and 5 outputs, less than half of which are unique amounts, with no address reuse)
 | 
			
		||||
    const addressReuse = Object.values(reusedAddresses).reduce((acc, count) => Math.max(acc, count), 0) > 1;
 | 
			
		||||
@ -335,6 +345,7 @@ export class Common {
 | 
			
		||||
 | 
			
		||||
  static classifyTransaction(tx: TransactionExtended): TransactionClassified {
 | 
			
		||||
    const flags = this.getTransactionFlags(tx);
 | 
			
		||||
    tx.flags = flags;
 | 
			
		||||
    return {
 | 
			
		||||
      ...this.stripTransaction(tx),
 | 
			
		||||
      flags,
 | 
			
		||||
 | 
			
		||||
@ -95,6 +95,7 @@ export interface TransactionExtended extends IEsploraApi.Transaction {
 | 
			
		||||
  };
 | 
			
		||||
  acceleration?: boolean;
 | 
			
		||||
  uid?: number;
 | 
			
		||||
  flags?: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface MempoolTransactionExtended extends TransactionExtended {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user