diff --git a/bdk-jvm/lib/src/test/kotlin/org/bitcoindevkit/OfflinePersistenceTest.kt b/bdk-jvm/lib/src/test/kotlin/org/bitcoindevkit/OfflinePersistenceTest.kt new file mode 100644 index 0000000..2a84f1a --- /dev/null +++ b/bdk-jvm/lib/src/test/kotlin/org/bitcoindevkit/OfflinePersistenceTest.kt @@ -0,0 +1,45 @@ +package org.bitcoindevkit + +import kotlin.test.Test +import kotlin.test.assertEquals + +class OfflinePersistenceTest { + private val persistenceFilePath = run { + val currentDirectory = System.getProperty("user.dir") + val dbFileName = "pre_existing_wallet_persistence_test.sqlite" + "$currentDirectory/src/test/resources/$dbFileName" + } + private val descriptor: Descriptor = Descriptor( + "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/0/*)", + Network.SIGNET + ) + private val changeDescriptor: Descriptor = Descriptor( + "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/1/*)", + Network.SIGNET + ) + + @Test + fun testPersistence() { + val sqliteStore: SqliteStore = SqliteStore(persistenceFilePath) + val initialChangeSet: ChangeSet? = sqliteStore.read() + requireNotNull(initialChangeSet) { "ChangeSet should not be null after loading a valid database" } + + val wallet: Wallet = Wallet.newOrLoad( + descriptor, + changeDescriptor, + initialChangeSet, + Network.SIGNET, + ) + val addressInfo: AddressInfo = wallet.revealNextAddress(KeychainKind.EXTERNAL) + println("Address: $addressInfo") + + assertEquals( + expected = 7u, + actual = addressInfo.index, + ) + assertEquals( + expected = "tb1qan3lldunh37ma6c0afeywgjyjgnyc8uz975zl2", + actual = addressInfo.address.toString(), + ) + } +} diff --git a/bdk-jvm/lib/src/test/resources/pre_existing_wallet_persistence_test.sqlite b/bdk-jvm/lib/src/test/resources/pre_existing_wallet_persistence_test.sqlite new file mode 100644 index 0000000..f4eef74 Binary files /dev/null and b/bdk-jvm/lib/src/test/resources/pre_existing_wallet_persistence_test.sqlite differ diff --git a/bdk-swift/Tests/BitcoinDevKitTests/OfflinePersistenceTests.swift b/bdk-swift/Tests/BitcoinDevKitTests/OfflinePersistenceTests.swift new file mode 100644 index 0000000..dc1a89c --- /dev/null +++ b/bdk-swift/Tests/BitcoinDevKitTests/OfflinePersistenceTests.swift @@ -0,0 +1,40 @@ +import XCTest +@testable import BitcoinDevKit + +private let descriptor = try! Descriptor( + descriptor: "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/0/*)", + network: Network.signet +) +private let changeDescriptor = try! Descriptor( + descriptor: "wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/1/*)", + network: Network.signet +) + +final class OfflinePersistenceTests: XCTestCase { + var dbFilePath: URL! + + override func setUpWithError() throws { + super.setUp() + let currentDirectoryURL = URL(fileURLWithPath: FileManager.default.currentDirectoryPath) + let dbFileName = "pre_existing_wallet_persistence_test.sqlite" + dbFilePath = currentDirectoryURL.appendingPathComponent(dbFileName) + } + + func testPersistence() throws { + let sqliteStore = try! SqliteStore(path: dbFilePath.path) + let initialChangeSet = try! sqliteStore.read() + XCTAssertTrue(initialChangeSet != nil, "ChangeSet should not be nil after loading a valid database") + + let wallet = try Wallet.newOrLoad( + descriptor: descriptor, + changeDescriptor: changeDescriptor, + changeSet: initialChangeSet, + network: .signet + ) + let nextAddress: AddressInfo = wallet.revealNextAddress(keychain: KeychainKind.external) + print("Address: \(nextAddress)") + + XCTAssertTrue(nextAddress.address.description == "tb1qan3lldunh37ma6c0afeywgjyjgnyc8uz975zl2") + XCTAssertTrue(nextAddress.index == 7) + } +} diff --git a/bdk-swift/pre_existing_wallet_persistence_test.sqlite b/bdk-swift/pre_existing_wallet_persistence_test.sqlite new file mode 100644 index 0000000..f4eef74 Binary files /dev/null and b/bdk-swift/pre_existing_wallet_persistence_test.sqlite differ