From 413379cf5e125b9b7597fe237c9a6ffe452869a7 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 29 Jan 2026 11:05:45 +0100 Subject: [PATCH 1/2] Fix DB migration: only rollback Liquid data if needed --- backend/src/api/database-migration.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index b5ab0a81e..132b5588e 100644 --- a/backend/src/api/database-migration.ts +++ b/backend/src/api/database-migration.ts @@ -1179,17 +1179,24 @@ class DatabaseMigration { await this.updateToSchemaVersion(103); } - // reindex liquid federation addresses and txos, and add hardcoded federation addresses + // reindex liquid federation addresses and txos when needed, and add hardcoded federation addresses // (safe to make this conditional on the network since it doesn't change the database schema) if (databaseSchemaVersion < 105 && config.MEMPOOL.NETWORK === 'liquid') { - await this.$executeQuery('DELETE FROM elements_pegs WHERE block > 3686608'); - await this.$executeQuery('DELETE FROM federation_txos WHERE blocknumber > 929701'); // Hardcoded federation addresses await this.$executeQuery(`INSERT IGNORE INTO federation_addresses (bitcoinaddress) VALUES ('3G6neksSBMp51kHJ2if8SeDUrzT8iVETWT')`); await this.$executeQuery(`INSERT IGNORE INTO federation_addresses (bitcoinaddress) VALUES ('bc1qwnevjp8nsq7adu3hxlvdvslrf242q4vuavfg0y929jp2zntp3vgq7cq6z2')`); - await this.$executeQuery(`UPDATE federation_txos SET lastblockupdate = 929700 WHERE unspent = 1;`); - await this.$executeQuery(`UPDATE state SET number = 3686608 WHERE name = 'last_elements_block';`); - await this.$executeQuery(`UPDATE state SET number = 929700 WHERE name = 'last_bitcoin_block_audit';`); + + // Rollback only on up to date instances + const [stateRows]: any[] = await DB.query(`SELECT name, number FROM state WHERE name IN ('last_elements_block', 'last_bitcoin_block_audit')`); + const lastElementsBlock = Number(stateRows?.find((row: any) => row.name === 'last_elements_block')?.number ?? 0); + const lastBlockAudit = Number(stateRows?.find((row: any) => row.name === 'last_bitcoin_block_audit')?.number ?? 0); + if (lastElementsBlock > 3686608 && lastBlockAudit > 929700) { + await this.$executeQuery('DELETE FROM elements_pegs WHERE block > 3686608'); + await this.$executeQuery('DELETE FROM federation_txos WHERE blocknumber > 929701'); + await this.$executeQuery(`UPDATE state SET number = 3686608 WHERE name = 'last_elements_block';`); + await this.$executeQuery(`UPDATE state SET number = 929700 WHERE name = 'last_bitcoin_block_audit';`); + await this.$executeQuery(`UPDATE federation_txos SET lastblockupdate = 929700 WHERE unspent = 1;`); + } await this.updateToSchemaVersion(105); } } From aac84522cfaa63b3eb0181bbbfcb5a1500bed29c Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 29 Jan 2026 11:30:46 +0100 Subject: [PATCH 2/2] Update federation_txos before state --- backend/src/api/database-migration.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 132b5588e..a726858de 100644 --- a/backend/src/api/database-migration.ts +++ b/backend/src/api/database-migration.ts @@ -1193,9 +1193,9 @@ class DatabaseMigration { if (lastElementsBlock > 3686608 && lastBlockAudit > 929700) { await this.$executeQuery('DELETE FROM elements_pegs WHERE block > 3686608'); await this.$executeQuery('DELETE FROM federation_txos WHERE blocknumber > 929701'); + await this.$executeQuery(`UPDATE federation_txos SET lastblockupdate = 929700 WHERE unspent = 1;`); await this.$executeQuery(`UPDATE state SET number = 3686608 WHERE name = 'last_elements_block';`); await this.$executeQuery(`UPDATE state SET number = 929700 WHERE name = 'last_bitcoin_block_audit';`); - await this.$executeQuery(`UPDATE federation_txos SET lastblockupdate = 929700 WHERE unspent = 1;`); } await this.updateToSchemaVersion(105); }