Skip to content

Commit

Permalink
refactor: restructure balance
Browse files Browse the repository at this point in the history
  • Loading branch information
reez committed Nov 15, 2023
1 parent f2cd561 commit b66524b
Show file tree
Hide file tree
Showing 16 changed files with 49 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ class LiveTxBuilderTest {
val esploraClient = EsploraClient("https://mempool.space/testnet/api")
val update = esploraClient.scan(wallet, 10uL, 1uL)
wallet.applyUpdate(update)
println("Balance: ${wallet.getBalance().total()}")
println("Balance: ${wallet.getBalance().total}")

assert(wallet.getBalance().total() > 0uL)
assert(wallet.getBalance().total > 0uL)

val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.TESTNET)
val psbt: PartiallySignedTransaction = TxBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,10 @@ class LiveWalletTest {
val descriptor: Descriptor = Descriptor("wpkh(tprv8ZgxMBicQKsPf2qfrEygW6fdYseJDDrVnDv26PH5BHdvSuG6ecCbHqLVof9yZcMoM31z9ur3tTYbSnr1WBqbGX97CbXcmp5H6qeMpyvx35B/84h/1h/0h/0/*)", Network.TESTNET)
val wallet: Wallet = Wallet.newNoPersist(descriptor, null, Network.TESTNET)
val esploraClient: EsploraClient = EsploraClient("https://mempool.space/testnet/api")
// val esploraClient = EsploraClient("https://blockstream.info/testnet/api")
val update = esploraClient.scan(wallet, 10uL, 1uL)
wallet.applyUpdate(update)
println("Balance: ${wallet.getBalance().total()}")
println("Balance: ${wallet.getBalance().total}")

assert(wallet.getBalance().total() > 0uL)
assert(wallet.getBalance().total > 0uL)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class OfflineWalletTest {

assertEquals(
expected = 0uL,
actual = wallet.getBalance().total()
actual = wallet.getBalance().total
)
}
}
14 changes: 7 additions & 7 deletions bdk-ffi/src/bdk.udl
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,18 @@ enum BdkError {
"Psbt",
};

