Add Wallet list_unspent method

This commit is contained in:
Zoe Faltibà 2022-06-08 15:02:29 +02:00
parent 80ed21e4c9
commit 8f5ca7f0fc
No known key found for this signature in database
GPG Key ID: 05CB7E816D1A93A8
2 changed files with 80 additions and 0 deletions

View File

@ -149,6 +149,27 @@ callback interface Progress {
void update(f32 progress, string? message);
};
dictionary OutPoint {
string txid;
u32 vout;
};
dictionary TxOut {
u64 value;
string address;
};
enum KeychainKind {
"External",
"Internal",
};
dictionary LocalUtxo {
OutPoint outpoint;
TxOut txout;
KeychainKind keychain;
};
interface Wallet {
[Throws=BdkError]
constructor(string descriptor, string? change_descriptor, Network network, DatabaseConfig database_config);
@ -169,6 +190,9 @@ interface Wallet {
[Throws=BdkError]
void sync([ByRef] Blockchain blockchain, Progress? progress);
[Throws=BdkError]
sequence<LocalUtxo> list_unspent();
};
interface PartiallySignedBitcoinTransaction {

View File

@ -172,6 +172,57 @@ struct Wallet {
wallet_mutex: Mutex<BdkWallet<AnyDatabase>>,
}
pub struct OutPoint {
txid: String,
vout: u32,
}
pub struct TxOut {
value: u64,
address: String,
}
pub enum KeychainKind {
External = 0,
Internal = 1,
}
impl From<bdk::KeychainKind> for KeychainKind {
fn from(x: bdk::KeychainKind) -> KeychainKind {
match x {
bdk::KeychainKind::External => KeychainKind::External,
bdk::KeychainKind::Internal => KeychainKind::Internal,
}
}
}
pub struct LocalUtxo {
outpoint: OutPoint,
txout: TxOut,
keychain: KeychainKind,
}
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: KeychainKind::from(x.keychain),
}
}
}
pub trait Progress: Send + Sync + 'static {
fn update(&self, progress: f32, message: Option<String>);
}
@ -283,6 +334,11 @@ 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 {