feat: use display trait for string representation of address type

This commit is contained in:
thunderbiscuit 2024-06-04 13:25:41 -04:00
parent 53afd9c238
commit efef60082b
No known key found for this signature in database
GPG Key ID: 88253696EB836462
19 changed files with 33 additions and 31 deletions

View File

@ -36,7 +36,7 @@ class LiveTxBuilderTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET) val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET)

View File

@ -53,7 +53,7 @@ class OfflineWalletTest {
assertEquals( assertEquals(
expected = "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e", expected = "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e",
actual = addressInfo.address.asString() actual = addressInfo.address.toString()
) )
} }

View File

@ -611,6 +611,7 @@ enum WordCount {
"Words24", "Words24",
}; };
[Traits=(Display)]
interface Address { interface Address {
[Throws=AddressError] [Throws=AddressError]
constructor(string address, Network network); constructor(string address, Network network);
@ -621,8 +622,6 @@ interface Address {
string to_qr_uri(); string to_qr_uri();
string as_string();
boolean is_valid_for_network(Network network); boolean is_valid_for_network(Network network);
}; };

View File

@ -1,4 +1,5 @@
use crate::error::{AddressError, FeeRateError, PsbtError, PsbtParseError, TransactionError}; use crate::error::{AddressError, FeeRateError, PsbtError, PsbtParseError, TransactionError};
use std::fmt::Display;
use bdk_bitcoind_rpc::bitcoincore_rpc::jsonrpc::serde_json; use bdk_bitcoind_rpc::bitcoincore_rpc::jsonrpc::serde_json;
use bdk_wallet::bitcoin::address::{NetworkChecked, NetworkUnchecked}; use bdk_wallet::bitcoin::address::{NetworkChecked, NetworkUnchecked};
@ -100,10 +101,6 @@ impl Address {
self.0.to_qr_uri() self.0.to_qr_uri()
} }
pub fn as_string(&self) -> String {
self.0.to_string()
}
pub fn is_valid_for_network(&self, network: Network) -> bool { pub fn is_valid_for_network(&self, network: Network) -> bool {
let address_str = self.0.to_string(); let address_str = self.0.to_string();
if let Ok(unchecked_address) = address_str.parse::<BdkAddress<NetworkUnchecked>>() { if let Ok(unchecked_address) = address_str.parse::<BdkAddress<NetworkUnchecked>>() {
@ -114,6 +111,12 @@ impl Address {
} }
} }
impl Display for Address {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.0)
}
}
impl From<Address> for BdkAddress { impl From<Address> for BdkAddress {
fn from(address: Address) -> Self { fn from(address: Address) -> Self {
address.0 address.0

View File

@ -20,7 +20,7 @@ class LiveElectrumClientTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
println("Transactions count: ${wallet.transactions().count()}") println("Transactions count: ${wallet.transactions().count()}")

View File

@ -22,7 +22,7 @@ class LiveMemoryWalletTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
println("Transactions count: ${wallet.transactions().count()}") println("Transactions count: ${wallet.transactions().count()}")
@ -57,7 +57,7 @@ class LiveMemoryWalletTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
} }

View File

@ -21,7 +21,7 @@ class LiveTransactionTests {
println("Wallet balance: ${wallet.getBalance().total.toSat()}") println("Wallet balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
val transaction: Transaction = wallet.transactions().first().transaction val transaction: Transaction = wallet.transactions().first().transaction

View File

@ -34,7 +34,7 @@ class LiveTxBuilderTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET) val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET)
@ -61,7 +61,7 @@ class LiveTxBuilderTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
val recipient1: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET) val recipient1: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET)

View File

@ -34,7 +34,7 @@ class LiveWalletTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
println("Transactions count: ${wallet.transactions().count()}") println("Transactions count: ${wallet.transactions().count()}")
@ -59,7 +59,7 @@ class LiveWalletTest {
println("Balance: ${wallet.getBalance().total.toSat()}") println("Balance: ${wallet.getBalance().total.toSat()}")
assert(wallet.getBalance().total.toSat() > 0uL) { assert(wallet.getBalance().total.toSat() > 0uL) {
"Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address.asString()} and try again." "Wallet balance must be greater than 0! Please send funds to ${wallet.revealNextAddress(KeychainKind.EXTERNAL).address} and try again."
} }
val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET) val recipient: Address = Address("tb1qrnfslnrve9uncz9pzpvf83k3ukz22ljgees989", Network.SIGNET)

View File

