Add kotlin BlockchainConfig and DatabaseConfig
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
abstract class BlockchainConfig() : LibBase() {
|
||||
private val log: Logger = LoggerFactory.getLogger(BlockchainConfig::class.java)
|
||||
abstract val blockchainConfigT: LibJna.BlockchainConfig_t
|
||||
|
||||
protected fun finalize() {
|
||||
libJna.free_blockchain_config(blockchainConfigT)
|
||||
log.debug("$blockchainConfigT freed")
|
||||
}
|
||||
}
|
||||
|
||||
class ElectrumConfig(
|
||||
url: String,
|
||||
socks5: String?,
|
||||
retry: Short,
|
||||
timeout: Short
|
||||
) : BlockchainConfig() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(ElectrumConfig::class.java)
|
||||
override val blockchainConfigT = libJna.new_electrum_config(url, socks5, retry, timeout)
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
abstract class DatabaseConfig() : LibBase() {
|
||||
private val log: Logger = LoggerFactory.getLogger(DatabaseConfig::class.java)
|
||||
abstract val databaseConfigT: LibJna.DatabaseConfig_t
|
||||
|
||||
protected fun finalize() {
|
||||
libJna.free_database_config(databaseConfigT)
|
||||
log.debug("$databaseConfigT freed")
|
||||
}
|
||||
}
|
||||
|
||||
class MemoryConfig() : DatabaseConfig() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(MemoryConfig::class.java)
|
||||
override val databaseConfigT = libJna.new_memory_config()
|
||||
}
|
||||
|
||||
class SledConfig(path: String, treeName:String) : DatabaseConfig() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(SledConfig::class.java)
|
||||
override val databaseConfigT = libJna.new_sled_config(path, treeName)
|
||||
}
|
||||
@@ -48,6 +48,18 @@ interface LibJna : Library {
|
||||
// WalletRef_t * wallet_ref);
|
||||
fun free_wallet_ref(wallet_ref: WalletRef_t)
|
||||
|
||||
// typedef struct BlockchainConfig BlockchainConfig_t;
|
||||
class BlockchainConfig_t : PointerType {
|
||||
constructor() : super()
|
||||
constructor(pointer: Pointer) : super(pointer)
|
||||
}
|
||||
|
||||
// typedef struct DatabaseConfig DatabaseConfig_t;
|
||||
class DatabaseConfig_t : PointerType {
|
||||
constructor() : super()
|
||||
constructor(pointer: Pointer) : super(pointer)
|
||||
}
|
||||
|
||||
// typedef struct WalletResult WalletResult_t;
|
||||
class WalletResult_t : PointerType {
|
||||
constructor() : super()
|
||||
@@ -55,13 +67,15 @@ interface LibJna : Library {
|
||||
}
|
||||
|
||||
// WalletResult_t * new_wallet_result (
|
||||
// char const * name,
|
||||
// char const * descriptor,
|
||||
// char const * change_descriptor);
|
||||
// char const * change_descriptor,
|
||||
// BlockchainConfig_t const * blockchain_config,
|
||||
// DatabaseConfig_t const * database_config);
|
||||
fun new_wallet_result(
|
||||
name: String,
|
||||
descriptor: String,
|
||||
changeDescriptor: String?
|
||||
changeDescriptor: String?,
|
||||
blockchainConfig: BlockchainConfig_t,
|
||||
databaseConfig: DatabaseConfig_t,
|
||||
): WalletResult_t
|
||||
|
||||
// char * get_wallet_err (
|
||||
@@ -87,4 +101,32 @@ interface LibJna : Library {
|
||||
// void free_string (
|
||||
// char * string);
|
||||
fun free_string(string: Pointer?)
|
||||
|
||||
// BlockchainConfig_t * new_electrum_config (
|
||||
// char const * url,
|
||||
// char const * socks5,
|
||||
// int16_t retry,
|
||||
// int16_t timeout);
|
||||
fun new_electrum_config(
|
||||
url: String,
|
||||
socks5: String?,
|
||||
retry: Short,
|
||||
timeout: Short
|
||||
): BlockchainConfig_t
|
||||
|
||||
// void free_blockchain_config (
|
||||
// BlockchainConfig_t * blockchain_config);
|
||||
fun free_blockchain_config( blockchain_config: BlockchainConfig_t)
|
||||
|
||||
// DatabaseConfig_t * new_memory_config (void);
|
||||
fun new_memory_config(): DatabaseConfig_t
|
||||
|
||||
// DatabaseConfig_t * new_sled_config (
|
||||
// char const * path,
|
||||
// char const * tree_name);
|
||||
fun new_sled_config(path: String, tree_name: String): DatabaseConfig_t
|
||||
|
||||
// void free_database_config (
|
||||
// DatabaseConfig_t * database_config);
|
||||
fun free_database_config( database_config: DatabaseConfig_t)
|
||||
}
|
||||
|
||||
@@ -4,15 +4,16 @@ import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
class Wallet constructor(
|
||||
name: String,
|
||||
descriptor: String,
|
||||
changeDescriptor: String?,
|
||||
blockchainConfig: BlockchainConfig,
|
||||
databaseConfig: DatabaseConfig,
|
||||
) : LibBase() {
|
||||
|
||||
val log: Logger = LoggerFactory.getLogger(Wallet::class.java)
|
||||
|
||||
private val walletResult =
|
||||
WalletResult(libJna.new_wallet_result(name, descriptor, changeDescriptor))
|
||||
WalletResult(libJna.new_wallet_result(descriptor, changeDescriptor, blockchainConfig.blockchainConfigT, databaseConfig.databaseConfigT))
|
||||
private val walletRefT = walletResult.value()
|
||||
|
||||
fun sync() {
|
||||
|
||||
@@ -22,17 +22,21 @@ abstract class LibTest : LibBase() {
|
||||
|
||||
@Test
|
||||
fun walletResultError() {
|
||||
val blockchainConfig = ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5, 30)
|
||||
val databaseConfig = MemoryConfig()
|
||||
val jnaException = assertThrows(JnaException::class.java) {
|
||||
Wallet("bad", "bad", "bad")
|
||||
Wallet("bad", "bad", blockchainConfig, databaseConfig)
|
||||
}
|
||||
assertEquals(jnaException.err, JnaError.Descriptor)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun walletResultFinalize() {
|
||||
val blockchainConfig = ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5, 30)
|
||||
val databaseConfig = MemoryConfig()
|
||||
val names = listOf("one", "two", "three")
|
||||
names.map {
|
||||
val wallet = Wallet(it, desc, change)
|
||||
val wallet = Wallet(desc, change, blockchainConfig, databaseConfig)
|
||||
assertNotNull(wallet)
|
||||
}
|
||||
System.gc()
|
||||
@@ -41,14 +45,18 @@ abstract class LibTest : LibBase() {
|
||||
|
||||
@Test
|
||||
fun walletSync() {
|
||||
val wallet = Wallet(name, desc, change)
|
||||
val blockchainConfig = ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5, 30)
|
||||
val databaseConfig = MemoryConfig()
|
||||
val wallet = Wallet(desc, change, blockchainConfig, databaseConfig)
|
||||
assertNotNull(wallet)
|
||||
wallet.sync()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun walletNewAddress() {
|
||||
val wallet = Wallet(name, desc, change)
|
||||
val blockchainConfig = ElectrumConfig("ssl://electrum.blockstream.info:60002", null, 5, 30)
|
||||
val databaseConfig = MemoryConfig()
|
||||
val wallet = Wallet(desc, change, blockchainConfig, databaseConfig)
|
||||
assertNotNull(wallet)
|
||||
val address = wallet.getAddress()
|
||||
assertNotNull(address)
|
||||
|
||||
Reference in New Issue
Block a user