Frank was feeling uneasy as he returned from his weekly Task Force meeting. The president had authorized preparations for a possible attack against the Russ. The Task Force had developed and presented him with three exploits. The first would take down the Russ and require significant redesign of the underlying software to prevent such an attack from succeeding succeed again.

The second would be less dire: it would cause the Russ blockchain to make frequent errors in completing transactions. The technical details of this exploit were particularly subtle, and would likely take the Russians much time and effort to understand and fix. The last option would significantly degrade the performance of the Russ blockchain, allowing it to manage only ten percent of the number of transactions it was currently supporting; this would be the easiest exploit to find and fix.

The Task Force recommended the second option, and the president concurred.

The problem, from Frank’s point of view, was the prospect of retaliation. If the Russians decided that the Russ was the victim of a cyberattack, they would certainly suspect the United States, no matter how hard it was to trace the hack back to its source. What could be a better way to retaliate than by launching an attack on BankCoin? The Kremlin had access to some of the best black hats in the world. It would be reckless to assume the Russians had not been more successful than Frank in finding a fatal flaw in the blockchain most of the financial world relied upon.

He’d listened during the meeting without objecting. Now that he’d had more time to think, though, he felt he needed to make his concerns known. He typed them up and sent them off to Colonel Lawrence.

*  *  *

Whoever was messing with Frank’s mind in New York had broadened his attack. The same sorts of actions were now occurring at his condo in Washington. And in both places they were becoming more disturbing.

Last week, he’d reached into his closet in New York for a blue blazer and found that it had been repeatedly slashed with a knife or a razor blade. When he returned to Washington he found his new loafers sitting side by side in his closet as usual. But they were charred beyond recognition. This was getting hard to ignore. But at the same time, he was uncertain what to do to make it stop – quit the bank? Quit the Task Force? Maybe it didn’t have anything to do with either – why didn’t whoever it was just come right out and tell him what they wanted him to do, or stop doing?

Things at work seemed strange as well. He’d obviously made a big mistake by going to Audrey Addams; it was clear she looked at him differently now. And Dirk Delhohn seemed to be avoiding him. For that matter, everyone seemed to be. At this rate, maybe he would need to quit.

Instead, he doubled down in his office. Last week, he’d set up his own BankCoin node so he could launch attacks against it and observe what happened in real time. That required downloading a huge amount of data – every transaction that had been transacted on BankCoin to date, right back to the Genesis Block. A half-dozen new servers were now humming away in his office, together with a portable air conditioner that struggled bravely but unsuccessfully to counteract the heat the servers threw off. But turning the servers on and off was fine; updating his blockchain node was no different than updating his email when he turned his laptop on. The blocks that were created while his system was down simply downloaded and added themselves to his copy of the BankCoin blockchain one when he powered his servers back up.

For starters, Frank tried every way he could think of to mess with the verification of the blocks as they came in. But the BankCoin software seemed to perform that function flawlessly, no matter what he tried. Perhaps he hadn’t thought of the right attacks to try? Either way, it was time to set it aside for now. He shut the node down and wondered what to try next. He went back to his air gapped system and the early version of BankCoin to look for inspiration.

For at least the tenth time, he called up the source code for the section of BankCoin that created the Genesis Block. As usual, the occasional bits of sloppy code annoyed him. As usual, he wondered whether Schwert had ever cleaned those up. This time he decided to check and went onto GitHub to look at the current version of Bankcoin. see. To his surprise, he saw that the junk lines were still there. Talk about lazy! Schwert might be the top dog on the BankCoin project, but that didn’t mean he shouldn’t take suggestions to fix his own mistakes. Frank wondered whether anyone ever submitted fixes for code Schwert wrote? Maybe not.

Frank was energized now. He had loaded a series of tools on his air gapped system at the same time he had copied the BankCoin software onto it, and turned to them now to clean up the source code. Then he used a compiler – a software program that turned human-readable source code into machine-readable object code – to add his edited code to the copy of BankCoin on his air gapped system. To be sure the software would still run, he created a new block of transactions and gave the commands to add it to the blockchain.

It didn’t work. Specifically, the new block failed to link up to the block before it.

Okay. That was humiliating. Had he made a mistake? Then he remembered Schwert had built his own compiler for BankCoin development. All the participating banks used it, and Frank had dutifully loaded a copy of it on his air gapped system, too. He had always thought the need for a special compiler was odd – source code was source code, after all. He couldn’t imagine there was anything so different about the BankCoin architecture that warranted creating a customized compiler to turn BankCoin source code into object code.

