Skip to content

SamRotthier/BlockChainTraining

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Blockchain_Prototype_JS

In this project my goal is to learn more about blockchain technologie. This by building my own blockchain with JavaScript.

Followed tutorial: https://udemy.com/course/build-a-blockchain-in-javascript (Original repo from the course: https://github.com/erictraub/Learn-Blockchain-By-Building-Your-Own-In-JavaScript)

Info

This Blockchain can:

  • perform a proof of work to secure the blockchain
  • create new blocks trough a mining process
  • Create new, immutable, transactions
  • Validate the blockchain and all block data
  • Retrieve address/transaction/block data

Features:

  • API to interact with blockchain
  • Upgrade API to a decentralized blockchain network, to host our blockchain
  • A concensus algorithm to make sure the data is legitimate and always synchronized
  • A Block Explorer, to xplore the data in our blockchain trough a user interface

Used Technologies (Installed packages):

  • Node.JS
  • Express
  • Nodemon
    • Nodemon will automatically restart the server for us after every change (save).
    • Onder package.json, scripts : "start": "nodemon --watch dev -e js dev/api.js" => Watch the dev folder for changes to js files and restart the api.js file
  • body-parser
  • uuid
  • request-promise

Learned

What is a blockchain?

  • An immutable, Distributed Ledger
    • Immutable means that it cannot be changed (transaction is set in stone)
    • A Ledger is a collection of financial accounts or transactions
    • Distributed means that it is not controlled by a single entity
  • This is a sort of ledger (database) of made transactions <- Short own description
  • Multiple people (thousands) host nodes and each node has a copy of the entire network (this makes it distributed)

Wat is mining?

  • Dat is het crearen van een block
  • De nieuwe transacties zijn nog niet compleet tot er een block gecreëerd met deze transacties in, hierna zijn ze gesolideerd

wat is proof of work?

  • Dit maakt de blockchain secure.
  • Dit zorgt ervoor dat er niet zomaar slechte blocks (niet legaal) op onze chain gemaakt worden. Dit doet het door de huidige block data en de vorige block hash te nemen, daarmee een specifieke hash te proberen generen. In ons geval willen we dat deze met 4x 0 start (Voorbeeld: 0000ADBASFD1233454ASD). Doordat de hash256 sudo random is gaat hij moeten blijven loopen tot hij deze 0000 heeft gevonden in de hash (Lopen door nonce getallen).
  • De reden dat deze manier de blockchain veilig maakt is omdat bij het genereren van de juiste hash, er enorm veel door de methode gelopen moet worden, Dit gebruikt een hele hoop computer kracht en een hoop energie. Wanneer iemand dan iets wilt aanpassen moet er enorm veel calculaties gebeuren, hierdoor wordt het niet meer haalbaar om dit te doen op een goed gebruikte blockchain. Dit komt omdat alle blocken aan elkaar hangen (previous block hash), dus alle blocken die komen na de aanpassing moeten ook opnieuw gecreëerd/berekend worden.

wat is een genesis block?

  • dit is de eerste block in de blockchain
  • deze wordt aangemaakt bij het starten van de blockchain Deze heeft geen nonce of previous block hash, maar ook geen hash

Hoe is het netwerk decentralized?

  • Blockchains zijn gehost op een decentralized netwerk, dit zijn meerdere nodes/API die samenwerken zodat bij het aanpassen van 1 node niet de hele blockchain gecomprimeerd is. Er kan worden nagekeken wat de andere nodes hebben van data enzo fraude tegen gaan
  • de nieuwe node wordt gebroadcast naar alle andere nodes in het netwerk zodat ze weten dat deze bestaat

Hoe zijn de blocken gesyncroniseerd?

  • elke node moet dezelfde versie van de blockchain hebbeb (allemaal dezelfde informatie)
  • de transacties worden gebroadcast naar alle nodes

Wat is een Conensus?

  • Dit is een manier waarop alle nodes bepalen hoe de data in de blocks er moet uitzien en hoe dat alles correct blijft na hickups bij transactie broadcasts
  • in dit project gebruiken we de langste chain om de slechte node terug op te zetten

Personal commands i used to start this project

Starting the nodes: cd ../../projects/blockchaintraining npm run node_1 ...

After starting all the nodes we'll also have to link the nodes togheter, do this with register-and-broadcast-node(for every node):

Post http://localhost:3001/register-and-broadcast-node { "newNodeUrl": "http://localhost:3002" } Post http://localhost:3001/register-and-broadcast-node { "newNodeUrl": "http://localhost:3003" } Post http://localhost:3001/register-and-broadcast-node { "newNodeUrl": "http://localhost:3004" } Post http://localhost:3001/register-and-broadcast-node { "newNodeUrl": "http://localhost:3005" }

=> See Bat file to make this easier

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •