import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; import { Vin, Vout } from '../../interfaces/electrs.interface'; import { StateService } from 'src/app/services/state.service'; @Component({ selector: 'app-address-labels', templateUrl: './address-labels.component.html', styleUrls: ['./address-labels.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) export class AddressLabelsComponent implements OnInit { network = ''; @Input() vin: Vin; @Input() vout: Vout; multisig = false; multisigM: number; multisigN: number; secondLayerClose = false; constructor( stateService: StateService, ) { this.network = stateService.network; } ngOnInit() { if (this.vin) { this.handleVin(); } else if (this.vout) { this.handleVout(); } } handleVin() { if (this.vin.inner_witnessscript_asm) { if (this.vin.inner_witnessscript_asm.indexOf('OP_CHECKMULTISIG') > -1) { const matches = this.getMatches(this.vin.inner_witnessscript_asm, /OP_PUSHNUM_([0-9])/g, 1); this.multisig = true; this.multisigM = parseInt(matches[0], 10); this.multisigN = parseInt(matches[1], 10); if (this.multisigM === 1 && this.multisigN === 1) { this.multisig = false; } } if (/OP_IF (.+) OP_ELSE (.+) OP_CSV OP_DROP/.test(this.vin.inner_witnessscript_asm)) { this.secondLayerClose = true; } } if (this.vin.inner_redeemscript_asm && this.vin.inner_redeemscript_asm.indexOf('OP_CHECKMULTISIG') > -1) { const matches = this.getMatches(this.vin.inner_redeemscript_asm, /OP_PUSHNUM_([0-9])/g, 1); this.multisig = true; this.multisigM = matches[0]; this.multisigN = matches[1]; } } handleVout() { } getMatches(str: string, regex: RegExp, index: number) { if (!index) { index = 1; } const matches = []; let match; while (match = regex.exec(str)) { matches.push(match[index]); } return matches; } }