Fix address tracking issues.

This commit is contained in:
softsimon 2020-05-20 17:00:50 +07:00
parent 30d2c5de27
commit 7e07e2cd8a
No known key found for this signature in database
GPG Key ID: 488D7DCFB5A430D7
7 changed files with 29 additions and 27 deletions

View File

@ -164,7 +164,26 @@ class WebsocketHandler {
}
}
// Send all new incoming transactions related to tracked asset
if (client['track-address']) {
const foundTransactions: TransactionExtended[] = [];
newTransactions.forEach((tx) => {
const someVin = tx.vin.some((vin) => !!vin.prevout && vin.prevout.scriptpubkey_address === client['track-address']);
if (someVin) {
foundTransactions.push(tx);
return;
}
const someVout = tx.vout.some((vout) => vout.scriptpubkey_address === client['track-address']);
if (someVout) {
foundTransactions.push(tx);
}
});
if (foundTransactions.length) {
response['address-transactions'] = foundTransactions;
}
}
if (client['track-asset']) {
const foundTransactions: TransactionExtended[] = [];
@ -190,7 +209,7 @@ class WebsocketHandler {
});
if (foundTransactions.length) {
response['asset-transactions'] = foundTransactions;
response['address-transactions'] = foundTransactions;
}
}
@ -231,7 +250,7 @@ class WebsocketHandler {
foundTransactions.push(tx);
return;
}
if (tx.vout && tx.vout.some((vout) => !!vout.asset && vout.asset === client['track-asset'])) {
if (tx.vout && tx.vout.some((vout) => vout.scriptpubkey_address === client['track-address'])) {
foundTransactions.push(tx);
}
});
@ -246,7 +265,7 @@ class WebsocketHandler {
};
});
response['asset-block-transactions'] = foundTransactions;
response['block-transactions'] = foundTransactions;
}
}
@ -283,7 +302,7 @@ class WebsocketHandler {
};
});
response['address-block-transactions'] = foundTransactions;
response['block-transactions'] = foundTransactions;
}
}

View File

@ -67,7 +67,7 @@
<br><br>
<span class="text-small">
Push transactions related to address: <span class="code">{{ '{' }} 'track-address': '3PbJ...bF9B' {{ '}' }}</span>
to receive all new transactions containing that address as input or output. Returns an array of transactions. 'address-transactions' for new mempool transactions and 'address-block-transactions' for new block confirmed transactions.
to receive all new transactions containing that address as input or output. Returns an array of transactions. 'address-transactions' for new mempool transactions and 'block-transactions' for new block confirmed transactions.
</span>
</td>
</tr>

View File

@ -142,7 +142,7 @@ export class AssetComponent implements OnInit, OnDestroy {
this.isLoadingAsset = false;
});
this.stateService.assetTransactions$
this.stateService.mempoolTransactions$
.subscribe((transaction) => {
if (this.transactions.some((t) => t.txid === transaction.txid)) {
return;

View File

@ -7,8 +7,6 @@ import { WebsocketService } from 'src/app/services/websocket.service';
styleUrls: ['./start.component.scss']
})
export class StartComponent implements OnInit {
view: 'blocks' | 'transactions' = 'blocks';
constructor(
private websocketService: WebsocketService,
) { }

View File

@ -30,8 +30,6 @@ export class TransactionComponent implements OnInit, OnDestroy {
transactionTime = -1;
subscription: Subscription;
rightPosition = 0;
constructor(
private route: ActivatedRoute,
private electrsApiService: ElectrsApiService,

View File

@ -25,7 +25,6 @@ export class StateService {
mempoolBlocks$ = new ReplaySubject<MempoolBlock[]>(1);
txConfirmed$ = new Subject<Block>();
mempoolTransactions$ = new Subject<Transaction>();
assetTransactions$ = new Subject<Transaction>();
blockTransactions$ = new Subject<Transaction>();
live2Chart$ = new Subject<OptimizedMempoolStats>();
@ -33,7 +32,7 @@ export class StateService {
viewFiat$ = new BehaviorSubject<boolean>(false);
connectionState$ = new BehaviorSubject<0 | 1 | 2>(2);
markBlock$ = new Subject<MarkBlockState>();
markBlock$ = new ReplaySubject<MarkBlockState>();
keyNavigation$ = new Subject<KeyboardEvent>();
constructor(

View File

@ -111,20 +111,8 @@ export class WebsocketService {
});
}
if (response['address-block-transactions']) {
response['address-block-transactions'].forEach((addressTransaction: Transaction) => {
this.stateService.blockTransactions$.next(addressTransaction);
});
}
if (response['asset-transactions']) {
response['asset-transactions'].forEach((assetTransaction: Transaction) => {
this.stateService.assetTransactions$.next(assetTransaction);
});
}
if (response['asset-block-transactions']) {
response['asset-block-transactions'].forEach((addressTransaction: Transaction) => {
if (response['block-transactions']) {
response['block-transactions'].forEach((addressTransaction: Transaction) => {
this.stateService.blockTransactions$.next(addressTransaction);
});
}