Entering the World Computer

Ever wanted to create your own, individual cryptocurrency?
Read on, if you reach the end of this post and have followed all instructions in the hands-on guide, you will have created your own working cryptocurrency in less than 20 mins.

How’s that?
The magic-happens-here part is done by the revolutionary technology named Ethereum or Ethereum Virtual Machine (EVM).

What is it?
Summarizing this great explanation: “blockchains are peer-to-peer cloud computers that collectively enforce a set of rules on a historical record that they create together. Bitcoin’s rules define a currency: how are new tokens produced, how many are allowed, how they can be transferred from one person to another, etc.
Ethereum’s rules define a process for defining new rules.”

Feeling a little “meta” here? For sure. Let’s try another definition:

“If you think of Bitcoin as a decentralized version of Microsoft Excel, then Ethereum is a decentralized Excel where we’ve made the visual basic macros functional, […] with the Bitcoin blockchain, each cell on this hypothetical Excel table holds just a number; on the Ethereum blockchain, each cell is home to an entire computer program.”

Before reading on, make sure that you understand this new dimension Ethereum adds to existing blockchain technology.
Your Bitcoins are static data blobs (yes, we are oversimplifying here, Bitcoins can be scripted. But nobody does.)
Your Ethereum contract can be a static data blob as well. However, it might as well be a condition checking for the release of your home’s lock after you paid your rent or Skynet trying to take over the world.

In essence, the new dimension of Ethereum consists in each “coin” being a turing complete computer program running in a peer to peer cloud.

Not excited by now? Ok, let’s take another perspective.

Even if you don’t hack a new facebook or google at night, you should be able to read and understand this program

contract token {
 mapping (address => uint) public balanceOf; // [1]

 function token(uint supply) { // [2]
   if (supply == 0) supply = 10000;
   balanceOf[msg.sender] = supply;
 }

 function send(address receiver, uint amount) { // [3]
   if (balanceOf[msg.sender] < amount) return;
   balanceOf[msg.sender] -= amount;
   balanceOf[receiver] += amount;
 }
}

with a little help by this walk-through:

[1] We are assigning an address to an “amount” (in many languages a dictionary, in Java a Map, you name it. A simple Key/Value Store)
[2] A constructor (in many (OO-)languages a initializer for the new object). Here this initializer is called once during the whole lifecycle of a smart contract: when the contract is written in the ledger (deployed). msg.sender is the address of the creator of the contract. He gets all the money.
[3] A very simple function which makes sure that the storage status can be changed, otherwise the programm would be completely static. Changing the storage status means transfering/sending amounts from one key (address) of the dictionary to another key.

So, here we are. Maybe you got it already, this is your own, individual cryptocoin. It starts with an amount of 10000 “items” which can be subdivided and sent to other addresses. This is exactly the minimum functionality of a cryptocoin.

Before you go on, try hard to understand what happens here – we are facilitating the properties of a cryptocurrency blockchain (cryptography, consensus algorithms, peer to peer technology), everything eg. the Bitcoin blockchain has, for our own rules. These rules are just transfering a value from one address to another and storing the result. That’s exactly as usual cryptocurrencies do.

Our cryptocurrency is one app (also called dapp for decentralized app) inside the Ethereum blockchain. See it as one really smart Bitcoin simulating the whole Bitcoin system itself (we are going meta again).

Ok, enough head spinning, let’s try this out.

Hands-on Guide to your own Cryptocurrency

One word of warning: after this tutorial, you will have your running smart contract in the (local, private) Ethereum chain, but you will most certainly not have understood how this is working.

To understand the principles and technologies behind Ethereum, I strongly advise visiting these sites:

  1. The Ethereum Main site: your entry point to Ethereum
  2. The Ethereum Frontier Guide Gitbook
  3. The Ethereum Builder’s Guide Gitbook
  4. A 101 Noob Intro to Programming Smart Contracts on Ethereum
  5. (Hands-on) How to create a Private Ethereum Chain 

This tutorial mainly is just a very compressed rewrite of those sites.

Ok, to be clear about the 20 minutes: reset your stopwatch now, we are counting the time from now on.

What’s the tutorial about?

  1. Creating a  local, private Ethereum chain
  2. Setting the stage
  3. Deploying our cryptocurrency in cosmo.to

Creating a local, private Ethereum Chain

We will start with installing Geth, the Go implementation of the Ethereum protocol. We chose Geth because it runs in Linux as well as Windows without having to install any dependencies before and with a dead easy installation procedure. (Might be a good point for Golang)

All instructions are in the Ethereum Guide, however the Windows link is wrong currently, use this one.

Now, here’s the important part missing in the main guide for using specific Ethereum chains:

A Ethereum chain is defined by two factors, which are unique to each chain: the network id and the genesis block. The genesis block is the big bang of your own Ethereum universe and the values there are the cosmological constants of your universe. If you want to participate in a specific Ethereum chain, you will have to

  • have a network connection to a running node
  • know and use the network id (given as command line parameter)
  • use the identical genesis block

