name db with chain+nodeId

This commit is contained in:
pm47 2024-03-21 11:47:37 +01:00
parent fef5aadcf7
commit 97b6afce7c
No known key found for this signature in database
GPG Key ID: E434ED292E85643A
7 changed files with 22 additions and 14 deletions

View File

@ -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<ChannelStateWithCommitments>()
.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))

View File

@ -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

View File

@ -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(

View File

@ -57,9 +57,10 @@ sealed class ApiType {
@Serializable
data class NodeInfo(
val version: String,
val nodeId: PublicKey,
val channels: List<Channel>
val channels: List<Channel>,
val chain: String,
val version: String
)
@Serializable

View File

@ -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

View File

@ -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

View File

@ -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())) }
)
}