Wrap esplora call into try/catch when scanning channel forensics
This commit is contained in:
parent
7fe9029a4e
commit
7d5ed66db1
@ -285,11 +285,24 @@ class NetworkSyncService {
|
|||||||
for (const channel of channels) {
|
for (const channel of channels) {
|
||||||
let reason = 0;
|
let reason = 0;
|
||||||
// Only Esplora backend can retrieve spent transaction outputs
|
// Only Esplora backend can retrieve spent transaction outputs
|
||||||
const outspends = await bitcoinApi.$getOutspends(channel.closing_transaction_id);
|
try {
|
||||||
|
let outspends: IEsploraApi.Outspend[] | undefined;
|
||||||
|
try {
|
||||||
|
outspends = await bitcoinApi.$getOutspends(channel.closing_transaction_id);
|
||||||
|
} catch (e) {
|
||||||
|
logger.err(`Failed to call ${config.ESPLORA.REST_API_URL + '/tx/' + channel.closing_transaction_id + '/outspends'}. Reason ${e instanceof Error ? e.message : e}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const lightningScriptReasons: number[] = [];
|
const lightningScriptReasons: number[] = [];
|
||||||
for (const outspend of outspends) {
|
for (const outspend of outspends) {
|
||||||
if (outspend.spent && outspend.txid) {
|
if (outspend.spent && outspend.txid) {
|
||||||
const spendingTx = await bitcoinApi.$getRawTransaction(outspend.txid);
|
let spendingTx: IEsploraApi.Transaction | undefined;
|
||||||
|
try {
|
||||||
|
spendingTx = await bitcoinApi.$getRawTransaction(outspend.txid);
|
||||||
|
} catch (e) {
|
||||||
|
logger.err(`Failed to call ${config.ESPLORA.REST_API_URL + '/tx/' + outspend.txid}. Reason ${e instanceof Error ? e.message : e}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const lightningScript = this.findLightningScript(spendingTx.vin[outspend.vin || 0]);
|
const lightningScript = this.findLightningScript(spendingTx.vin[outspend.vin || 0]);
|
||||||
lightningScriptReasons.push(lightningScript);
|
lightningScriptReasons.push(lightningScript);
|
||||||
}
|
}
|
||||||
@ -310,7 +323,13 @@ class NetworkSyncService {
|
|||||||
We can detect a commitment transaction (force close) by reading Sequence and Locktime
|
We can detect a commitment transaction (force close) by reading Sequence and Locktime
|
||||||
https://github.com/lightning/bolts/blob/master/03-transactions.md#commitment-transaction
|
https://github.com/lightning/bolts/blob/master/03-transactions.md#commitment-transaction
|
||||||
*/
|
*/
|
||||||
const closingTx = await bitcoinApi.$getRawTransaction(channel.closing_transaction_id);
|
let closingTx: IEsploraApi.Transaction | undefined;
|
||||||
|
try {
|
||||||
|
closingTx = await bitcoinApi.$getRawTransaction(channel.closing_transaction_id);
|
||||||
|
} catch (e) {
|
||||||
|
logger.err(`Failed to call ${config.ESPLORA.REST_API_URL + '/tx/' + channel.closing_transaction_id}. Reason ${e instanceof Error ? e.message : e}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
const sequenceHex: string = closingTx.vin[0].sequence.toString(16);
|
const sequenceHex: string = closingTx.vin[0].sequence.toString(16);
|
||||||
const locktimeHex: string = closingTx.locktime.toString(16);
|
const locktimeHex: string = closingTx.locktime.toString(16);
|
||||||
if (sequenceHex.substring(0, 2) === '80' && locktimeHex.substring(0, 2) === '20') {
|
if (sequenceHex.substring(0, 2) === '80' && locktimeHex.substring(0, 2) === '20') {
|
||||||
@ -324,6 +343,9 @@ class NetworkSyncService {
|
|||||||
logger.debug('Setting closing reason ' + reason + ' for channel: ' + channel.id + '.');
|
logger.debug('Setting closing reason ' + reason + ' for channel: ' + channel.id + '.');
|
||||||
await DB.query(`UPDATE channels SET closing_reason = ? WHERE id = ?`, [reason, channel.id]);
|
await DB.query(`UPDATE channels SET closing_reason = ? WHERE id = ?`, [reason, channel.id]);
|
||||||
}
|
}
|
||||||
|
} catch (e) {
|
||||||
|
logger.err(`$runClosedChannelsForensics() failed for channel ${channel.short_id}. Reason: ${e instanceof Error ? e.message : e}`);
|
||||||
|
}
|
||||||
|
|
||||||
++progress;
|
++progress;
|
||||||
const elapsedSeconds = Math.round((new Date().getTime() / 1000) - this.loggerTimer);
|
const elapsedSeconds = Math.round((new Date().getTime() / 1000) - this.loggerTimer);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user