Imagine yourself to be a University Dean in the position of creating a new course on blockchains.
To which department would you assign the course?
In fact, any of these departments would be appropriate.
Blockchains are both technological and social movements, yet very few people have both backgrounds.
libertarism: a collection of political philosophies and movements that uphold liberty as a core principle. Libertarians seek to maximize political freedom and autonomy, emphasizing freedom of choice, voluntary association and individual judgement
Laissez-faire (listen): an economic system in which transactions between private parties are absent any form of government intervention
Anarcho-capitalism: a political philosophy and economic theory that advocates the elimination of centralized states in favor of self-ownership, private property and free markets
Crypto comes from the Ancient Greek kruptós, meaning hidden or secret
Crypto-anarchism: a form of anarchy accomplished through computer technology. Crypto-anarchists employ cryptographic software for confidentiality and security while sending and receiving information over computer networks, in an effort to protect their privacy, their political freedom, and their economic freedom (Crypto Anarchist Manifesto, Timothy C. May, 1988)
Cypherpunk: any activist advocating widespread use of strong cryptography and privacy-enhancing technologies as a route to social and political change (A Cypherpunk’s Manifesto, Eric Hughes, 1993)
We the Cypherpunks are dedicated to building anonymous systems. We are defending our privacy with cryptography, with anonymous mail forwarding systems, with digital signatures, and with electronic money. […] Cypherpunks write code. We know that software can’t be destroyed and that a widely dispersed system can’t be shut down. A Cypherpunk’s Manifesto by Eric Hughes (9 March 1993)
Blockchain is much more than a technology, it is also a culture and community that is passionate about creating a more equitable world through decentralization.
We are now entering a radical evolution of how we interact and trade because, for the first time, we can lower uncertainty not just with political and economic institutions but with technology alone. Bettina Warburg
A cryptographic token is a quantified and tradable unit of value recorded on the blockchain.
A cryptocurrency (or digital currency) is a digital asset designed to work as a medium of exchange that uses strong cryptography to secure financial transactions, control the creation of additional units, and verify the transfer of assets.
B-money was an early proposal created by Wei Dai for an anonymous, distributed electronic cash system (Wei Dai’s proposal)
Bitcoin: A Peer-to-Peer Electronic Cash System, Satoshi Nakamoto, 2009
The message of Satoshi Nakamoto (creator of Bitcoin) embedded into the very first Bitcoin block:
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
Considering the context in which they appear – during the bank-driven financial crisis of 2009, the worst after the economic recession of 1929 – these words are calling for revolution.
Here is the original post of Satoshi Nakamoto proposing a peer-to-peer electronic cash system called Bitcoin.
Fiat money is a currency without intrinsic value that has been established as money, often by government regulation.
The term fiat derives from the Latin fiat (“let it be done”) used in the sense of an order, decree or resolution.
The numerous components of blockchain technology can make it challenging to understand.
However, each component can be described simply and used as a building block to understand the larger complex system.
The building blocks of a blockchain are… blocks.
A block is a container for data
In its simplest form it contains:
genesis_block = list(number = 0, timestamp = "2009-01-03 18:15:05", data = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks")
The ideal cryptographic hash function has five main properties:
# load library library(digest) # hash a string digest("Così tra questa immensità s'annega il pensier mio: e il naufragar m'è dolce in questo mare", "sha256")
## [1] "721956f9e4d4a31524ec94bc9926445c81228b96129132745a362eca8d016154"
# hash a slightly different string digest("Così tra questa infinità s'annega il pensier mio: e il naufragar m'è dolce in questo mare", "sha256")
## [1] "0095d410ee1935a163891970ee2606f2031238ac7adf839fe02d3353162cf5a0"
mine <- function(previous_block, genesis = FALSE){ if (genesis) { # define genesis block new_block <- list(number = 0, timestamp = Sys.time(), data = "I'm genesis block", parent_hash = "0") } else { # create new block current_number = previous_block$number + 1 new_block <- list(number = current_number, timestamp = Sys.time(), data = paste0("I'm block ", current_number), parent_hash = previous_block$hash) } # add hash new_block$hash <- digest(new_block, "sha256") return(new_block) }
chain = function(nblocks) { # mine genesis block block_genesis <- mine(NULL, TRUE) # first block is the genesis block blockchain <- list(block_genesis) if (nblocks >= 2) { # add new blocks to the chain for (i in 2:nblocks){ blockchain[[i]] <- mine(blockchain[[i-1]], FALSE) } } return(blockchain) }
chain(nblocks = 3)
## [[1]] ## [[1]]$number ## [1] 0 ## ## [[1]]$timestamp ## [1] "2019-11-20 11:29:21 CET" ## ## [[1]]$data ## [1] "I'm genesis block" ## ## [[1]]$parent_hash ## [1] "0" ## ## [[1]]$hash ## [1] "8c80781dc1edf148577d65c62fcf22c0b05e3cc996e2212bcf00bdf689843f81" ## ## ## [[2]] ## [[2]]$number ## [1] 1 ## ## [[2]]$timestamp ## [1] "2019-11-20 11:29:21 CET" ## ## [[2]]$data ## [1] "I'm block 1" ## ## [[2]]$parent_hash ## [1] "8c80781dc1edf148577d65c62fcf22c0b05e3cc996e2212bcf00bdf689843f81" ## ## [[2]]$hash ## [1] "ca704285eaf95c172fa151bfbfea9979b28c5ce5605d1faafd1fe49f72b718be" ## ## ## [[3]] ## [[3]]$number ## [1] 2 ## ## [[3]]$timestamp ## [1] "2019-11-20 11:29:21 CET" ## ## [[3]]$data ## [1] "I'm block 2" ## ## [[3]]$parent_hash ## [1] "ca704285eaf95c172fa151bfbfea9979b28c5ce5605d1faafd1fe49f72b718be" ## ## [[3]]$hash ## [1] "57e8f432bbce2a703fbbd5fcb8a0ab1aaed02032d1b3f27694582af600a1a77a"
proof_of_work = function(block, difficulty) { block$nonce <- 0 hash = digest(block, "sha256") zero <- paste(rep("0", difficulty), collapse="") while(substr(hash, 1, difficulty) != zero) { block$nonce = block$nonce + 1 hash = digest(block, "sha256") } return(list(hash = hash, nonce = block$nonce)) }
proof_of_work(genesis_block, 1)
## $hash ## [1] "047a64e2b4e9b1a410e3000137388b87bd5a81cc4f123e31b955165e9f43696d" ## ## $nonce ## [1] 6
proof_of_work(genesis_block, 2)
## $hash ## [1] "003722bfa5f44c1feb4cb378c3c9ef81c296aad19b45cb276895205445cf52db" ## ## $nonce ## [1] 456
proof_of_work(genesis_block, 3)
## $hash ## [1] "0001d5bd9509cf12da2fece9045768d474064bc7b587332c8b19cd57b937aab4" ## ## $nonce ## [1] 2222
proof_of_work(genesis_block, 4)
## $hash ## [1] "00009859981b96f9db1ef9ad0b231579859d40f793dc76436adf9f20d5042112" ## ## $nonce ## [1] 98060
mine <- function(previous_block, difficulty = 3, genesis = FALSE){ if (genesis) { # define genesis block new_block <- list(number = 0, timestamp = Sys.time(), data = "I'm genesis block", parent_hash = "0") } else { # create new block current_number <- previous_block$number + 1 new_block <- list(number = current_number, timestamp = Sys.time(), data = paste0("I'm block ", current_number), parent_hash = previous_block$hash) } # add nonce with proof of work new_block$nonce <- proof_of_work(new_block, difficulty)$nonce # add hash new_block$hash <- digest(new_block, "sha256") return(new_block) }
chain = function(nblocks, difficulty = 3) { # mine genesis block block_genesis = mine(NULL, difficulty, TRUE) # first block is the genesis block blockchain <- list(block_genesis) if (nblocks >= 2) { # add new blocks to the chain for (i in 2:nblocks){ blockchain[[i]] <- mine(blockchain[[i-1]], difficulty) } } return(blockchain) }
chain(nblocks = 3)
## [[1]] ## [[1]]$number ## [1] 0 ## ## [[1]]$timestamp ## [1] "2019-11-20 11:29:26 CET" ## ## [[1]]$data ## [1] "I'm genesis block" ## ## [[1]]$parent_hash ## [1] "0" ## ## [[1]]$nonce ## [1] 362 ## ## [[1]]$hash ## [1] "000e5ee72128f8307466596cba155b217d7b3e344096ec701046d469ed78bf75" ## ## ## [[2]] ## [[2]]$number ## [1] 1 ## ## [[2]]$timestamp ## [1] "2019-11-20 11:29:26 CET" ## ## [[2]]$data ## [1] "I'm block 1" ## ## [[2]]$parent_hash ## [1] "000e5ee72128f8307466596cba155b217d7b3e344096ec701046d469ed78bf75" ## ## [[2]]$nonce ## [1] 4576 ## ## [[2]]$hash ## [1] "000c897976b5d3a7c64c978828f1a51561bc2fe923ae3370fd597c7cfb94e2ff" ## ## ## [[3]] ## [[3]]$number ## [1] 2 ## ## [[3]]$timestamp ## [1] "2019-11-20 11:29:27 CET" ## ## [[3]]$data ## [1] "I'm block 2" ## ## [[3]]$parent_hash ## [1] "000c897976b5d3a7c64c978828f1a51561bc2fe923ae3370fd597c7cfb94e2ff" ## ## [[3]]$nonce ## [1] 9799 ## ## [[3]]$hash ## [1] "00070075af88d78ba128512881a114634befe86ca38b406e4d98c30b660189bb"
## Digital signature # load library library(openssl) # generate a private key (key) and a public key (pubkey) key <- rsa_keygen() pubkey <- key$pubkey # build a transaction trans = list(sender = "A", receiver = "B", amount = "100") # serialize data data <- serialize(trans, NULL) # sign (a hash of) the transaction with private key sig <- signature_create(data, sha256, key = key) # verify the message with public key signature_verify(data, sig, sha256, pubkey = pubkey)
## [1] TRUE
## Encryption # load library library(openssl) # generate a private key (key) and a public key (pubkey) key <- rsa_keygen(512) pubkey <- key$pubkey # message msg <- charToRaw("Blockchain is magic!") # cipher the message with public key ciphermsg <- rsa_encrypt(msg, pubkey) # decrypt the message with private key rawToChar(rsa_decrypt(ciphermsg, key))
## [1] "Blockchain is magic!"
Finally, the blockchain ledger is distributed over a peer-to-peer network.
The steps to run the network are as follows:
The incentive of rewards may help encourage nodes to stay honest.
If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins.
He ought to find it more profitable to play by the rules (generate new coins), such rules that favor him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. Satoshi Nakamoto (Bitcoin white paper)
Ethereum blockchain is enriched with smart contracts. The term smart contract dates to 1994, defined by Nick Szabo as:
A computerized transaction protocol that executes the terms of a contract. The general objectives of smart contract design are to satisfy common contractual conditions (such as payment terms, liens, confidentiality, and even enforcement), minimize exceptions both malicious and accidental, and minimize the need for trusted intermediaries.
The user issuing a transaction to a smart contract will have to pay a fee proportional to the complexity of the code executed.
Crypto art (or rare digital art) is limited-edition, collectible, and tradable art registered with a token on a blockchain.
We illustrate the typical workflow of crypto art with a real example from the digital gallery SuperRare.
“Ownership does not include intellectual property rights such as copyright claims, ability to produce commercially, and create merchandise therefrom, etc. The intellectual property remains the possession of the creator” SuperRare Terms of Service
Any sufficiently advanced technology is indistinguishable from magic. Arthur C. Clarke