Giter Site home page Giter Site logo

jblockchain's Introduction

jblockchain

Einfache Blockchain-Implementierung für Demonstrationszwecke

license

jblockchain ist ein minimalistisches System um die Prinzipien einer verteilten Blockchain im Detail zu erläutern. Die Implementierung ist keinewegs auf optimale Performanz ausgelegt und verfolgt auch nur einen naiven Ansatz eines verteilten Systems. Im Vordergrund steht ein übersichtlicher Code und nicht alle Randfälle, Raceconditions und Sicherheit abzudecken.

Starten

Da es sich um eine Spring Boot-Applikation handelt, genügt es das Projekt zu klonen und mit maven zu bauen.

cd jblockchain
./mvnw package

Anschließend werden drei Module gebaut:

  • common: Von den folgenden Modulen gemeinsam genutzter Code
  • node: Teil des Blockchain-Netzes, der Transaktionen und Blöcke verwaltet
  • client: Ein Kommandozeilen-Client zur einfachen Kommunikation mit Nodes

Der Node wird einfach durch Ausführung der jar-Datei gestartet und kontaktiert anschließend den konfigurierten Master-Node um alle erforderlichrn Daten herunterzuladen.

java -jar node/target/node-0.0.1-SNAPSHOT.jar

Interagieren

Nun können einfach die entsprechenden REST-Aufrufe getätigt werden um Aktionen auszulösen. Damit die JSON-Struktur nicht von Hand aufgebaut werden muss, kann sich mit dem Kommandozeilen-Client beholfen werden.

Zu Beginn kann eine eigene Adresse angelegt werden. Dafür wird ein Private-Public-Keypair benötigt.

cd client/target
java -jar client-0.0.1-SNAPSHOT.jar --keypair

Daraufhin werden die Dateien key.priv und key.pub erstellt. Mit dem öffentlichen Schlüssel kann nun die Adresse für Max Mustermann werden. Der kontaktierte Node auf localhost wird die neue Adresse an alle bekannten Nodes übermitteln.

java -jar client-0.0.1-SNAPSHOT.jar --address --node "http://localhost:8080" --name "Max Mustermann" --publickey key.pub

Unter der Resource http://localhost:8080/address kann kontrolliert werden, dass die Adresse im System angekommen ist. Für den nächsten Schritt wird dort der Hash der erzeugten Adresse entnommen. Denn um eine Transaktion zu erstellen, muss die Sender-Adresse über den Hash identifiziert werden.

java -jar client-0.0.1-SNAPSHOT.jar --transaction --node "http://localhost:8080" --sender "Tdz0bKDfca3QjFAe5Ccuj9Noy6ah8n+R8DnZznvjic4=" --message "Hallo Welt" --privatekey key.priv 

Die Resource http://localhost:8080/transaction listet nun die neue Transaktion mit der Nachricht "Hallo Welt", welche mit dem privaten Schlüssel signiert wurde, im Transaktions-Pool.

Mining

Damit die Transaktionen im Pool ein Teil der Blockchain werden können, müssen diese in einem Block eingebunden werden. Diese Aufgaube wird kontinuierlich durch die Miner verfolgt.

Um das Mining auf dem lokalen Node anzustoßen, genügt ein Aufruf von http://localhost:8080/block/start-miner. Sobald ein valider Block gefunden wird, werden die im Block eingebetteten Transaktionen aus dem Pool entfernt und der Block an die Blockchain angehängt: http://localhost:8080/block.

jblockchain's People

Contributors

rolandcolored avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.