Skip to content

Commit

Permalink
test: fix tests for new bitcoin-ffi types
Browse files Browse the repository at this point in the history
  • Loading branch information
thunderbiscuit committed Aug 16, 2024
1 parent b06cb6b commit 4fd2b24
Show file tree
Hide file tree
Showing 21 changed files with 961 additions and 569 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Test
import org.junit.runner.RunWith
import java.io.File
import kotlin.test.AfterTest
import kotlin.test.assertTrue
import java.io.File
import org.rustbitcoin.bitcoin.Network
import org.rustbitcoin.bitcoin.Amount

private const val SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
private const val TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ import org.junit.Test
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.runner.RunWith
import java.io.File
import kotlin.test.AfterTest
import kotlin.test.assertTrue
import java.io.File
import org.rustbitcoin.bitcoin.Network
import org.rustbitcoin.bitcoin.Amount

private const val SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
private const val TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import kotlin.test.Test
import kotlin.test.assertEquals
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.runner.RunWith
import org.rustbitcoin.bitcoin.Network

@RunWith(AndroidJUnit4::class)
class OfflineDescriptorTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ import kotlin.test.assertFalse
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import org.junit.runner.RunWith
import java.io.File
import kotlin.test.AfterTest
import java.io.File
import org.rustbitcoin.bitcoin.Network

@RunWith(AndroidJUnit4::class)
class OfflineWalletTest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.bitcoindevkit

import kotlin.test.Test
import org.rustbitcoin.bitcoin.Network

private const val SIGNET_ELECTRUM_URL = "ssl://mempool.space:60602"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package org.bitcoindevkit

import org.rustbitcoin.bitcoin.Script
import kotlin.test.Test
import org.rustbitcoin.bitcoin.Script
import org.rustbitcoin.bitcoin.Network

private const val SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
private const val TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.bitcoindevkit

import kotlin.test.Test
import org.rustbitcoin.bitcoin.Network

private const val SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
private const val TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package org.bitcoindevkit

import java.io.File
import kotlin.test.AfterTest
import kotlin.test.Test
import kotlin.test.assertTrue
import java.io.File
import org.rustbitcoin.bitcoin.Network
import org.rustbitcoin.bitcoin.Amount


private const val SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
private const val TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package org.bitcoindevkit

import java.io.File
import kotlin.test.AfterTest
import kotlin.test.Test
import kotlin.test.assertTrue
import java.io.File
import org.rustbitcoin.bitcoin.Amount
import org.rustbitcoin.bitcoin.Network

private const val SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
private const val TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.bitcoindevkit

import kotlin.test.Test
import kotlin.test.assertEquals
import org.rustbitcoin.bitcoin.Network

