Coinswap may get closer to a reality this year so I’ll start this discussion now.
I oppose it being built into the core gui wallet as a default or preselected transaction mode.
My most essential argument for this is that I believe optional functionalities should remain explicitly optional, and that naive users should not be passively guided into engaging with them. It is counter to the principal of minimalism to actively promote or suggest this complexity.
I agree that it shouldn’t be the default option, not everyone would want this and i view this as something that is implemented on top of the coin. I see multiple options:
on wallet-create GUI shows you radio btn of whether you want to use the “default” coinswap service (what is the default one is hard to say since it might change over time, so probably not suitable)
on wallet-create GUI doesn’t suggest anything about the coinswap service.
In both cases you want to give the user an option to do the following things in gui (if the wallet supports coinswap, maybe wallet’s support for this feature should even be optional):
add new coinswap service to coinswap service list (data of how to reach the first node + public keys of all its coinswap nodes - in some meaningful structure)
remove coinswap service from the list
select which coinswap service is active for this wallet (or none of them)
In the future one might define a chain of coinswap services to use (eg. chain <service1, service2> would mean that you first do coinswap on service1, then the result gets sent to service2 for another coinswap and only after that the coins are considered “coinswapped”).
My argument against this would be what is the purpose of using Grin vs XYZ coin if you’re not interested in making a private transaction? I’d also consider where Grin’s user adoption is going to come from. IMO it’s going to come from users of other privacy focused coins.
If it was the default, then my biggest concern about making it op-out would be the impact it has on UX.
it’s the only coin where you have full control of your wallet, you can commit to the content of the transaction (not just the amount) and has the most fair emission. To me those things are way more important than the coinswap since I also believe that the default privacy of grin is probably good enough for vast majority of people. The adoption might come when people start attacking holders of big utxos or if people see the value in linear emission or see the importance of having full wallet control (no crap attacks on you, everything is your own fault). The privacy part should be seen as something that people need to have because it secures them, not to enable some shady businesses. But as with all other things even privacy might need to be limited to some degree to achieve the best balance between the pros and cons that comes with it (just like my freedom is limited by the rights of others)
It’s a bit like a religious fundamentalism. Grin is pure mimblewimble to me. I don’t want that purity obscured from new users. Everybody is free to build and utilize whatever complications they want to on top of Grin, and they may be so popular that they deserve to be included in the core client as options, but in my opinion the default should be minimal an unembellished.
I respectfully disagree. Optionality gives users power, but defaults should always be set to “best practice”, so that uninitiated users are guided to the most common best configuration. Advanced users have all the options to control their wallet. Novice users don’t have to think to attain privacy. Win/win.
So the real question is, “what is best practice?”. I would argue coinswap is best practice, but whatever the answer, defaults should be set to best practice.
Perhaps I should rephrase that question to “what is the purpose of using Grin vs XYZ coin for the vast majority of crypto users”. You and I might value those things, but new users onboarding to Grin most likely don’t. They might eventually, but initially they need a more compelling reason. Which imo is one of the key reasons why we have struggled with adoption thus far.
We wouldn’t be adding CoinSwap to the baselayer protocol, it would still be run on top. So I’d argue making it default in a wallet doesn’t change anything from a purist perspective.
I have seen firsthand that what attracts people to Grin is not privacy but the simplicity.
However, isn’t one of the main proponents of coinswaps also acutely aware of this? @tromp I assumed that the coinswap implementation maintained the beauty of grin’s simplicity
Optional is the way to go imo however. Opt-out is good too. I just figure that the wallets will guide the UX, not the protocol.
This is also why I am against adding a messaging system (BBS) to grin. Keep protocol simple and let wallets guide the UX. They can add Nostr functionality if they want.
Of course different wallets can have different defaults. For the reference Rust wallet, I expect the configuration file will have a mwixnet section where lists of mwixnet servers can be defined similar to how seed lists and peer lists are currently defined. But I would expect any hardcoded lists to be commented out, waiting for the user to choose one to uncomment before enabling mwixing. That way, the default behaviour is the simplest one and the user is not surprised by the change in behaviour if a set of selected mwixnet nodes interrupts or ceases operation for whatever reason.
If a particular mwixnet service proves to be both popular and reliable for a long period, and we expect the majority of Rust reference wallet users to make a particular configuration change, then it makes more sense to discuss change of this default.
Other wallet implementations may choose to enable mwixing by default.
I agree with this. At first I thought default may be the way to go, but there’s a few quirks that may make it confusing including service availability, and the fact that the user is paying fees for each coinswap. I think there may also be value in another type of wallet implementation which completely obfuscates the notion of a UTXO by showing only the balance and tx logs while also having a rule that it can only spend outputs which have been mwixed.
I don’t believe Grin adoption will come from privacy focused users. Monero will always be willing to compromise itself to stay in the lead on that front.
I believe Grin adoption will come from Bitcoiners hedging their bets against halving block reward concerns. Grin remains the only legitimate altcoin by their standards with continuous block reward and that legitimacy rests on it’s purity and minimalism.
My impression is that you would never see a sidechain or a mixer or any extraneous feature above native protocol built in to Bitcoin Core as the default transaction method (I am open to criticism of this assertion) and I think we should treat the reference Grin client the same.
Do you at least agree that defaults (for any software) should be set to whatever the recommended “best practice” use of that software is? It would be silly to write software that defaults to unrecommended behavior.
So then, the real question, IMO, is whether or not Coinswap is considered “best practice”. Do you think it is not?
So talking about the wallet specifically: you would rather the wallet default to one behavior, but then you would recommend users not use that default behavior?
We would recommend that users learn about coinswap and its behaviours and limitations before they enable it. Having it enabled without understanding what it does or even being unaware of it may lead to unnecessary confusion. It will have to work reliably for those willing to experiment with it before we can ever consider making it a default.
It’s also questionable if making it a default would make sense if many jurisdictions would have a problem with it because that would create problems for users.
To add to the answers, the gui wallet could have a CoinSwap menu option with two tabs:
Settings - this is where you configure your coinswap services
Swap - this is where you can either select all outputs to be coinswapped automatically or manually select which ones you want to send to the coinswap now.
This may be one possible option to make it easy to use and non-default.
if it’s truly decentralized then the chain itself won’t be able to censor such person, but maybe in jurisdictions where this person lives coinswap might be considered illegal (not sure why) and the person would have problems because of the default settings. So yeah, exchanges might block such utxos or report the user, which uses coinswap, to the authorities
Might make sense to note that while grin has no addresses, it doesn’t mean the transaction graph can’t be followed. Not having addresses is in a way equivalent to having stealth addresses except that you save on storage and ensure that “addresses” are never the same. I hope someone corrects me if i’m wrong.