From 97b6afce7c6beb9b6de33780a8f388feeaf102ec Mon Sep 17 00:00:00 2001 From: pm47 Date: Thu, 21 Mar 2024 11:47:37 +0100 Subject: [PATCH] name db with chain+nodeId --- src/commonMain/kotlin/fr/acinq/lightning/bin/Api.kt | 10 ++++++---- .../kotlin/fr/acinq/lightning/bin/Expects.kt | 4 +++- src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt | 4 +--- .../fr/acinq/lightning/bin/json/JsonSerializers.kt | 5 +++-- .../phoenixdb/fr/acinq/phoenix/db/Channels.sq | 1 + src/jvmMain/kotlin/fr/acinq/lightning/bin/Actuals.kt | 6 ++++-- .../kotlin/fr/acinq/lightning/bin/Actuals.kt | 6 ++++-- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/commonMain/kotlin/fr/acinq/lightning/bin/Api.kt b/src/commonMain/kotlin/fr/acinq/lightning/bin/Api.kt index d232528..e1c8b17 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/bin/Api.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/bin/Api.kt @@ -12,11 +12,11 @@ import fr.acinq.lightning.NodeParams import fr.acinq.lightning.bin.db.SqlitePaymentsDb import fr.acinq.lightning.bin.db.WalletPaymentId import fr.acinq.lightning.bin.json.ApiType.* +import fr.acinq.lightning.bin.json.ApiType.Channel import fr.acinq.lightning.blockchain.fee.FeeratePerByte import fr.acinq.lightning.blockchain.fee.FeeratePerKw import fr.acinq.lightning.channel.ChannelCommand -import fr.acinq.lightning.channel.states.ChannelStateWithCommitments -import fr.acinq.lightning.channel.states.ClosingFeerates +import fr.acinq.lightning.channel.states.* import fr.acinq.lightning.io.Peer import fr.acinq.lightning.io.WrappedChannelCommand import fr.acinq.lightning.payment.Bolt11Invoice @@ -79,15 +79,17 @@ class Api(private val nodeParams: NodeParams, private val peer: Peer, private va authenticate { get("getinfo") { val info = NodeInfo( - version = BuildVersions.phoenixdVersion, nodeId = nodeParams.nodeId, - channels = peer.channels.values.map { Channel.from(it) } + channels = peer.channels.values.map { Channel.from(it) }, + chain = nodeParams.chain.name.lowercase(), + version = BuildVersions.phoenixdVersion ) call.respond(info) } get("getbalance") { val balance = peer.channels.values .filterIsInstance() + .filterNot { it is Closing || it is Closed } .map { it.commitments.active.first().availableBalanceForSend(it.commitments.params, it.commitments.changes) } .sum().truncateToSatoshi() call.respond(Balance(balance, nodeParams.feeCredit.value)) diff --git a/src/commonMain/kotlin/fr/acinq/lightning/bin/Expects.kt b/src/commonMain/kotlin/fr/acinq/lightning/bin/Expects.kt index 58e6787..c28c9d8 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/bin/Expects.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/bin/Expects.kt @@ -1,8 +1,10 @@ package fr.acinq.lightning.bin import app.cash.sqldelight.db.SqlDriver +import fr.acinq.bitcoin.Chain +import fr.acinq.bitcoin.PublicKey import okio.Path expect val homeDirectory: Path -expect fun createAppDbDriver(dir: Path): SqlDriver +expect fun createAppDbDriver(dir: Path, chain: Chain, nodeId: PublicKey): SqlDriver diff --git a/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt b/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt index d1ec266..b224797 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/bin/Main.kt @@ -182,8 +182,6 @@ class Phoenixd : CliktCommand() { terminal.println() } } - consoleLog(gray("version: ${BuildVersions.phoenixdVersion}")) - consoleLog(gray("lightning-kmp: ${BuildVersions.lightningKmpVersion}")) consoleLog(cyan("datadir: ${FileSystem.SYSTEM.canonicalize(datadir)}")) consoleLog(cyan("chain: $chain")) consoleLog(cyan("autoLiquidity: ${liquidityOptions.autoLiquidity}")) @@ -217,7 +215,7 @@ class Phoenixd : CliktCommand() { ) consoleLog(cyan("nodeid: ${nodeParams.nodeId}")) - val driver = createAppDbDriver(datadir) + val driver = createAppDbDriver(datadir, chain, nodeParams.nodeId) val database = PhoenixDatabase( driver = driver, lightning_outgoing_payment_partsAdapter = Lightning_outgoing_payment_parts.Adapter( diff --git a/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt b/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt index 49e0de6..4e187ab 100644 --- a/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt +++ b/src/commonMain/kotlin/fr/acinq/lightning/bin/json/JsonSerializers.kt @@ -57,9 +57,10 @@ sealed class ApiType { @Serializable data class NodeInfo( - val version: String, val nodeId: PublicKey, - val channels: List + val channels: List, + val chain: String, + val version: String ) @Serializable diff --git a/src/commonMain/sqldelight/phoenixdb/fr/acinq/phoenix/db/Channels.sq b/src/commonMain/sqldelight/phoenixdb/fr/acinq/phoenix/db/Channels.sq index 222f689..9933ed2 100644 --- a/src/commonMain/sqldelight/phoenixdb/fr/acinq/phoenix/db/Channels.sq +++ b/src/commonMain/sqldelight/phoenixdb/fr/acinq/phoenix/db/Channels.sq @@ -1,6 +1,7 @@ import kotlin.Boolean; PRAGMA foreign_keys = 1; +PRAGMA locking_mode = EXCLUSIVE; -- channels table -- note: boolean are stored as INTEGER, with 0=false diff --git a/src/jvmMain/kotlin/fr/acinq/lightning/bin/Actuals.kt b/src/jvmMain/kotlin/fr/acinq/lightning/bin/Actuals.kt index 5d6219e..b9ddbfd 100644 --- a/src/jvmMain/kotlin/fr/acinq/lightning/bin/Actuals.kt +++ b/src/jvmMain/kotlin/fr/acinq/lightning/bin/Actuals.kt @@ -2,14 +2,16 @@ package fr.acinq.lightning.bin import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver +import fr.acinq.bitcoin.Chain +import fr.acinq.bitcoin.PublicKey import fr.acinq.phoenix.db.PhoenixDatabase import okio.Path import okio.Path.Companion.toPath actual val homeDirectory: Path = System.getProperty("user.home").toPath() -actual fun createAppDbDriver(dir: Path): SqlDriver { - val path = dir / "phoenix.db" +actual fun createAppDbDriver(dir: Path, chain: Chain, nodeId: PublicKey): SqlDriver { + val path = dir / "phoenix.${chain.name.lowercase()}.${nodeId.toHex().take(6)}.db" val driver = JdbcSqliteDriver("jdbc:sqlite:$path") PhoenixDatabase.Schema.create(driver) return driver diff --git a/src/nativeMain/kotlin/fr/acinq/lightning/bin/Actuals.kt b/src/nativeMain/kotlin/fr/acinq/lightning/bin/Actuals.kt index 19c4929..56bb503 100644 --- a/src/nativeMain/kotlin/fr/acinq/lightning/bin/Actuals.kt +++ b/src/nativeMain/kotlin/fr/acinq/lightning/bin/Actuals.kt @@ -3,6 +3,8 @@ package fr.acinq.lightning.bin import app.cash.sqldelight.db.SqlDriver import app.cash.sqldelight.driver.native.NativeSqliteDriver import fr.acinq.phoenix.db.PhoenixDatabase +import fr.acinq.bitcoin.Chain +import fr.acinq.bitcoin.PublicKey import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.toKString import okio.Path @@ -13,8 +15,8 @@ import platform.posix.setenv @OptIn(ExperimentalForeignApi::class) actual val homeDirectory: Path = setenv("KTOR_LOG_LEVEL", "WARN", 1).let { getenv("HOME")?.toKString()!!.toPath() } -actual fun createAppDbDriver(dir: Path): SqlDriver { - return NativeSqliteDriver(PhoenixDatabase.Schema, "phoenix.db", +actual fun createAppDbDriver(dir: Path, chain: Chain, nodeId: PublicKey): SqlDriver { + return NativeSqliteDriver(PhoenixDatabase.Schema, "phoenix.${chain.name.lowercase()}.${nodeId.toHex().take(6)}.db", onConfiguration = { it.copy(extendedConfig = it.extendedConfig.copy(basePath = dir.toString())) } ) }