@ -51,7 +51,7 @@ class OfflineWalletTest {
assertEquals( assertEquals(
expected = "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e", expected = "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e",
actual = addressInfo.address.asString() actual = addressInfo.address.toString()
) )
} }

View File

@ -35,7 +35,7 @@ class LiveTxBuilderTest(unittest.TestCase):
self.assertGreater( self.assertGreater(
wallet.get_balance().total.to_sat(), wallet.get_balance().total.to_sat(),
0, 0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address.as_string()} and try again." f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
) )
recipient = bdk.Address( recipient = bdk.Address(
@ -71,7 +71,7 @@ class LiveTxBuilderTest(unittest.TestCase):
self.assertGreater( self.assertGreater(
wallet.get_balance().total.to_sat(), wallet.get_balance().total.to_sat(),
0, 0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address.as_string()} and try again." f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
) )
recipient1 = bdk.Address( recipient1 = bdk.Address(

View File

@ -35,7 +35,7 @@ class LiveWalletTest(unittest.TestCase):
self.assertGreater( self.assertGreater(
wallet.get_balance().total.to_sat(), wallet.get_balance().total.to_sat(),
0, 0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address.as_string()} and try again." f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
) )
print(f"Transactions count: {len(wallet.transactions())}") print(f"Transactions count: {len(wallet.transactions())}")
@ -71,7 +71,7 @@ class LiveWalletTest(unittest.TestCase):
self.assertGreater( self.assertGreater(
wallet.get_balance().total.to_sat(), wallet.get_balance().total.to_sat(),
0, 0,
f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address.as_string()} and try again." f"Wallet balance must be greater than 0! Please send funds to {wallet.reveal_next_address(bdk.KeychainKind.EXTERNAL).address} and try again."
) )
recipient = bdk.Address( recipient = bdk.Address(

View File

@ -26,7 +26,7 @@ class OfflineWalletTest(unittest.TestCase):
self.assertFalse(address_info.address.is_valid_for_network(bdk.Network.REGTEST), "Address is valid for regtest network, but it shouldn't be") self.assertFalse(address_info.address.is_valid_for_network(bdk.Network.REGTEST), "Address is valid for regtest network, but it shouldn't be")
self.assertFalse(address_info.address.is_valid_for_network(bdk.Network.BITCOIN), "Address is valid for bitcoin network, but it shouldn't be") self.assertFalse(address_info.address.is_valid_for_network(bdk.Network.BITCOIN), "Address is valid for bitcoin network, but it shouldn't be")
self.assertEqual("tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e", address_info.address.as_string()) self.assertEqual("tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e", address_info.address.__str__())
def test_balance(self): def test_balance(self):
descriptor: bdk.Descriptor = bdk.Descriptor( descriptor: bdk.Descriptor = bdk.Descriptor(

View File

@ -24,7 +24,7 @@ final class LiveElectrumClientTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),

View File

@ -25,7 +25,7 @@ final class LiveMemoryWalletTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),
@ -68,7 +68,7 @@ final class LiveMemoryWalletTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),

View File

@ -24,7 +24,7 @@ final class LiveTransactionTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),

View File

@ -46,7 +46,7 @@ final class LiveTxBuilderTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),
@ -88,7 +88,7 @@ final class LiveTxBuilderTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),

View File

@ -46,7 +46,7 @@ final class LiveWalletTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),
@ -84,7 +84,7 @@ final class LiveWalletTests: XCTestCase {
) )
try wallet.applyUpdate(update: update) try wallet.applyUpdate(update: update)
let _ = try wallet.commit() let _ = try wallet.commit()
let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.asString() let address = try wallet.revealNextAddress(keychain: KeychainKind.external).address.description
XCTAssertGreaterThan( XCTAssertGreaterThan(
wallet.getBalance().total.toSat(), wallet.getBalance().total.toSat(),

View File

@ -45,7 +45,7 @@ final class OfflineWalletTests: XCTestCase {
XCTAssertFalse(addressInfo.address.isValidForNetwork(network: Network.bitcoin), XCTAssertFalse(addressInfo.address.isValidForNetwork(network: Network.bitcoin),
"Address is valid for bitcoin network, but it shouldn't be") "Address is valid for bitcoin network, but it shouldn't be")
XCTAssertEqual(addressInfo.address.asString(), "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e") XCTAssertEqual(addressInfo.address.description, "tb1qzg4mckdh50nwdm9hkzq06528rsu73hjxxzem3e")
} }
func testBalance() throws { func testBalance() throws {