From 907f67eb833722fb40860a3131648f8ab403f5e6 Mon Sep 17 00:00:00 2001 From: Steve Myers Date: Mon, 28 Mar 2022 17:20:30 -0700 Subject: [PATCH] Update bdk-ffi and add TxBuilder tests --- .../org/bitcoindevkit/AndroidLibTest.kt | 2 +- bdk-ffi | 2 +- .../kotlin/org/bitcoindevkit/JvmLibTest.kt | 39 ++++++++++++++++++- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/android/src/androidTest/kotlin/org/bitcoindevkit/AndroidLibTest.kt b/android/src/androidTest/kotlin/org/bitcoindevkit/AndroidLibTest.kt index 785cc7a..cf48aaa 100644 --- a/android/src/androidTest/kotlin/org/bitcoindevkit/AndroidLibTest.kt +++ b/android/src/androidTest/kotlin/org/bitcoindevkit/AndroidLibTest.kt @@ -115,7 +115,7 @@ class AndroidLibTest { @Test fun validPsbtSerde() { val validSerializedPsbt = "cHNidP8BAHUCAAAAASaBcTce3/KF6Tet7qSze3gADAVmy7OtZGQXE8pCFxv2AAAAAAD+////AtPf9QUAAAAAGXapFNDFmQPFusKGh2DpD9UhpGZap2UgiKwA4fUFAAAAABepFDVF5uM7gyxHBQ8k0+65PJwDlIvHh7MuEwAAAQD9pQEBAAAAAAECiaPHHqtNIOA3G7ukzGmPopXJRjr6Ljl/hTPMti+VZ+UBAAAAFxYAFL4Y0VKpsBIDna89p95PUzSe7LmF/////4b4qkOnHf8USIk6UwpyN+9rRgi7st0tAXHmOuxqSJC0AQAAABcWABT+Pp7xp0XpdNkCxDVZQ6vLNL1TU/////8CAMLrCwAAAAAZdqkUhc/xCX/Z4Ai7NK9wnGIZeziXikiIrHL++E4sAAAAF6kUM5cluiHv1irHU6m80GfWx6ajnQWHAkcwRAIgJxK+IuAnDzlPVoMR3HyppolwuAJf3TskAinwf4pfOiQCIAGLONfc0xTnNMkna9b7QPZzMlvEuqFEyADS8vAtsnZcASED0uFWdJQbrUqZY3LLh+GFbTZSYG2YVi/jnF6efkE/IQUCSDBFAiEA0SuFLYXc2WHS9fSrZgZU327tzHlMDDPOXMMJ/7X85Y0CIGczio4OFyXBl/saiK9Z9R5E5CVbIBZ8hoQDHAXR8lkqASECI7cr7vCWXRC+B3jv7NYfysb3mk6haTkzgHNEZPhPKrMAAAAAAAAA" - val psbt = PartiallySignedBitcoinTransaction.deserialize(validSerializedPsbt) + val psbt = PartiallySignedBitcoinTransaction(validSerializedPsbt) val psbtSerialized = psbt.serialize() assertEquals(psbtSerialized, validSerializedPsbt) } diff --git a/bdk-ffi b/bdk-ffi index 2f5ac99..bc43d2e 160000 --- a/bdk-ffi +++ b/bdk-ffi @@ -1 +1 @@ -Subproject commit 2f5ac99feeb8350aae0a22e1e55b23d3cb1aaeb0 +Subproject commit bc43d2eb1a74cf05d110f97ecc8e7c0a472bfec8 diff --git a/jvm/src/test/kotlin/org/bitcoindevkit/JvmLibTest.kt b/jvm/src/test/kotlin/org/bitcoindevkit/JvmLibTest.kt index 2f865c1..f738d21 100644 --- a/jvm/src/test/kotlin/org/bitcoindevkit/JvmLibTest.kt +++ b/jvm/src/test/kotlin/org/bitcoindevkit/JvmLibTest.kt @@ -109,10 +109,45 @@ class JvmLibTest { @Test fun validPsbtSerde() { - val validSerializedPsbt = "cHNidP8BAHUCAAAAASaBcTce3/KF6Tet7qSze3gADAVmy7OtZGQXE8pCFxv2AAAAAAD+////AtPf9QUAAAAAGXapFNDFmQPFusKGh2DpD9UhpGZap2UgiKwA4fUFAAAAABepFDVF5uM7gyxHBQ8k0+65PJwDlIvHh7MuEwAAAQD9pQEBAAAAAAECiaPHHqtNIOA3G7ukzGmPopXJRjr6Ljl/hTPMti+VZ+UBAAAAFxYAFL4Y0VKpsBIDna89p95PUzSe7LmF/////4b4qkOnHf8USIk6UwpyN+9rRgi7st0tAXHmOuxqSJC0AQAAABcWABT+Pp7xp0XpdNkCxDVZQ6vLNL1TU/////8CAMLrCwAAAAAZdqkUhc/xCX/Z4Ai7NK9wnGIZeziXikiIrHL++E4sAAAAF6kUM5cluiHv1irHU6m80GfWx6ajnQWHAkcwRAIgJxK+IuAnDzlPVoMR3HyppolwuAJf3TskAinwf4pfOiQCIAGLONfc0xTnNMkna9b7QPZzMlvEuqFEyADS8vAtsnZcASED0uFWdJQbrUqZY3LLh+GFbTZSYG2YVi/jnF6efkE/IQUCSDBFAiEA0SuFLYXc2WHS9fSrZgZU327tzHlMDDPOXMMJ/7X85Y0CIGczio4OFyXBl/saiK9Z9R5E5CVbIBZ8hoQDHAXR8lkqASECI7cr7vCWXRC+B3jv7NYfysb3mk6haTkzgHNEZPhPKrMAAAAAAAAA" - val psbt = PartiallySignedBitcoinTransaction.deserialize(validSerializedPsbt) + val validSerializedPsbt = + "cHNidP8BAHUCAAAAASaBcTce3/KF6Tet7qSze3gADAVmy7OtZGQXE8pCFxv2AAAAAAD+////AtPf9QUAAAAAGXapFNDFmQPFusKGh2DpD9UhpGZap2UgiKwA4fUFAAAAABepFDVF5uM7gyxHBQ8k0+65PJwDlIvHh7MuEwAAAQD9pQEBAAAAAAECiaPHHqtNIOA3G7ukzGmPopXJRjr6Ljl/hTPMti+VZ+UBAAAAFxYAFL4Y0VKpsBIDna89p95PUzSe7LmF/////4b4qkOnHf8USIk6UwpyN+9rRgi7st0tAXHmOuxqSJC0AQAAABcWABT+Pp7xp0XpdNkCxDVZQ6vLNL1TU/////8CAMLrCwAAAAAZdqkUhc/xCX/Z4Ai7NK9wnGIZeziXikiIrHL++E4sAAAAF6kUM5cluiHv1irHU6m80GfWx6ajnQWHAkcwRAIgJxK+IuAnDzlPVoMR3HyppolwuAJf3TskAinwf4pfOiQCIAGLONfc0xTnNMkna9b7QPZzMlvEuqFEyADS8vAtsnZcASED0uFWdJQbrUqZY3LLh+GFbTZSYG2YVi/jnF6efkE/IQUCSDBFAiEA0SuFLYXc2WHS9fSrZgZU327tzHlMDDPOXMMJ/7X85Y0CIGczio4OFyXBl/saiK9Z9R5E5CVbIBZ8hoQDHAXR8lkqASECI7cr7vCWXRC+B3jv7NYfysb3mk6haTkzgHNEZPhPKrMAAAAAAAAA" + val psbt = PartiallySignedBitcoinTransaction(validSerializedPsbt) val psbtSerialized = psbt.serialize() assertEquals(psbtSerialized, validSerializedPsbt) } + // TODO switch all tests to REGTEST, especially this one + @Test + fun walletTxBuilderBroadcast() { + val descriptor = + "wpkh([c1ed86ca/84'/1'/0'/0]tprv8hTkxK6QT7fCQx1wbuHuwbNh4STr2Ruz8RwEX7ymk6qnpixtbRG4T99mHxJwKTHPuKQ61heWrrpxZ8jpHj4sbisrQhDxnyx3HoQEZebtraN/*)" + val wallet = Wallet(descriptor, null, Network.TESTNET, databaseConfig, blockchainConfig) + wallet.sync(LogProgress(), null) + val balance = wallet.getBalance() + if (balance > 2000u) { + println("balance $balance") + // send coins back to https://bitcoinfaucet.uo1.net + val faucetAddress = "tb1ql7w62elx9ucw4pj5lgw4l028hmuw80sndtntxt" + val txBuilder = TxBuilder().addRecipient(faucetAddress, 1000u).feeRate(1.2f) + val psbt = txBuilder.build(wallet) + wallet.sign(psbt) + val txid = wallet.broadcast(psbt) + println("https://mempool.space/testnet/tx/$txid") + assertNotNull(txid) + } else { + val depositAddress = wallet.getLastUnusedAddress() + println("Send more testnet coins to: $depositAddress") + fail() + } + } + + @Test(expected = BdkException.Generic::class) + fun walletTxBuilderInvalidAddress() { + val descriptor = + "wpkh([c1ed86ca/84'/1'/0'/0]tprv8hTkxK6QT7fCQx1wbuHuwbNh4STr2Ruz8RwEX7ymk6qnpixtbRG4T99mHxJwKTHPuKQ61heWrrpxZ8jpHj4sbisrQhDxnyx3HoQEZebtraN/*)" + val wallet = Wallet(descriptor, null, Network.TESTNET, databaseConfig, blockchainConfig) + val txBuilder = TxBuilder().addRecipient("INVALID_ADDRESS", 1000u).feeRate(1.2f) + txBuilder.build(wallet) + } + }