Thursday, January 30, 2020

Blockchain Development Mega Guide

I know you all just wanna read about the price but for any of you who want to learn more about the development side: I thought I'd share some of the cool sh*t I've found on the web.

Getting started

Blockchain Development Mega Guide (Medium Article)

Resources

How to become a blockchain developer
I don't know why they chose javascript to demonstrate lol, but otherwise, this is a solid guide!

https://asecuritysite.com/encryption
Site is kinda ugly, but packed with information about cryptography, with demonstrations and code.

https://en.bitcoin.it/wiki/Category:Developer
The bitcoin wiki developer page.

Free courses

These are about understanding more than programming but... It's a decent start.

Blockchain Technology - Berkley
Bitcoin and Blockchain - Khan Academy
Cryptography Course - Stanford
Blockchain Fundamentals - Plural sight
Blockchain Principles and Practices - Plural sight
Hyperledger Blockchain Technologies - Linux Foundation
Introduction to FinTech - Hong Kong University

What the Guides don't tell you...

There are a good few things these guides don't tell you. These aren't hard concepts but are often glossed over or replaced with a more convenient learning example.

...about mining

In practice, mining isn't really about looking for a hash starting with serval '0' bits. Mining actually requires finding a hash that has a numerical value is less than a target hash (this results in a number of '0' bits). That target hash can be calculated from the difficulty. Bitcoin wiki page on difficulty.

//pseudo code hash = sha256(block) if big_endian(hash) < big_endian(target_hash): mined = true

...about adjusting difficulty

Difficulty must be adjusted to keep up with the changing hash rate of the network (to keep a block time of say 10 mins). The easiest way is to adjust the current target based on how much faster or longer it took to mine X blocks.

``` //pseudo code
target_hash = big_endian(diff_to_target(difficulty))
quotient = epoch_duration / expected_duration
new_target_hash = target_hash * quotient

difficulty = target_to_diff(new_target_hash)
```

I will add more to this when I get a chance



No comments:

Post a Comment