Chapter 4: Voting Blocks
Chain Wars (2014)

Bangkok Bound

Tine lay back in her seat, recalling her hectic day, as her flight headed for Thailand. She considered the conversation she had with Theo that morning.

Tine had decided to go to Bangkok, but Theo still had a price on his head. She was sympathetic. Theo could not return to his old apartment. She would let Theo stay at her place in Utrecht, and he would keep a low profile, continuing to help her remotely.

Tine flying to Bangkok Tine liked Theo, but she was not kidding herself. They were not likely to run off and live happily ever after if she stayed. She decided she would not give up real opportunities for imaginary romances.

In the first class cabin, the interior walls and ceiling displayed a composite camera view from the outside. This display gave the illusion that the cabin itself was transparent. For many, it was a potent reminder that at this moment they sat in a large cylinder flying through the atmosphere. Tine enjoyed it. The abundance of fluffy, white clouds was comforting, and she soon drifted off to sleep.

When Tine woke, the interior of the cabin displayed the classic theme, with simulated hard plastic walls and virtual windows every few feet. The retro display was the default during turbulent weather, restricting the view. Swiping downward on the virtual window pulled down a virtual shade. Studies suggested that blocking the view during rough weather had a calming effect on passengers.

After she cleared customs in Suvarnabhumi Airport, she spotted Oak standing just past the retainer wall. He waved to get her attention and looked happy to see her. Somehow he had managed to get the luggage bot with her two large suitcases to go to him, instead of finding Tine, as it normally would.

Home, Sweet Home

Oak and Tine hopped on the skytrain and headed for town. They rode to Asoke station, heading for a nice condo that he had rented for her. "Here's a phone, prepaid with 0.1 BTC. My number is in the contacts," he explained as the skytrain came to a halt.

They got off the skytrain and walked a few blocks, then stopped in front of a modern-looking building. The entrance required authorization and Oak said, "Try your ID ring, or whatever you brought. I set the lease-owner value to your id:chainlordtine, since that's the identity we've been using. Your ID can approve or deny all. Just set up your whitelist when you have a chance."

The door opened, revealing a small lobby sporting a table with chairs, a large plant, and a water cooler. Oak and Tine paused in front of an elevator, and Oak reassured her with a smile. "Sleep all you need, Tine. Tomorrow when you're ready, call me, and we'll get set up to work."

Tine held her bio-ring up and walked toward the door. The ring scratches the wearer's skin when it's first put on their finger, but not again until after being removed. Her DNA profile was hashed and compared to a hash she had stored on the identity chains. She went up to her unit on the 34th floor, held her ring up to the door, and walked in.

Tine looked about the smartly furnished condominium and smiled contentedly. She took her shoes off, turned up the air conditioning, and collapsed onto the bed.

Tine woke up feeling disoriented. She glanced about the unfamiliar room, and finally walked over to the window to look outside. Her city view from the living room window looked out over a lake with trees, lots of buildings, the skytrain, and plenty more.

In her kitchen, Tine found a new coffee maker, coffee, and filters sitting on the counter. Tine removed the device from its box and made herself a fresh pot. She sipped her coffee and walked out onto the balcony. The warm air was gritty, and she took a minute to admire the view. Then she made the call.

Work to Do

Oak sat waiting for her in the quaint little shop by the skytrain entrance. He was already inside, in a fancy wooden chair by the window.

The shop sold collectible Chinese furniture, along with coffee and sandwiches. Tine bought a bubble tea from the man at the store entrance. He served her taro-flavored tea to her bagged in a sealed cup, and it cost only ten millibits. She settled back into a distinguished-looking leather chair and sipped her delicious drink, wondering about her first task.

"I sent BTS and MRT credits to your ID ring, Tine, which you can use to ride the skytrain or subway," explained Oak. "I have an office in that building across the street." He gestured toward the Exchange Tower on the far side of the busy intersection. "Tomorrow we'll get you a nice office set up there, and we'll go do some exploring around town."

Oak talked in a manner that Tine found soothing. Although she found herself far away from Utrecht, with only one person in the entire country to talk to, she felt excited.

"Today, Tine," Oak began cautiously, "I'm afraid we have some work to do. Computers are ready to go at your place. I had to get this done ahead of time," he said apologetically. "It can take a week simply to get your Internet connection here. Best to start early." Oak took a sip of his coffee. "I also bought you the latest Tesla suit design, the best full-immersion body suit money can buy."

He continued, "An important election is being held tomorrow in Belgrade. It's a close race, and one with important consequences for the region. We have reason to believe that someone will compromise the vote issuance. We need you to prevent that," he said calmly, wondering how many questions would come.

"I don't understand," was all that Tine said. She sucked a couple big bubbles through her fat straw and chewed on them happily. The bubbles were soft, but still strong enough to offer some great chewing.

