Thank you for the analysis
You are a true genius
I'm trying to protect this community, that's all...
By the way: you're telling me you thank me for the analysis, but don't address the main issue that was proven by this analysis....
However if anyone finds flaws in our safety of our mixing , kindly discuss (This is more important to us and safety of our clients are more important)
--snip--
we will continue to keep it secured to be the best fresh coin dispenser on this planet, so good that mixing will be so last generation
Okay... Let me give you the ELI5(~ish), TL;DR; version...
Let me be clear from the start: I found a flaw in the safety of your mixing. I kindly discuss. This is more important to you than (well... you never said than what it was more important). Anyways, it's important to me to protect the community, so that should be enough motivation. Please read in full and understand my findings and questions before you answer... If not, your answer will be incomplete or unfunded.
Please, respond giving evidence... Tell me where i'm wrong... Show me the flaws in my way of thinking... Point out where exactly you have those fresh coins... I'm not a deity, i can make mistakes... I can overlook things, i can make calculation errors, i can have wrong assumptions... My script can have bugs, my graphs can be incorrectly interpreted. It's up to you (the business owner) to point out these flaws in order to regain the trust of your potential customers and not drive them away with smoke and mirrors. Since we're working with a technology that's clear, open source and well described, you should be able to do so using hard facts.
My concrete questions... could you answer them to stop this discussion once and for all?:
- Do you stand by your claim that says you're providing fresh coins?
- Do you understand that, in the bitcoin world, fresh means: "coming from a coinbase reward"?
- Is TryNinja telling the truth when he posted the withdrawal transaction id?
- Do you see a flaw in my logic when i dug 5000 of the closest transactions funding TryNinja's output and only found 2 very distant coinbase rewards adding allmost nothing?
- Do you see a flaw in my logic when i calculated that only 0,000000000000000019% of the value funding TryNinja's "clean" addresses comes from a coinbase reward from the 5000 closest transactions funding those clean addresses?
- Are you still unwilling to let your partners prove they are real miners by mining a block using a new address as a coinbase reward without adding an identifying OP_RETURN and sign a message using this new address (so there is no way to identify them?)
- Last time, i identified the 2 blocks that could very remotely be linked to TryNinja's output to be coming from 1THash&58COIN. Are they your partners?
- Apparently, in a PM to Vod, you claimed to have "a way of sending coin without revealing the sending address". If this is true, you should share the technical details... If it's just security trough obscurity you are NOT protecting your clients. Only by sharing technical details, we can asses if the method you claim to have discovered is valid, and will keep on protecting your clients in the future. If you are unwilling to give the method, i can only assume it does not exist, or it's a method that will sooner or later be discovered by others that can then use it to de-anonimise your past clients
- Do you understand that, when you say you have 50 BTC but proof nothing, we are a big sceptical?
- Do you understand that, when you say you have 50 BTC but your site tells us you have >5000 BTC, you are putting complete trust in the hands of your partners? What if somebody initialises a 100 BTC mix and your partner's api is not completely working (or then ran away), you'll be standing there unable to provide a mix eventough you promised to do so?
- Once again: are you the developer or are you defending somebody else's script?
- Once again: do you understand all the technical details of your operations or did you pay somebody else to do it for you?
- Once again: why are the security headers not yet fixed
- Why do you run an nginx version with known vulnerability's
- Why do you include external javascript
So, here's the TL;DR; part:
- We are talking about bitcoin.
- Bitcoin uses a decentral ledger that contains (in parsable form) an unambiguous list of transactions. Each transaction uses unspent outputs as an input and creates new unspent outputs as an output (unless it's a coinbase transaction, this one only creates a new unspent output without having an input). This creates a possibility to follow the trail of unspent outputs BACK to the "fresh coins".
- It's ALWAYS possible to follow the trail of unspent outputs back to the point of the coinbase transactions... if an unspent output is still in the UTXO, it might (in some cases) technically be possible to hide who will be able to spend this utxo, but once it's spent we can always follow the trail
- I dug 5000 hops deep from the transaction funding TryNinja's mixing output1+2. You promise fresh coins, 5000 is waaaaay over the top, but my initial tests with a reasonable amount of hops turned up nothing interesting so i dug deeper... I'd expect fresh coins to pop up a maximum of 3 or 4 steps away if you're saying they're fresh.... Mind you: steps... Aging does NOT come into play. Satoshi's addresses were funded with coinbase rewards >10 years ago. If he's spend those coinbase rewards today, there would only be 1 step between the coinbase reward and the address funded by spending the coinbase reward eventough the coinbase reward was added to the utxo set 10 years ago. Aging is not a factor here.
- I was able to proof that there were only 2 coinbase transactions in these 5000 hops, they were 17!!!!! steps away.
- 2 coinbase transactions in 5000 hops 17 steps away is NOT good... As a reference, i scanned 500 hops for the last transaction funding my own public address, and i found 47 coinbase transactions, some of them 6!!!! steps away3. Mind you: this wasn't result of a mix or some promise to get payed with "fresh" coins... It was just a signature payment (IIRC), so i'd even expect the coins to be "dirtyer" than "average" coins (yeah, i know, dirtyer and cleaner are just terms... fungibility is the key here, but still a promise of fresh coins is a promise of fresh coins). Also, realise that for your funds i went 10x deeper, so I should have turned up 10 times more, not 23 times less coinbase transactions.
- A small calculation can proof4 that ony 0,000000000000000019% of TryNinja's funds could VERY remotely be linked with a coinbase transaction in the 5000 closest transactions leading up to his transaction. Don't tell me this is by design. If your mixer created hundreds of transactions to hide the source of the funds for just a handfull of clients, you wouldn't be charging a 3% fee. Each of these hops has a price, both in tx fees, hardware resources and time... No way you tumbled these funds hundreds of times to payout a couple clients.
- Sure, if i'd go 50.000 or 100.000 hops, or 10.000.000 hops, we'd probably end up with a lot of coinbase transactions... But it would be more than a stretch to call them "fresh". When the network started, there was nothing. Every unspent output can ultimately be traced back to a coinbase reward if you dig deep enough... This doesn't mean they are "fresh" tough
Now, once again: i'm not saying that your mixer is bad per sé... I'm just saying that many of your claims (like the "fresh coins" claim) are provably false or at least very shaky and unproven (not unprovable, but unproven)...
Sure, there is fungability, and the most important part of a mixer is breaking the link between two wallets. It's very well possible your mixer is doing exactly this... I didn't dig into those transactions funding your output wallet... I have focussed on the "fresh coins" promise, and i think i succesfully proved this is not the case.
A 5000 node search should have turned up more than 0,000000000000000019% of the funds coming from a coinbase reward. If you'd open up a bar and you used the same percentage to dilute your whiskey, you'd be filling a bathtub (158 liters) with tap water and then adding 0.03 femtoliter of whiskey... That's basically just opening a whiskey bottle a couple of centimers above the water surface and closing it up right away... Do you think your customers would be happy if they ordered a whiskey and they got a small glass of water from a bottle that has been standing next to a whiskey bottle for a couple of hours? I, for one, wouldn't be to happy about this, even if you said that all water was once whiskey that got pissed out and filtered by nature at one point in it's life, or if you started to explain how exactly you opened the whiskey bottle and how long it stood next to the water bottle before you sold me tap water as being whiskey...
Details:
Source 1
here's the sourcecode of the script I wrote, so you can check it out for yourself:
https://github.com/mocacinno/howfarfromcoinbase/
Source 2
a nice graph showing just how far those coinbase rewards are from TryNinja's withdrawal... Mind you: everything not in the path between the coinbase rewards and the withdrawal tx has been pruned:
Tryninja-coinbase
(the image is so big i decided to create a link)
Source 3
As a comparison: the last unspent output funding my public address... Uncleaned, no promises of "fresh" coins. Mind you: everything not in the path between the coinbase rewards and the withdrawal tx has been pruned:
mocacinno-coinbase
(the image is so big i decided to create a link)
Source 4
Now, compare it to
tx bdfbfee25cd935abb128fc632faa9a105d0ae7b6d1ab32b8cc15e452ce2372af spends the coinbase unspent outputs:
IN : 30.40966025 BTC
IN(coinbase): 13,44039925 BTC
%(coinbase) = 13,44039925/30.40966025 = 44,2%
We continue with the unspent output funding address 3FToeoKAHiPPGmPP3V61JukhVkGttyWsau with 0.02090359 BTC
This means, 0.02090359 * 0.442 = 0.01 BTC is coming from the coinbase rewards at this point (and i'm rounding upwards here...)
the next tx: 9a2ec09aa7ada4c581e8b36d5ff56e09b784c547d7e11e9b8d01d03b5fa145e6
IN : 9.73792545 BTC
IN(coinbase): 0.01 BTC
%(coinbase) = 0.01/9.73792545 = 0,00103%
We continue with the unspent output funding address bc1q6f7usdrwhldsmjlagyw3xqxlm5r30ac8vzuds3 with 0.00721000 BTC
This means, 0.00721000 * 0,0000103 = 0,0000000743 BTC is coming from the coinbase rewards at this point (and i'm rounding upwards here...)
the next tx: 60efc87dd0d3630b24f12785aae3eaac05e494f6e98a9e54d295c0f6e1ae366f
IN : 0.00679735 BTC
IN(coinbase): 0,0000000743 BTC
%(coinbase) = 0,0000000743/0.00721000= 0.0000103%
We continue with the unspent output funding address bc1q386274dh4ggx8qh4xplwevk3s406dpk6xasqpq with 0.00002130 BTC
This means, 0.00002130* 0.000000103 = 0.0000000000022BTC is coming from the coinbase rewards at this point (and i'm rounding upwards here...)
the next tx: bf080035ff8f7106f2efb2cbbc67a0f0492da7848d3e89525d6b818b43662fd8
IN : 0.00679735 BTC
IN(coinbase): 0.0000000000022 BTC
%(coinbase) = 0.0000000000022/0.00679735= 0.000000000324%
We continue with the unspent output funding address 39yNZHRzKESkjkNXeHswW5FM7U74Ns3r7K with 0.00630000 BTC
This means, 0.00630000 * 0.00000000000324= 0.0000000000000205BTC is coming from the coinbase rewards at this point (and i'm rounding upwards here...)
the next tx: 33e5ba37967cd58803f2590eb7654ad52e16ba47563d2585fa163f46f04c290a
IN : 10.93865414 BTC
IN(coinbase): 0.0000000000000205 BTC
%(coinbase) = 0.0000000000000205 /10.93865414 = 0.0000000000000019%
We continue with the unspent output funding address bc1qq904ynep5mvwpjxdlyecgeupg22dm8am6cfvgq with 1.11585090 BTC
This means, 1.11585090 * 0,000000000000000019= 0.0000000000000000212 BTC is coming from the coinbase rewards at this point (and i'm rounding upwards here...)
the next tx: 18a6e8f710c4940fee550d391a0d6866f28d055e4c64ba9345a911b46500f485
IN :
1.14340176 BTC
IN(coinbase): 0.0000000000000000212 BTC
%(coinbase) = 0,0000000000000000212 /1.14340176= 0.000000000000000019%
We continue with the unspent output funding address bc1qq904ynep5mvwpjxdlyecgeupg22dm8am6cfvgq with 1.09772462 BTC
This means, 1.11585090 * 0,00000000000000000019= 0.000000000000000000212 BTC is coming from the coinbase rewards at this point (and i'm rounding upwards here...)
At this point, the unspent output funding bc1qq904ynep5mvwpjxdlyecgeupg22dm8am6cfvgq is being recycled and recycled... So the %coinbase remains the same @0,000000000000000019%
This goes on to the transaction paying TryNinja... So TryNinja received 99,999999999999999981% coins that are hundreds of nodes away from any coinbase transaction and you tell us you're using fresh coins....