Netidee Blog Bild
Implementierung Simulationssoftware
Schwierigkeiten und Learnings bei der Implementierung der Simulationssoftware (22.11.2017)
Förderjahr 2017 / Stipendien Call #12 / ProjektID: 2235 / Projekt: Simulation of different selfish mining strategies in Bitcoin

Nach einer kleinen Odyssee habe ich anfangs 2017 endlich ein Thema für meine Diplomarbeit gefunden. Zusammen mit SBA-Research entschied ich mich "selfish mining" zu untersuchen, ein bekanntes Mining-Verhalten welches den relativen Ertrag des Miners gegenüber dem Rest des Netzwerkes erhöht. Dabei benützten wir eine neuartige Simulationsart, bei der wird das ganze peer-to-peer Netzwerk auf einem Host virtualisieren und ein vorkonfiguriertes Simulationsszenario ausführen. Diese Art und Weise der Simulation erlaubt uns die Netzwerklatenz natürlich in die Simulation mit einfließen zu lassen und zudem kann man einfach die Referenzimplementierung von Bitcoin ohne großen, zusätzlichen Mehraufwand wiederverwenden .

Technologiestack

Als Technologie setzen wir dabei vor allem auf Docker zum Virtualisieren des Netzwerkes und auf Python um die Simulation zu orchestrieren. Die Referenzimplementierung von Bitcoin wird mehrfach in sogenannten Containern gestartet und die einzelnen Container bilden dann zusammen ein peer-to-peer Netzwerk, indem sie sich untereinander verbinden. Die Implementierung dieser Simulationssoftware nahm gut drei Monate in Anspruch und es traten einige unerwartete Schwierigkeiten auf. Vielen Dank an dieser Stelle auch an Andreas Kern, der mich bei der Implementierung tatkräftig unterstützt hat. Er wird seine Bachelorarbeit auf die Simulationssoftware aufbauen.

Übersicht zur Architektur der Simulationssoftware
Übersicht zur Architektur der Simulationssoftware

Größtes Problem?

Das größte Problem bildete sicherlich ein sehr merkwürdiges Verhalten der einzelnen Bitcoin-Nodes. Zu diesem Zeitpunkt war die Implementierung schon weit fortgeschritten und es war schon möglich Simulationsszenarien zu starten. Jedoch verursachten die einzelnen Nodes nach einiger Laufzeit eine sehr hohe Auslastung der CPU. Wir hatten verschiedenste Vermutung zur Ursache dieses Problems und implementierten eine Performanceverbesserung nach der anderen. Das Problem blieb jedoch bestehen. Einige schlaflose Nächte und viele italienische Espressi später rang ich mich endlich durch ein Tool zu verwenden, welches die Bitcoin-Referenzimplementierung während der Laufzeit beobachtet. Das Tool machte mich sofort auf eine Funktion im Bitcoin-Code aufmerksam, welche mit folgendem Kommentar versehen ist:  

// Sanity checks off by default for performance, because otherwise
// accepting transactions becomes O(N^2) where N is the number
// of transactions in the pool

 

Ich griff mir gleich an den Kopf und ein Block äh Stein fiel mir vom Herzen. Die Funktion ist normalerweise aus Performancegründen deaktiviert, da die Laufzeit der Funktion quadratisch ist. Ich verwende jedoch die Software in einem speziellem Modus. Dadurch ist die Methode aktiv und verursacht die hohe Auslastung der CPU am Host. Die Lösung des Problems war dann die Referenzimplementierung mit dem zusätzlichen Flag "--mempoolcheck 0" zu starten, welches dann die Methode deaktivierte.

Learnings

Erstens: Hast du ein Problem, solltest du immer genau wissen, was die Ursache ist, und nicht irgendwelche im Endeffekt wirkungslose Verbesserungen durchführen. Packe das Problem an der Wurzel!

Zweitens: Schrecke nicht vor unbekannten Thematiken zurück! In meinem Fall war es das mir unbekannte Tool. Nach ein bisschen Einlesen und Herumspielen konnte ich das Tool verwenden und die Ursache des Problems war im Nu gefunden.

Nun, da die Simulationssoftware funktioniert, kann ich mich ans Simulieren ran machen. Stay tuned! 

Tags:

bitcoin blockchain

Simon Mulser

Profile picture for user simon.mulser

Skills:

Softwareentwicklung
,
Web Development
,
Projektmanagement
,
blockchain
,
Bitcoin
,
Python
,
Java
CAPTCHA
Diese Frage dient der Überprüfung, ob Sie ein menschlicher Besucher sind und um automatisierten SPAM zu verhindern.
    Datenschutzinformation
    Der datenschutzrechtliche Verantwortliche (Internet Privatstiftung Austria - Internet Foundation Austria, Österreich) würde gerne mit folgenden Diensten Ihre personenbezogenen Daten verarbeiten. Zur Personalisierung können Technologien wie Cookies, LocalStorage usw. verwendet werden. Dies ist für die Nutzung der Website nicht notwendig, ermöglicht aber eine noch engere Interaktion mit Ihnen. Falls gewünscht, können Sie Ihre Einwilligung jederzeit via unserer Datenschutzerklärung anpassen oder widerrufen.