interface Balance {
u64 immature();
dictionary Balance {
u64 immature;

u64 trusted_pending();
u64 trusted_pending;

u64 untrusted_pending();
u64 untrusted_pending;

u64 confirmed();
u64 confirmed;

u64 trusted_spendable();
u64 trusted_spendable;

u64 total();
u64 total;
};

dictionary AddressInfo {
Expand Down
58 changes: 22 additions & 36 deletions bdk-ffi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,47 +175,33 @@ impl From<&BdkAddressIndex> for AddressIndex {
// }

pub struct Balance {
pub inner: BdkBalance,
// All coinbase outputs not yet matured
pub immature: u64,
/// Unconfirmed UTXOs generated by a wallet tx
pub trusted_pending: u64,
/// Unconfirmed UTXOs received from an external wallet
pub untrusted_pending: u64,
/// Confirmed and immediately spendable balance
pub confirmed: u64,
/// Get sum of trusted_pending and confirmed coins
pub trusted_spendable: u64,
/// Get the whole balance visible to the wallet
pub total: u64,
}

impl Balance {
/// All coinbase outputs not yet matured.
fn immature(&self) -> u64 {
self.inner.immature
}

/// Unconfirmed UTXOs generated by a wallet tx.
fn trusted_pending(&self) -> u64 {
self.inner.trusted_pending
}

/// Unconfirmed UTXOs received from an external wallet.
fn untrusted_pending(&self) -> u64 {
self.inner.untrusted_pending
}

/// Confirmed and immediately spendable balance.
fn confirmed(&self) -> u64 {
self.inner.confirmed
}

/// Get sum of trusted_pending and confirmed coins.
fn trusted_spendable(&self) -> u64 {
self.inner.trusted_spendable()
}

/// Get the whole balance visible to the wallet.
fn total(&self) -> u64 {
self.inner.total()
impl From<BdkBalance> for Balance {
fn from(bdk_balance: BdkBalance) -> Self {
Balance {
immature: bdk_balance.immature,
trusted_pending: bdk_balance.trusted_pending,
untrusted_pending: bdk_balance.untrusted_pending,
confirmed: bdk_balance.confirmed,
trusted_spendable: bdk_balance.trusted_spendable(),
total: bdk_balance.total(),
}
}
}

// impl From<BdkBalance> for Balance {
// fn from(bdk_balance: BdkBalance) -> Self {
// Balance { inner: bdk_balance }
// }
// }

// /// A transaction output, which defines new coins to be created from old ones.
// #[derive(Debug, Clone)]
// pub struct TxOut {
Expand Down
8 changes: 3 additions & 5 deletions bdk-ffi/src/wallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,9 @@ impl Wallet {
.into()
}

// TODO 16: Why is the Arc required here?
pub fn get_balance(&self) -> Arc<Balance> {
let bdk_balance = self.get_wallet().get_balance();
let balance = Balance { inner: bdk_balance };
Arc::new(balance)
pub fn get_balance(&self) -> Balance {
let bdk_balance: bdk::wallet::Balance = self.get_wallet().get_balance();
Balance::from(bdk_balance)
}

pub fn apply_update(&self, update: Arc<Update>) -> Result<(), BdkError> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ class LiveTxBuilderTest {
val esploraClient = EsploraClient("https://mempool.space/testnet/api")
val update = esploraClient.scan(wallet, 10uL, 1uL)
wallet.applyUpdate(update)
println("Balance: ${wallet.getBalance().total()}")
println("Balance: ${wallet.getBalance().total}")

assert(wallet.getBalance().total() > 0uL)
assert(wallet.getBalance().total > 0uL)

val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.TESTNET)
val psbt: PartiallySignedTransaction = TxBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ class LiveWalletTest {
// val esploraClient = EsploraClient("https://blockstream.info/testnet/api")
val update = esploraClient.scan(wallet, 10uL, 1uL)
wallet.applyUpdate(update)
println("Balance: ${wallet.getBalance().total()}")
println("Balance: ${wallet.getBalance().total}")

assert(wallet.getBalance().total() > 0uL)
assert(wallet.getBalance().total > 0uL)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class OfflineWalletTest {

assertEquals(
expected = 0uL,
actual = wallet.getBalance().total()
actual = wallet.getBalance().total
)
}
}
2 changes: 1 addition & 1 deletion bdk-python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pip install --requirement requirements.txt
bash ./scripts/generate-linux.sh # here you should run the script appropriate for your platform
python setup.py bdist_wheel --verbose
pip install ./dist/bdkpython-<yourversion>.whl --force-reinstall
python -m unittest --verbose tests/test_bdk.py
python -m unittest --verbose
```

## Build the package
Expand Down
2 changes: 1 addition & 1 deletion bdk-python/tests/test_live_tx_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def test_tx_builder(self):
)
wallet.apply_update(update)

self.assertGreater(wallet.get_balance().total(), 0)
self.assertGreater(wallet.get_balance().total, 0)

recipient = bdk.Address(
address = "tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989",
Expand Down
2 changes: 1 addition & 1 deletion bdk-python/tests/test_live_wallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def test_synced_balance(self):
)
wallet.apply_update(update)

self.assertGreater(wallet.get_balance().total(), 0)
self.assertGreater(wallet.get_balance().total, 0)


if __name__ == '__main__':
Expand Down
2 changes: 1 addition & 1 deletion bdk-python/tests/test_offline_wallet.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def test_balance(self):
bdk.Network.TESTNET
)

self.assertEqual(wallet.get_balance().total(), 0)
self.assertEqual(wallet.get_balance().total, 0)

if __name__ == '__main__':
unittest.main()
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ final class LiveTxBuilderTests: XCTestCase {
)
try wallet.applyUpdate(update: update)

XCTAssertGreaterThan(wallet.getBalance().total(), UInt64(0), "Wallet must have positive balance, please add funds")
XCTAssertGreaterThan(wallet.getBalance().total, UInt64(0), "Wallet must have positive balance, please add funds")

let recipient: Address = try Address(address: "tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", network: .testnet)
let psbt: PartiallySignedTransaction = try TxBuilder()
Expand Down
2 changes: 1 addition & 1 deletion bdk-swift/Tests/BitcoinDevKitTests/LiveWalletTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ final class LiveWalletTests: XCTestCase {
)
try wallet.applyUpdate(update: update)

XCTAssertGreaterThan(wallet.getBalance().total(), UInt64(0))
XCTAssertGreaterThan(wallet.getBalance().total, UInt64(0))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,6 @@ final class OfflineWalletTests: XCTestCase {
network: .testnet
)

XCTAssertEqual(wallet.getBalance().total(), 0)
XCTAssertEqual(wallet.getBalance().total, 0)
}
}

0 comments on commit b66524b

Please sign in to comment.