Blockchain Mini Hackathon

Entwicklung eines Stromtarifes, welchen reale Stromkunden buchen können.

Agenda

  1. Installation der Softwarekomponenten
  2. Hallo Welt Beispiel (Stromzähler in der Blockchain)
  3. STROMDAO Business Objekt
  4. Das Stromkonto
  5. Entwicklung eines Stromtarifes

Vorbereitung/Installation

Voraussetzungen

  • Text Editor (Zum Beispiel Notepad++, Atom.io,...)
  • Node JS Version 7.0 (Download)

Installation

npm install -g fury.network
npm install -g stromdao-bo-mpo
					

Uninstall

npm remove -g fury.network
npm remove -g stromdao-bo-mpo
					

Fury.Network

  • Browser basierte Entwicklungsumgebung
  • Zugriff auf das Business Objekt
  • Interaktionen mit Anwendern
  • Showcase Entwicklung
  • https://fury.network/

stromdao-bo-mpo

STROM DAO Business Objekt

Aufgabe 1: Hallo Welt

Wir wollen mit Hilfe der Kommandozeile einen Zählerwert in der Blockchain speichern und diesen im Anschluss per Webbrowser abrufen.

Aufgabe 1: Hallo Welt

$ stromdao-mp store ZAEHLER1337 1234
TX: 0x67ba79a720202a4b0315fa9c1bc5847a2d18d9e7d664a6b9c50e0501b0108c7e

Für den Zähler mit der Kennung ZAEHLER1337 wurde der Zählerstand 1234 in der Transaktion 0x67ba... geschrieben.

Aufgabe 1: Hallo Welt

Abrufen eines Zählerwertes Fury.Network (IPFS)

Adresse des Zählers:

$ stromdao-mp account ZAEHLER1337
MPID ZAEHLER1337
Address 0x4c01e6a3649cDEB08029D14bcdeB39366f9317F3
...

Aufgabe 1: Hallo Welt

Lernziel

  • Jede Zählerkennung hat eine eindeutige Adresse in der Blockchain.
  • Zugriff auf die Blockchain kann via Browser oder Kommandozeile erfolgen.
  • Zählerstände bilden bereits einen Konsens.

Fury IDE (lokal)

Schnelles Testen und verproben von Anwender Interaktionen.

Anlegen eines lokalen Showcases

$ fury init aufgabe2
$ fury run aufgabe2

Es wird ein Unterverzeichnis angelegt mit dem Namen aufgabe2. Darin ist eine base.html und eine base.js.

Aufgabe 2: Lokale Nutzung von Fury

  1. Herunterladen der ZIP Datei
  2. Entpacken und Überschreiben der beiden Dateien in aufgabe2
  3. Reload der Seite im Browser

Business Objekt

Business Objekt

Das Business Objekt wird mit node angesteuert. Es ist bereits initialisiert, so dass jede Instanz eine eigene Adresse und einen eigenen privaten Schlüssel besitzt.

Business Objekt

Im Objekt gibt es verschiedene Domains. Hier wird Meter-Point-Reading (mpr) verwendet. Diese Domains entsprechend meist sogenannten Smart-Contracts in der Blockchain.

Business Objekt

In diesem Aufruf entspricht readings einem Methodenaufruf im Smart Contract.

Stromkonto

Stromkonto

Stromkonto

  • Blockchain (Tokens), zeigen Besitz an (= kein Konzept für Schulden).
  • Datentyp ist immer Integer (Ganzzahl).
  • Ein Stromkonto zeigt gefilterte Transaktionen an.

Aufgabe 3: Verbrauchsbuchung

$ stromdao-mp store --auto 69256 ZAEHLER1337 1234

Lernziel

  • Das Business Objekt abstrahiert die Blockchain und den Energiemarkt.
  • Das Stromkonto ist ein Kontenbuch für Energieabrechnungen.
  • In der Energy Blockchain existieren vorgefertigte Smart Contracts.

Tarifentwicklung

Tarifentwicklung

  • Ein Stromliefervertrag besteht aus einer Vielzahl von Buchungen auf einem Stromkonto
  • Buchungen werden auf Basis eines Eingangsvektors (Settlement Objekt) vorgenommen

Settlement Object

Tarifentwicklung

Datei settlement_out.js anlegen mit dem Inhalt:

console.log(settlement);

Speichern und im Anschluss

$ stromdao-mp store -f settlement_out.js --de 69256 ZAEHLER1337 1234

Tarifentwicklung