Our genesis block looks like this, save this as genesis.json to some directory. All parameters are explained in detail here.

{
 "nonce": "0xdeadbeefdeadbeef",
 "timestamp": "0x0",
 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "extraData": "0x0",
 "gasLimit": "0x8000000",
 "difficulty": "0x400",
 "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
 "coinbase": "0x3333333333333333333333333333333333333333",
 "alloc": {
 }
}

Now, if you start Geth with these parameters

geth --genesis genesis.json --datadir somedatadir --networkid 23 --rpc --rpcaddr="localhost" --rpcport="8080" --rpccorsdomain="*" --maxpeers=1 console

the most important part is already done. With genesis.json and network id 23 your chain is defined and whoever wants to play with it has to agree on the genesis and the network id. Or she could just start her own universe with different cosmological constants, just like in real life. If you believe in multiverse theory. And in real life.

Setting the stage

Actually, the node we started above does not do much, it just sits around and does not mine Ether. Therefore, our universe has no “time”, it is static. We have to create a primary, “etherbase” account, to facilitate mining which we need for deploying our contract.

We are in the console now, just type

personal.newAccount()

you will get back a address like ‘0x693309002d4fbb672c90df7063b75b42055f5449’, which is your primary account address. Do it a second time to have another account. You will feel lonely otherwise transfering your new currency between you and you.

Now exit the console and restart with

geth --genesis genesis.json --datadir somedatadir --networkid 23 --rpc --rpcaddr="localhost" --unlock="0x693309002d4fbb672c90df7063b75b42055f5449" --rpcport="8080" --rpccorsdomain="*" --maxpeers=0 --mine

At startup, you will be asked for the password, just type it in, even if the console is moving, your keystrokes will be recognized.

This time, our universe is ticking. We can go on.

Deploying our cryptocurrency in cosmo.to

Right now our operating system is running, but using it as a developer is quite complicated. You have to compile your contract to bytecode first, using a compiler like solc and afterwards have to deploy the contract.

Of course, using it is also not the most intuitive thing. Remember the first days of the internet, of Java Applets, mobile application development on Android – there you are.

However, for this early stage in the history of the “internet of value” there exist quite a lot tools which ease development, one (to me the most stunning) projects is cosmo.to

It is based on the solidity browser, but adds a lot of usibility, try it yourself. Open cosmo and follow the notes in the attached screenshot.

Choose “auto” compile, copy the sample token source code from above and deploy it. The last step is crucial, since this makes our application usable. It is like running your executable or, in more modern terms, deploying your application to Bluemix, Amazon AWS, the Google Cloud, whatever. But your application has guaranteed 100% availability, and noone can shut it down. If you deploy it to the real Ether chain that is.

For our local Ethereum chain, your contract has now been mined (by yourself) and added to the ledger.

cosmo

Congratulations! The logic can now be executed and cosmo helps you a lot in using it. Use “call” to query the state and “transact” to change the state. Send your new currency to your 2nd account. You will have to wait some time (depending on the speed of your somputer) till the transaction is executed, so don’t wonder if the call does not succeed for some time.

Now play around. Do you get it? Create new accounts, send your token/coins around. This really is a value-exchange (even a currency) if you want to and the others, who are using your contract, agree with you.

They do not have to trust you at all, anybody can easily deduct that the initial amount of your coins is fixed at 10000 and cannot be extended. This is written in the contract and really nobody can change this, as nobody can change the Bitcoin ledger.

When people will really understand this trustless system, which can now not only transfer static value, but also run any application you can think of, we are sure that great things will emerge. And now you can be part of the universal Dapp system development. Have fun!

KW 08 – Weekly Blockchainers Recap

Bitcoin 0.12 Release
Seit dem 23.2. gibt es das neue Bitcoin Core Release, im Link sind die Verbesserung ausgeführt. Bitcoin Skeptiker sehen in der Geschwindigkeit und der Limitierung der Transaktionen immer einen Grund warum das Bitcoin Netzwerk oder die Blockchain Technologie sich nicht komerziell durchsetzt. Ich bin lange genug in er Branche dabei um sagen zu dürfen, dass sich Performanceprobleme in IT Systemen immer mit ausreichend KnowHow lösen lassen. Das aktuelle Release ist ein Schritt in genau diese Richtung.

Hyperleger
Die IBM Blockchain Marketing Maschine ist gut angelaufen, in diversen Kanälen verkündigen sie was sie mit der Blockchain alles machen werden. Vehicle ist  das Linux Foundation Hyperleger Projekt. Viel zu sehen ist auf der Webseite noch nicht viel. Der IBM ist es aber zuzutrauen, dass etwas entsteht, was der (Berater-) Industrie gefällt. https://www.hyperledger.org  Ich erwarte ein private Blockchain für Smartcontracts nach dem “proof-of-stake” Verfahren. Mich würde es nicht wundern, wenn die Programmierung etwas komplizierter wird.

