Archiv der Kategorie: Open Source

MultiChain Tools erweitert

Auf mehrfachen Wunsch habe ich die beiden Blockchain-Tools „Multichain GUI“ und „MultiChain-API-PHP“ erweitert.

Das Multichain GUI, ein Web-GUI für MultiChain Blockchains wurde mit einer integrierten Access Control versehen, mit der das GUI selbst aber auch die „mc-info“ Funktion, die z.B. für Monitoring verwendet werden kann, mit unterschiedlichen Credentials (Username, Passwort) abgesichert werden können. Weiters wurden die Seiten „info“ und „help“ hinzugefügt.

Weitere Infos und Download: https://github.com/baumann-at/MultiChain-GUI

Beim MultiChain API (eine PHP Klasse, die Aufrufe an das Multichain REST-API kapselt) gab es kleinere Erweiterungen, die die Versionen des Nodes und Protokols bereitstellen. Weiters habe ich Beispiel-Code dazu bereitgestellt.

Weitere Infos und Download: https://github.com/baumann-at/MultiChain-API-PHP

Enjoy …

Fermat Faktorisierung

Letztlich von Klaus Schmeh in seiner Crypto Kolumne daran erinnert worden, habe ich mich dann abends hingesetzt und die Faktorisierungsmethode von Fermat implementiert:

https://github.com/chris2286266/fermat-factorizer

Ich weiss, es gibt schon einige Implementierungen, wollte aber trotzdem eine eigene machen 😉

Recht interessant fand ich, dass n=630548215070129547156718332495889632234434145411971275888376987603260225252787926135276738944105689100036295535868141424386536403649578707699128189491432138631900590774729214990015369102760964884776344849717811484309528915040117952098061886881
bereits nach der ersten Iteration „geknackt“ ist …

 

Multichain GUI verfügbar

Das Multichain GUI ist ein einfaches Web GUI für MuiltiChain basierte Blockchains. Mit ihm kann man ein oder mehrere Blockchain Instanzen administrieren, Daten anzeigen und eintragen etc.

Ich habe die Originalversion von Coin Science (MultiChain Web Demo) geforkt und mit einigen erweiterten bzw neuen Features ausgestattet.

Die bestehende Funktionen (abhängig von den verfügbaren Berechtigungen auf der jeweiligen Blockchain Instanz) sind:

  • Anzeigen des Status eines Blockchain Nodes und der verbundenen Nodes
  • Vergeben von „Labels“, d.h. Bezeichnungen für Adressen
  • Anzeigen und Setzen von Berechtigungen für Adressen
  • Erstellen, Bearbeiten und Versenden von Assets
  • Erstellen von Streams
  • Daten in Streams publizieren (Files, JSON-Format oder Textformat)
  • Anzeigen von Stream Items incl. Auswahl pro Key oder Publisher

Neue bzw. geänderete Funktionen:

  • Die Konfiguration wurde abgesichert und erweitert.
  • Zu den verbundenen Nodes werden mehr Details angezeigt.
  • Ein (einfacher) Blockexplorer wurde integriert, um eine Liste aller Blöcke sowie Details zu jedem Block anzuzeigen.
  • Ein Monitoring Endpoint wurde eingebaut, um Multichain Blockchainnodes komfortabel überwachen zu können.

Beispiel: Detailansicht eines Blockes im Blockexplorer

Die Voraussetzungen für den Einsatz sind: Ein Webserver mit PHP und curl. Das Multichain GUI ist auf Gitub verfügbar.

Enjoy 😉

WKO Datenzertifizierung – jetzt in Echtbetrieb

Seit Mitte November 2019 ist das Blockchain-Service Datenzertifizierung in Echtbetrieb. Damit können beliebige elektronische Dokumente (also alle Dateitypen) „digital zertifiziert“ werden. Dabei wird von dem betreffenden Dokument ein digitaler Fingerabdruck errechnet (der sog. Hashwert) und gemeinsam mit einem Zeitstempel in einer Blockchain gesichert d.h. unmanipulierbar protokolliert.

