This article is a light exploration and discussion of ideas by Yuval Kogman.

Image for post
Image for post

Bitcoin Transaction

You got 50 bitcoins from a friend and 23 from another. But now you want to spend 73 bitcoins on alpaca socks. So you create a transaction:

Fiat is terrible, so why don’t you fix it?
Nah, it cannot be fixed, Bitcoin FTW!

Bitcoin still has problems, so why don’t you fix it?
Nah, it cannot be fixed, altcoin FTW!

Altcoin still has some privacy leaks, so why don’t you fix it?
Nah, it cannot be fixed, another newer privacy altcoin FTW!

Newer privacy altcoin still scales poorly, so why don’t you fix it?
Nah, it cannot be fixed, but there’s a research we could build a better currency with!

Research doesn’t use secure cryptography, could we do that with ECC instead so we don’t rely on these assumptions? …

Image for post
Image for post

You know that your Bitcoin Address is what you share to the world to get paid.

Harry Potter is raised in a muggle family where he did not belong to. He’s been constantly punished for his virtues and this makes us the reader feel sympathy for him. There’s no larger injustice than being blamed for wanting to do the right thing. Harry is the classic hero archetype.

Image for post
Image for post


The best example of adhering to principles in the context of software development is the open source movement. You’re instantly punished by writing open source code, because you will have a much harder job to monetize it than if you wouldn’t have shared the source with anyone in the first place. But in the long term it pays out.
The classic argument is that open source brings more eyes on your code, which makes it more secure and more contributors, which makes your software generally better.
The counter arguments are that sharing the source code makes it easier for attackers to attack your system, thus it makes the system not more, but less secure and that, unless your project is very successful, you will most likely not get any contributors and even if you do, it is likely that they won’t make any difference. They have no historic understanding of the codebase and by the time they gain that and able to effectively contribute to your project they will just leave. …


It's a bug alright - in the kernel. How long have you been a
maintainer? And you *still* haven't learnt the first rule of kernel

If a change results in user programs breaking, it's a bug in the
kernel. We never EVER blame the user programs. How hard can this be to understand?

The above extract is Linus Torvalds’s infamous explanation to Mauro Carvalho Chehab on the why, unintuitively, fixing a bug that results in upstream breaks is not a good idea.

Responsible Disclosure

The answer to the question: what’s the right thing to do becomes even more controversial when user space break happens, because of a zero day exploit. …

Something is centralized and something else is decentralized. Such binary thinking is prevalent in the Bitcoin community. Here I’d like to present a scale that describes reality in a better way. Our contenders are: Legacy Banking System, Chaumian E-Cash, Wasabi Wallet, JoinMarket, Bitcoin, and Bitcoin-as-envisaged.

I recall an article that brainstormed on a decentralization scale in the context of payment systems. I am intending to do the same in the context of anonymous payment systems. The article can be summarized with the following depiction:

Image for post
Image for post

Chaumian E-Cash

Chaumian E-Cash (shall I say as-envisaged?) is a centralized anonymous payment system. I argue calling it centralized does it a disservice, because it is more decentralized than our legacy banking system. While in the legacy banking system the information of who pays who is centralized, too, in ecash it is not the case. Only the receiver and the sender of the payment knows who pays who. While the data is (not always), the information isn’t stored in a central location, like in the traditional banking system. This is important, because an ecash bank cannot pinpoint a specific user to steal its money, which increases its censorship resistance. …

Recently I’ve been working with the same cryptographic primitives that Confidential Transactions are using. In this quick article I’ll show you what Confidential Transactions and Bulletproofs are and how they are supposed to be used in Bitcoin. All this without going into the cryptographic formulas as I am afraid I would make a mistake and I would never recover from the eternal shame that would come with it.

The Blackest Box

From the highest level you can think about Confidential Transactions, as Bitcoin transactions, where the amounts are confidential. This means only the sender and the receiver know what the actual amounts are, third parties can only verify that the transaction is correct. They can see who sends to who. They can see how many inputs and outputs are in the transaction. …

Implemented in PR #3245, moving coins from one wallet to another wallet of yours through coinjoins is possible.

Image for post
Image for post

I assume you already have 2 wallets setup in Wasabi. One of them may or may not be a hardware wallet.
Since the feature is not yet released, we’ll proceed with building Wasabi from source code:

1. Get The Requirements

2. Get Wasabi

git clone
cd WalletWasabi/WalletWasabi.Gui
dotnet build

3. Mix To Another Wallet

dotnet run -- mix --wallet:MyWallet1 --destination:MyWallet2

dotnet run is what you use to build & run Wasabi, -- is escaping out the argument list of dotnet command and tells it to let the software parse the rest of the arguments itself. The software is Wasabi and its command is mix . MyWallet1 and MyWallet2 are the names of your wallet files. …

Wasabi produced a coinjoin with only 5 participants . This opens the door for a unique opportunity: it is possible to take a look at KYCP’s analysis on this transaction and compare it with the real mapping of the transaction, which is obvious just by looking at it in any block explorer.
Larger Wasabi transactions are problematic, not only because figuring out what’s going on manually is difficult, but also because analyzing them without sophisticated assumptions and heuristics is impossible, due to the exponentially growing complexity in solving subset sum problems.

Image for post
Image for post

At the first glance, KYCP’s analysis is just strange. Let’s uncover the real mapping by looking at the transaction in another block explorer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store