Video am Wochenende
Für alle die keine Lust zu lesen haben produziert Amanda ihren Video Blog   “The Daily Decrypt”  http://thedailydecrypt.com . Das Niveau variiert sehr stark, so viele Videos produzieren ist auf jeden Fall viel Arbeit, mal sehen wie lange sie durchhält. Der ein oder andere Interviewpartner kommt aus dem tiefsten Nerdistan.

Book Review – “Cryptocurrency: Wie virtuelles Geld unsere Gesellschaft verändert” von Michael Casey und Paul Vigna

Anfang Februar ist das Buch „The Age of Cryptocurrency“ in der deutschen Übersetzung erschienen. Die Gretchenfrage bei einem Buch mit 400 Seiten ist: Soll ich die Zeit investieren es zu lesen ?

Kurzfassung
Anzugträger: ja
IT Coder: optional
Auf einer Scala von 1 bis 10 bekommt das Buch von mir eine 6.

Langfassung
Die Autoren sind Journalisten, keine Techis. In dem Buch findet man keine wirkliche Beschreibung wie Bitcoin und Blockchain in der Tiefe funktionieren. Die Autoren sind eher der Meinung, dass es nicht notwendig ist die Wirkungsweise eines Ottomotors zu verstehen, wenn man Auto fahren will.

Gut gefallen hat mir die Darstellung, dass jeder, der sich mit den Bitcoins beschäftigt 5 Phasen der der „Kryptoakzeptanz“ durchläuft: Geringschätzung – Skepsis – Neugierde – Verständnis – Akzeptanz. Der Leser wird im Laufe des Buches seine eigene Position wahrnehmen und vermutlich eine Treppenstufe höher steigen.

Anhand von vielen bunten Geschichten, werden sinnvolle Anwendungsgebiete des Bitcoins beschrieben. Bitcoins lösen in vielen Ländern ohne stabiles Banken- und Währungssystem Probleme die es in Deutschland so gar nicht gibt. Was durchaus dazu führen kann, dass man links von anderen Ländern überholt wird. Beispiel China: dort gibt es Unternehmen, deren Unternehmenswert über Blockchains gehandelt werden und die Zentralbank arbeitet an einer eignen Blockchain.
Generell ist das Buch sehr Bitcoin-lastig. Die englische Version des Buchs ist ein Jahr älter, vor dem Hintergrund ist es verständlich das Beispiele für Smartcontract Anwendungen noch weniger konkret behandelt wurden. Ripple oder Ethereum werden am Rande erwähnt.

Im Buch sind persönliche Erfahrungen des Autors verarbeitet, der einige Zeit in Argentinien gelebt hat und selber erfahren musste welche Einschränkungen man in einem bankrotten Land ohne funktionierende Währung unterlegen ist.

Die Autoren holen sehr weit aus. Sie gehen auf die Entstehung des Geldes ein und auf die Fragestellung was Geldscheine wertvoll macht, oder warum Gold einen hohen Wert hat. Wenn man darüber nachdenkt, dass ein Geldschein auch nur ein Schuldschein des Staates ist, relativiert es doch das ein oder andere. Auch war es ein geschickter Kunstgriff von Satoshi bei Bitcoins in Analogie zum Gold das Minen einzuführen.

Des weiteren wird die Bitcoin Historie inklusive der Vorgänger und der Cypherpunk Bewegung beleuchtet, ich fand es spannend anschließend im Bitcoin Blog die Posts von Satoshi nachzulesen. Es erscheint so als wenn Satoshi, oder wie auch immer die Person oder Gruppe heißt, nur geschickt bekannte Ideen neu zusammen geführt hat. Die Zeit war nach dem Crash 2008 einfach reif für ein dezentrales System ohne Banken. Eine Erfindung wie Bitcoin erscheint als eine unausweichliche logische Notwendigkeit.

Den visionäre Schlussteil kann man sich sparen. Hier wagen sich die Autoren nicht, konkrete Prognosen zu treffen. Sie zeigen nur mögliche Szenarien auf.

Wir stehen ganz am Anfang des Umgangs mit dezentralen Anwendungen, Werten und Unternehmen. Man hätte auch die Ingenieure, die die ersten Computer mit Netzwerkkabeln verbanden nach Facebook fragen können. Dabei wollten sie nur, ohne ein Speichermedium von A nach B tragen zu müssen, Dateien kopieren können.

Zusammenfassend kann man sagen, das Buch ist gute amerikanische Unterhaltung, die man auch im halb wachem Zustand, oder am Strand verdauen kann. Faktenorientierte Leser wären mit einer auf 20 Seiten komprimierten Version zufriedener, aber die kann man schlecht für den gleichen Preis verkaufen. Es reiht sich ein in die Reihe der netten Bücher, die in bunten Bildern Wirtschaftsjournalismus betreiben. Die Qualität von „Cybercurrency“ ist nicht vergleichbar mit Christensens „Innovator’s Dilemma“ oder Ries „Lean Startup“. Also liebe Autoren es ist noch Platz ein wirklich gutes Business Buch über Bitcoins und Blockchains zu schreiben, bis dahin lesen wir dieses.

— Andreas Albrecht