He went back over the changes he’d made to the source code and couldn’t see anything that should cause a problem, so he opened the Schwert-approved compiler and repeated what he had just done – compiled the source code, updated his air gapped system, create a block of pretend transactions, and tried to add it.

The Schwert compiler didn’t work, either. So, he must have screwed up. But how? The changes were so minor …

He decided to run each of the two compilers using the original code instead of his cleaned up code, and see if that told him anything. It did. The Schwert compiler took longer to do the job. Not just a little, but twice as long. That was really odd. He sent off an email to Dirk Delhohn, asking if he knew what was so different about the Schwert compiler.

He drummed his fingers on his desk. What could make one compiler run at the same speed as another when converting one set of source code and so much longer when running the same code with such minor changes? Wasn’t a compiler just a ….

He slapped his head. Idiot! Of course. A compiler was only a compiler until you turned it into something else, and Schwert had created his own compiler! What Frank had thought was junk code must not be junk at all – it must be commands that triggered Schwert’s compiler to add in a lot of extra code that wasn’t reflected in the source code at all! Once he had edited that code out, neither his code nor Schwert’s would create a block that would link to the one before it, because both lacked the extra code the triggers would add.

Frank ran the two compilers again using Schwert’s original source code and watched the object code as it was compiled. Sure enough, as soon as Schwert’s compiler got to the first bit of code Frank had thought was an error, it started churning out object code that was different from the code Frank’s compiler was generating. When both had completed their task, he compared the two sets of object code, and, as expected, the code the Schwert compiler produced included twice as the many lines of code as the version his compiler created.

That meant the source code every bank in the BankCoin network was relying on was incomplete, and that every block in the BankCoin blockchain contained mystery code which had a purpose that could very well be evil.

He stood up and began pacing back and forth in the narrow confines of his office, his mind racing. He believed he’d finally found the fatal vulnerability he’d always feared might be lurking in BankCoin, and he’d also found his enemy – it must be Schwert himself. Schwert had indeed been careless, but not in the way that Frank assumed. What Schwert had done was save a bit of programming time. Instead of adding the equivalent of a “word search” feature to the compiler so that it would spot the multiple places in the BankCoin source code where it should insert extra pieces of object code, he’d simply included the triggers in the source code itself, assuming such tiny pieces of code would never be noticed, or, if noticed, properly understood. Or maybe Schwert had taken a temporary shortcut and intended to come back later and fix, but then forgotten to. That was probably it. BankCoin was, after all, a massive and complex piece of code; it was incredible that any single developer had been able to come so close to perfection.

So, what did the additional code do? The tools on his air gapped system also included a decompiler. As its name suggested, a decompiler did exactly the opposite of what a compiler accomplished. He could use it to turn the object code Schwert’s compiler had created back into source code that he could read and understand. Then the answer to the question would be clear.

But no such luck. When he did, he found that Schwert’s compiler not only turned source code into object code, but also “obfuscated” it, meaning it stripped out the information that made source code easy to understand. It also scrambled the code in ways that wouldn’t stop it from running, but would make it impossible for Frank to use a decompiler to turn it back into understandable source code.

That cinched it; the camouflaged code clearly must be malware. But figuring out what it was intended to do would be a long, tedious and challenging process. He would need to analyze the object code line by line, parsing out what it meant without any of the plain English (plain English to a programmer, that is) labels and guidance that source code provided. Instead of reading, for example “</search:config>” he’d be looking at something like “O0344561” and trying to figure out what that was telling the computer to do.

Clearly, this was going to take a while. He had a lot of code to go through. He looked at his watch and realized he’d need to hurry if he was going to catch his plane. Just as well; he’d rather tackle the job at home. He copied the extra object code onto a thumb drive and dropped it in his pocket.

*  *  *

The days had turned into a blur of late for Crypto; everything seemed to be confusion and danger now. And his nights were troubled. Every night now he suffered through what he had begun to think of as The Dream. For what seemed like hours, the white-gloved hands shuffled and cut the cards and did all the standard magical tricks, over and over again. When the dream ended, it was always in the same, enigmatic way: the hands displayed the king and queen of spades. Lately, though, the king had taken on the sour, frowning face of his father, and the queen, the sad features of his mother. Would did it mean? What could it mean?

