Start at the Prologue and First Chapter here
Frank had decided to begin at the beginning. He had already examined the structure of BankCoin in great detail and found nothing. Perhaps if he were to review it again, this time from the standpoint of processing transactions, he might discover, or even stumble upon – he wasn’t proud – a crucial flaw he’d missed when he’d examined it as a static piece of software. And where better to start than with the Genesis Block – the very first block of transactions created more than [two] years ago.
That block was part of Frank’s air gapped copy of BankCoin. It didn’t include real, commercial transactions; whoever had created that first block – Schwert, presumably – had set up several pseudo accounts for test purposes on the development server, deposited some “cash” in each, and then taken BankCoin out for a spin.
Then Frank had a thought. He should look for malware as well as security flaws while he was at it. But before the commercial release, there had been a beta release, and before that an alpha release, and ultimately, whatever hunk of code Schwert had decided to tackle first. He’d need to go back through those versions later to look for malware insertions if he wasn’t 100% confident that he would ferret them out now. And how many versions might that be?
He realized he didn’t know when the banks had jumped on the BankCoin wagon, how many developers had been involved before that, who they were, or really anything at all about the early history of the program. Maybe he should download the beta, or the alpha version instead. The records at GitHub should help him decide that. Leaving aside some value-added services, basically, all GitHub offered was a hosting service where anyone could post code, and then record a notation every time they changed or added to it. It was more or less the same thing as a server at work, except that it was open to the public. He logged on and found the registry.
How about that.
The first copy of BankCoin there was the very copy of BankCoin he’d downloaded. Hmm. BankCoin must have been in a different repository before that, either at GitHub or at some other open source forge. He clicked some more keys. Not at GitHub. At least, not under the BankCoin name. More clicking. Or under Schwert’s name. So where was it?
Delhohn would know. Frank got up and headed towards Delhohn’s cubicle. Delhohn was there, peering at his computer screen.
“Hey, Dirk.”
The programmer turned and peered at Frank over his spectacles but said nothing, obviously annoyed at the interruption.
“Do you mind if I ask you a question?” Frank asked.
“That is a question. Another question, I suppose you mean?”
Frank laughed; Delhohn didn’t.
“Sure,” Frank said. “And maybe more than one. Do you have a few minutes?”
“Why not. What can I tell you?”
“I was looking at the BankCoin logs at GitHub and noticed thefirst version there was the commercial version. Can you tell me where to find the earlier versions?”
“No,” Delhohn said.
Frank eyebrows moved upward. “No, as in ‘No, you won’t,’ or no, as in ‘No, I don’t know?’”
“As in ‘I don’t know.”
“So, who would know?”
“Only Schwert.”
“Are you saying that Schwert developed BankCoin all by himself?”
“That is what is apparently the case. Schwert, it seems, developed BankCoin on his own system and then revealed it to the world. Rather like Satoshi Nakamoto, so it really is not so strange.”
“Well, it is strange to me,” Frank said, “given that the banks adopted it so quickly. It took a long time for BitCoin to be taken seriously. And the version Nakamoto first put up on the Internet still needed a lot of work before anyone used it to even buy a pizza.”
“This is true, but you’re point is what? Blockchain is now widely accepted. And there are of course now many more blockchains to examine. The general approach is well-known and documented. Why should not Schwert build a blockchain on his own?”
“Well, okay,” Frank said. “But why should First Manhattan have bought into it so quickly?”
“Why do you say it did?”
“Didn’t it?”
Delhohn gave Frank an appropriately pitying glance.
“So. Schwert posts a message at a very popular blockchain site to announce his new creation. Attached to the message is a white paper – just as so many others have done. And there is an address at GitHub. ‘Come look at my blockchain,’ he writes. So, some do. And they like what they see and tell others. They, too, tell others. Soon, many people are talking about his blockchain. The word gets around. Is this so strange?”
No, actually it wasn’t, Frank had to admit. “Okay,” he said. “I understand.”
“Enough questions for today?” Delhohn asked.
“Sure – thanks.” As usual, everything Delhohn said made perfect sense. Frank couldn’t decide whether that was helpful or maddening. He decided on equal parts of both and went back to his office. Time to get back to doing what he’d meant to do before he got off on this tangent: reviewing the source code of the BankCoin Genesis Block.
He scrolled through the code, taking notes as he went along. Then he scrolled through it again and leaned back. He had formed two somewhat contradictory conclusions.
The first was that Schwert was indeed a brilliant computer architect. The structure of the code was impeccable. Economical, robust, and – to a programmer at least – beautiful. That was the first impression.
The second was that, for all his brilliance, Schwert was a bit sloppy. This little bit here, for example – it didn’t seem to do anything at all. There were other examples. He expected Schwert or someone else had cleaned that coding cruft up by now. Well, what the heck. He’d seen programmers like that before – so good at the big picture that they didn’t have the patience to go back and double-check everything so long as the code was running fine.
So, he was back where he started. Or perhaps even behind where he started, because Schwert’s coding skills were so elegant that Frank wasn’t sure he’d yet grasped all the subtleties of the Genesis Block. Most programmers were like bricklayers: you put this on top of that and then another one of these on those, and so on until you had a wall of modules that did what you wanted them to. And a lot of those bricks were open source modules that someone else had written and posted to GitHub so that anyone, like you, could add the to your wall.
Frank was sure that every line of code he’d just reviewed had been written by Schwert himself. And not as an assemblage of bricks. There were continuous lines of logic that flowed through the Genesis Block from beginning to end. That was how the most brilliant programmers Frank had known so long ago at MIT had written code. In those days, even a powerful computer had a tiny fraction of the power a cheap laptop commanded today. It would take a hundred of those early computers to run the kind of program a software bricklayer would write today. But a real code master could design an algorithm that was elegant in its simplicity, able to achieve great things with meager resources.
Frank frowned. Schwert was clearly such an artist. But why bother? BankCoin was a complex piece of software, to be sure. But it hardly challenged the powerful computers banks were using today. Was it just art for art’s sake? Perhaps it just came naturally. Either way, Frank realized he’d have to work harder to understand how what he was looking at produced the results it obviously did. That would also make it tougher to figure out whether BankCoin was highly secure or riddled with flaws.
Learning that Schwert was a better programmer than he was left Frank feeling both frustrated and mildly intimidated. He hated to admit his own limitations, but perhaps he should ask Schwert to walk him through the security precautions he had presumably taken? He sent an email off to Schwert making the request.
* * *
When two days passed without a response, Frank presented himself once again at Dirk Delhohn’s cubicle. As usual, Delhohn either didn’t, or wouldn’t, recognize Frank’s presence.
“Knock knock,” Frank said.
Delhohn’s goggle eyes swiveled around and fixed themselves on Frank.
“’Knock knock’ is perhaps one of your American jokes?” Delhohn asked.
“Well, yes, sometimes, but not this time. It’s just slang. Anyway, can you tell me how to get in touch with Schwert?”
“I can give him a message, yes.” Delhohn said. “Or, also, one of the other maintainers could.”
“You mean the Cabots talk only to the Lodges and the Lodges talk only to God?”
“Excuse me please?” Delhohn asked.
“Sorry. It’s an old Boston saying. You see, the Cabots and Lodges were the highest of society and – anyway, never mind. So, you have to be next in line to Schwert before he’ll waste his time answering a question?”
“I would not say it that way, no. He works very hard and relies on us to support him in his efforts. It is a very large and busy project, as you know.”
“So, how about if I was the Chairman of First Manhattan? Would he answer me then?” Frank asked.
“And what precisely does the bank pay Mr. Schwert?” Delhohn asked.
“Okay. Nothing. I get your point. So, could I ask you to pose a question to his highness for me?”
Delhohn snorted.
“Ask him,” Frank continued, “if he could give me a brief description of how he designed security into BankCoin. That assumes, of course, that he did, instead of relying on the banks to prevent their systems from ever being breached.”
“So that someone can someday hack into our systems and find your description? That would be a nice roadmap for a black hat to have, yes?”
“Okay, then have him give me a call.”
“Schwert does not ever use a phone. I would be surprised if he owns one.” And then a twinkle lit Delhohn’s eye. “Not even to speak to one of your Lodges.”
Delhohn turned back to his computer screen, leaving Frank frowning at the back of his head. It also left him with no option but to flounce back to his office in frustration.
What had happened to this world? First Manhattan was turning the global financial system over to someone no one had ever met. But to be fair, this wasn’t the first time. Goldman Sachs, no less – the most revered and aggressive investment bank on Wall Street – had already opened a BitCoin exchange. And not only had no one ever met BitCoin’s creator, but it had been years since Nakamoto vanished from the virtual earth he’d once – maybe – inhabited. Why should BankCoin be any different?
Maybe, Frank thought, because this was whole circus was stark-raving, barking mad.
* * *
Frank couldn’t shake his concern over Schwert’s anonymity, so he took a break from his source code review to see if he could find out anything more about Schwert. After all, what if the man behind BankCoin was a North Korean or Russian agent? Why not? He made a mental note to check in with George Marchand to see whether the CIA had a file on him.
It took Frank only a few hours to find everything there was about Schwert on the Internet. It took much longer to decide that there was nothing more found on the Dark Web. When he gave the effort up, he hadn’t learned much.
Rumors abounded, and that was about it. The person who called himself Schwert was really Giles Campbell, a brilliant but eccentric Cambridge-educated mathematician. Before disappearing, he’d made a fortune designing sophisticated investment algorithms for a huge hedge fund. No, he was the alter-ego of Barry Lemuelson, the rich heir to a pickle fortune who architected dazzling virtual reality games. Ridiculous! Schwert was really a team of venture-capital backed entrepreneurs planning to make a killing providing BankCoin-related consulting services using their intimate knowledge of its workings.
The truth was, no one really had a clue.
* * *
Author’s Notes for this Week: Greetings from southern Utah.
This time around I’d like to address the pesky role of time in the life of a series author. Long time, Faithful Friends of Frank will recall that he first entered onto the scene in 2010, and that his back story placed him as an MIT student in the Project Apollo program at MIT, which ran in the [1970s and 1980s]. That was already a bit of a stretch, because I also introduced our boy as a forty-something divorced male. Now, of course, its eight years later, and Frank is still a forty-something divorced male. Clearly, I can’t get away with this forever.
Actually, I can, because this is fiction, and I can do whatever the heck I want.
But in fact, it’s not that simple, because there’s also an internal chronology to the Frank books. We meet Marla, Frank’s daughter, in The Alexandria Project as a grad student. Subsequently, she meets her husband to be (Tim) and marries him, all in book three (The Doodlebug War). And now, Marla’s pregnant.
There are a few ways to get around this. One is to add books in between ones that are already written. Another is write ones that don’t include any references to chronological elements that would let you know where they fall at all (which is what I did in The Turing Test). And there’s also the temptation to jump way ahead – say, a book or short story about Frank twenty or thirty years in the future, to check in and see who and what he is way down the line.
Then there’s the approach (too late for that here) of writing books that don’t include any chronologies at all. Prolific mystery authors (think Agatha Christie and Hercule Poirot) usually follow this approach, and intelligently so. Otherwise the author is apt to get their temporal knickers in a twist. But there’s a cost to that. If you’d like characters to be real, it’s hard to portray them only in isolation. And real people with friends and families have lives that move on.
So, what does the future hold for Frank? Or will there be no future, and just a timeless, non-aging, perpetual present? Assuming I keep writing the series, I expect it will more likely lean to the latter.
Fortunate Frank! We should all be so lucky.
Next week: As mentioned above, I’m currently out in Frank Land, which in this case means that I’m camping and hiking in southern Utah, with no distractions of any kind, even Internet access. So I needed to drive about thirty miles today to catch a signal so I can post this chapter, courtesy of the very hospitable good folks at Willow Canyon Outdoor, an outfitter/bookseller/you name it emporium in Kanab. That means by next week I should have c. seven to twelve new chapters in the can. That frequently leads to reordering what happens when, so you’re guess is as good as mine what thread you’ll be tuning in on next.
“reviewing the source code of the BankCoin Genesis Block.”
In a few places, I get the impression that the code used to generate the genesis block is confused with the information stored inside the block.
Here is info about the Bitcoin genesis block:
https://en.bitcoin.it/wiki/Genesis_block
Rob, that’s an excellent observation and a very useful one, including for what lies ahead. Now that you make me think this through, you must of course be right – the software would generate the Genesis Block, and not Crypto. Taking that further (by assumption – not being a programmer, I don’t know for sure), while the BankCoin software would generate some sort of information describing the transaction information within the block (I assume this because everyone always talks about how a blockchain is transparent), there would be no reason for the software to generate source code in order to make the software comprising the block itself to be any more clear.
Does all that sound right? This is pretty crucial to how I’m working up the technical aspects behind the plot, so any light you or another reader can cast upon this would be gratefully received.
Yes, with only a small caveat.
The very first block, the genesis block, is special. It has no predecessor and it is generated by the software itself out of nothing. There is specialised code in the software just for that. But that first block is mainly empty.
“So, what does the future hold for Frank? Or will there be no future, and just a timeless, non-aging, perpetual present? Assuming I keep writing the series, I expect it will more likely lean to the latter.”
If you pick an age for Frank in one book, say 43 in “The Lafayette Campaign” (book 2) which would be situated in 2016, then you can decide to let him age one year in every book. So, in this book he would be 46 (45 if you do not count the Turing Test). That could also be in line with Marla’s life history. Then, by the time you are writing book 20, Frank would be 62. Because you will be somewhat older yourself by that time, as will be your readers, this might be less of a drawback than you think. However, it forces you to let Frank develop as a personality. Which means that at some point Frank will have to get into some sort of “permanent” relationship. But hey, polyamory could be his thing?
It also does mean that, eventually, the series will die as Frank will not plausibly life forever (still, 50 books are possible). But if someone wants to continue, they can come up with an answer.
This was basically the approach used in Harry Potter. But Rowling did have a very definite end point in mind when she started that series.
There is a drawback in this method. If you do not manage to produce a novel a year, you will get out of sync with the actual news. For instance, blockchains would not have worked last year and they will be old hat next year. But then, you can simply skip a year in the life of Frank. You can always fill it in later on 😉 Conan Doyle did this by letting Watson “publish old cases from his notes”.
Rob, good thoughts all. And I appreciate the implied wish that I live for another fifty years (possibly self interested on your part as a dedicated FoF). Unfortunately for all concerned (and especially me), that’s not likely to transpire, as I’ll turn 65 this year.
Hi Andrew,
Some technical points about GitHub: All code repositories (not “registries”) at GitHub use the Git distributed version control system. As a result when Frank downloads the source code for BankCoin, his download would usually include all of the version history that GitHub has on the project from the very first commit to the latest. I’m afraid your fourth and sixth paragraphs in this chapter might be a bit grating to the experienced software developers among your readership.
It *is* possible to download just the source code for a specific released version of a project, but an investigator like Frank isn’t going to do that because he is always going to want to be able to see the full version history, which the usual and efficient “git clone” command will give him. Once he has cloned the repo from GitHub his laptop copy then holds all of the changes and log messages for every commit that the GitHub repo has, so he wouldn’t have to go back to GItHub to look for other versions within the same repository.
He could use the GitHub project to get a list of all of the other developers who have forked the original project, which usually means they want to get some of their changes merged into it. This is not a list of everyone who has cloned the repo though.
Developers can truncate the version history in a Git repo before pushing it to GitHub, so the absence of older commits from the repo that you describe is fine technically. Your text at the beginning seems a bit confused as to how Frank decided which version to build — if he had picked the earliest tagged version it would be unusual if that was also the first commit, but that could be consistent with someone releasing a fully-working version of the code.
Your description of GitHub also seems a bit too dismissive, their value-added-services did just make Microsoft pay $7.5Bn for the company.
I would also second RobvS’s point about confusing the contents of the Genesis block (which is just fixed data) with code that implements some functionality.
– Andrew
Andrew, thanks very much indeed for the helpful comments. Although I have many clients that use GitHub (including The Linux Foundation and all of its hosted projects), I’m not a developer myself, so thanks for the help.
Leaving aside things like using “registries” incorrectly, though, the problem I have here is less inaccuracy as trying to explain something to a non-technical audience, as well as to develop the plot line in a way they can follow. In this case, Frank really does just want to get a baseline version of BankCoin before, he believes, anyone has had a chance to mess with it.
When he goes to GitHub, he finds that Schwert had completed the alpha version completely on his own. Hence, the first version of the source code is all there is as a starting point at GitHub – there were no other developers involved, nor did Schwert have any interest or reason to post any notes regarding its development.
That’s what I was going for, so my challenge is how to say it without annoying developers. I’ll take another crack at these paragraphs and will post it in a comment here. If you notice it and have the time to comment on whether I’ve hit the mark, tha would be appreciated.
“Schwert had completed the alpha version completely on his own.”
That should not be difficult. In such a case, a developer works on a private repository on his/her own systems until there is a working alpha version. Then s/he makes a clean version without version control and loads the code into a fresh project in github.
You notice this when you see that the first code commit (often the second commit as the first will be an empty initialization) is massive and builds to a working system. Often the commit message will say as much.
So, if Frank inspects the commit log of bankcoin, he will see that the first code commit is huge. A sure sign of substantial off repository development.
Andrew, how about this? And by the way, here’s my take on the GitHub acquisition, and what aspects contributed to its valuation in Microsoft’s eyes: http://www.consortiuminfo.org/standardsblog/articles/microsoft-acquires-github-what-too-soon
I remember well, by the way, when Linus basically put Linux development on hold while he wrote the Git code. Another amazing piece of work on his part.
So here goes with the revised paragraphs in question. Let me know what you think:
“He realized he hadn’t yet paid much attention to the early history of the BankCoin blockchain, things like what its development status was when the banks jumped on the BankCoin wagon, how many developers had been involved before that and who they might have been. Maybe he should do a deep dive on the beta, or better yet the alpha version instead. The records at GitHub should help him decide that. He logged on and found the repository.
How about that.
The BankCoin repository started with the full alpha version of BankCoin, and just the source code at that. Hmm. Schwert must have been working on BankCoin in a different repository before that, either at GitHub or at some other open source forge. He clicked some more keys. Not at GitHub. At least, not under the BankCoin name. More clicking. Or under Schwert’s name. So where was it?”
This is indeed completely transparent to anyone who ever used git or github. That is how you should do things.
Btw, “some other open source forge” is a pun. SourceForge.net was/is a famous hosted Open Source repository. It has been eclipsed by Github.
Rob, yes, I remember the glory days of SourceForge well. I’ve always wondered how they lost their very substantial lead to GitHub. Kind of a MySpace to Facebook situation. I’ll have to go ask Mr. Google and find out.
Andy,
“When he goes to GitHub, he finds that Schwert had completed the alpha version completely on his own.”
Bitcoin was developed like that. Here is a link to the first github commit to the Bitcoin repository:
https://github.com/bitcoin/bitcoin/tree/4405b78d6059e536c36974088a8ed4d9f0f29898
and more detail is found here:
https://github.com/bitcoin/bitcoin/commit/4405b78d6059e536c36974088a8ed4d9f0f29898
You see that this is already a lot of files and code. It is clear that this code had been in development for quite a long time.
Here is an introduction on how to start a repository on Github.
Thanks very much indeed, Rob – that’s extremely useful. So how does this sound:
““He realized he hadn’t yet paid much attention to the early history of the BankCoin blockchain, things like what its development status was when the banks jumped on the BankCoin wagon, how many developers had been involved before that and who they might have been. Maybe he should do a deep dive on the beta, or better yet the alpha version of BankCoin instead. The records at GitHub should help him decide that. He logged on and found the repository.
How about that.
The BankCoin repository started with the full alpha version of BankCoin, and just the source code at that. Hmm. Schwert must have been working on BankCoin in a different repository before that, either at GitHub or at some other open source forge. He clicked some more keys. Not at GitHub. At least, not under the BankCoin name. More clicking. Or under Schwert’s name. So where was it?”
He went back and looked at the source code again. And how about that. It was a clean copy, without any of the information you’d normally expect – no record of prior versions, no record of what changes had been made. Schwert must have cleaned all that out before he launched BankCoin into the world. Well, it fit well with everything else Frank did – and more importantly didn’t – know about the secretive coder.”
Hi Andy,
Your June 22nd version reads much better, thanks. I’m just wondering if you meant anything specific by the words “and just the source code at that” — open source code repositories almost never contain compiled versions of the code because (unless it was written in Java) the binaries would be CPU- and OS-specific. In fact early in the life an interesting project such as BankCoin (very soon after that alpha version was first published) I would expect to see other people offering patches to get the code to compile and run properly on other OS’s, different compilers and/or in other environments (firewall configurations etc.).
I understand you’re juggling having to simplify the technical stuff with getting the details right, I guess I’m just offering you some additional things Frank might find suspicious in the history of the code he’s looking at.
– Andrew
Andrew, thanks for letting me know I’m getting closer. The words you highlighted were in response to Rob’s 6/21 comment, which read in part as follows:
“That should not be difficult. In such a case, a developer works on a private repository on his/her own systems until there is a working alpha version. Then s/he makes a clean version without version control and loads the code into a fresh project in github.”
So what I meant was that it would not include any of the versioning or commit data that would be reflected in the code base on Schwert’s private, off-line development platform, which I can easily clarify.
Does that make sense?