Add classes to wrap LibJna native types
This commit is contained in:
43
bdk-kotlin/jvm/src/main/java/org/bitcoindevkit/bdk/Error.kt
Normal file
43
bdk-kotlin/jvm/src/main/java/org/bitcoindevkit/bdk/Error.kt
Normal file
@@ -0,0 +1,43 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
enum class Error {
|
||||
InvalidU32Bytes,
|
||||
Generic,
|
||||
ScriptDoesntHaveAddressForm,
|
||||
SingleRecipientMultipleOutputs,
|
||||
SingleRecipientNoInputs,
|
||||
NoRecipients,
|
||||
NoUtxosSelected,
|
||||
OutputBelowDustLimit,
|
||||
InsufficientFunds,
|
||||
BnBTotalTriesExceeded,
|
||||
BnBNoExactMatch,
|
||||
UnknownUtxo,
|
||||
TransactionNotFound,
|
||||
TransactionConfirmed,
|
||||
IrreplaceableTransaction,
|
||||
FeeRateTooLow,
|
||||
FeeTooLow,
|
||||
MissingKeyOrigin,
|
||||
Key,
|
||||
ChecksumMismatch,
|
||||
SpendingPolicyRequired,
|
||||
InvalidPolicyPathError,
|
||||
Signer,
|
||||
InvalidProgressValue,
|
||||
ProgressUpdateError,
|
||||
InvalidOutpoint,
|
||||
Descriptor,
|
||||
AddressValidator,
|
||||
Encode,
|
||||
Miniscript,
|
||||
Bip32,
|
||||
Secp256k1,
|
||||
Json,
|
||||
Hex,
|
||||
Psbt,
|
||||
Electrum,
|
||||
// Esplora
|
||||
// CompactFilters
|
||||
Sled,
|
||||
}
|
||||
@@ -35,10 +35,16 @@ interface LibJna : Library {
|
||||
// void free_string_result (
|
||||
// StringResult_t * string_result);
|
||||
fun free_string_result(string_result: StringResult_t)
|
||||
|
||||
// void free_string (
|
||||
// char * string);
|
||||
fun free_string(string: Pointer?)
|
||||
|
||||
// typedef struct WalletRef WalletRef_t;
|
||||
class WalletRef_t : PointerType {
|
||||
constructor() : super()
|
||||
constructor(pointer: Pointer) : super(pointer)
|
||||
}
|
||||
|
||||
// void free_wallet_ref (
|
||||
// WalletRef_t * wallet_ref);
|
||||
fun free_wallet_ref(wallet_ref: WalletRef_t)
|
||||
|
||||
// typedef struct WalletResult WalletResult_t;
|
||||
class WalletResult_t : PointerType {
|
||||
@@ -58,17 +64,25 @@ interface LibJna : Library {
|
||||
|
||||
// char * get_wallet_err (
|
||||
// WalletResult_t const * wallet_result);
|
||||
// TODO
|
||||
fun get_wallet_err(wallet_result: WalletResult_t): Pointer?
|
||||
|
||||
// WalletRef_t * get_wallet_ok (
|
||||
// WalletResult_t const * wallet_result);
|
||||
fun get_wallet_ok(wallet_result: WalletResult_t): WalletRef_t?
|
||||
|
||||
// VoidResult_t * sync_wallet (
|
||||
// WalletResult_t const * wallet_result);
|
||||
fun sync_wallet(wallet_result: WalletResult_t): VoidResult_t
|
||||
// WalletRef_t const * wallet_ref);
|
||||
fun sync_wallet(wallet_ref: Pointer): VoidResult_t
|
||||
|
||||
// StringResult_t * new_address (
|
||||
// WalletResult_t const * wallet_result);
|
||||
fun new_address(wallet_result: WalletResult_t): StringResult_t
|
||||
// WalletRef_t const * wallet_ref);
|
||||
fun new_address(wallet_ref: Pointer): StringResult_t
|
||||
|
||||
// void free_wallet_result (
|
||||
// WalletResult_t * wallet_result);
|
||||
fun free_wallet_result(wallet_result: WalletResult_t)
|
||||
|
||||
// void free_string (
|
||||
// char * string);
|
||||
fun free_string(string: Pointer?)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
class StringResult internal constructor(private val stringResultT: LibJna.StringResult_t) : LibBase() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(StringResult::class.java)
|
||||
|
||||
fun isErr(): Boolean {
|
||||
return libJna.get_string_err(stringResultT) != null
|
||||
}
|
||||
|
||||
fun err(): String? {
|
||||
val errPointer = libJna.get_string_err(stringResultT)
|
||||
val err = errPointer?.getString(0)
|
||||
libJna.free_string(errPointer)
|
||||
return err
|
||||
}
|
||||
|
||||
fun ok(): String? {
|
||||
val okPointer = libJna.get_string_ok(stringResultT)
|
||||
val ok = okPointer?.getString(0)
|
||||
libJna.free_string(okPointer)
|
||||
return ok
|
||||
}
|
||||
|
||||
protected fun finalize() {
|
||||
libJna.free_string_result(stringResultT)
|
||||
log.debug("StringResult_t freed")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
class VoidResult internal constructor(private val voidResultT: LibJna.VoidResult_t) : LibBase() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(VoidResult::class.java)
|
||||
|
||||
fun isErr(): Boolean {
|
||||
return libJna.get_void_err(voidResultT) != null
|
||||
}
|
||||
|
||||
fun err(): String? {
|
||||
val errPointer = libJna.get_void_err(voidResultT)
|
||||
val err = errPointer?.getString(0)
|
||||
libJna.free_string(errPointer)
|
||||
return err
|
||||
}
|
||||
|
||||
protected fun finalize() {
|
||||
libJna.free_void_result(voidResultT)
|
||||
log.debug("VoidResult_t freed")
|
||||
}
|
||||
}
|
||||
25
bdk-kotlin/jvm/src/main/java/org/bitcoindevkit/bdk/Wallet.kt
Normal file
25
bdk-kotlin/jvm/src/main/java/org/bitcoindevkit/bdk/Wallet.kt
Normal file
@@ -0,0 +1,25 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
class Wallet internal constructor(
|
||||
private val walletRefT: LibJna.WalletRef_t,
|
||||
) : LibBase() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(Wallet::class.java)
|
||||
|
||||
fun sync(): VoidResult {
|
||||
return VoidResult(libJna.sync_wallet(walletRefT.pointer))
|
||||
}
|
||||
|
||||
fun getAddress(): StringResult {
|
||||
return StringResult(libJna.new_address(walletRefT.pointer))
|
||||
}
|
||||
|
||||
protected fun finalize() {
|
||||
libJna.free_wallet_ref(walletRefT)
|
||||
log.debug("WalletRef_t freed")
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.bitcoindevkit.bdk
|
||||
|
||||
import org.slf4j.Logger
|
||||
import org.slf4j.LoggerFactory
|
||||
|
||||
class WalletResult(
|
||||
name: String,
|
||||
descriptor: String,
|
||||
changeDescriptor: String?,
|
||||
) : LibBase() {
|
||||
|
||||
private val log: Logger = LoggerFactory.getLogger(WalletResult::class.java)
|
||||
private val walletResultT = libJna.new_wallet_result(name, descriptor, changeDescriptor)
|
||||
|
||||
fun isErr(): Boolean {
|
||||
return libJna.get_wallet_err(walletResultT) != null
|
||||
}
|
||||
|
||||
fun err(): String? {
|
||||
val errPointer = libJna.get_wallet_err(walletResultT)
|
||||
val err = errPointer?.getString(0)
|
||||
libJna.free_string(errPointer)
|
||||
return err
|
||||
}
|
||||
|
||||
fun ok(): Wallet? {
|
||||
val okWalletRef = libJna.get_wallet_ok(walletResultT)
|
||||
return if (okWalletRef != null) Wallet(okWalletRef) else null
|
||||
}
|
||||
|
||||
protected fun finalize() {
|
||||
libJna.free_wallet_result(walletResultT)
|
||||
log.debug("WalletResult_t freed")
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user