Skip to content

Commit

Permalink
refactor: restructure balance
Browse files Browse the repository at this point in the history
  • Loading branch information
reez committed Dec 6, 2023
1 parent e5ded1a commit 84648c7
Show file tree
Hide file tree
Showing 15 changed files with 48 additions and 65 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 @@ -12,14 +12,13 @@ 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}")
val balance: Balance = wallet.getBalance()
println("Balance: $balance")

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

@Test
Expand Down
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 @@ -49,18 +49,18 @@ enum ChangeSpendPolicy {
"ChangeForbidden"
};

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 @@ -177,47 +177,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 @@ -55,11 +55,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 @@ -12,9 +12,9 @@ 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)
}

@Test
Expand Down
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/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)

def test_broadcast_transaction(self):
descriptor: bdk.Descriptor = bdk.Descriptor(
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,7 +20,7 @@ final class LiveWalletTests: XCTestCase {
)
try wallet.applyUpdate(update: update)

XCTAssertGreaterThan(wallet.getBalance().total(), UInt64(0))
XCTAssertGreaterThan(wallet.getBalance().total, UInt64(0))
}

func testBroadcastTransaction() throws {
Expand Down
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 84648c7

Please sign in to comment.