gui(daemon): add optional filter to list_coins
This commit is contained in:
parent
771bf16b58
commit
6c7ca2ccae
@ -240,7 +240,7 @@ impl App {
|
||||
|
||||
let info = daemon.get_info()?;
|
||||
// todo: filter coins to only have current coins.
|
||||
let coins = daemon.list_coins()?;
|
||||
let coins = daemon.list_coins(&[], &[])?;
|
||||
Ok(Cache {
|
||||
datadir_path,
|
||||
coins: coins.coins,
|
||||
|
||||
@ -162,7 +162,7 @@ impl State for CoinsPanel {
|
||||
Command::perform(
|
||||
async move {
|
||||
daemon1
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(|e| e.into())
|
||||
},
|
||||
@ -171,7 +171,7 @@ impl State for CoinsPanel {
|
||||
Command::perform(
|
||||
async move {
|
||||
let coins = daemon2
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(Error::from)?;
|
||||
let mut targets = HashSet::<LabelItem>::new();
|
||||
|
||||
@ -295,7 +295,7 @@ impl State for Home {
|
||||
Command::perform(
|
||||
async move {
|
||||
daemon2
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(|e| e.into())
|
||||
},
|
||||
|
||||
@ -173,7 +173,7 @@ impl PsbtState {
|
||||
daemon
|
||||
// TODO: filter for the outpoints in `tx.coins` when this is possible:
|
||||
// https://github.com/wizardsardine/liana/issues/677
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| {
|
||||
res.coins
|
||||
.iter()
|
||||
|
||||
@ -155,7 +155,7 @@ impl State for RecoveryPanel {
|
||||
return Command::perform(
|
||||
async move {
|
||||
let psbt = daemon.create_recovery(address, feerate_vb, sequence)?;
|
||||
let coins = daemon.list_coins().map(|res| res.coins)?;
|
||||
let coins = daemon.list_coins(&[], &[]).map(|res| res.coins)?;
|
||||
let coins = coins
|
||||
.into_iter()
|
||||
.filter(|coin| {
|
||||
@ -207,7 +207,7 @@ impl State for RecoveryPanel {
|
||||
Command::perform(
|
||||
async move {
|
||||
daemon
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(|e| e.into())
|
||||
},
|
||||
|
||||
@ -123,7 +123,7 @@ impl State for CreateSpendPanel {
|
||||
Command::perform(
|
||||
async move {
|
||||
daemon1
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(|e| e.into())
|
||||
},
|
||||
@ -132,7 +132,7 @@ impl State for CreateSpendPanel {
|
||||
Command::perform(
|
||||
async move {
|
||||
let coins = daemon
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(Error::from)?;
|
||||
let mut targets = HashSet::<LabelItem>::new();
|
||||
|
||||
@ -152,7 +152,7 @@ impl State for TransactionsPanel {
|
||||
daemon
|
||||
// TODO: filter for spending coins when this is possible:
|
||||
// https://github.com/wizardsardine/liana/issues/677
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| {
|
||||
res.coins
|
||||
.iter()
|
||||
@ -271,7 +271,7 @@ impl State for TransactionsPanel {
|
||||
Command::perform(
|
||||
async move {
|
||||
daemon2
|
||||
.list_coins()
|
||||
.list_coins(&[], &[])
|
||||
.map(|res| res.coins)
|
||||
.map_err(|e| e.into())
|
||||
},
|
||||
|
||||
@ -2,7 +2,7 @@ use std::collections::{HashMap, HashSet};
|
||||
use std::fmt::Debug;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
use liana::commands::CreateRecoveryResult;
|
||||
use liana::commands::{CoinStatus, CreateRecoveryResult};
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::json;
|
||||
@ -77,8 +77,18 @@ impl<C: Client + Debug> Daemon for Lianad<C> {
|
||||
self.call("getnewaddress", Option::<Request>::None)
|
||||
}
|
||||
|
||||
fn list_coins(&self) -> Result<ListCoinsResult, DaemonError> {
|
||||
self.call("listcoins", Option::<Request>::None)
|
||||
fn list_coins(
|
||||
&self,
|
||||
statuses: &[CoinStatus],
|
||||
outpoints: &[OutPoint],
|
||||
) -> Result<ListCoinsResult, DaemonError> {
|
||||
self.call(
|
||||
"listcoins",
|
||||
Some(vec![
|
||||
json!(statuses.iter().map(|s| s.to_arg()).collect::<Vec<&str>>()),
|
||||
json!(outpoints),
|
||||
]),
|
||||
)
|
||||
}
|
||||
|
||||
fn list_spend_txs(&self) -> Result<ListSpendResult, DaemonError> {
|
||||
|
||||
@ -3,7 +3,7 @@ use std::sync::Mutex;
|
||||
|
||||
use super::{model::*, Daemon, DaemonError};
|
||||
use liana::{
|
||||
commands::LabelItem,
|
||||
commands::{CoinStatus, LabelItem},
|
||||
config::Config,
|
||||
miniscript::bitcoin::{address, psbt::Psbt, Address, OutPoint, Txid},
|
||||
DaemonControl, DaemonHandle,
|
||||
@ -87,8 +87,12 @@ impl Daemon for EmbeddedDaemon {
|
||||
self.command(|daemon| Ok(daemon.get_new_address()))
|
||||
}
|
||||
|
||||
fn list_coins(&self) -> Result<ListCoinsResult, DaemonError> {
|
||||
self.command(|daemon| Ok(daemon.list_coins(&[], &[])))
|
||||
fn list_coins(
|
||||
&self,
|
||||
statuses: &[CoinStatus],
|
||||
outpoints: &[OutPoint],
|
||||
) -> Result<ListCoinsResult, DaemonError> {
|
||||
self.command(|daemon| Ok(daemon.list_coins(statuses, outpoints)))
|
||||
}
|
||||
|
||||
fn list_spend_txs(&self) -> Result<ListSpendResult, DaemonError> {
|
||||
|
||||
@ -8,7 +8,7 @@ use std::io::ErrorKind;
|
||||
use std::iter::FromIterator;
|
||||
|
||||
use liana::{
|
||||
commands::LabelItem,
|
||||
commands::{CoinStatus, LabelItem},
|
||||
config::Config,
|
||||
miniscript::bitcoin::{address, psbt::Psbt, secp256k1, Address, OutPoint, Txid},
|
||||
StartupError,
|
||||
@ -56,7 +56,11 @@ pub trait Daemon: Debug {
|
||||
fn stop(&self) -> Result<(), DaemonError>;
|
||||
fn get_info(&self) -> Result<model::GetInfoResult, DaemonError>;
|
||||
fn get_new_address(&self) -> Result<model::GetAddressResult, DaemonError>;
|
||||
fn list_coins(&self) -> Result<model::ListCoinsResult, DaemonError>;
|
||||
fn list_coins(
|
||||
&self,
|
||||
statuses: &[CoinStatus],
|
||||
outpoints: &[OutPoint],
|
||||
) -> Result<model::ListCoinsResult, DaemonError>;
|
||||
fn list_spend_txs(&self) -> Result<model::ListSpendResult, DaemonError>;
|
||||
fn create_spend_tx(
|
||||
&self,
|
||||
@ -102,7 +106,7 @@ pub trait Daemon: Debug {
|
||||
txids: Option<&[Txid]>,
|
||||
) -> Result<Vec<model::SpendTx>, DaemonError> {
|
||||
let info = self.get_info()?;
|
||||
let coins = self.list_coins()?.coins;
|
||||
let coins = self.list_coins(&[], &[])?.coins;
|
||||
let mut spend_txs = Vec::new();
|
||||
let curve = secp256k1::Secp256k1::verification_only();
|
||||
for tx in self.list_spend_txs()?.spend_txs {
|
||||
@ -152,7 +156,7 @@ pub trait Daemon: Debug {
|
||||
limit: u64,
|
||||
) -> Result<Vec<model::HistoryTransaction>, DaemonError> {
|
||||
let info = self.get_info()?;
|
||||
let coins = self.list_coins()?.coins;
|
||||
let coins = self.list_coins(&[], &[])?.coins;
|
||||
let txs = self.list_confirmed_txs(start, end, limit)?.transactions;
|
||||
let mut txs = txs
|
||||
.into_iter()
|
||||
@ -190,7 +194,7 @@ pub trait Daemon: Debug {
|
||||
txids: &[Txid],
|
||||
) -> Result<Vec<model::HistoryTransaction>, DaemonError> {
|
||||
let info = self.get_info()?;
|
||||
let coins = self.list_coins()?.coins;
|
||||
let coins = self.list_coins(&[], &[])?.coins;
|
||||
let txs = self.list_txs(txids)?.transactions;
|
||||
let mut txs = txs
|
||||
.into_iter()
|
||||
@ -225,7 +229,7 @@ pub trait Daemon: Debug {
|
||||
|
||||
fn list_pending_txs(&self) -> Result<Vec<model::HistoryTransaction>, DaemonError> {
|
||||
let info = self.get_info()?;
|
||||
let coins = self.list_coins()?.coins;
|
||||
let coins = self.list_coins(&[], &[])?.coins;
|
||||
let mut txids: Vec<Txid> = Vec::new();
|
||||
for coin in &coins {
|
||||
if coin.block_height.is_none() && !txids.contains(&coin.outpoint.txid) {
|
||||
|
||||
@ -370,7 +370,7 @@ pub async fn load_application(
|
||||
let wallet =
|
||||
Wallet::new(info.descriptors.main).load_settings(&gui_config, &datadir_path, network)?;
|
||||
|
||||
let coins = daemon.list_coins().map(|res| res.coins)?;
|
||||
let coins = daemon.list_coins(&[], &[]).map(|res| res.coins)?;
|
||||
|
||||
let cache = Cache {
|
||||
datadir_path,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user