See what I miss by not faithfully following all the chit-chat on bitcointalk?
Apparently CoinWallet.eu decided that it would be interesting to “test” the distributed (volunteer) Bitcoin network with an extreme set of transactions. The live, production system, mind you.
Like any good software testers, they tried to break the system. The test is nicely designed and worth study. In testing lingo, this is a white box test, which is appropriate since the whole system is transparent. It also is carefully designed to exercise a very specific aspect of the system (the block size).
Unlike good software testers, their goal was not to help the system, but to prove a techno-political point. “Bitcoin is at a breaking point, yet the core developers are too wound up in petty arguments to create the required modifications for long term sustainability.”
Whatever the merits of their arguments, it isn’t clear that “attacking” the production system is the best way to make the point. (In fact, merely describing the experiment makes their point pretty darn well, without actually messing up the system.) Nevertheless, there is a role for realistic system tests, whether this case is a good example or not.
Fortunately for all the innocent (and unaware) users, the test systems conked out part way into the exercise, and the Bitcoin network was fine. Yay! But who knows what the next time will bring?
This incident certainly raises some interesting philosophical points.
Cryptocurrencies are, by design, open and decentralized systems. There is no one to say yea or nay to anyone’s cunning ideas. If I want to slam the network as hard as I can, just to see what happens (or for my dissertation research!) I can do so. When everyone is responsible, is anyone responsible? This is not really a good property for the backbone of the world economy, is it?
Second, I have to ask how we can and should test this system? Up to now, the software has held up well, relying on eyeballs and “just running it” (and maybe some simulations). But there are a lot of pieces, and many use cases. Think about all the “smart contract” concepts being piled on—how would we test them, and how they interact?
Given the importance of Bitcoin and the blockchain to the users, you’d really like to know it has been pounded on in a lot of creative ways. Or anyway, I’d like to know that, before I trust my money to it. So how should we test something like this?
Third, I gather that quite a few people criticized CoinWallet for doing this. While it’s not illegal (in any of the possible senses), this is certainly at least borderline unethical. I would note that academic researchers probably would not have been able to get this study past their review board. We’re not allowed to vandalize other people’s stuff for our research. (For that matter, one wonders if CoinWallet checked with their lawyers and insurers.)
Shouldn’t there be a code of conduct for “Bitcoin engineers”? Do we want the principle to be “move fast and break things (and fail fast)” or do we want to “first, do no harm”? For that matter, shouldn’t the stakeholders—the whole world!—have informed consent before their systems are used for somebody’s experiment?
Perhaps there could be a better way to do this kind of “experiment”. Post notice in advance (to the blockchain), get a large number of nodes to sign off to approve, and have some kind of token in the traffic that identifies it as part of the exercise. (The last feature will help people filter out the dummy transactions if they need to.)