Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bdk-ffi
Submodule bdk-ffi updated 65 files
+10 −10 .github/ISSUE_TEMPLATE/bug_report.md
+4 −4 .github/ISSUE_TEMPLATE/enhancement_request.md
+17 −12 .github/ISSUE_TEMPLATE/release.md
+39 −39 .github/ISSUE_TEMPLATE/summer_project.md
+9 −1 .github/pull_request_template.md
+20 −0 .github/release.yml
+0 −38 .github/workflows/android-api-docs.yaml
+1 −1 .github/workflows/audit.yaml
+58 −0 .github/workflows/changelog-label.yaml
+24 −0 .github/workflows/diff-check.yaml
+0 −29 .github/workflows/live-tests.yaml
+0 −45 .github/workflows/publish-android.yaml
+17 −0 .github/workflows/test-android.yaml
+1 −1 .github/workflows/test-swift.yaml
+2 −2 .github/workflows/trigger-external-bindings.yml
+65 −25 CHANGELOG.md
+24 −16 DEVELOPMENT_CYCLE.md
+10 −10 README.md
+2 −13 bdk-android/README.md
+1 −1 bdk-android/build.gradle.kts
+2 −1 bdk-android/lib/build.gradle.kts
+10 −0 bdk-android/lib/src/androidTest/assets/README.md
+ bdk-android/lib/src/androidTest/assets/wallet_pre_v1.sqlite3
+79 −0 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/CbfSyncTest.kt
+9 −7 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/Constants.kt
+2 −2 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/CreatingWalletTest.kt
+129 −33 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/DescriptorTest.kt
+55 −0 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/EsploraClientTest.kt
+53 −2 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/MnemonicTest.kt
+37 −2 bdk-android/lib/src/androidTest/kotlin/org/bitcoindevkit/PersistenceTest.kt
+1 −1 bdk-android/scripts/dev/build-dev-macos-aarch64.sh
+1 −1 bdk-android/scripts/release/build-release-linux-x86_64.sh
+1 −1 bdk-android/scripts/release/build-release-macos-aarch64.sh
+1 −1 bdk-android/scripts/release/build-release-windows-x86_64.sh
+159 −194 bdk-ffi/Cargo.lock
+3 −3 bdk-ffi/Cargo.toml
+4 −0 bdk-ffi/justfile
+20 −0 bdk-ffi/scripts/build-docs.sh
+15 −0 bdk-ffi/scripts/deploy-docs.sh
+11 −2 bdk-ffi/src/bitcoin.rs
+321 −24 bdk-ffi/src/descriptor.rs
+9 −3 bdk-ffi/src/electrum.rs
+44 −1 bdk-ffi/src/error.rs
+1 −1 bdk-ffi/src/esplora.rs
+94 −7 bdk-ffi/src/keys.rs
+37 −15 bdk-ffi/src/kyoto.rs
+45 −2 bdk-ffi/src/store.rs
+5 −24 bdk-ffi/src/tests/bitcoin.rs
+18 −31 bdk-ffi/src/tests/descriptor.rs
+77 −17 bdk-ffi/src/tests/keys.rs
+1 −0 bdk-ffi/src/tests/mod.rs
+64 −3 bdk-ffi/src/tests/tx_builder.rs
+107 −0 bdk-ffi/src/tests/wallet.rs
+155 −9 bdk-ffi/src/tx_builder.rs
+114 −6 bdk-ffi/src/types.rs
+111 −10 bdk-ffi/src/wallet.rs
+4 −4 bdk-swift/README.md
+2 −2 bdk-swift/Tests/BitcoinDevKitTests/LiveElectrumClientTests.swift
+2 −2 bdk-swift/Tests/BitcoinDevKitTests/LiveMemoryWalletTests.swift
+3 −3 bdk-swift/Tests/BitcoinDevKitTests/LiveTransactionTests.swift
+2 −2 bdk-swift/Tests/BitcoinDevKitTests/LiveTxBuilderTests.swift
+4 −4 bdk-swift/Tests/BitcoinDevKitTests/LiveWalletTests.swift
+44 −2 bdk-swift/Tests/BitcoinDevKitTests/OfflineDescriptorTests.swift
+9 −9 bdk-swift/Tests/BitcoinDevKitTests/OfflinePersistenceTests.swift
+6 −6 bdk-swift/Tests/BitcoinDevKitTests/OfflineWalletTests.swift
4 changes: 2 additions & 2 deletions examples/src/main/kotlin/MultisigTaprootTransaction.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ fun main() {
// that the wallet can only be spent via the script path (no key-path spending).
val externalDescriptor = Descriptor(
descriptor = "tr($UNSPENDABLE_KEY,multi_a(2,$alicePublicDescriptor,$bobPublicDescriptor,$mattPublicDescriptor))",
network = Network.REGTEST
networkKind = NetworkKind.TEST
)
val changeDescriptor = Descriptor(
descriptor = "tr($UNSPENDABLE_KEY,multi_a(2,$aliceChangeDescriptor,$bobChangeDescriptor,$mattChangeDescriptor))",
network = Network.REGTEST
networkKind = NetworkKind.TEST
)

// Create multisig wallet (reuse shared persistence helper)
Expand Down
6 changes: 3 additions & 3 deletions examples/src/main/kotlin/MultisigTransaction.kt
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ fun main() {
// Define the descriptors for a multisig wallet with Alice, Bob and Matt's public descriptors.
val externalDescriptor = Descriptor(
"wsh(multi(2,$alicePublicDescriptor,$bobPublicDescriptor,$mattPublicDescriptor))",
Network.REGTEST
NetworkKind.TEST
)
val changeDescriptor = Descriptor(
"wsh(multi(2,$aliceChangeDescriptor,$bobChangeDescriptor,$mattChangeDescriptor))",
Network.REGTEST
NetworkKind.TEST
)

//Create multisig wallet
Expand Down Expand Up @@ -144,7 +144,7 @@ fun esploraFullScanWallet(
fun getNewWallet(script: ActiveWalletScriptType, network: Network): Wallet {
val (descriptor, changeDescriptor) = createDescriptorsFromBip32RootKey(
script,
network
NetworkKind.TEST
)
val connection: Persister = Persister.newSqlite(generateUniquePersistenceFilePath())
val wallet = Wallet(descriptor, changeDescriptor, network, connection)
Expand Down
6 changes: 3 additions & 3 deletions examples/src/main/kotlin/WalletSetupBip32.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import java.nio.file.Paths
fun main(){
val (descriptor, changeDescriptor) = createDescriptorsFromBip32RootKey(
ActiveWalletScriptType.P2WPKH,
Network.REGTEST
NetworkKind.TEST
)
println("Descriptor: $descriptor")
println("Change descriptor: $changeDescriptor")
Expand All @@ -24,7 +24,7 @@ fun main(){

fun createDescriptorsFromBip32RootKey (
activeWalletScriptType: ActiveWalletScriptType,
network: Network) : Array<Descriptor>{
network: NetworkKind) : Array<Descriptor>{
val mnemonic = Mnemonic(WordCount.WORDS12)
val bip32ExtendedRootKey = DescriptorSecretKey(network, mnemonic, null)
println("Bip32 root key: $bip32ExtendedRootKey")
Expand All @@ -48,7 +48,7 @@ fun createDescriptorsFromBip32RootKey (
fun createScriptAppropriateDescriptor(
scriptType: ActiveWalletScriptType,
bip32ExtendedRootKey: DescriptorSecretKey,
network: Network,
network: NetworkKind,
keychain: KeychainKind,
): Descriptor {
return when (scriptType) {
Expand Down
20 changes: 10 additions & 10 deletions lib/src/test/kotlin/org/bitcoindevkit/Constants.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ const val BIP86_MAIN_MULTIPATH = "86h/0h/0h/<0;1>"
// 4. Descriptors
// These are also generated from the MNEMONIC_AWESOME mnemonic. The descriptors with the TEST prefix are valid for
// Regtest, Signet, Testnet3, and Testnet4. The descriptors with the MAIN prefix are valid for Mainnet.
val TEST_BIP84_DESCRIPTOR = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", Network.TESTNET4)
val TEST_BIP84_CHANGE_DESCRIPTOR = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_CHANGE_PATH/*)", Network.TESTNET4)
val TEST_BIP86_DESCRIPTOR = Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", Network.TESTNET4)
val TEST_BIP86_CHANGE_DESCRIPTOR = Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_CHANGE_PATH/*)", Network.TESTNET4)
val TEST_DEFINITE_DESCRIPTOR_0 = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/0)", Network.TESTNET4)
val TEST_DEFINITE_DESCRIPTOR_1 = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/1)", Network.TESTNET4)
val TEST_MULTIPATH_DESCRIPTOR = Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", Network.TESTNET4)

val MAIN_BIP86_DESCRIPTOR = Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", Network.BITCOIN)
val MAIN_BIP86_CHANGE_DESCRIPTOR = Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_TEST_CHANGE_PATH/*)", Network.BITCOIN)
val TEST_BIP84_DESCRIPTOR = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
val TEST_BIP84_CHANGE_DESCRIPTOR = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_CHANGE_PATH/*)", NetworkKind.TEST)
val TEST_BIP86_DESCRIPTOR = Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
val TEST_BIP86_CHANGE_DESCRIPTOR = Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_CHANGE_PATH/*)", NetworkKind.TEST)
val TEST_DEFINITE_DESCRIPTOR_0 = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/0)", NetworkKind.TEST)
val TEST_DEFINITE_DESCRIPTOR_1 = Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/1)", NetworkKind.TEST)
val TEST_MULTIPATH_DESCRIPTOR = Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", NetworkKind.TEST)

val MAIN_BIP86_DESCRIPTOR = Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", NetworkKind.MAIN)
val MAIN_BIP86_CHANGE_DESCRIPTOR = Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_TEST_CHANGE_PATH/*)", NetworkKind.MAIN)


//Regtest URLs for testing. Defaults for regtest-toolbox
Expand Down
44 changes: 22 additions & 22 deletions lib/src/test/kotlin/org/bitcoindevkit/DescriptorTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,38 @@ class DescriptorTest {
inner class Success {
@Test
fun `Create extended WPKH descriptors for all networks`() {
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", Network.REGTEST)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", Network.TESTNET)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", Network.TESTNET4)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", Network.SIGNET)
Descriptor("wpkh($MAIN_EXTENDED_PRIVKEY/$BIP84_MAIN_RECEIVE_PATH/*)", Network.BITCOIN)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("wpkh($TEST_EXTENDED_PRIVKEY/$BIP84_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("wpkh($MAIN_EXTENDED_PRIVKEY/$BIP84_MAIN_RECEIVE_PATH/*)", NetworkKind.MAIN)
}

@Test
fun `Create extended TR descriptors for all networks`() {
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", Network.REGTEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", Network.TESTNET)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", Network.TESTNET4)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", Network.SIGNET)
Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_MAIN_RECEIVE_PATH/*)", Network.BITCOIN)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/*)", NetworkKind.TEST)
Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_MAIN_RECEIVE_PATH/*)", NetworkKind.MAIN)
}

@Test
fun `Create non-extended descriptors for all networks`() {
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", Network.REGTEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", Network.TESTNET)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", Network.TESTNET4)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", Network.SIGNET)
Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_MAIN_RECEIVE_PATH/0)", Network.BITCOIN)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_RECEIVE_PATH/0)", NetworkKind.TEST)
Descriptor("tr($MAIN_EXTENDED_PRIVKEY/$BIP86_MAIN_RECEIVE_PATH/0)", NetworkKind.MAIN)
}

@Test
fun `Create descriptors from multipath public descriptor strings`() {
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", Network.REGTEST)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", Network.TESTNET)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", Network.TESTNET4)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", Network.SIGNET)
Descriptor("tr($MAIN_EXTENDED_PUBKEY/<0;1>/*)", Network.BITCOIN)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", NetworkKind.TEST)
Descriptor("tr($TEST_EXTENDED_PUBKEY/<0;1>/*)", NetworkKind.TEST)
Descriptor("tr($MAIN_EXTENDED_PUBKEY/<0;1>/*)", NetworkKind.MAIN)
}
}

Expand All @@ -52,15 +52,15 @@ class DescriptorTest {
assertFails {
Descriptor(
"addr(tb1qhjys9wxlfykmte7ftryptx975uqgd6kcm6a7z4)",
Network.TESTNET4
NetworkKind.TEST
)
}
}

@Test
fun `Descriptor cannot be created from multipath private descriptor string`() {
assertFails {
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_MULTIPATH/*)", Network.REGTEST)
Descriptor("tr($TEST_EXTENDED_PRIVKEY/$BIP86_TEST_MULTIPATH/*)", NetworkKind.TEST)
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/test/kotlin/org/bitcoindevkit/MnemonicTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ class MnemonicTest {
@Test
fun `Mnemonics create valid descriptors`() {
val mnemonic: Mnemonic = Mnemonic.fromString(MNEMONIC_AWESOME)
val descriptorSecretKey: DescriptorSecretKey = DescriptorSecretKey(Network.TESTNET4, mnemonic, null)
val descriptor: Descriptor = Descriptor.newBip86(descriptorSecretKey, KeychainKind.EXTERNAL, Network.TESTNET4)
val descriptorSecretKey: DescriptorSecretKey = DescriptorSecretKey(NetworkKind.TEST, mnemonic, null)
val descriptor: Descriptor = Descriptor.newBip86(descriptorSecretKey, KeychainKind.EXTERNAL, NetworkKind.TEST)

assertEquals(
expected = "tr([5bc5d243/86'/1'/0']tpubDC72NVP1RK5qwy2QdEfWphDsUBAfBu7oiV6jEFooHP8tGQGFVUeFxhgZxuk1j6EQRJ1YsS3th2RyDgReRqCL4zqp4jtuV2z7gbiqDH2iyUS/0/*)#xh44xwsp",
Expand Down
Loading