Standby Shuffling Explained
20 June 2019
A fundamental disadvantage of most public decentralized ledgers compared to centralized databases is their lack of privacy. The transparency and immutability that a blockchain offers are a double-edged sword, and a balance between keeping some transactions and information public and transparent, and others private, is always needed.
There are various approaches to preserving privacy in a public ledger. Some projects rely on advanced cryptography, often still experimental and not sufficiently proven in practice. Others depend on semi-centralized solutions, such as masternodes or third-party mixers that require at least some level of trust.
At Jelurida, we always aim to ensure our blockchain platforms provide the tools for our users to preserve their privacy and anonimity, if so desired. Our privacy solution, the coin shuffling, was launched back in 2015 on the Nxt blockchain - the first on-chain and fully decentralized implementation of the CoinShuffle algorithm based on an academic paper by Tim Ruffing et al. On Ardor, coin shuffling is available for the Ignis and Bitswift child chain tokens, as well as for assets or currencies.
Being fully decentralized and trustless, there is no central registry or coordinator that keeps track of who wants to shuffle what tokens, how much, and when. This unfortunately leads to a chicken and egg problem - when someone creates a new shuffling, unless enough other users happen to want to shuffle the same amount, at the same time, and happen to open their wallets and notice there is a shuffling waiting for participants to join, the shuffling often expires as it fails to enroll enough participants in a reasonable time.
The Standby Shuffler included with the latest Ardor version, currently 2.2.5, aims to solve this problem, and to ensure user shufflings always succeed and complete quickly. Instead of starting a shuffling immediately, and wait for others to join, a Standby Shuffler passively runs in the background, patiently waiting. When someone starts a shuffling which matches the configured parameters (token, minimum and maximum amount, minimum number of participants), the Standby Shuffler will automatically join it. The more Standby Shufflers there are, the better the privacy, as which ones will be able to join will randomly be determined by whose transactions get bundled and included in the next block. If more Standby Shufflers try to join than the required number of participants, those left out will not be charged a fee - their transactions will just expire unconfirmed. The addition of the Standby Shuffler add-on makes Ardor a fully decentralized Shuffling-as-a-Service platform. The more users providing the shuffling service, the better privacy for all shuffling participants can be achieved, without any need for a trusted centralized mixing service.
So who should be running a Standby Shuffler? If you are not already running an Ardor node all the time, and only want to shuffle a fixed amount of Ignis, one time, the Standby Shuffler is not for you - just follow the regular Create Shuffling procedure. Now that others are running Standby Shufflers, chances are very good that your shuffling will quickly be joined by enough participants, and will complete fast. Make sure to keep your wallet running until the shuffling is over, the funds have arrived in the recipient account you chose, and don’t lose its passphrase!
If you are a power user, already running a full node, forging and bundling, then consider also setting up a Standby Shuffler for Ignis. If you have some amount of Ignis that you want to shuffle, not immediately but in the long term, and to end up having it split into various accounts of different sizes, running a Standby Shuffler is the ideal way to do it, while helping others shuffle their Ignis at the same time.
Once you have setup one or more Standby Shufflers, to avoid having to reenter their parameters again every time the node is restarted, the SaveStandbyShufflingEncrypted and StartStandbyShufflingEncrypted APIs are very convenient, saving and restoring the Standby Shuffler configuration from an encrypted file stored on the server. To use those, the nxt.addons.StartStandbyShufflingEncrypted and nxt.addons.SaveStandbyShufflingEncrypted add-ons must be enabled in the nxt.properties file. Currently those add-on APIs must be accessed from the API test page and are for advanced users, but in the future we plan to add UI support for them too. The only inconvenience is having to keep track of multiple recipient accounts and their passphrases, and making sure not to use them in the future in a way that would reveal the original account the tokens came from (e.g., do not send them to the same exchange user account, or combine them back into a single account).