Oak explained that the most widely used election chain, Votes 2.0, was the intended target for an attack. A competitor, ElectChain, which used a more modern design, had only a small market share. All the major votes took place on Votes 2.0 chain, since it had a spotless record. So naturally the upcoming Belgrade election would be held on the Votes 2.0 platform.

Votes 2.0 Election Chain

Votes 2.0 contracts could be visually constructed using a high-level coding interface. The election contract was a template, with modules inserted according to the chosen election constraints. After choosing an election type, one-time or recurring, the specific options were compiled in as needed. One-time elections had a fixed set of options, and ran on-chain. Recurring elections often ran on sidechains if they wanted any custom rules or conditions.

To set up an election contract on this chain, the user first grabbed a basic template and modules. This was done in the simulated environment, of course. Next, specific values would be set for features in any modules to be included, before placing it into the contract. Most election contracts were generated without writing a single line of code.

Before Votes 2.0 could be used to hold an election, all parties needed to agree on a set of voters and the rules governing the process. Elections required a complete list of voter digital identities to issue voting tokens to. A set of published public keys were gathered for all the identities listed, and served as the voting population.

After issuing all votes, the mapping between IDs and vote addresses must be verified as correct. That information is then destroyed as a prerequisite for starting the voting.

Each voter first generated a Votes 2.0 address with their Voter ID wallet, then signed it with their private key. The public keys representing the pool of eligible voters were tried until one was found that unencrypted the address. One token was sent to that address. That token could then be spent to one of the candidate addresses and counts as one vote.

Yet one of the modules for one-time elections seemed to have a bug. Worse yet, someone was exploiting it to sell votes in major elections!

The one-time-only elections that used Votes 2.0 were considered safer than the customized sidechain elections. But an attacker found a weakness in the way tokens were issued to the voters. An election the previous week had been unfairly influenced when about 10% more votes were cast than were supposed to be. The original voter list of addresses and IDs was deleted before voting, and the fake votes could not be identified.

"There's a hard fork coming very soon, but for now we need to save this election, Tine," Oak said as he sipped his coffee and glanced at passersby outside the window. He continued, "We have an admin account for you on Votes 2.0, so you can run system-level contracts on there."

Oak stood up, indicating the meeting had ended. "You can read the bug description on Gitchain too. Better get a feel for this chain and the exploit they are focused on before trouble shows up. The election starts in a few hours."


Tine and her Attack Tiger Scripts


Battle in Bangkok

Tine walked back with a sense of purpose and determination. Still, the election would have to wait for another few minutes because Tine was famished.

She stopped in front of a street vendor selling grilled satay chicken. "How much is it?" she asked in her first ever attempt at Thai, while pointing to the skewered meat. Tine didn't mind that they showed her the prices on calculators, because she had forgotten the basic numbers in Thai. She nodded in response, and pointed to a bag of sweet pineapple she wanted to buy.

"Kop khun ka," Tine said with pride, thanking the smiling woman. She had remembered and used both the phrases she had memorized on the flight over. Mission accomplished! Finally, she got the attention of the next vendor, who was selling Thai iced tea, and completed her lunch shopping.

When she got back to her place, Tine walked through the one-time election setup options, mapping out all the possible variations. She browsed through the code for a few modules she suspected might be the attack target. She logged in to a few familiar haunts, and sent a secure message to Theo.

"Goede morgen, Theo!" she texted, wondering if he was awake yet.

She calculated. It was almost 2 p.m. in Bangkok and that would make it about 8 a.m. in Utrecht. Theo was not awake yet, apparently. Hopefully, he would be able to help her fight today on the Votes 2.0 chain.

Tine got a session with Oak displayed on a nice, empty area on the wall. She logged into her admin account on the Votes 2.0 chain and ran a test contract. She also noticed that Naga Yib, the latest and greatest from Oak, had already bootstrapped on the RustyChain. Theo came online, asking how he could help. "I need your eyes on the Votes 2.0 chain, Theo," she said with an insistent tone.

Tine suited up, exploring the blockchain Tine donned her brand new "super hero outfit," as Theo had once called it, and it connected to her local network. This particular Tesla Immersion Suit was state of the art; the most expensive design, freshly printed by Oak. The suit was a 3D visualizer suite that provided the near-realistic experiences.

Tine started wearing a suit back when she first saw how fun and useful the early 3D blockchain viewing apps had been. This allowed her to interact with what looked like a physical blockchain, fly backward or forward in history, and grab blocks to inspect them. If she grabbed a transaction and yanked, the entire chain of history would be revealed in red, from the origination of the token to the present unspent outputs.

Tine made her blockchain attack scripts display as tigers. She always thought tigers were magnificent creatures. Elections not in an initial or terminal state were shown as idle blue gears, spinning when the contracts were active. Naga Yib was now her ally? How quickly the tables had turned, she thought.

Tine scrolled through her main scripts, her little tigers. She stepped through attack procedures, checking the logfiles afterward, and sipped her tea with confidence.

Image credits: @rockbarcellos. Edited by: @cherapple