-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Wallet list_unspent method #158
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,7 +15,8 @@ use bdk::miniscript::BareCtx; | |
use bdk::wallet::AddressIndex as BdkAddressIndex; | ||
use bdk::wallet::AddressInfo as BdkAddressInfo; | ||
use bdk::{ | ||
BlockTime, Error, FeeRate, SignOptions, SyncOptions as BdkSyncOptions, Wallet as BdkWallet, | ||
BlockTime, Error, FeeRate, KeychainKind, SignOptions, SyncOptions as BdkSyncOptions, | ||
Wallet as BdkWallet, | ||
}; | ||
use std::convert::{From, TryFrom}; | ||
use std::fmt; | ||
|
@@ -172,6 +173,51 @@ struct Wallet { | |
wallet_mutex: Mutex<BdkWallet<AnyDatabase>>, | ||
} | ||
|
||
pub struct OutPoint { | ||
txid: String, | ||
vout: u32, | ||
} | ||
|
||
pub struct TxOut { | ||
value: u64, | ||
address: String, | ||
} | ||
|
||
pub struct LocalUtxo { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The BDK version of this struct has a boolean I propose we either:
I suggest we go with (2) because to me that feels more forward-compatible. If ever we implement other features that use the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I also feel that (2) is a better choice here so just added the field |
||
outpoint: OutPoint, | ||
txout: TxOut, | ||
keychain: KeychainKind, | ||
is_spent: bool, | ||
} | ||
|
||
// This trait is used to convert the bdk TxOut type with field `script_pubkey: Script` | ||
// into the bdk-ffi TxOut type which has a field `address: String` instead | ||
trait NetworkLocalUtxo { | ||
fn from_utxo(x: &bdk::LocalUtxo, network: Network) -> LocalUtxo; | ||
} | ||
|
||
impl NetworkLocalUtxo for LocalUtxo { | ||
fn from_utxo(x: &bdk::LocalUtxo, network: Network) -> LocalUtxo { | ||
LocalUtxo { | ||
outpoint: OutPoint { | ||
txid: x.outpoint.txid.to_string(), | ||
vout: x.outpoint.vout, | ||
}, | ||
txout: TxOut { | ||
value: x.txout.value, | ||
address: bdk::bitcoin::util::address::Address::from_script( | ||
&x.txout.script_pubkey, | ||
network, | ||
) | ||
.unwrap() | ||
.to_string(), | ||
}, | ||
keychain: x.keychain, | ||
is_spent: x.is_spent, | ||
} | ||
} | ||
} | ||
|
||
pub trait Progress: Send + Sync + 'static { | ||
fn update(&self, progress: f32, message: Option<String>); | ||
} | ||
|
@@ -283,6 +329,14 @@ impl Wallet { | |
let transactions = self.get_wallet().list_transactions(true)?; | ||
Ok(transactions.iter().map(Transaction::from).collect()) | ||
} | ||
|
||
fn list_unspent(&self) -> Result<Vec<LocalUtxo>, Error> { | ||
let unspents = self.get_wallet().list_unspent()?; | ||
Ok(unspents | ||
.iter() | ||
.map(|u| LocalUtxo::from_utxo(u, self.get_network())) | ||
.collect()) | ||
} | ||
} | ||
|
||
pub struct ExtendedKeyInfo { | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At first glance it looks good to me, but it's still something I want to bring to the attention of other reviewers (@notmandatory, @artfuldev). The
TxOut
in BDK contains aScript
instead of an address of typeString
. I don't think we need theScript
at the moment, but it does change the shape of the API, so something to note.