@ -10,6 +10,32 @@ and no longer on Github, since they banned Duke Leto and
also because they censor many people around the world and work with
also because they censor many people around the world and work with
evil organizations.
evil organizations.
# Hush 3.8.0 "XXX YYY"
This is an OPTIONAL release, but since it contains many privacy improvements, it's HIGHLY RECOMMENDED for all users to upgrade.
* New Sietch feature: Randomized change output location
* Zcash and Pirate always put the change as the last shielded output, which leaks metadata. Hush no longer has this metadata leakage.
* This feature improves the `z_sendmany`, `z_mergetoaddress` and `z_shieldtocoinbase` since it's done in the Hush TransactionBuilder.
* New Sietch feature: Sitech-ified `z_shieldcoinbase`
* This RPC now leaks less metadata by making it hard for blockchain analysts to know which of the three outputs has value.
* This also increases Hush's "anonset velocity", which is how fast we increase our anonymity set, or "anonset".
* Previously you could only run `stop` while Hush was in RPC warmup, but now additional RPCs are allowed:
* `stop` - Oops, you started hushd on accident a few seconds ago? Now you can stop it without waiting.
* `help` - Get help during long rescans, finally!
* `z_listaddresses` - See a list of all zaddrs in this wallet, even during a long rescan!
* `z_exportkey` - Export a key from this node, even during rescan!
* `listaddresses` - See a list of taddrs as soon as we load the wallet.
* `dumpprivkey` - Dump the private key of a taddr, even when node isn't fully synced!
* `getpeerinfo` - See current peers even before we get enough peers to start syncing or a long rescan!
* `-keepnotewitnesscache` prevents the Sapling Note Witness cache from being deleted from wallet.dat on shutdown.
* `-rescanheight` can be used with `-keepnotewitnesscache` and `-rescan` to do a partial rescan of history and avoid completely rebuilding the Witness Cache.
* `-zindex` data is now stored on disk in the new `zindex.dat` file
* All nodes that use `-zindex` will now have reliable anonset statistics even after a restart
* Improvements to the RPC help documentation
* `hushd.bat` for Windows now uses the ASN map via `-asmap` and has the latest seed nodes
* `hushd-tx.bat` for Windows now exists for making raw transactions on Windows
strUsage+=HelpMessageOpt("-opretmintxfee=<amt>",strprintf(_("Minimum fee (in %s/kB) to allow for OP_RETURN transactions (default: %s)"),CURRENCY_UNIT,400000));
strUsage+=HelpMessageOpt("-opretmintxfee=<amt>",strprintf(_("Minimum fee (in %s/kB) to allow for OP_RETURN transactions (default: %s)"),CURRENCY_UNIT,400000));
strUsage+=HelpMessageOpt("-paytxfee=<amt>",strprintf(_("Fee (in %s/kB) to add to transactions you send (default: %s)"),CURRENCY_UNIT,FormatMoney(payTxFee.GetFeePerK())));
strUsage+=HelpMessageOpt("-paytxfee=<amt>",strprintf(_("Fee (in %s/kB) to add to transactions you send (default: %s)"),CURRENCY_UNIT,FormatMoney(payTxFee.GetFeePerK())));
// If this is used incorrectly (-rescanheight too large), then the local wallet may attempt to spend funds which it does not have witness data about
// which will cause a "missing inputs" error when added to the mempool. Rescanning from correct height will fix this.
strUsage+=HelpMessageOpt("-keepnotewitnesscache",_("Keep partial Sapling Note Witness cache. Must be used with -rescanheight to find missing cache items."));
strUsage+=HelpMessageOpt("-rescan",_("Rescan the block chain for missing wallet transactions")+""+_("on startup"));
strUsage+=HelpMessageOpt("-rescan",_("Rescan the block chain for missing wallet transactions")+""+_("on startup"));
strUsage+=HelpMessageOpt("-rescanheight",_("Rescan from specified height when rescan=1 on startup"));
strUsage+=HelpMessageOpt("-salvagewallet",_("Attempt to recover private keys from a corrupt wallet.dat")+""+_("on startup"));
strUsage+=HelpMessageOpt("-salvagewallet",_("Attempt to recover private keys from a corrupt wallet.dat")+""+_("on startup"));
strUsage+=HelpMessageOpt("-sendfreetransactions",strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"),0));
strUsage+=HelpMessageOpt("-sendfreetransactions",strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"),0));
strUsage+=HelpMessageOpt("-spendzeroconfchange",strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"),1));
strUsage+=HelpMessageOpt("-spendzeroconfchange",strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"),1));
// TODO: if zstats.nHeight != chainActive.Height() the stats will be off
fprintf(stderr,"%s: loaded anonymity set of %li at stats height=%li vs local height=%d from disk\n",__func__,zstats.nChainShieldedOutputs-zstats.nChainShieldedSpends,zstats.nHeight,chainActive.Height());
fprintf(stderr,"%s: setting zstats with height,zouts,zspends,anonset=%li,%li,%li,%li\n",__FUNCTION__,zstats.nHeight,zstats.nChainShieldedOutputs,zstats.nChainShieldedSpends,zstats.nChainShieldedOutputs-zstats.nChainShieldedSpends);
"2. \"outputs\" (object, required) a json object with outputs\n"
"2. \"outputs\" (object, required) a json object with outputs\n"
" {\n"
" {\n"
"\"address\": x.xxx, (numeric or string, required) The key is the komodo address or script (in hex), the numeric value (can be string) is the "+CURRENCY_UNIT+" amount\n"
"\"address\": x.xxx, (numeric or string, required) The key is the HUSH address or script (in hex), the numeric value (can be string) is the "+CURRENCY_UNIT+" amount\n"
"\"data\": \"hex\" (string, required) The key is \"data\", the value is hex encoded data\n"
"\"data\": \"hex\" (string, required) The key is \"data\", the value is hex encoded data\n"