Wenn zu einem späteren Zeitpunkt bewiesen werden soll, dass das elektronische Dokument bereits früher (also zum Zeitpunkt der Zertifizierung) exakt so vorgelegen ist und nicht verändert wurde, kann dies bestätigt werden, z.B. indem der Fingerabdruck erneut errechnet und in der Blockchain der entsprechende Eintrag gesucht wird.

Die dabei verwendete Blockchain nennt sich „Austrian Public Service Blockchain“ und wird von Institutionen aus dem öffentlichen Bereich gemeinsam betrieben. Die darunterliegende Technologie ist „MultiChain“ eine verbreitete OpenSource Blockchain Plattform. Das System ist als sog. „Konsortium-Chain“ aufgebaut, d.h. es erfordert KEIN energieintensives „Proof-Of-Work“ Verfahren zum Verarbeiten der Transaktionen und zur Erstellung neuer Blöcke!

Weitere Details dazu beschreibt die WKO auf der Seite „Blockchain-Service Datenzertifizierung“.

Die „Kreativwirtschaft Austria“ hat als eine der ersten Organisationen das WKO Service Datenzertifizierung aufgenommen und empfiehlt ihren Mitgliedern ihren kreativen Content (Grafikdesign, Texte, Pläne, Fotos, Software usw.) damit zu schützen, etwa um den Zeitpunkt der Urheberschaft belegen zu können.

Im Kreativwirtschaftsdepot wurde dazu der interessante Artikel „Für dich und dein Urheberrecht!“ veröffentlicht.

Weitere Usecases – etwa aus dem Bildungsbereich – werden gerade entwickelt und umgesetzt. Auch ein (etwas abgewandeltes) Blockchain-System für die Nutzung durch Unternehmen bzw. andere nicht-öffentliche Institutionen ist gerade im Entstehen. Es bleibt also spannend!


Ich freue mich, dass ich im Rahmen dieses Projektes meine Expertise in unterschiedlichen Bereichen (Systemdesign, Blockchainprogrammierung, Entwurf von Spezifikationen, Implementierung von APIs usw.) einbringen konnte.

Hacktoberfest 2017

Ja! Heute habe ich es endlich bekommen … das Hacktoberfest – T-Shirt!

My Hacktoberfest Shirt 😉

Aber … der Reihe nach:

Irgendwann im Herbst letztes Jahr fragte mich mein lieber Kollege M. (ja, derselbe wie beim Thema NodeRED & Blockchain – aber das ist eine andere Geschichte), ob ich auch beim Hacktoberfest 2017 mitmachen würde.

Man müsse zwischen 1. und 31. Oktober 2017 mindestens 4 Pull-Requests bei Github machen. 4 Pull-Requests in einem Monat? Natürlich gar kein Problem!

