05 - Trust and 51% attack

Wooclap Questions

Transactions in Bitcoin require exactly…

  • … from 1 to N input accounts and from 1 to N output accounts (N being an integer)

In the Bitcoin protocol, if a node receives a transaction…

  • … it makes sure that it is already mined to accept it
  • it adds to the ledger

Among the properties of Consistency, Availability and Partition tolerance, the Bitcoin blockchain gives up on guaranteeing…

  • Consistency
    • (not serendipity)

In the Bitcoin’s blockchain, every block header keeps…

  • … the hash of the previous block’s header
    • (not signature)

Sorting blocks by hashing

Inside a block there is:

  • block header
    • hash previous block header
    • timestamp
    • nonce
    • merkle root hash
  • hash (block01 header)
  • transaction list

The computed hash of the black header is written into the hash previous block header of the next block.

  • in the Proof of Work model, the right to publish the next block is granted by solving a computationally intensive puzzle


  • when a node receives a completed block from another one, they are incentivized to include the new block
    • if other mining nodes accept, they start building off it
    • if they refuse, they will be building a shorter chain of blocks
      • by default, the longest valid chain is adopted

If we win at mining game, we are rewarded with coins! Who writes the special value? The miner itself! If we mine a block, we would like that the entire world knows this thing!

If a transaction is not known to any other node in the network but you, then the transaction is not accepted by the network.

So basically a miner wants to:

  • mine blocks
  • gain consensus by spreading its work
    • if they don’t, the transaction has never happened!

Bitcoin money supply

  • puzzles could be adjusted when too much blocks are produced

    • rewards are halved every four years
  • puzzles are a trade-off between security and complexity

  • it costs electricity

51% attack

  • kind of implementation of ^abbd96


I don’t wanna let to others people know who I am, but I want to make public that I am sending something from A to B.

For this reason is a bad idea including private stuff in transactions.

Users can have as many accounts as they please (wallets).

Private and public key cryptography is used for signing transactions.

  • that’s why using a real hand-written signature is a bad idea: is replicable!

More specifically:

  • private keys are used to digitally sign transactions
  • public keys are used to derive addresses
    • and they are used to verify signatures generated with private keys


If you have the private key you can do whatever you like