-
Notifications
You must be signed in to change notification settings - Fork 20
The wallet should have a utility method to return standard transaction data #100
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
Comments
Just querying what you want is the most simple-to-use method for obtaining what you want. Why bundle it? important is application dependent. Perhaps we add ways of querying new "important" information. Adding these as fields to this struct is then a breaking change but adding a new method is not. I don't find the code above to be unruly. It seems idiomatic and flexible. |
Since this requires more discussion and can be added later (and we've got so much left to do for 1.0) I'm moving this out of the 1.0 milestone. |
Hey I'm actually using this code to summarize my wallet to the user, I am syncing with electrum (on signet) and it seems that the example code doesn't sync certain outputs which are needed to
I haven't been able to figure out how to sync/include these missing outpoints and I'm curious what the best way to do it is. For your convenience I've made a replit that shows my issue, anyone interested should be able to run the example. Let me know if it doesn't run. I'd be happy to amend the electrum example to include the snippet of code to sync the missing outpoints, since syncing with electrum and calculating fees seems like a common use case. Thanks! |
I'll just add this here in case anyone else needs to use it, this is what I am using. pub fn get_tx_details(wallet: &Wallet) -> anyhow::Result<Vec<TxDetail>> {
wallet
.transactions()
.map(|tx| {
let txid = tx.tx_node.txid;
let chain_position = tx.chain_position;
let tx = tx.tx_node.tx.as_ref();
let (sent, received) = wallet.sent_and_received(tx);
let fee = wallet.calculate_fee(tx)?;
let fee_rate = wallet.calculate_fee_rate(tx)?;
let fee_rate = floating_rate!(fee_rate);
let tx_detail = TxDetail {
received,
sent,
fee,
fee_rate,
txid,
chain_position,
};
Ok(tx_detail)
})
.collect()
} |
I'm +1 for re-adding this functionality. Previously, I used the I think I'm now able to re-implement some checks manually, but I'd much prefer for BDK to provide some method to retrieve these details, notably before the transaction is signed/extracted/broadcasted/inserted into the |
Since the purpose of the
bdk_wallet
crate is to provide useful/opinionated ways to perform standard wallet tasks, it feels to me like a simple-to-use "get me all important—nicely bundled if you don't mind—info about this wallet's transactions" method is missing from our API.The data is there, but currently requires multiple round trips to bundle it all together, yet that data is what all user interfaces will need for one of the most common use cases, a transactions history screen. Note that this type of data object is what we previously had with the TransactionDetails struct.
The exact data that might be useful here is up for discussion, but let us assume a structure like this one would suffice for most use cases:
The current way to bundle this up ready for UI consumption is something like this:
Notice the individual calls to the wallet for for fee, fee_rate, and sent_and_received values, as well as the pulling out of the txid. It gets even more unruly if you want to build fields like
confirmed: Boolean
,confirmation_block: Option<u64>
,confirmation_timestamp: Option<u64>
instead of using the ChainPosition type, etc.I propose we add a method (name tbd, but maybe something like
get_txs_details()
, which would take care of building such a data structure for the user, instead of making all users develop their utility method on top ofwallet.transactions()
.The text was updated successfully, but these errors were encountered: