Fix kotlin wallet struct access via JNA opaque pointer

This commit is contained in:
Steve Myers
2021-06-10 13:40:58 -07:00
parent 8deb39ac76
commit a5ad4cd0a5
10 changed files with 175 additions and 158 deletions

View File

@@ -10,18 +10,19 @@ import com.sun.jna.ptr.PointerByReference
// int32_t count;
//
// } Config_t;
//@Structure.FieldOrder("x", "y")
@Structure.FieldOrder("name", "count")
class Config_t : Structure() {
@JvmField
var name: String? = null
@JvmField
var count: NativeLong? = null
override fun getFieldOrder() = listOf("name", "count")
}
// typedef struct WalletPtr WalletPtr_t;
//class WalletPtr_t : PointerType()
class WalletPtr_t : PointerType {
constructor(): super()
constructor(pointer: Pointer): super(pointer)
}
interface Lib : Library {
@@ -38,10 +39,6 @@ interface Lib : Library {
// char * string);
fun free_string(string: String)
// void print_int (
// int64_t number);
fun print_int(number: Int)
// void print_config (
// Config_t const * config);
fun print_config(config: Config_t)
@@ -59,18 +56,18 @@ interface Lib : Library {
// char const * name,
// char const * descriptor,
// char const * change_descriptor);
//fun new_wallet(name: String, descriptor: String, changeDescriptor: String?): WalletPtr_t
fun new_wallet(name: String, descriptor: String, changeDescriptor: String?): WalletPtr_t
// void sync_wallet (
// WalletPtr_t * const * wallet);
//fun sync_wallet(wallet: WalletPtr_t)
//fun sync_wallet(wallet: WalletPtr_t)
fun sync_wallet(wallet: WalletPtr_t)
// char * new_address (
// WalletPtr_t * const * wallet);
//fun new_address(wallet: WalletPtr_t): String
fun new_address(wallet: WalletPtr_t): String
// void free_wallet (
// WalletPtr_t * wallet);
//fun free_wallet(wallet: WalletPtr_t)
fun free_wallet(wallet: WalletPtr_t)
}

View File

@@ -2,8 +2,6 @@ package org.bitcoindevkit.bdkjni
import com.sun.jna.Native
import com.sun.jna.NativeLong
import com.sun.jna.Pointer
import com.sun.jna.ptr.PointerByReference
import org.junit.Test
/**
@@ -43,26 +41,26 @@ class LibTest {
lib.free_config(config)
}
// @Test
// fun new_sync_free_wallet() {
// val name = "test_wallet"
// val desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"
// val change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"
//
// val wallet = lib.new_wallet(name, desc, change)
// println("wallet created in kotlin: $wallet")
// lib.sync_wallet(wallet)
// //lib.free_wallet(wallet)
// }
@Test
fun new_sync_free_wallet() {
val name = "test_wallet"
val desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"
val change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"
// @Test
// fun new_newaddress_wallet() {
// val name = "test_wallet"
// val desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"
// val change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"
//
// val config = lib.new_config("test test", NativeLong(Long.MAX_VALUE))
// lib.print_config(config)
// lib.free_config(config)
// }
val wallet = lib.new_wallet(name, desc, change)
lib.sync_wallet(wallet)
lib.free_wallet(wallet)
}
@Test
fun new_newaddress_wallet() {
val name = "test_wallet"
val desc = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/0/*)"
val change = "wpkh([c258d2e4/84h/1h/0h]tpubDDYkZojQFQjht8Tm4jsS3iuEmKjTiEGjG6KnuFNKKJb5A6ZUCUZKdvLdSDWofKi4ToRCwb9poe1XdqfUnP4jaJjCB2Zwv11ZLgSbnZSNecE/1/*)"
val wallet = lib.new_wallet(name, desc, change)
val address = lib.new_address(wallet)
println("address created from kotlin: $address")
lib.free_wallet(wallet)
}
}