In Summe gab es ca. 31.000 Github-User, die knappe 240.000 Pull-Requests in ca. 64.000 Repositories anlegten. Natürlich waren sehr viele Repositories dabei, die extra für den Contest angelegt wurden (z.B. https://github.com/AliceWonderland/hacktoberfest), aber immerhin …

Eine sehr coole Idee, Opensource populärer zu machen, finde ich. Danke an DigitalOcean und Github dafür. Und natürlich auch für’s T-Shirt 😉

Freue mich schon auf Oktober 2018!

MQTT, Node-RED & Blockchain

Und noch eine Kopplung eines IoT Systems mit einer Blockchain …

Ich hoffe, es wird nicht langweilig. Aber mein lieber Kollege M. wollte es unbedingt sehen: „Zeig mir doch, wie man mit Node-RED in die Blockchain schreiben kann, aber getriggert über MQTT, wenn’s geht.“

Also gut:

Die zu protokollierenden Daten werden über einen MQTT Publisher an einen MQTT Broker gesendet. Ich verwende hier als Broker das (Opensource) System von Mosquitto.org.

MQTT & Node-RED & Blockchain – Übersicht

In Node-RED sorgt ein simpler Flow dafür, dass die Daten, die über den MQTT Subscriber eintreffen, nach einer Umformatierung der Json-Datenstruktur über WebSockets an den IoT-Interface Node gesendet werden.

Node-RED – Blockchain – Flow

Der Interface Node (auch bereits beim IoT-Demo und beim Alexa Demo verwendet) nimmt die Daten entgegen und …

Node-RED – Blockchain – Interface Node

… protokolliert sie dann in der Blockchain. Hier verwende ich natürlich wieder meinen Favoriten, die Multichain!

Multichain-Stream „DeviceLog“, der die von Node-RED und den anderen Demos eingetragenen Daten beinhaltet.

Aja … der MQTT Publisher: Da gibt es mehrere Möglichkeiten. Um es schnell und einfach zu machen, habe ich ein fertiges Beispiel genommen (https://github.com/CloudMQTT/python-mqtt-example/) und (in den Zeilen 58 und 60) den Url und das Topic entsprechend angepasst.

Und das war es auch schon …

LG an Kollegen M. 😉

Blockchain – Internet of Things

In einem Proof of Concept wird hier gezeigt, wie ich eine bidirektionale Kopplung einer Blockchain mit dem „Internet of Things“ (d.h. mit IoT-Devices) implementiert habe.

Von Blockchain Nodes können „Assets“ an IoT-Devices gesendet werden, welche dann entsprechend reagieren. Ein „Asset“ kann als „Wert“ (ähnlich einer Währung) gesehen werden, auf dessen Basis das IoT-Device eine Aktion durchführt, z.B. ein bestimmte Leistung für eine bestimmte Zeit erbringt.

Unabhängig davon kann das IoT-Device bei bestimmten Ereignissen (z.B. Sensorinputs) entsprechende Daten in der Blockchain protokollieren lassen.

Die Blockchain Technologie sorgt in diesem Aufbau also einerseits für die dezentrale Übermittlung der Daten zwischen den Systemteilnehmern (peer to peer), andererseits für die unveränderliche Protokollierung aller entsprechenden Aktionen (Steuerbefehl, Antwort darauf) und zusätzlicher Ereignisse (Sensoren).

In diesem Setup wird eine „permissioned Blockchain“ verwendet, d.h. es sind nur bekannte (authentifizierte) Systemteilnehmer zugelassen.

Systemaufbau

Blockchain – IoT Kopplung – Übersicht

Blockchain

Als Blockchain-Technologie wird eine entsprechend konfigurierte Installation von „Multichain“ eingesetzt, die seit Kurzem als Version 1.0 gelaunched wurde. Das System muss aus (mindestens) zwei Nodes bestehen, hier als Seednode und IoT-Interface Node bezeichnet. Ein Echtsystem besteht natürlich aus mehreren weiteren Nodes.

Seednode

Der Seednode ist der „erste“ Node der hier verwendeten Blockchain und stellt u.a. die initialen Konfigurationsdaten zur Verfügung. Der Node kann über ein Web-GUI angesprochen werden:

MultiChain Web-GUI – Anzeige der Nodes

Damit können die Aktionen komfortabler als über die Commandline erledigt werden: Senden der Assets und Beauskunften der Streams.

IoT-Interface Node

Auf diesem Node läuft ein Script, welches bei definierten Ereignissen in der Blockchain (z.B. Empfang von Assets) aufgerufen wird, mit dem IoT-Device per WebSockets kommuniziert und Rückmeldungen von diesem in „Streams“ in der Blockchain protokolliert.

Seednode: Senden von Assets an den Interface-Node

Unabhängig davon kann das IoT-Device weitere Daten an den Interface Node senden, der die entsprechenden Einträge in den Blockchain Streams erzeugt.

IoT-Device

Der Demoaufbau verwendet als IoT Device einen Rasperry Pi 3B. Auf diesem läuft ein WebSocket-Client, welcher mit dem Interface Node kommuniziert und die Steuerungsaufgabe ausführt, wie das Schalten der Aktoren (z.B. Lampe für die gewünschte Zeitdauer) und das Einlesen der Sensoren.

Rasperry Pi 3 mit Sense Hat als IoT Device

Stream „DeviceLog“ – Protokollierung von Meldungen des IoT Devices

In einem nächsten Schritt soll – in Zusammenarbeit mit DI Uwe Schimon von der IVM GmbH – das System um Smart Contracts auf Basis Ethereum erweitert werden.

Stay tuned!

Bitcoin Full Node on Raspberry Pi

Last week I bought a Raspberry Pi 3 (model B) to set up a proof of concept of a Blockchain connection to IoT devices (but that’s another story) …

Some time ago I read http://www.raspberrypifullnode.com/ and decided, to give it a try now.
This posting will not repeat everything from David’s article, just the changes from then (2014) to now (9/2017).

Micro SD card: The Bitcoin blockchain has a size of around 145 GByte at the moment, which leaves a 256 GB cards as an option, if you really want to store the complete blockchain …

Operating system: As I didn’t have NOOBS at hand, I downloaded the current version of Raspbian Stretch here and used Etcher to „burn“ the image to th SD card.

During the first boot, I connected a monitor and a keyboard, then configured the WiFi and activated the ssh deamon using

sudo raspi-config

After a

sudo reboot

I had a fully working system, which I could control with Putty (and WinSCP).

Now I followed David’s article, but had to apply some changes due to changes in the Bitcoin source. After updating and upgrading with

sudo apt-get update
sudo apt-get upgrade


I installed the dependencies …

sudo apt-get install build-essential autoconf libssl-dev libboost-dev libboost-chrono-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libtool libevent-dev

… and then downloaded the current version (branch 0.15) of the Bitcoin source:

mkdir ~/bitcoin
cd ~/bitcoin
git clone -b 0.15 https://github.com/bitcoin/bitcoin.git
cd bitcoin/

The building took „some“ time …

./autogen.sh
./configure --disable-wallet
make
sudo make install

… but in the end everything was OK.

Remark: I chose to build the node with –disable-wallet, as I did not care to run a wallet on the system. See the discussion here concerning Berkley DB 4.8 and incompatible wallet formats …

After starting the deamon with

bitcoind &

it started to connect to other nodes and sync the blockchain …

Voilà – all up and running 😉

MultiChain – offene Plattform für Blockchain Anwendungen

Vor etwa eineinhalb Jahren hatte ich schon einmal das Vergnügen, die MultiChain Plattform des englischen Unternehmens Coin Sciences Ltd. zu evaluieren. Vor etwas mehr als einem Monat wurde die Version 1.0 offiziell gelauncht, siehe https://www.multichain.com/blog/2017/08/multichain-1-released-new-partners/.

Grund genug, die aktuelle Version anzutesten und … ich bin begeistert! Die stabile Plattform war ja schon zuvor als extrem flexibel bekannt, d.h. dass mit den vielfältigen Parametrierungsmöglichkeiten eine große Anzahl von Usecases (im Speziellen für permissioned Blockchains) abgedeckt werden kann.

Was weiters sehr gefällt, ist die extrem gute Dokumentation und das engagierte Entwicklerteam, welches bei eventuellen Fragen oder Problemchen stets flott weiterhilft.

Einen Schwerpunkt legte ich auf das Ausprobieren der APIs. Für alle möglichen Umgebungen stehen auf Github Libraries und Demos bereit, ich testete das PHP-API mit dem Web-Demo, siehe https://github.com/MultiChain/multichain-web-demo.

GUI MultiChain Demo / API Test

Das Web-Demo selbst ist zwar etwas verbesserungswürdig, was etwa den Umfang der Funktionen betrifft, die RPC Aufrufe des Deamons sind aber extrem performant. Kein Wunder, ist es doch eine native C/C++ Implementierung (auf Basis des Bitcoin Clients).

Die Argumentation der Entwickler, dass sich mit den in dieser Plattform eingesetzten „Assets“ und „Streams“ eine Vielzahl von Anwendungen realisieren lassen, für die man heutzutage (unnötigerweise?) Smart Contracts einsetzen würde, ließ mich dann auch noch schmunzeln.

Mal sehen, wie es weitergeht …

WalletGenerator erweitert

Der universelle Generator für Walletadressen, Paper-, Bulk- und Brainwallets von WalletGenerator.net kennt jetzt auch die Parameter meiner Kryptowährung C2coin.

WalletGenerator.net mit C2coin Erweiterung

Der erweiterte Generator kann nun Wallets für 130 Kryptowährungen generieren und ist zu finden unter http://coinz.at/walletgenerator/.

Die Version ist ein Fork von https://github.com/MichaelMure/PaperWallet/archive/master.zip