Merge pull request #2651 from mononaut/fix-close-channel-id

Fix lightning channel close classification logic
This commit is contained in:
softsimon
2022-10-21 23:58:00 +04:00
committed by GitHub
2 changed files with 47 additions and 30 deletions

View File

@@ -4,7 +4,7 @@ import logger from '../logger';
import { Common } from './common'; import { Common } from './common';
class DatabaseMigration { class DatabaseMigration {
private static currentVersion = 40; private static currentVersion = 41;
private queryTimeout = 120000; private queryTimeout = 120000;
private statisticsAddedIndexed = false; private statisticsAddedIndexed = false;
private uniqueLogs: string[] = []; private uniqueLogs: string[] = [];
@@ -348,6 +348,10 @@ class DatabaseMigration {
await this.$executeQuery('ALTER TABLE `nodes` ADD channels int(11) unsigned DEFAULT NULL'); await this.$executeQuery('ALTER TABLE `nodes` ADD channels int(11) unsigned DEFAULT NULL');
await this.$executeQuery('ALTER TABLE `nodes` ADD INDEX `capacity` (`capacity`);'); await this.$executeQuery('ALTER TABLE `nodes` ADD INDEX `capacity` (`capacity`);');
} }
if (databaseSchemaVersion < 41 && isBitcoin === true) {
await this.$executeQuery('UPDATE channels SET closing_reason = NULL WHERE closing_reason = 1');
}
} }
/** /**

View File

@@ -289,6 +289,24 @@ class NetworkSyncService {
1. Mutually closed 1. Mutually closed
2. Forced closed 2. Forced closed
3. Forced closed with penalty 3. Forced closed with penalty
┌────────────────────────────────────┐ ┌────────────────────────────┐
│ outputs contain revocation script? ├──yes──► force close w/ penalty = 3 │
└──────────────┬─────────────────────┘ └────────────────────────────┘
no
┌──────────────▼──────────────────────────┐
│ outputs contain other lightning script? ├──┐
└──────────────┬──────────────────────────┘ │
no yes
┌──────────────▼─────────────┐ │
│ sequence starts with 0x80 │ ┌────────▼────────┐
│ and ├──────► force close = 2 │
│ locktime starts with 0x20? │ └─────────────────┘
└──────────────┬─────────────┘
no
┌─────────▼────────┐
│ mutual close = 1 │
└──────────────────┘
*/ */
private async $runClosedChannelsForensics(): Promise<void> { private async $runClosedChannelsForensics(): Promise<void> {
@@ -326,10 +344,6 @@ class NetworkSyncService {
lightningScriptReasons.push(lightningScript); lightningScriptReasons.push(lightningScript);
} }
} }
if (lightningScriptReasons.length === outspends.length
&& lightningScriptReasons.filter((r) => r === 1).length === outspends.length) {
reason = 1;
} else {
const filteredReasons = lightningScriptReasons.filter((r) => r !== 1); const filteredReasons = lightningScriptReasons.filter((r) => r !== 1);
if (filteredReasons.length) { if (filteredReasons.length) {
if (filteredReasons.some((r) => r === 2 || r === 4)) { if (filteredReasons.some((r) => r === 2 || r === 4)) {
@@ -357,7 +371,6 @@ class NetworkSyncService {
reason = 1; reason = 1;
} }
} }
}
if (reason) { if (reason) {
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]);