m2049r / xmrwallet

monerujo: An Android Monero Wallet
https://www.monerujo.io/
Apache License 2.0
617 stars 273 forks source link

[QoL Improvement] Cache output distribution on first sync and update each subsequent sync #846

Open sethforprivacy opened 2 years ago

sethforprivacy commented 2 years ago

One of the most annoying user experience issues for me when using any mobile Monero wallet is that when I go to send a transaction for the first time after opening my wallet, it takes multiple seconds (at least) for me to be able to actually send the transaction. Once you've sent a single transaction, and if you keep the wallet open, subsequent transactions are very fast as the output distribution is kept for that wallet session.

After talking to a couple of other Monero developers, it seems that the hang up here is something that (to my knowledge) no wallet is handling properly, and that's the output distribution used to select decoys for each inputs ring. This distribution is ~10MB in size, and if uncached has to be pulled from the selected daemon the first time a transaction is sent after each sync.

Instead of this "just in time" output distribution pull, it would be a vastly superior UX for the output distribution to be cached the first time it is pulled, and then that cache appended to each subsequent sync to keep it up to date. This would make sending Monero much more responsive and reduce bandwidth requirements.

I also believe that this would significantly reduce the disk IO load on remote nodes that are popular, as pulling this list is quite an intensive random IOPS process as it has to grab them from all throughout the chain history.