Datei settlement_simple.js anlegen mit dem Inhalt:

global.promise = new Promise(function(resolve2, reject2) { 
	node.stromkontoproxy("0x19BF166624F485f191d82900a5B7bc22Be569895").then(function(sko) {
			sko.addTx(node.wallet.address,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {				
					resolve2(tx);
			});
	});
});

Speichern und im Anschluss

$ stromdao-mp store -f settlement_simple.js --de 69256 ZAEHLER1337 1240

sko.addTx(von,an,wert,energie)

  • führt die eigentliche Buchung in der Blockchain durch
  • kann mehrfach hintereinander für Splitbuchungen aufgerufen werden
  • nur bei Kosten über 0 wird eine Buchung ausgeführt
  • der Promise erlaubt einen Aufruf von der Komandozeile

sko.addTx(von,an,wert,energie)

  • bei einem Tarif muss der settlement.cost entsprechend modifiziert werden
  • im Settlement Object sind alle Daten vorhanden, die zur Berechnung notwendig sind
  • es steht der volle Umgang von Javascript (NodeJS) zur Verfügung
  • auf das Business Objekt kann zugegriffen werden

Code-Beispiele

WG Strom

Aufteilung der Kosten auf 3 Konten


var konto1="0x6fCb57AC03CdfA7E26bc6117ceCa83b1516Af2f7";
var konto2="0x94013490Cc86ada8D9154B085D791176F676283C";
var konto3="0x6692BC4915Ba6f07bB309481d2198C5C25e3Fcce";
settlement.cost=Math.round(settlement.cost/3)
global.promise = new Promise(function(resolve2, reject2) { 
	node.stromkontoproxy("0x19BF166624F485f191d82900a5B7bc22Be569895").then(function(sko) {
		sko.addTx(konto1,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {
			sko.addTx(konto2,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {
				sko.addTx(konto3,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {
					resolve2(tx);
				});
			});
		});
	});	
});	

Provision

1% geht an Vertriebspartner


var vpkonto="0x6fCb57AC03CdfA7E26bc6117ceCa83b1516Af2f7";
settlement.cost=Math.round(settlement.cost/3)
global.promise = new Promise(function(resolve2, reject2) { 
	node.stromkontoproxy("0x19BF166624F485f191d82900a5B7bc22Be569895").then(function(sko) {
		sko.addTx(node.wallet.address,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {
			sko.addTx(node.nodeWallet.address,vpkonto,Math.round(settlement.cost*0.01),settlement.base).then(function(tx) {				
					resolve2(tx);				
			});
		});
	});	
});	

Provision

1% der Energiekosten gehen an Vertriepspartner


var vpkonto="0x6fCb57AC03CdfA7E26bc6117ceCa83b1516Af2f7";
settlement.cost=Math.round(settlement.cost/3)
global.promise = new Promise(function(resolve2, reject2) { 
	node.stromkontoproxy("0x19BF166624F485f191d82900a5B7bc22Be569895").then(function(sko) {
		sko.addTx(node.wallet.address,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {
			sko.addTx(node.nodeWallet.address,vpkonto,Math.round(settlement.UpGross*0.01),settlement.base).then(function(tx) {				
					resolve2(tx);				
			});
		});
	});	
});	

EEG-Umlage

6,880 ct/kWh werden auf EEG Konto transferiert


var eegkonto="0x6fCb57AC03CdfA7E26bc6117ceCa83b1516Af2f7";
settlement.cost=Math.round(settlement.cost/3)
global.promise = new Promise(function(resolve2, reject2) { 
	node.stromkontoproxy("0x19BF166624F485f191d82900a5B7bc22Be569895").then(function(sko) {
		sko.addTx(node.wallet.address,node.nodeWallet.address,settlement.cost,settlement.base).then(function(tx) {
			sko.addTx(node.nodeWallet.address,eegkonto,Math.round(settlement.base*6880),settlement.base).then(function(tx) {				
					resolve2(tx);				
			});
		});
	});	
});	

Oder...

  • Strompreis dynamisch nach Verfügbarkeit von Grünstrom: Grünstrom Index
  • Happy-Hour (jeden Abend um 17:00 Uhr Strom zum halben Preis)
  • Stunde Strom geschenkt
  • Jede Kilo-Wattstunde ist ein Coin (Beteiligung) an einer Anlage

Happy Hacking...

Vielen Dank

Thorsten Zoerner
Tel: +49 (0) 30 12084890
[email protected]