He had no idea. So very much had changed. At first, he’d been like a classical composer, summoning grand, creative visions from his brain and heart to create a majestic melody line. Those had been wonderful days, working out the concept of the blockchain. Then came the equally pleasurable, but more structured steps. Just as a composer transformed her melody into the complex score of a symphony, Crypto mapped out the architecture for the blockchain. As time went on, his work changed yet again. Just as the composer laboriously creates the score for each section of the orchestra – the strings, the woodwinds, and so on – Crypto nurtured the evolution of his creation as it grew into a symphony of blockchain projects, each adding depth and its own unique voice to the splendid harmony that was the sum of its creative parts.

Then the truly hard and unforgiving part began. He had to deal with the developer-musicians, as it were, with all their quirks and passions. And then the outside world, as well. Just as a composer was vulnerable to the whims and business concerns of the management of the grand concert house where her magnum opus would premiere, Crypto was subject to the caprices of banks and bureaucrats and regulators. All of the nonsense and idiocy that drags true genius into the gutter. With opening night fast approaching, he was mostly a spectator now, waiting to see whether his true creation – his long-planned attacks – would collapse before the curtain went up or open to resounding applause and standing ovations. The latter, of course, from a very select audience. He wasn’t expecting good notices from the critics.

The emergence of the IB alliance was a particularly cruel development, now that he was so close. Whatever it took to ensure that his decade of creativity and sacrifice would achieve its goal, he would have to do. He was in agreement with the Bees about that, with the exception of murder. There were some lines he could not bring himself to cross.

Ding!

The tone from his computer told him the daily download of activity from Frank’s computer had just been transmitted by the malware. He scanned his way downward and then almost screamed, reflexively clutching his desk with both hands. There, on the screen, was a short email Frank had sent to Dirk Delhohn. It read:

Dirk, can you tell me what’s so special about Schwert’s compiler?

*  *  *

With the change of atmosphere in New York, Frank was once again looking forward to returning to Washington. When he arrived home, it was dark and windy. He went upstairs, dumped his things in his bedroom, and settled down in his living room with a beer and his laptop. Something moving outside the slider caught his eye. He couldn’t make it out, though; it was only when the headlights of a passing car cast light in his direction that he caught the shadowy movement. Whatever.

He took a bigger pull than usual on his beer. His initial elation at discovering what he was sure was malware in BankCoin had yielded quickly to frustration and anxiety. The extra code Schwert’s compiler generated ran to over nine thousand lines. How long would it take him to slog through all that? What if Schwert launched an attack before he was done? Probably he should alert the bank, and maybe George Marchand and Colonel James, immediately. Yes, he would do that first thing in the morning.

What was that? It looked like something flapping back and forth where the feeder used to hang. Whatever it was, it was very distracting.

He got up, turned on the light on the balcony, and immediately stepped back, the gorge rising in his throat.

There, hanging from the balcony above, tossing in the embrace of the gusty wind, was the eviscerated carcass of Fang.

He turned and looked wildly around. There it was! On the dining room table!

He ran over and picked up the small, folded piece of cardboard. On it, he read:

BankCoin – Russ Task Force – Marla

Choose one

“Due to an unexpected family emergency I’ve had to leave town unexpectedly and will be out of touch for at least a week”

With trembling fingers, he typed the message into emails to Audrey Addams and Colonel James. Then he dashed out of his apartment, keying an Uber request into his phone as he ran.

*  * *

Author Notes for this Week:

So here we are last, at the exciting denouement. And I have some good news and bad news for you.

The good news is that I’ll finish the second draft of the book this weekend. That means its time for me to put out the call for beta readers – people who are willing to accept a copy of the second draft and read it from the beginning to help me, most importantly, find and evict all the gremlins that an author is too close to the text to spot. Does a minor character change gender unintentionally part way through the book? Is there a section a reader won’t understand? Is there a missing piece in the plot? Did I reveal something too early without realizing it? Is a chapter dull and might as well be cut? The list is endless. If you’re willing to be a beta reader, I would be very grateful.

The bad news is that this is the last chapter that I’ll be posting. For obvious reasons, when the book comes out, I’d like people to read the final version and not the flawed first draft. That said, if anyone who has been reading along would like to find out how it ends now rather than waiting till c. late Octobe, just let me know and I’ll email you the final few chapters and epilogue.

Since there won’t be a chapter this week (I will post periodic updates on how the book is coming along), I’ll provide a title reveal instead. My plan is to call book five (drum roll):

The Blockchain Revolution

A Tale of Insanity and Anarchy 

What do you think?