What is a Blockchain?

David Guillory
6 min readFeb 21, 2021

With the enormous rise of interest in Bitcoin and Crypto Currencies, I decided to dig a little bit more deeper and research as to what all it entails besides money. Generally when a person is reading about Bitcoin or other coins they come across many references to ‘Blockchain”. So naturally that was the first topic I read up on.

A Blockchain simply put is a specific type of database. It differs from a normal database due to how data is stored. Normal databases are made up of tables that may or may not relate to one another. Blockchain is designed to store data in blocks that are as you might already have guessed… are chained together. So Blockchains are a type of databases but a database is not a type of Blockchain

As displayed in the diagram above, when a block is filled with data it is then linked to the previous node. The amount of information stored in a block is in the kilobytes. This information is hashed to decrease the file size. The type of information stored on these blocks are BTC or other Cryptocurrencies transactions, but is not limited to just transactions. Other things can be stored on the block such as: Music, Government documents, and more.

“Blockchain technology was first outlined in 1991 by Stuart Haber and W. Scott Stornetta, two researchers who wanted to implement a system where document timestamps could not be tampered with. But it wasn’t until almost two decades later, with the launch of Bitcoin in January 2009, that blockchain had its first real-world application”

So now that we know some of Blockchain, but now lets discover why this is literally THE FUTRE.

Generally when thinking of all the elements that go into a transaction, each side of the transaction usually has a bank account, one side uses a card or cash and depending on the form its either handed over or electronically sent. Well plenty of things could go wrong while completing this one transaction. Maybe the buyer does not have enough money in their account, maybe the seller or some other party stole the information of either party during the completion of this transaction. These are just a small group of things that could go wrong in the current state that we live in. Using Blockchain technology in essence is future proof!

One of the major benefits in utilizing Blockchain technology is the use of Cryptocurrency. There are lots to choose from and each of their values vary. Which is also is different from our current money because Cryptocurrency have a finite amount versus our money which can be printed.Completing a transaction with one of these coins is completely different from how it is now. Each party has two keys a private and a public key . Either one person requests money from the others public key or the other just sends the currency over to the others public key. In either case when the currency is sent the information is sent through a hashing algorithm. In Bitcoins case the algorithm is sha256.

Note 1: All variables are 32 bit unsigned integers and addition is calculated modulo 232
Note 2: For each round, there is one round constant k[i] and one entry in the message schedule array w[i], 0 ≤ i ≤ 63
Note 3: The compression function uses 8 working variables, a through h
Note 4: Big-endian convention is used when expressing the constants in this pseudocode,
and when parsing message block data from bytes to words, for example,
the first word of the input message "abc" after padding is 0x61626380

Initialize hash values:
(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

Initialize array of round constants:
(first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
k[0..63] :=
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

Pre-processing (Padding):
begin with the original message of length L bits
append a single '1' bit
append K '0' bits, where K is the minimum number >= 0 such that L + 1 + K + 64 is a multiple of 512
append L as a 64-bit big-endian integer, making the total post-processed length a multiple of 512 bits

Process the message in successive 512-bit chunks:
break message into 512-bit chunks
for each chunk
create a 64-entry message schedule array w[0..63] of 32-bit words
(The initial values in w[0..63] don't matter, so many implementations zero them here)
copy chunk into first 16 words w[0..15] of the message schedule array

Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array:
for i from 16 to 63
s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
s1 := (w[i- 2] rightrotate 17) xor (w[i- 2] rightrotate 19) xor (w[i- 2] rightshift 10)
w[i] := w[i-16] + s0 + w[i-7] + s1

Initialize working variables to current hash value:
a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7

Compression function main loop:
for i from 0 to 63
S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
ch := (e and f) xor ((not e) and g)
temp1 := h + S1 + ch + k[i] + w[i]
S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
maj := (a and b) xor (a and c) xor (b and c)
temp2 := S0 + maj

h := g
g := f
f := e
e := d + temp1
d := c
c := b
b := a
a := temp1 + temp2

Add the compressed chunk to the current hash value:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
h4 := h4 + e
h5 := h5 + f
h6 := h6 + g
h7 := h7 + h

Produce the final hash value (big-endian):
digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

Using this encryption method signs the contract which verifies its origin. Once this transaction is signed it is transmitted to the entire network by the recipient using their public key. So even though everyone on that blockchain has a record and the information of this transaction. Only the recipient can decrypt the message with their private key. A great part of the system other than its advanced hashing algorithm is the transparency of everything. The amount of transparency keeps everything in order and is partially how data is verified.

As Blockchain transactions are happening before it can be added to the chain they must be validated. The people who validate each block are known as ‘miners’. The process as to which a miner takes to validate a block is to solve a very complex mathematical problem, known as Proof of Work. The person who does this first is rewarded with that Blockchain’s currency and specified amount. In terms of Bitcoin, every 4 years their is a halving that occurs. What happens is the reward for solving or validating a block is cut in half. In 2009 the reward for validating a block was 50 BTC.

Source- sha256 algorithm and psuedocode from https://en.wikipedia.org/wiki/SHA-2

--

--