Why doesn't zcashd store sent z-Addr transactions?

Unless I’m overlooking something major, there doesn’t seem to be a way to get all zAddr send transactions from zcashd.

For tAddrs, there’s listtransactions, which lists all sent and received transactions. There doesn’t seem to be an equivalent for zAddrs.

I can get half way there by calling z_listreceivedbyaddress for each zAddr, but that only gets incoming transactions.

I’m the developer of the zcash-qt-wallet (GitHub - ZcashFoundation/zecwallet: A z-address first full node and UI wallet for zcash), and my beta testers are confused because the transactions tab doesn’t show outgoing z-Addr transactions. I’m considering storing them locally in the UI (at least those sent through zcash-qt-wallet) so that I can show them in the transactions tab.

Are there security/privacy considerations at play here? Is it a good idea to store the outgoing transactions in the wallet UI?

1 Like

As long as people do not reuse z addresses for multiple receipts, there’s no immediate security concern. There is a risk that transactions and addresses can be linked to a person if the people you do business with, and their outgoing history gets linked to your one receiving address.

I think having htat as a feature is nice as long as you educate your users on the risks of storing the information, and give them the ability to purge both individual and all history.

1 Like

Here is a very old issue on the same topic ZCash GUI Wallet needs a way to list all transactions · Issue #1438 · zcash/zcash · GitHub

2 Likes

The transactions do get stored inside the wallet, and listtransactions should return them. There isn’t much (any?) shielded-specific information returned by that API though - in part because really the only thing users care about are the recipients and output amounts, neither of which were recorded or available for Sprout (unless you specifically enabled the experimental payment disclosure feature).

In Sapling, we store an outgoing ciphertext in each Sapling output that enables the recipient, amount, and memo to be recovered by the sender (from the block chain, so the data can be recovered across backups). So it should be possible in the future to create e.g. a z_listtransactions RPC method that provides information about shielded transactions.

6 Likes

Thanks for the feedback, everyone. It sounds like it’s OK for a wallet to implement local storage of sent transactions and display them, while providing an option to “delete history”.

3 Likes

Sprout is dead. Sapling and Orchard are available now. ZecWallet Lite can show outbound Z->T and Z->Z transactions, so I’m wondering why zcashd still cannot do it.
It seems extremely basic for any wallet to be able to show a record of transactions sent as well as received. Seems bonkers that this has been missing so long, IMO.