Mining Digital Gold one Block at a Time?! • Don’t Expect to Get Insanely Rich (Quick) • Tulips :tulip::tulip::tulip: (like Blockchains) are Great and Gorgeous (and will Endure)

    b0 = Block.first(
            { from: "Dutchgrown", to: "Vincent", what: "Tulip Bloemendaal Sunset", qty: 10 },
            { from: "Keukenhof",  to: "Anne",    what: "Tulip Semper Augustus",    qty: 7  } )

    b1 = Block.next( b0,
            { from: "Flowers",    to: "Ruben",   what: "Tulip Admiral van Eijck",  qty: 5  },
            { from: "Vicent",     to: "Anne",    what: "Tulip Bloemendaal Sunset", qty: 3  },
            { from: "Anne",       to: "Julia",   what: "Tulip Semper Augustus",    qty: 1  },
            { from: "Julia",      to: "Luuk",    what: "Tulip Semper Augustus",    qty: 1  } )
    ...

(Source: `blockchain_with_transactions.rb`)

# Awesome Blockchains

A collection about awesome blockchains - open distributed databases w/ crypto hashes incl. git ;-). Blockchains are the new tulips :tulip::tulip::tulip:.

Contents:

- Frequently Asked Questions (F.A.Q.s) & Answers
- Do-It-Yourself (DIY) - Build Your Own Blockchain
  - Python • Ruby • JavaScript • Java • Go
- Blockchain Articles
- Blockchain Books
- Blockchain (Lite) Crypto Hash Libraries
- Git, Git, Git - The Stupid Content Tracker with Crypto Hashes
- Classic Tulip Mania
- Awesome Awesomeness

## What’s News?

For blockchain books, see the new Best of Crypto Books page »

### The Open Blockchains Book of the Year 2020 Award Goes To…

Libra Shrugged: How Facebook Tried to Take Over the Money by David Gerard, November 2020, 182 Pages – Introduction: Taking over the money ++ A user’s guide to Libra ++ The genesis of Libra: Beller’s blockchain ++ To launch a Libra: Let’s start a crypto ++ Bitcoin: why Libra is like this ++ The Libra White Papers ++ Banking the unbanked ++ The Libra Reserve plan and economic stability ++ Libra, privacy and your digital identity ++ The regulators recoil in horror ++ David Marcus before the US House and Senate ++ July to September 2019: Libra runs the gauntlet ++ October 2019: Libra’s bad month ++ Mark Zuckerberg before the US House ++ November 2019: The comedown ++ Central bank digital currencies ++ Epilogue: Libra 2.0: not dead yet ++ Appendix: 2010–2013: The rise and fall of Facebook Credits

For more about Diem (formerly Libra), see the Awesome Diem (formerly Libra) and Move page »

For crypto quotes, see the new 100+ Best of Crypto Quotes - I HODL, you HODL, we HODL! - BREAKING: BITCOIN JUST BROKE $22 000! page »

### The Best Crypto Quote “Oracle Saying” of the Year 2020 Award Goes To…

> SEC Investor Education: - Don’t understand an investment? - Don’t invest in it.

Yes, but what if there’s only 21 million of it?

- Trolly McTrollface

## Frequently Asked Questions (F.A.Q.s) & Answers

Q: What’s a Blockchain?

