The blockchain learning ecosystem has changed a lot since I first started. So I thought I'd share some of the cool sh*t I've either created or found on the web.
The Mega GuideBlockchain Development Mega Guide (Medium)Free coursesThese 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
ResourcesHow to become a blockchain developerI don't know why they chose javascript to demonstrate lol, but otherwise, this is a solid guide!
https://asecuritysite.com/encryptionSite is kinda ugly, but packed with information about cryptography, with demonstrations and code.
https://en.bitcoin.it/wiki/Category:DeveloperThe bitcoin wiki developer page.
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 miningIn 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 difficultyDifficulty 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
Happy Coding