I’ve been bouncing around a “1-click” sapling turnstile migration for zcash-qt-wallet, and I’d love to get some feedback from experts here.
This is what it’ll look like:
Users will be able to pick from the following migration strategies:
- “Good - 3 tx over 3 days”
- “Excellent - 5 tx over 5 days”
- “Paranoid - 10 tx over 7 days”
When the user starts the migration, zcash-wallet-ui will:
Break up each z-Addr’s balance into ‘x’ parts, picking round numbers as much as possible.
Choose ‘y’ random block heights in the given migration window for when to migrate parts of the balance.
Write to local disk the picked block heights and balance parts,so we can continue across restarts.
Generate new intermediate t-Addresses, and make the user backup wallet.dat
When a chosen block height arrives, move the ‘x’ amount from the z-Addr to a t-address, and then one block later, move it to the target sapling address.
I’m thinking a progress box like this will keep track of the migration:
- I think it’ll be OK to pick round numbers (hopefully powers of 10) to break up the balance into.
- while the sprout->t-addr will happen randomly, the t-addr->sapling will happen the very next block. This might make it obvious that this is a part of the migration, but I think that will be clear anyway, even if we wait a random number of blocks for it.
- Any other privacy / safety concerns I should watch out for?