A: A blockchain is a distributed database with a list (that is, chain) of records (that is, blocks) linked and secured by digital fingerprints (that is, cryptho hashes). Example from `blockchain.rb`:

    [#<Block:0x1eed2a0
      @timestamp     = 1637-09-15 20:52:38,
      @data          = "Genesis",
      @previous_hash = "0000000000000000000000000000000000000000000000000000000000000000",
      @hash          = "edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b">,
     #<Block:0x1eec9a0
      @timestamp     = 1637-09-15 21:02:38,
      @data          = "Transaction Data...",
      @previous_hash = "edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b",
      @hash          = "eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743">,
     #<Block:0x1eec838
      @timestamp     = 1637-09-15 21:12:38,
      @data          = "Transaction Data......",
      @previous_hash = "eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743",
      @hash          = "be50017ee4bbcb33844b3dc2b7c4e476d46569b5df5762d14ceba9355f0a85f4">,
      ...

Q: What’s a Hash? What’s a (One-Way) Crypto(graphic) Hash Digest Checksum?

A: A hash e.g. `eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743` is a small digest checksum calculated with a one-way crypto(graphic) hash digest checksum function e.g. SHA256 (Secure Hash Algorithm 256 Bits) from the data. Example from `blockchain.rb`:

    def calc_hash
      sha = Digest::SHA256.new
      sha.update( @timestamp.to_s + @previous_hash + @data )
      sha.hexdigest   ## returns "eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743"
    end

A blockchain uses

- the block timestamp (e.g. `1637-09-15 20:52:38`) and
- the hash from the previous block (e.g. `edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b`) and finally
- the block data (e.g. `Transaction Data...`)

to calculate the new hash digest checksum, that is, the hash e.g. `be50017ee4bbcb33844b3dc2b7c4e476d46569b5df5762d14ceba9355f0a85f4`.

Q: What’s a Merkle Tree?

A: A Merkle tree is a hash tree named after Ralph Merkle who patented the concept in 1979 (the patent expired in 2002). A hash tree is a generalization of hash lists or hash chains where every leaf node (in the tree) is labelled with a data block and every non-leaf node (in the tree) is labelled with the crypto(graphic) hash of the labels of its child nodes. For more see the Merkle tree Wikipedia Article.

Note: By adding crypto(graphic) hash functions you can “merkelize” any data structure.

Q: What’s a Merkelized DAG (Directed Acyclic Graph)?

A: It’s a blockchain secured by crypto(graphic) hashes that uses a directed acyclic graph data structure (instead of linear “classic” linked list).

Note: Git uses merkelized dag (directed acyclic graph)s for its blockchains.

Q: Is the Git Repo a Blockchain?

A: Yes, every branch in the git repo is a blockchain. The “classic” Satoshi-blockchain is like a git repo with a single master branch (only).

## Do-It-Yourself (DIY) - Build Your Own Blockchain

Python • Ruby • JavaScript • Java • Go

### Python

Let’s Build the Tiniest Blockchain in Python Series by Gerald Nash

- Let’s Build the Tiniest Blockchain In Less Than 50 Lines of Python (Part 1), July 2016
- Let’s Make the Tiniest Blockchain Bigger With More Lines of Python (Part 2), July 2016

Build Your Own Blockchain: A Python Tutorial by Eric Munsing, March 2017, (Source)

Learn Blockchains by Building One (in Python) by Daniel van Flymen, September 2017, (Source) – The fastest way to learn how Blockchains work is to build one

Build Your Own Blockchain (in Python 3) Series by Jack Schultz, (Source)

- Part 1: Creating, Storing, Syncing, Displaying, Mining, and Proving Work, October 2017
- Part 2: Syncing Chains From Different Nodes, October 2017
- Part 3: Writing Nodes that Mine and Talk, November 2017

A Practical Introduction to Blockchain with Python by Adil Moujahid, March 2018, (Source)

### Ruby

How Does Bitcoin Force Consensus Among Byzantine Generals? by Fabio Akita, November 2017

blockchain-lite - Build your own blockchains with crypto hashes; revolutionize the world with blockchains, blockchains, blockchains one block at a time! by Gerald Bauer, Ruby Advent Calendar 2017 / Day 1, December 2017

merkletree library - Build Your Own Crypto Hash Trees; Grow Your Own Money on Trees by Gerald Bauer, Ruby Advent Calendar 2017 / Day 19, December 2017

centralbank command line tool (and library) - Print Your Own Money / Cryptocurrency; Run Your Own Federated Central Bank Nodes on the Blockchain Peer-to-Peer over HTTP by Gerald Bauer, Ruby Advent Calendar 2017 / Day 24, December 2017

A guide to building a blockchain & cryptocurrency from scratch (Source) by Antoine Fink, April 2021

### Crystal

Write your own blockchain and Proof-of-Work (PoW) algorithm using Crystal by Bradford Lamson-Scribner, May 2018, (Source)

### JavaScript

Writing a Tiny Blockchain in JavaScript by Xavier Decuyper, July 2017

Node.js Blockchain Imlementation: BrewChain: Chain+WebSockets+HTTP Server by Darren Beck, November 2017, (Source) – Protecting the tea making ledger from unscrupulous colleagues

Build your own Blockchain in Javascript/Visualization of Blockchains by Nam Chu Hoai, January 2018

### TypeScript

Naivecoin: a tutorial for building a cryptocurrency by Lauri Hartikka, (Source)

### Java

Creating Your First Blockchain with Java, Part 1 by Kass, December 2017, (Source)

### Kotlin

Let’s implement a cryptocurrency in Kotlin by Vasily Fomin, July 2018, (Source)

### SQL

Blockchain by Example in SQL Server by Benjamin Campbell, December 2017, (Source)

### Rust

Building Blockchain in Rust Series by Jacob Lindahl, GeekLaunch, (Source), (Slide Decks in PDF) - Part 1: Blocks and Hashing, January 2019 - Part 2: Mining, January 2019 - Part 3: Chains and Checks, January 2019

### Go

Building Blockchain in Go Series by Ivan Kuznetsov, (Source)

- Part 1: Basic Prototype, August 2017
- Part 2: Proof-of-Work, August 2017
- Part 3: Persistence and CLI, August 2017
- Part 4: Transactions 1, September 2017
- Part 5: Addresses, September 2017
- Part 6: Transactions 2, September 2017
- Part 7: Network, October 2017

Blockchain Series in Go by by Coral Health (Source)

- Code your own blockchain in less than 200 lines of Go! by Coral Health, January 2018
- Part 2: Networking — Code your own blockchain in less than 200 lines of Go! by Coral Health, February 2018
- Code your own blockchain mining algorithm in Go! by Coral Health, March 2018

### Talk Notes

- Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in JavaScript from Zero (Scratch) by Gerald Bauer, Vienna.js, September 2017
- Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in Ruby from Zero (Scratch) by Gerald Bauer, Vienna.rb, Dezember 2017
- Blockchain vs (Hyper) Ledger – Inside (Hyper) Ledger Lite - Add Transactions One Block at a Time and Balance the Accounts (Books) by Gerald Bauer, Hyperledger Vienna, March 2018
- Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in Go from Zero (Scratch) by Gerald Bauer, Vienna.go, April 2018

### More

See Build your own Blockchain / Cryptocurrency @ Build your own (insert technology here)

### Samples

#### Blockchain from Scratch - Ruby Version

    class Block

      attr_reader :timestamp
      attr_reader :data
      attr_reader :previous_hash
      attr_reader :hash

      def initialize(data, previous_hash)
        @timestamp     = Time.now
        @data          = data
        @previous_hash = previous_hash
        @hash          = calc_hash
      end

      def self.first( data="Genesis" )    # create genesis (big bang! first) block
        ## note: uses all zero for previous_hash ("0")
        Block.new( data, "0000000000000000000000000000000000000000000000000000000000000000" )
      end

      def self.next( previous, data="Transaction Data..." )
        Block.new( data, previous.hash )
      end

    private

      def calc_hash
        sha = Digest::SHA256.new
        sha.update( @timestamp.to_s + @previous_hash + @data )
        sha.hexdigest
      end

    end  # class Block

    #####
    ## let's get started
    ##   build a blockchain a block at a time

    b0 = Block.first( "Genesis" )
    b1 = Block.next( b0, "Transaction Data..." )
    b2 = Block.next( b1, "Transaction Data......" )
    b3 = Block.next( b2, "More Transaction Data..." )

    blockchain = [b0, b1, b2, b3]

    pp blockchain

(Source: `blockchain.rb`)

will pretty print (pp) something like:

    [#<Block:0x1eed2a0
      @timestamp     = 1637-09-15 20:52:38,
      @data          = "Genesis",
      @previous_hash = "0000000000000000000000000000000000000000000000000000000000000000",
      @hash          = "edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b">,
     #<Block:0x1eec9a0
      @timestamp     = 1637-09-15 21:02:38,
      @data          = "Transaction Data...",
      @previous_hash = "edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b",
      @hash          = "eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743">,
     #<Block:0x1eec838
      @timestamp     = 1637-09-15 21:12:38,
      @data          = "Transaction Data......",
      @previous_hash = "eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743",
      @hash          = "be50017ee4bbcb33844b3dc2b7c4e476d46569b5df5762d14ceba9355f0a85f4">,
     #<Block:0x1eec6d0
      @timestamp     = 1637-09-15 21:22:38,
      @data          = "More Transaction Data...",
      @previous_hash = "be50017ee4bbcb33844b3dc2b7c4e476d46569b5df5762d14ceba9355f0a85f4",
      @hash          = "5ee2981606328abfe0c3b1171440f0df746c1e1f8b3b56c351727f7da7ae5d8d">]

Comments from the reddit ruby posting:

> Wait, so a blockchain is just a linked list?

> > No. A linked list is only required to have a reference to the previous element, a block must have an identifier depending on the previous block’s identifier, meaning that you cannot replace a block without recomputing every single block that comes after. In this implementation that happens as the previous digest is input in the calc_hash method.

What about Proof of Work / Waste?

Let’s add a proof of work / waste to the blockchain. In the classic blockchain you have to compute a block hash that starts with leading zeros (`00`). The more leading zeros the harder (more difficult) to compute. Let’s keep it easy to compute with two leading zeros (`00`), that is, 16^2 = 256 possibilites (^1,2). Three leading zeros (`000`) would be 16^3 = 4_096 possibilites and four zeros (`0000`) would be 16^4 = 65_536 and so on.

(^1): 16 possibilties because it’s a hex or hexadecimal or base 16 number, that is, `0` `1` `2` `3` `4` `6` `7` `8` `9` `a` (10) `b` (11) `c` (12) `d` (13) `e` (14) `f` (15).

(^2): A random secure hash algorithm needs on average 256 tries (might be lets say 305 tries, for example, because it’s NOT a perfect statistic distribution of possibilities).

Example:

    def compute_hash_with_proof_of_work( difficulty="00" )
      nonce = 0
      loop do
        hash = calc_hash_with_nonce( nonce )
        if hash.start_with?( difficulty )
          return [nonce,hash]     ## bingo! proof of work if hash starts with leading zeros (00)
        else
          nonce += 1              ## keep trying (and trying and trying)
        end
      end
    end

    def calc_hash_with_nonce( nonce=0 )
      sha = Digest::SHA256.new
      sha.update( nonce.to_s + @timestamp.to_s + @previous_hash + @data )
      sha.hexdigest
    end

(Source: `blockchain_with_proof_of_work.rb`)

Let’s rerun the sample with the proof of work machinery added. Now the sample will pretty print (pp) something like:

    [#<Block:0x1e204f0
      @timestamp     = 1637-09-20 20:13:38,
      @data          = "Genesis",
      @previous_hash = "0000000000000000000000000000000000000000000000000000000000000000",
      @nonce         = 242,
      @hash          = "00b8e77e27378f9aa0afbcea3a2882bb62f6663771dee053364beb1887e18bcf">,
     #<Block:0x1e56e20
      @timestamp     = 1637-09-20 20:23:38,
      @data          = "Transaction Data...",
      @previous_hash = "00b8e77e27378f9aa0afbcea3a2882bb62f6663771dee053364beb1887e18bcf",
      @nonce         = 46,
      @hash          = "00aae8d2e9387e13c71b33f8cd205d336ac250d2828011f5970062912985a9af">,
     #<Block:0x1e2bd58
      @timestamp     = 1637-09-20 20:33:38,
      @data          = "Transaction Data......",
      @previous_hash = "00aae8d2e9387e13c71b33f8cd205d336ac250d2828011f5970062912985a9af",
      @nonce         = 350,
      @hash          = "00ea45e0f4683c3bec4364f349ee2b6816be0c9fd95cfd5ffcc6ed572c62f190">,
     #<Block:0x1fa8338
      @timestamp     = 1637-09-20 20:43:38,
      @data          = "More Transaction Data...",
      @previous_hash = "00ea45e0f4683c3bec4364f349ee2b6816be0c9fd95cfd5ffcc6ed572c62f190",
      @nonce         = 59,
      @hash          = "00436f0fca677652963e904ce4c624606a255946b921132d5b1f70f7d86c4ab8">]

See the difference? All hashes now start with leading zeros (`00`) and the nonce is the random “lucky number” that makes it happen. That’s the magic behind the proof of work.

##### Blockchain from Scratch - JavaScript Version

    class Block {

      constructor(data, previousHash) {
        this.timestamp    = new Date()
        this.data         = data
        this.previousHash = previousHash
        this.hash         = this.calcHash()
      }

      calcHash() {
        var sha = SHA256.create()
        sha.update( this.timestamp.toString() + this.previousHash + this.data )
        return sha.hex()
      }

      static first( data="Genesis" ) {    // create genesis (big bang! first) block
        // uses all-zero previousHash
        return new Block( data, "0000000000000000000000000000000000000000000000000000000000000000" )
      }

      static next( previous, data="Transaction Data..." ) {
        return new Block( data, previous.hash )
      }
    }

    //////
    // let's get started
    //   build a blockchain a block at a time

    b0 = Block.first( "Genesis" )
    b1 = Block.next( b0, "Transaction Data..." )
    b2 = Block.next( b1, "Transaction Data......" )
    b3 = Block.next( b2, "More Transaction Data..." )

    blockchain = [b0, b1, b2, b3]

    console.log( blockchain )

(Source: `blockchain.js`)

will log something like:

    [ Block {
         timestamp    : 1637-09-18 08:25:54,
         data         : 'Genesis',
         previousHash : '0000000000000000000000000000000000000000000000000000000000000000',
         hash         : 'c396de4c03ddb5275661982adc75ce5fc5905d2a2457d1266c74436c1f3c50f1' },
       Block {
         timestamp    : 1637-09-18 08:35:54,
         data         : 'Transaction Data...',
         previousHash : 'c396de4c03ddb5275661982adc75ce5fc5905d2a2457d1266c74436c1f3c50f1',
         hash         : '493131e09c069645c82795c96e4715cea0f5558be514b5096d853a5b9899154a' },
       Block {
         timestamp    : 1637-09-18 08:45:54,
         data         : 'Transaction Data......',
         previousHash : '493131e09c069645c82795c96e4715cea0f5558be514b5096d853a5b9899154a',
         hash         : '97aa3cb5052615d60ff8e6b41bef606562588c4874f011970ac2f218e2f0f4a8' },
       Block {
         timestamp    : 1637-09-18 08:55:54,
         data         : 'More Transaction Data...',
         previousHash : '97aa3cb5052615d60ff8e6b41bef606562588c4874f011970ac2f218e2f0f4a8',
         hash         : 'e10e020f832e46c2b60e1c3c0412bd370b2fde5f0f782c16eb87d0313ea0d3a3' } ]

## Blockchain Articles

Reflections on the Blockchain by Rufus Pollock (Open Knowledge Foundation), July 2016 – The DAO: Code is not Law – and It’s Dangerous to Think So ++ The Internet changed the world - surely the Blockchain will too? ++ Gold-rush or Internet-rush? ++ Governance Matters in Bitcoin ++ The Myth of a Costless, Ownerless Network ++ Lessons from History

On the Dangers of a Blockchain Monoculture by Tony Arcieri, January 2016 – The Bitcoin blockchain: the world’s worst database ++ Next-generation protocols ++ Decentralized ledger protocols ++ Bitcoin-NG ++ Blockchain! Blockchain! Blockchain! ++ The great decentralized database in the sky

I Don’t Believe in Blockchain by Tim Bray, May 2017

Minimum Viable Blockchain by Ilya Grigorik, May 2014 – Securing transactions with triple-entry bookkeeping ++ Securing transactions with PKI ++ Balance = Σ(receipts) ++ Multi-party transfers & verification ++ Double-spending and distributed consensus - Requirements for a distributed consensus network; Protecting the network from Sybil attacks; Proof-of-work as a participation requirement ++ Building the minimum viable blockchain - Adding “blocks” & transaction fee incentives; Racing to claim the transaction fees; Resolving chain conflicts; Blocks are never final ++ Properties of the (minimum viable) blockchain

Blockchains by analogies and applications: How blockchain compares to Git, Raft, and other technologies. by Kieren James-Lubin, January 2016 – Blockchains are databases ++ Understanding transactions ++ Persistent, replicated databases (related technology: Git) ++ Peer-to-peer networks (related technology: BitTorrent) ++ Distributed consensus (related technology: distributed databases, Raft) ++ Minting new coins (mining) ++ Embedded identities (related technology: TLS) ++ Smart contracts: Like SQL expressions & triggers ++ What can we really do with blockchains?

## Blockchain Books

Attack of the 50 Foot Blockchain: Bitcoin, Blockchain, Ethereum & Smart Contracts by David Gerard, London, 2017 – What is a bitcoin? ++ The Bitcoin ideology ++ The incredible promises of Bitcoin! ++ Early Bitcoin: the rise to the first bubble ++ How Bitcoin mining centralised ++ Who is Satoshi Nakamoto? ++ Spending bitcoins in 2017 ++ Trading bitcoins in 2017: the second crypto bubble ++ Altcoins ++ Smart contracts, stupid humans ++ Business bafflegab, but on the Blockchain ++ Case study: Why you can’t put the music industry on a blockchain

Mastering Bitcoin - Programming the Open Blockchain 2nd Edition, by Andreas M. Antonopoulos, 2017 - FREE (Online Source Version) – What Is Bitcoin? ++ How Bitcoin Works ++ Bitcoin Core: The Reference Implementation ++ Keys, Addresses ++ Wallets ++ Transactions ++ Advanced Transactions and Scripting ++ The Bitcoin Network ++ The Blockchain ++ Mining and Consensus ++ Bitcoin Security ++ Blockchain Applications

BEWARE: Bitcoin is a gigantic ponzi scheme¹. To the moon!? The new gold standard!? Do NOT “invest” trying to get-rich-quick HODLing. Why not? The bitcoin code is archaic and out-of-date. Burn, baby, burn! Proof-of-work / waste is a global energy environmental disaster using 300 kW/h per bitcoin transaction (!) that’s about 179 kilograms of CO₂ emissions². Programmable money (or the internet of value) for all future generations with (bitcoin) script without loops and jumps (gotos) and all “stateless”!? LOL.

¹: (Source: Best of Bitcoin Maximalist - Scammers, Morons, Clowns, Shills & BagHODLers - Inside The New New Crypto Ponzi Economics)

²: Assuming let’s say 0.596 kilograms of CO₂ per kW/h (that’s the energy efficiency in Germany) that’s about 179 kilograms of CO₂ per bitcoin transaction (300 kW/h × 0.596 kg). For more insights see the Bitcoin Energy Consumption Index.

Programming Bitcoin from Scratch by Jimmy Song, 2019 - FREE (Online Source Version) – Chapter 6 - Script - How Script Works • Example Operations • Parsing the Script Fields • Combining the Script Fields • Standard Scripts • p2pk • Problems with p2pk • Solving the Problems with p2pkh • Scripts Can Be Arbitrarily Constructed • Conclusion ++ Chapter 8 - Pay-to-Script Hash - Bare Multisig • Coding OP_CHECKMULTISIG • Problems with Bare Multisig • Pay-to-Script-Hash (p2sh) • Coding p2sh • Conclusion ++ Chapter 13 - Segregated Witness - Pay-to-Witness-Pubkey-Hash (p2wpkh) • p2wpkh Transactions • p2sh-p2wpkh • Coding p2wpkh and p2sh-p2wpkh • Pay-to-Witness-Script-Hash (p2wsh) • p2sh-p2wsh • Coding p2wsh and p2sh-p2wsh • Other Improvements • Conclusion

Programming Bitcoin Script Transaction (Crypto) Contracts Step-by-Step ( Beta / Rough Draft ) by Gerald Bauer et al, 2019 - FREE (Online Version) – Let’s start with building your own bitcoin stack machine from zero / scratch and let’s run your own bitcoin ops (operations)…

Programming Blockchains in Ruby from Scratch Step-by-Step Starting w/ Crypto Hashes… ( Beta / Rough Draft ) by Gerald Bauer et al, 2018 - FREE (Online Version) – (Crypto) Hash ++ (Crypto) Block ++ (Crypto) Block with Proof-of-Work ++ Blockchain! Blockchain! Blockchain! ++ Blockchain Broken? ++ Timestamping ++ Mining, Mining, Mining - What’s Your Hash Rate? ++ Bitcoin, Bitcoin, Bitcoin ++ (Crypto) Block with Transactions (Tx)

Mastering Ethereum - Building Contract Services and Decentralized Apps on the Blockchain - by Andreas M. Antonopoulos, Gavin Wood, 2018 - FREE (Online Source Version) What is Ethereum ++ Introduction ++ Ethereum Clients ++ Ethereum Testnets ++ Keys and Addresses ++ Wallets ++ Transactions ++ Contract Services ++ Tokens ++ Oracles ++ Accounting & Gas ++ EVM (Ethereum Virtual Machine) ++ Consensus ++ DevP2P (Peer-To-Peer) Protocol ++ Dev Tools and Frameworks ++ Decentralized Apps ++ Ethereum Standards (EIPs/ERCs)

Building Decentralized Apps on the Ethereum Blockchain by Roberto Infante, 2018 - FREE chapter 1 – Understanding decentralized applications ++ The Ethereum blockchain ++ Building contract services in (JavaScript-like) Solidity ++ Running contract services on the Ethereum blockchain ++ Developing Ethereum Decentralized apps with Truffle ++ Best design and security practice

Programming Crypto Blockchain Contracts Step-by-Step Book / Guide ( Beta / Rough Draft ) by Gerald Bauer et al, 2019 - FREE (Online Version) – Let’s Start with Ponzi & Pyramid Schemes. Run Your Own Lotteries, Gambling Casinos and more on the Blockchain World Computer…

Programming Cryptocurrencies and Blockchains in Ruby ( Beta / Rough Draft ) by Gerald Bauer et al, 2018 - FREE (Online Version) @ Yuki & Moto Press Bookshelf – Digital $$$ Alchemy - What's a Blockchain? - How-To Turn Digital Bits Into $$$ or €€€? • Decentralize Payments. Decentralize Transactions. Decentralize Blockchains. • The Proof of the Pudding is … The Bitcoin (BTC) Blockchain(s) ++ Building Blockchains from Scratch - A Blockchain in Ruby in 20 Lines! A Blockchain is a Data Structure • What about Proof-of-Work? What about Consensus? • Find the Lucky Number - Nonce == Number Used Once ++ Adding Transactions - The World’s Worst Database - Bitcoin Blockchain Mining • Tulips on the Blockchain! Adding Transactions ++ Blockchain Lite - Basic Blocks • Proof-of-Work Blocks • Transactions ++ Merkle Tree - Build Your Own Crypto Hash Trees; Grow Your Own Money on Trees • What’s a Merkle Tree? • Transactions ++ Central Bank - Run Your Own Federated Central Bank Nodes on the Blockchain Peer-to-Peer over HTTP • Inside Mining - Printing Cryptos, Cryptos, Cryptos on the Blockchain ++ Awesome Crypto ++ Case Studies - Dutch Gulden • Shilling • CryptoKitties (and CryptoCopycats)

Blockchain for Dummies, IBM Limited Edition by Manav Gupta, 2017 - FREE (Digital Download w/ Email) – Grasping Blockchain Fundamentals ++ Taking a Look at How Blockchain Works ++ Propelling Business with Blockchains ++ Blockchain in Action: Use Cases ++ Hyperledger, a Linux Foundation Project ++ Ten Steps to Your First Blockchain application

Get Rich Quick “Business Blockchain” Bible - The Secrets of Free Easy Money, 2018 - FREE – Step 1: Sell hot air. How? ++ Step 2: Pump up your tokens. How? ++ Step 3: Revolutionize the World. How?

Best of Bitcoin Maximalist - Scammers, Morons, Clowns, Shills & BagHODLers - Inside The New New Crypto Ponzi Economics by Trolly McTrollface, et al, 2018 - FREE

Crypto Facts - Decentralize Payments - Efficient, Low Cost, Fair, Clean - True or False? by Nouriel Roubini, David Gerard, et al, 2018 - FREE

Crypto is the Mother of All Scams and (Now Busted) Bubbles - While Blockchain Is The Most Over-Hyped Technology Ever, No Better than a Spreadsheet/Database by Nouriel Roubini, 2018 - FREE

IslandCoin White Paper - A Pen and Paper Cash System - How to Run a Blockchain on a Deserted Island by Tal Kol – Motivation ++ Consensus ++ Transaction and Block Specification - Transaction format • Block format • Genesis block ++ References

## Blockchain (Lite) Crypto Hash Libraries

Ruby • JavaScript

### Ruby

blockchain.lite (github: openblockchains/blockchain.lite.rb, gem: blockchain-lite) - build your own blockchain with crypto hashes - revolutionize the world with blockchains, blockchains, blockchains one block at a time

    require 'blockchain-lite'

    b0 = Block.first( "Genesis" )
    b1 = Block.next( b0, "Transaction Data..." )
    b2 = Block.next( b1, "Transaction Data......" )
    b3 = Block.next( b2, "More Transaction Data..." )

    blockchain = [b0, b1, b2, b3]

    pp blockchain

will pretty print (pp) something like:

    [#<Block:0x1eed2a0
      @timestamp     = 1637-09-15 20:52:38,
      @data          = "Genesis",
      @previous_hash = "0000000000000000000000000000000000000000000000000000000000000000",
      @hash          = "edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b">,
     #<Block:0x1eec9a0
      @timestamp     = 1637-09-15 21:02:38,
      @data          = "Transaction Data...",
      @hash          = "eb8ecbf6d5870763ae246e37539d82e37052cb32f88bb8c59971f9978e437743",
      @previous_hash = "edbd4e11e69bc399a9ccd8faaea44fb27410fe8e3023bb9462450a0a9c4caa1b">,
      ...

### JavaScript

blockchain.lite (github: openblockchains/blockchain.lite.js, npm: blockchain-lite) - build your own blockchain with crypto hashes - revolutionize the world with blockchains, blockchains, blockchains one block at a time

    const Blocks = require( "blockchain-lite" )

    // use basic block
    let Block = Blocks.basic

    let b0 = Block.first( 'Genesis' )
    let b1 = Block.next( b0, 'Transaction Data...' )
    let b2 = Block.next( b1, 'Transaction Data......' )
    let b3 = Block.next( b2, 'More Transaction Data...' )

    let blockchain = [b0, b1, b2, b3]

    console.log( blockchain )

will log something like:

    [ Block {
        timestamp:     2017-09-25 17:03:38,
        data:         'Genesis',
        previousHash: '0000000000000000000000000000000000000000000000000000000000000000',
        hash:         '08f4fa71628c5bc6b430228738bc8c41afaf508ece0b1cf9c9cac53d02e11829' },
      Block {
        timestamp:     2017-09-25 17:13:38,
        data:         'Transaction Data...',
        previousHash: '08f4fa71628c5bc6b430228738bc8c41afaf508ece0b1cf9c9cac53d02e11829',
        hash:         '740a4aeb3441484c96d1e7f63d31b716220ccee3b6fe94547cae2afbb6010626' },
      Block {
        timestamp:     2017-09-25 17:23:38,
        data:         'Transaction Data......',
        previousHash: '740a4aeb3441484c96d1e7f63d31b716220ccee3b6fe94547cae2afbb6010626',
        hash:         '28b6892a069e2ff7f1c3128ab495d7cd9b9b1636a51a7f69db93a14b1ee6b1a7' },
      Block {
        timestamp:     2017-09-25 17:33:38,
        data:         'More Transaction Data...',
        previousHash: '28b6892a069e2ff7f1c3128ab495d7cd9b9b1636a51a7f69db93a14b1ee6b1a7',
        hash:         '4cc0329b2c0cb32e0451fa3179bd944d4cd0fcf410939172f979e9fd2aa9f5f3' } ]

## Git, Git, Git - The Stupid Content Tracker with Crypto Hashes

Everything is local. Distributed is the new centralized.

### Quotes - Blockchains and Git

> Yep, that’s the joke. Nobody has been able to explain to me how the “blockchain” buzzword is significantly different to “git repo”. – Yaakov

> But if you said “let’s build a currency where all transactions are stored in a git repo” you wouldn’t be taken seriously for even 24 hrs. – Yaakov

> Soon explaining git like “a git repo is like a blockchain with commits instead of blocks”. – Nicolás Berger

> “A local branch is like a state channel. It can be pushed and merged into the master blockchain at any moment.” – Nicolás Berger

> The #Blockchain has changed the world. Here I make the argument that the #Blockchain is just like #git. – Jackson Kelley

> `git merge [-m REF] [-g BLOB] --push` Merge and push all signed commits to the blockchain. – Git Commands

### Books

Learn Enough Git to Be Dangerous by Michael Hartl - FREE (Online Version) – Getting started ++ Backing up and sharing ++ Intermediate workflow ++ Collaborating ++ Conclusion ++ Advanced setup

Pro Git by Scott Chacon and Ben Straub, 2nd Edition, 2014 - FREE (Online Version) – Getting Started ++ Git Basics ++ Git Branching ++ Git on the Server ++ Distributed Git ++ GitHub ++ Git Tools ++ Customizing Git ++ Git and Other Systems ++ Git Internals ++ A1: Git in Other Environments ++ A2: Embedding Git in your Applications ++ A3: Git Commands

> Git gets easier once you get the basic idea that branches are homeomorphic endofunctors mapping submanifolds of a Hilbert space. – Anonymous

### Open Distributed Databases on Git

football.db - open public domain football datasets (incl. clubs, national teams, leagues, match schedules, etc.)

world.db - open public domain world (country) datasets

beer.db - open public domain beer & brewery datasets

> Add a beer transaction to the #blockchain on #git and win a free Wiener Lager beer! Cheers. Prost. – Gerald Bauer @ Austria Codes

### Open Distributed (Hyper) Ledger Books on Git

Shilling (or Schilling) - Shilling on the Blockchain! - Rock-Solid Alpine Dollar from Austria

Tulips - Tulips on the Blockchain! - Learn by Example from the Real World (Anno 1637) - Buy! Sell! Hold! Enjoy the Beauty of Admiral of Admirals, Semper Augustus, and More

## Classic Tulip Mania

A period in the Dutch Golden Age during which contract prices for bulbs of the recently introduced tulip reached extraordinarily high levels and then dramatically collapsed in February 1637.

### Quotes - Blockchains are the next Internets / Tulips

> People who compare digital tokens to tulips are essentially saying digital tokens are a bubble backed by nothing but pure hype and speculation.

> What they fail to understand is that tulips come from dirt, not a blockchain.

> And as we all know, blockchain is possibly the best technological innovation since the internet. It will have a tremendous impact on global business and society in general. – TulipToken

### Books

Tulipomania: The Story of the World’s Most Coveted Flower & the Extraordinary Passions It Aroused by Mike Dash, 2001 – A Mania for Tulips ++ The Valley of Tien Shan ++ Within the Abode of Bliss ++ Stranger from the East ++ Clusius ++ Leiden ++ An Adornment to the Cleavage ++ The Tulip in the Mirror ++ Florists ++ Boom ++ At the Sign of the Golden Grape ++ The Orphans of Wouter Winkel ++ Bust ++ Goddess of Whores ++ At the Court of the Tulip King ++ Late Flowering

Tulipmania: Money, Honor, and Knowledge in the Dutch Golden Age by Anne Goldgar, 2007 – Something Strange ++ Art & Flowers ++ Bloemisten ++ Grieving Money ++ Bad Faith ++ Cabbage Fever ++ Glossary ++ A Note on Money

## Breaking News: CryptoKitties (Yes, Cute Little Cartoon Cats) on the Blockchain!

Collectible. Breedable. Adorable.

Collect and breed digital cats. Start meow. Buy! Sell! Hold!

Learn more @ cryptokitties.co

Latest (and Greatest) Investment Opportunity!

> Blockchain has unlocked the magic of digital scarcity, and combining that with the power of making the digital goods persistent gives them a potential value that is only limited by how much prestige a wealthy person might place on ownership of the item.

> – Justin Poirier‏

> All I want for Christmas is a CryptoKitty.

> – Kayla Williams

> I got a fever. And the only prescription is more CryptoKitties.

> – Eduardo Salazar

> My Gen 7 CryptoKitty #104375. The Future is Meow.

> – Anshul Dhawan

> - Fabulous Persian Spock Gerbil Gold Cottoncandy - Extremely rare gen 5 swift virgin | 2.9 ETH
> - Rarity: 0.00264% Gen 5 JAGUAR FABULOUS GOLD DALI!! VIRGIN!
> - Rarity: 0.0015% Princess Bubblegum is now for sale! Gen 12 | Brisk | Virgin | Chartreux | Bubblegum | Otaku | Emeraldgreen | Saycheese | Mauveover | Spock - Starts ETH 20/Ends ETH 10
> - Gold ducat, Gen 5, Virgin, Swift. Very cheap
> - Cheap Gen 1 cute kittie with rare genes! Only 0.125 ETH
> - UNIQUE Virgin Peach Googly Gold Mauveover gen:2 cooldown:1 0.87992% RARE
> - SUPER CHEAP: Gerbil, Ragdoll, Scarlet, Chestnut, Cotton Candy!!! 0.02 ETH (~$14)
> - I’m giving away a Gen 1 FAST Gold for free…

> – CrypoKittiesMarket

### Awesome CryptoKitties (and CryptoCopycats)

A collection about Awesome CryptoKitties (Yes, Cute Little Cartoon Cats) on the Blockchain! and CryptoCopycats - digital collectibles secured on a distributed public databases w/ crypto hashes. Are CryptoPuppies the new CryptoKitties? Learn by Example from the Real World (Anno 2017) - Buy! Sell! Hodl!

More @ cryptocopycats/awesome-cryptokitties

## Events, Meetups, Orgs

Revolutionize the world one country at a time. Blockchainers of the world, unite!

- Blockchain Austria • Blockkette Österreich – distributed centralized page for blockchain meetups & orgs in Austria (Central Europe)

## Awesome Awesomeness

A curated list of awesome lists.

- Blockchain Stuff – a curated list of blockchain and general cryptocurrency resources
- Blockchain Roadmap – a step-by-step roadmap / guide to become a blockchain programmer
- Awesome Blockchain by Igor Barinov et al – a curated list of the bitcoin blockchain services
- Awesome Blockchain by Tim Reznich et al – a curated list of blockchain services and exchanges
- Awesome Blockchain by `istinspring` et al – a curated list of awesome projects and services based on blockchain technology
- Awesome Coins by Kenneth Reitz et al – a guide to crypto-currencies and their algos
- Awesome CryptoKitties (and CryptoCopycats) by Gerald Bauer et al – a curated list about the awesome crypto kitties and copycats
- Awesome Git by Dick Tang et al – a curated list of amazingly awesome Git tools, resources and shiny things
- Awesome by Sindre Sorhus et al – a curated list of awesome lists

## Meta

License

The awesome list is dedicated to the public domain. Use it as you please with no restrictions whatsoever.

blockchains.md Github