class OfflineDescriptorTest {
@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.bitcoindevkit

import kotlin.test.Test
import kotlin.test.assertEquals
import org.rustbitcoin.bitcoin.Network

class OfflinePersistenceTest {
private val persistenceFilePath = run {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package org.bitcoindevkit

import java.io.File
import kotlin.test.AfterTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue
import kotlin.test.assertFalse
import java.io.File
import org.rustbitcoin.bitcoin.Network

class OfflineWalletTest {
private val persistenceFilePath = run {
Expand Down
65 changes: 38 additions & 27 deletions bdk-python/tests/test_live_tx_builder.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
import bdkpython as bdk
from bdkpython import Descriptor
from bdkpython import KeychainKind
from bdkpython import FeeRate
from bdkpython import Wallet
from bdkpython import EsploraClient
from bdkpython import ScriptAmount
from bdkpython import FullScanRequest
from bdkpython import Address
from bdkpython import Psbt
from bdkpython import TxBuilder
from bdkpython.bitcoin import Network
from bdkpython.bitcoin import Amount
import unittest
import os

SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"

descriptor: bdk.Descriptor = bdk.Descriptor(
descriptor: Descriptor = Descriptor(
"wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/0/*)",
bdk.Network.TESTNET
Network.TESTNET
)
change_descriptor: bdk.Descriptor = bdk.Descriptor(
change_descriptor: Descriptor = Descriptor(
"wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/1/*)",
bdk.Network.TESTNET
Network.TESTNET
)

class LiveTxBuilderTest(unittest.TestCase):
Expand All @@ -21,17 +32,17 @@ def tearDown(self) -> None:
os.remove("./bdk_persistence.sqlite")

def test_tx_builder(self):
descriptor: bdk.Descriptor = bdk.Descriptor(
descriptor: Descriptor = Descriptor(
"wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/0/*)",
bdk.Network.SIGNET
Network.SIGNET
)
wallet: bdk.Wallet = bdk.Wallet(
wallet: Wallet = Wallet(
descriptor,
change_descriptor,
bdk.Network.SIGNET
Network.SIGNET
)
esplora_client: bdk.EsploraClient = bdk.EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: bdk.FullScanRequest = wallet.start_full_scan()
esplora_client: EsploraClient = EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: FullScanRequest = wallet.start_full_scan()
update = esplora_client.full_scan(
full_scan_request=full_scan_request,
stop_gap=10,
Expand All @@ -42,26 +53,26 @@ def test_tx_builder(self):
self.assertGreater(
wallet.balance().total.to_sat(),
0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(KeychainKind.EXTERNAL).address} and try again."
)

recipient = bdk.Address(
recipient = Address(
address="tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989",
network=bdk.Network.SIGNET
network=Network.SIGNET
)

psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=bdk.Amount.from_sat(4200)).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2)).finish(wallet)
psbt = TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=Amount.from_sat(4200)).fee_rate(fee_rate=FeeRate.from_sat_per_vb(2)).finish(wallet)

self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")

def complex_tx_builder(self):
wallet: bdk.Wallet = bdk.Wallet(
wallet: Wallet = Wallet(
descriptor,
change_descriptor,
bdk.Network.SIGNET
Network.SIGNET
)
esplora_client: bdk.EsploraClient = bdk.EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: bdk.FullScanRequest = wallet.start_full_scan()
esplora_client: EsploraClient = EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: FullScanRequest = wallet.start_full_scan()
update = esplora_client.full_scan(
full_scan_request=full_scan_request,
stop_gap=10,
Expand All @@ -72,23 +83,23 @@ def complex_tx_builder(self):
self.assertGreater(
wallet.balance().total.to_sat(),
0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(KeychainKind.EXTERNAL).address} and try again."
)

recipient1 = bdk.Address(
recipient1 = Address(
address="tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989",
network=bdk.Network.SIGNET
network=Network.SIGNET
)
recipient2 = bdk.Address(
recipient2 = Address(
address="tb1qw2c3lxufxqe2x9s4rdzh65tpf4d7fssjgh8nv6",
network=bdk.Network.SIGNET
network=Network.SIGNET
)
all_recipients = list(
bdk.ScriptAmount(recipient1.script_pubkey, 4200),
bdk.ScriptAmount(recipient2.script_pubkey, 4200)
ScriptAmount(recipient1.script_pubkey, 4200),
ScriptAmount(recipient2.script_pubkey, 4200)
)

psbt: bdk.Psbt = bdk.TxBuilder().set_recipients(all_recipients).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2)).enable_rbf().finish(wallet)
psbt: Psbt = TxBuilder().set_recipients(all_recipients).fee_rate(fee_rate=FeeRate.from_sat_per_vb(2)).enable_rbf().finish(wallet)
wallet.sign(psbt)

self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")
Expand Down
49 changes: 30 additions & 19 deletions bdk-python/tests/test_live_wallet.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,28 @@
import bdkpython as bdk
from bdkpython import Descriptor
from bdkpython import KeychainKind
from bdkpython import FeeRate
from bdkpython import Wallet
from bdkpython import EsploraClient
from bdkpython import FullScanRequest
from bdkpython import Address
from bdkpython import Psbt
from bdkpython import TxBuilder
from bdkpython.bitcoin import Script
from bdkpython.bitcoin import Network
from bdkpython.bitcoin import Amount
import unittest
import os

SIGNET_ESPLORA_URL = "http://signet.bitcoindevkit.net"
TESTNET_ESPLORA_URL = "https://esplora.testnet.kuutamo.cloud"

descriptor: bdk.Descriptor = bdk.Descriptor(
descriptor: Descriptor = Descriptor(
"wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/0/*)",
bdk.Network.TESTNET
Network.TESTNET
)
change_descriptor: bdk.Descriptor = bdk.Descriptor(
change_descriptor: Descriptor = Descriptor(
"wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/1/*)",
bdk.Network.TESTNET
Network.TESTNET
)

class LiveWalletTest(unittest.TestCase):
Expand All @@ -21,13 +32,13 @@ def tearDown(self) -> None:
os.remove("./bdk_persistence.sqlite")

def test_synced_balance(self):
wallet: bdk.Wallet = bdk.Wallet(
wallet: Wallet = Wallet(
descriptor,
change_descriptor,
bdk.Network.SIGNET
Network.SIGNET
)
esplora_client: bdk.EsploraClient = bdk.EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: bdk.FullScanRequest = wallet.start_full_scan()
esplora_client: EsploraClient = EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: FullScanRequest = wallet.start_full_scan()
update = esplora_client.full_scan(
full_scan_request=full_scan_request,
stop_gap=10,
Expand All @@ -38,7 +49,7 @@ def test_synced_balance(self):
self.assertGreater(
wallet.balance().total.to_sat(),
0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(KeychainKind.EXTERNAL).address} and try again."
)

print(f"Transactions count: {len(wallet.transactions())}")
Expand All @@ -51,13 +62,13 @@ def test_synced_balance(self):


def test_broadcast_transaction(self):
wallet: bdk.Wallet = bdk.Wallet(
wallet: Wallet = Wallet(
descriptor,
change_descriptor,
bdk.Network.SIGNET
Network.SIGNET
)
esplora_client: bdk.EsploraClient = bdk.EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: bdk.FullScanRequest = wallet.start_full_scan()
esplora_client: EsploraClient = EsploraClient(url = SIGNET_ESPLORA_URL)
full_scan_request: FullScanRequest = wallet.start_full_scan()
update = esplora_client.full_scan(
full_scan_request=full_scan_request,
stop_gap=10,
Expand All @@ -68,18 +79,18 @@ def test_broadcast_transaction(self):
self.assertGreater(
wallet.balance().total.to_sat(),
0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(KeychainKind.EXTERNAL).address} and try again."
)

recipient = bdk.Address(
recipient = Address(
address="tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989",
network=bdk.Network.SIGNET
network=Network.SIGNET
)

script: bdk.Script = recipient.script_pubkey
script: Script = recipient.script_pubkey
print(f"The script for address {recipient} is {script}")

psbt: bdk.Psbt = bdk.TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=bdk.Amount.from_sat(4200)).fee_rate(fee_rate=bdk.FeeRate.from_sat_per_vb(2)).finish(wallet)
psbt: Psbt = TxBuilder().add_recipient(script=recipient.script_pubkey(), amount=Amount.from_sat(4200)).fee_rate(fee_rate=FeeRate.from_sat_per_vb(2)).finish(wallet)
self.assertTrue(psbt.serialize().startswith("cHNi"), "The PSBT should start with cHNi")

walletDidSign = wallet.sign(psbt)
Expand Down
12 changes: 8 additions & 4 deletions bdk-python/tests/test_offline_descriptor.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
import bdkpython as bdk
from bdkpython import Descriptor
from bdkpython import Mnemonic
from bdkpython import DescriptorSecretKey
from bdkpython import KeychainKind
from bdkpython.bitcoin import Network
import unittest

class OfflineDescriptorTest(unittest.TestCase):

def test_descriptor_bip86(self):
mnemonic: bdk.Mnemonic = bdk.Mnemonic.from_string("space echo position wrist orient erupt relief museum myself grain wisdom tumble")
descriptor_secret_key: bdk.DescriptorSecretKey = bdk.DescriptorSecretKey(bdk.Network.TESTNET, mnemonic, None)
descriptor: bdk.Descriptor = bdk.Descriptor.new_bip86(descriptor_secret_key, bdk.KeychainKind.EXTERNAL, bdk.Network.TESTNET)
mnemonic: Mnemonic = Mnemonic.from_string("space echo position wrist orient erupt relief museum myself grain wisdom tumble")
descriptor_secret_key: DescriptorSecretKey = DescriptorSecretKey(Network.TESTNET, mnemonic, None)
descriptor: Descriptor = Descriptor.new_bip86(descriptor_secret_key, KeychainKind.EXTERNAL, Network.TESTNET)

self.assertEqual(
"tr([be1eec8f/86'/1'/0']tpubDCTtszwSxPx3tATqDrsSyqScPNnUChwQAVAkanuDUCJQESGBbkt68nXXKRDifYSDbeMa2Xg2euKbXaU3YphvGWftDE7ozRKPriT6vAo3xsc/0/*)#m7puekcx",
Expand Down
Loading

0 comments on commit 4fd2b24

Please sign in to comment.