diff --git a/pom.xml b/pom.xml
index afa24d1..65d9421 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,6 +41,11 @@
javafx-fxml
12.0.1
+
+ com.google.code.gson
+ gson
+ 2.8.5
+
diff --git a/src/main/java/ugsbo/com/buchhaltung/Auswertung.java b/src/main/java/ugsbo/com/buchhaltung/Auswertung.java
new file mode 100644
index 0000000..fb9ad01
--- /dev/null
+++ b/src/main/java/ugsbo/com/buchhaltung/Auswertung.java
@@ -0,0 +1,15 @@
+package ugsbo.com.buchhaltung;
+
+public class Auswertung {
+
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+ Blockchain Work = new Blockchain();
+ Work.add(50);
+ Work.add(-20);
+
+ System.out.println(Work.kontostand());
+ System.out.print(Work.toString());
+ }
+
+}
diff --git a/src/main/java/ugsbo/com/buchhaltung/Block.java b/src/main/java/ugsbo/com/buchhaltung/Block.java
new file mode 100644
index 0000000..b315519
--- /dev/null
+++ b/src/main/java/ugsbo/com/buchhaltung/Block.java
@@ -0,0 +1,67 @@
+package ugsbo.com.buchhaltung;
+
+import java.security.MessageDigest;
+
+public class Block {
+
+
+ int data;
+ int kontostand;
+ Block vorher;
+
+ String ownHash;
+ String previousHash;
+
+
+ //erste Block
+ public Block(int data) {
+ this.data = data;
+ ownHash = createNewHash(Integer.toString(data));
+
+ kontostand = this.data;
+
+ this.vorher = null;
+ this.previousHash = null;
+ }
+
+ //Alle anderen Blöcke
+ public Block(int data, Block vorher, String previousHash, int konto) {
+ this.data = data;
+ ownHash = createNewHash(Integer.toString(data)+previousHash);
+
+ kontostand = konto + this.data;
+
+ this.vorher = vorher;
+ this.previousHash = previousHash;
+ }
+
+ private String createNewHash(String input) {
+ try {
+ MessageDigest digest = MessageDigest.getInstance("SHA-256");
+ //Applies sha256 to our input,
+ byte[] hash = digest.digest(input.getBytes("UTF-8"));
+ StringBuffer hexString = new StringBuffer(); // This will contain hash as hexidecimal
+ for (int i = 0; i < hash.length; i++) {
+ String hex = Integer.toHexString(0xff & hash[i]);
+ if(hex.length() == 1) hexString.append('0');
+ hexString.append(hex);
+ }
+ return hexString.toString();
+ }
+ catch(Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public int getKontostand() {
+ return kontostand;
+ }
+
+ public Block getVorher() {
+ return vorher;
+ }
+
+ public String getHash() {
+ return ownHash;
+ }
+}
diff --git a/src/main/java/ugsbo/com/buchhaltung/Blockchain.java b/src/main/java/ugsbo/com/buchhaltung/Blockchain.java
new file mode 100644
index 0000000..987b2b1
--- /dev/null
+++ b/src/main/java/ugsbo/com/buchhaltung/Blockchain.java
@@ -0,0 +1,32 @@
+package ugsbo.com.buchhaltung;
+
+import com.google.gson.*;
+
+public class Blockchain {
+
+ Block Workingobjekt;
+
+
+ public Blockchain() {
+ Workingobjekt = new Block(0);
+ }
+
+
+ public void add(int eingabe) {
+ Block newWorkingobjekt = new Block(eingabe, Workingobjekt, Workingobjekt.getHash(), Workingobjekt.getKontostand());
+
+ Workingobjekt = newWorkingobjekt;
+ }
+
+
+ public int kontostand() {
+ return Workingobjekt.getKontostand();
+ }
+
+ public String toString() {
+ String JSON = new GsonBuilder().setPrettyPrinting().create().toJson(Workingobjekt);
+ return JSON;
+ }
+
+
+}
diff --git a/src/test/java/com/ugsbo/Buchhaltung/Test_Blockchain.java b/src/test/java/com/ugsbo/Buchhaltung/Test_Blockchain.java
new file mode 100644
index 0000000..77f1a83
--- /dev/null
+++ b/src/test/java/com/ugsbo/Buchhaltung/Test_Blockchain.java
@@ -0,0 +1,63 @@
+package com.ugsbo.Buchhaltung;
+
+import static org.junit.Assert.*;
+import org.junit.Before;
+import org.junit.Test;
+import ugsbo.com.buchhaltung.Blockchain;
+
+public class Test_Blockchain {
+
+ public Blockchain Workingobjekt;
+
+ @Before
+ public void setUp() throws Exception {
+ Workingobjekt = new Blockchain();
+ }
+
+ @Test
+ public void hinzufügen() {
+ int eingabe = 500;
+ int ergebnis;
+
+ Workingobjekt.add(eingabe);
+ ergebnis = Workingobjekt.kontostand();
+
+ assertEquals("eingabe und Ergebnis sind gleich", eingabe, ergebnis);
+ }
+
+ @Test
+ public void hinzufügenNegativ() {
+ int eingabe = -500;
+ int ergebnis;
+
+ Workingobjekt.add(eingabe);
+ ergebnis = Workingobjekt.kontostand();
+
+ assertEquals("eingabe und Ergebnis sind gleich", eingabe, ergebnis);
+ }
+
+ @Test
+ public void hinzufügenIstNull() {
+ int eingabe = 0;
+ int ergebnis;
+
+ Workingobjekt.add(eingabe);
+ ergebnis = Workingobjekt.kontostand();
+
+ assertEquals("eingabe und Ergebnis sind gleich", eingabe, ergebnis);
+ }
+
+ @Test
+ public void hinzufügenMehrAlsEinmal() {
+ int eingabe = 100;
+ int erwartet = 300;
+ int ergebnis;
+
+ Workingobjekt.add(eingabe);
+ Workingobjekt.add(eingabe);
+ Workingobjekt.add(eingabe);
+ ergebnis = Workingobjekt.kontostand();
+
+ assertEquals("eingabe und Ergebnis sind gleich", erwartet, ergebnis);
+ }
+}