I used to be technical. I used to know technical stuff.
I still know quite a bit, but what I say about myself nowadays is that “I can follow a technical argument.” That’s certainly not cutting-edge, nor is it one step removed. It’s a different kind of skill.
As a techie, I was bound by what Buckminster Fuller or Ayn Rand would call “right and wrong.” If my stuff — my hypothesis, my code, — “worked”, it was correct. Not just, necessarily, or even beautiful, but it would do what I said it would do.
“Following a tech argument” is a different thing; I’m assuming that the speaker is speaking correctly, is saying what’s right, and seeing if I agree with the implications.
That’s how I’m approaching blockchain. I’ve never been a cryptographic heavyweight, and I’m not even an “Alice and Bob” heavyweight. Alice and Bob, for those who might not know, are personoids who engage in cryptographically motivated behavior. For example: “Alice wants to send Bob a private message.” “Bob wants to pay Alice in Bitcoin.” Cryptographic heavyweights toss around Alice-and-Bob arguments in a way that I can mostly follow. If I move my lips.
So I’ve been certain I could understand how blockchain — the “distributed ledger” underlying Bitcoin and other cryptocurrencies — worked. Just one little problem: I didn’t actually understand.
So today I set out to understand how blockchain works.
I started with a Google search for “blockchain for dummies”.
First hit: a youtube video that tried to “explain” blockchain with an analogy. #fail. I couldn’t even understand the tenor and vehicle of the metaphor, let alone anything about how blockchain worked except, perhaps, that it was distributed and anonymous. Well, I knew that already.
Next up? “WTF Is the Blockchain? A Guide for Total Beginners“. #fail. It kind of explains the various parts of the cryptocurrency ecosystem, but doesn’t explain the main thing: how are transactions in the blockchain verifiable, non-repudiatable, anonymous, and unfalsifiable? And, just for grins, why are there miners?
I tried a few more, and ended up, as perhaps I should have begun, with the Developer’s guide. Here we have geeks explaining to geeks how something works and how you might use it in making something of your own.
And here’s what I get out of all this:
- If Alice wants to pay Bob, she uses Bob’s public key (well, a hash of it) to create a transaction that authorizes whoever own Bob’s private key to spend <x> coin. This transaction is “broadcast” to the coin community (presumably by Alice’s software) and Bob’s software presumably notes that such a transaction is created and lets Bob know.
- When Bob wants to spend the coin that Alice has given him, he creates a transaction which uses Alice’s transaction ID and a “signature script” saying what he wants to do with the coin. The signature script is certified by Bob’s private key (and other mumbo-jumbo). Bob then broadcasts his transaction to the network.
How do you keep Bob from spending Alice’s coin twice? Next posting…