Comments (5)
You rediscovered #10096 and #8938; this is exactly the issue explained and tried to be mitigated by implementing these points: (1) getting whales to select less inputs or (2) select inputs smarter, incorporating the insight here.
. You can also see that my comment on #10096 explains that another mitigation is to reduce non standard change at all costs, which is kinda similar to the last thing you mentionned: also we can probably improve amount decomposition by getting whales to create more outputs
And by the way, your example would be much worse the other way around:
Amount | Anonymity |
---|---|
100 | 1000 |
3 | 1000 |
2 | 1 |
1 | 1000 |
Like this, the user is losing much more global % AnonScore
, and this has an impact both:
- Direct: Global AnonScore will exceptionally decrease directly
- Long lasting: In the following round, this input will tremendously affect the
WeightedAverage
, hence theAnonScore
gains of the other outputs.
from walletwasabi.
That's a good catch, sounds about right.
from walletwasabi.
@turbolay it seems you're conflating what our anonymity calculation says about privacy loss and the actual privacy loss is and thus you're bringing in many issues needlessly like #10096 or your example:
And by the way, your example would be much worse the other way around
It's not actually bad for privacy, only for our anonymity calculation thinks so, and by the way it is the fix: #10699
However what's going on in this very issue is bad for privacy, not only our anonymity calculations say so.
from walletwasabi.
@turbolay Could you elaborate/copy paste the relevant text on this one here?
You can also see that my comment on #10096 explains that another mitigation is to reduce non standard change at all costs, which is kinda similar to the last thing you mentionned:
also we can probably improve amount decomposition by getting whales to create more outputs
from walletwasabi.
@turbolay Could you elaborate/copy paste the relevant text on this one here?
Sure!
This Anonymity Loss is affecting exclusively (or almost exclusively) the big non standard output. If we reduce it, we will lose anonymity on a smaller amount. Hence, the user will be able to spend privately a bigger percentage of its wallet faster, but also the subsequent AnonymityScore
will go up faster during remixes because the WeightedAverage
will be less affected.
Creating more outputs for whales as you suggested is a good and effective way to reduce this change
One other approach (not mutually exclusive) is that instead of choosing the denomination that has the less cost (this line), we should prefer denominations with less change, especially if this change is suspected to be one of biggest output in the round. Obviously cost should still be acceptable (maybe proportionate to the amount).
Let me also drop here an observation that I made on Slack and that I think relevant here: https://tumblebit.slack.com/archives/CFBJX6MN0/p1682306405947139
Backup of the Slack comment:
I think that this Coinjoin is a really good example of why sometimes we have bad consolidation, at least with the naive decomposer (Lucas’ decomposer is a black box for me): https://mempool.space/tx/2f74c5a88ce9279a68ba11305e425087648858f6d5315aa475298587e71b977a
The whale had 5 inputs of 20/21 BTC, 100 BTC total. Another whale had 2 inputs of 20 BTC. Then no other inputs where big.
Most bad things will basically happen on this line:
if (!denoms.Any() || denom.Amount.Satoshi <= (long)(denoms.Last().Amount.Satoshi / filterSeverity))
The first denom below 20 BTC will be added, 20 BTC itself because of the !denoms.Any() . Then, every denominations below will be filtered out because we’re heavy filtering at the big amounts, until reaching the denoms with other participants, much much lower in that case, 1.34217728 BTC
We will then reach this line: var maxDenomUsage = Random.Next(2, 8);
But in fact, we’re already f*cked:
If we get a big number on this random, we will have a nice decomposition without consolidation, but we will gain almost no AnonScore , because we will have a high rate of these outputs with 20BTC denom, and the AnonScore gained is divided by this rate.
If we get a low number on this random, let’s say 3 as the whale got in my example, well 40 BTC will be mixed using these denoms, but then what about the 60 BTC remaining? remember that the next denom is 1.34217728 BTC…. well it won’t be possible to “consume” the remaining BTCs with such low denominations available -> we will create big change, potentially losing tons of AS if we mixed with a 1 AS input.
from walletwasabi.
Related Issues (20)
- Coinjoins replacing user's transaction (RBF)
- Coinjoin fee structure - Coordinator pays the mining fee HOT 10
- Backend connection problem via TOR HOT 13
- Send: pressing alt key underlines first letters HOT 1
- [UX] SearchBar: accept Enter keystroke when pasting/searching for TXID HOT 2
- Can Wasabi Wallet please be translatable with translators providing translations on [Hosted Weblate](https://hosted.weblate.org/)?
- [FireProofing] Improve minimum reasonable input amount calculation for coinjoins HOT 3
- Redefine PlebStopLimit HOT 1
- Coin selection algorithm selects too small utxo
- UI Decoupling progress tracking
- Wasabi crashes after receiving bitcoin
- crash after CTRL C in terminal on Debian HOT 2
- Display Anonymity Score for pockets with sub-items (coins)
- Remove send all button HOT 2
- Send dialog completely frozen HOT 2
- Doesn't find CC and Never stop looking for a HWW HOT 1
- Improve scan QR code UX when camera access is turned off
- Low fee txs get stuck indefinitely HOT 2
- Simplex private chat for p2ep
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from walletwasabi.