eMark Blockexplorer erstellen

Heute möchte ich Euch zeigen, wie man einen Iquidus Blockexplorer für die eMark ans laufen bekommt.
Dabei setze ich voraus, das eMarkd installiert ist und die Blockchain voll geladen ist.
Als Verbindung zum Server nutze ich Putty. Lokal unter Ubuntu das Terminal. Achtet bitte darauf, alles unter einem User zu installieren, als root oder sudo su gibt es Probleme mit der Mongo Datenbank.
Nehmen wir an, wir sind als User “fritz” angemeldet.

Wir brauchen:

eMark >= v1.6.1

node.js >= 8.17.0 (12.14.0 is advised for updated dependencies)

mongodb 4.2.x

Nodejs

Als erstes installieren wir Nodejs mit dem den Node Manager:

sudo apt-get update
sudo apt-get install build-essential libssl-dev
sudo apt-get install curl
curl https://raw.githubusercontent.com/creationix/nvm/v0.35.2/install.sh | bash

Jetzt müssen wir unser Terminal schließen und uns neu einloggen um NVM nutzen zu können. Zum Testen geben wir

nvm --version

ein und sollten die neueste Version angezeigt bekommen. (v.0.33.4)
Jetzt können wir mit

nvm ls-remote

nachschauen, welche node Versionen verfügbar sind, und installieren v.0.10.48

nvm install v0.10.48
nvm install v12.16.1

Mit

node -v

schauen wir ob alles geklappt hat.

Mongo Datenbank installieren und einrichten.

Hier die Vorgehensweise für Debian 10. Debian 9 oder Ubuntu ist bischen anders. Aner da hilft google weiter.

wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

falls der Schlüssel nicht angenommen wird

sudo apt-get install gnupg

und wget key wiederholen.

echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org=4.2.3 mongodb-org-server=4.2.3 mongodb-org-shell=4.2.3 mongodb-org-mongos=4.2.3 mongodb-org-tools=4.2.3
mongo --version

sollte uns die installierte Version zurück geben. (4.3.2)

Mongo speichert die Daten unter

  • daten /var/lib/mongodb
  • log files /var/log/mongodb

Wir starten MongoDB mit

sudo systemctl start mongod

Wenn Fehlermeldungen kommen,

sudo systemctl daemon-reload

und testen ob alles läuft:

sudo systemctl status mongod

möchtest du mongo mit dem System starten dann

sudo systemctl enable mongod

zum stoppen stop, zum neustarten restart

sudo systemctl stop mongod

Jetzt legen wir eine Datenbank an mit

mongo

> use explorerdb

User anlegen: Hast du eine Mongo Shell > 2.6 nutzt du cerateUser ansonnsten addUser. Als User musst du den User nehmen mit dem du auf dem Computer eingeloggt bist.

>db.createUser( { user: "iquidus", pwd: "3xp!0reR", roles: [ "readWrite" ] } )

Mit

> exit

verlassen wir mongo wieder

Prozessmanager PM2

PM2 ist ein Prozessmanager für die Verwaltung von Node.js-Prozessen. Zu den wichtigsten Features des PM2-Moduls zählen das automatische Neustarten von Node.js-Prozessen, die Aktualisierung von Prozessen mit nahezu keiner Downtime und das Monitoring der Prozesse hinsichtlich Speicherverbrauch, CPU oder Uptime. Anleitung hier: https://entwickler.de/online/javascript/pm2-prozessmanager-184546.html
Dieser Schritt ist nicht unbedingt notwendig, erleichtert das arbeiten mit dem Explorer jedoch erheblich.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv D1EA2D4C
echo "deb http://apt.pm2.io/ubuntu stable main" | sudo tee /etc/apt/sources.list.d/pm2.list
sudo apt-get update
sudo apt-get install pm2
npm install pm2 -g

Wenn alles geklappt hat gibt uns

pm2 -v

die installierte Version zurück.

(ist jetzt bei mir 4.2.3)

Iquidus Blockexplorer

Jetzt kommen wir zu der eigentlichen Installation des Blockexplorers. Zur Bearbeitung der Dateien könnt ihr einen Texteditor eurer Wahl nehmen, für Anfänger empfehle ich NANO, da VI ein bischen Einarbeitungszeit braucht. (sudo apt-get install nano)

git sollte ja schon vom eMarkd installiert sein, wenn nicht, einfach mit

sudo apt-get install git

installieren.

Um auf dem neuesten Stand zu sein holen wir uns das Original von Iquidus

git clone https://github.com/iquidus/explorer.git

und installieren mit

cd explorer && npm install --production

und passen es auf unsere Bedürfnissen an. Als erstes das Icon und das eMark Logo

cd explorer/public/
rm favicon.ico
wget https://www.dropbox.com/s/s9b19rm5mcb7a4x/favicon.ico
cd images/
rm logo.png
wget https://www.dropbox.com/s/dxeedfsqas6ri33/logo.png


Anpassen der Netzwerkhashrate

Warum muß diese angepast werden? Bei der eMark gibt das RPC Komando “getnetworkhashps” die Hashrate in MEGA zurück. Der Blockexplorer rechnet somit also falsch um.

wir wechseln in den Ordner /lib/

cd lib/

und öffnen die Datei explorer.js

nano explorer.js

und ändern unter var uri = base_url + ‘getnetworkhashps’ die Zeilen Mega, Giga, Tera und Peta indem wir jeweils 6 Nullen entfernen. Mit gleichzeitigem drücken von STRG und o gefolgt von ENTER speichern wir die Datei und verlassen NANO mit STRG + x

Settings einstellen

entweder ihr bearbeitet die settings.json.template und benennt sie dann in settings.json um oder ihr nehmt meine vorgefertigten settings:

cd ..
wget https://www.dropbox.com/s/obs1zliyjgzcn97/settings.json
nano settings.json

Hier ändern wir nur noch die “database settings” und die “wallet settings”. Bei Database kommen zum Beispiel user: “fritz”, password: “3xp!0reR” rein und bei wallet eure Angaben aus der eMark.conf. Unter http://bootswatch.com/ kann man sich verschiedene Designs anschauen, welche man dann unter “theme” einstellen kann.
STRG+o, Enter, STRG+x speichert die Datei und verlässt NANO wieder.

Beim Blockexplorer 1.7.3 gibt es einen Bug! Ändere Zeile 17 in lib/explorer.js zu:

return cb(0);

Blockexplorer installieren

npm install --production

Warnungen können ignoriert werden, Fehler jedoch nicht.

Jetzt sollte alles für den ersten Start bereit sein. Stellt sicher, das eMarkd läuft.

npm start

Wenn alles so aussieht sind wir auf dem richtigen Weg
Wir können jetzt den Browser starten und schauen wie es aussieht. Läuft der Blockexplorer lokal, nutzen wir die IP Adresse http://127.0.0.1:3009/ auf dem Server die Server IP gefolgt von :3009

Wir beenden npm mit STRG+c

Jetzt muß nur noch die Datenbank für den Explorer und die Tauschbörsen aufgebaut werden. Und bei dieser Gelegenheit bauen wir auch gleich einen Fix ein, der automatisch die index.pid löscht sollte der Blockexplorer mal abstürzen.
wir sind immer noch im Ordner ./explorer/

nano clean_pid

folgende Zeilen hinzufügen (Achtung passt euren Pfad an!!!):

#!/bin/bash

PID_FILE=/home/fritz/explorer/tmp/index.pid

ps -aefw | grep -q '[/]usr/bin/node scripts/sync.js index update' || {
[ -f $PID_FILE ] && rm -f $PID_FILE
}

Diese Datei wieder mit STRG+o speichern, NANO beenden und ab und zu per cron ausführen.

Datenbanken aufbauen und die clean_pid ausführen

crontab -e

hier eventuell jetzt euren bevorzugten Editor auswählen und dieses einfügen( Auch hier wieder auf die richtigen Pfadangaben achten):

# eMarkexplorer
*/3 * * * * cd /home/fritz/explorer && /usr/bin/node scripts/sync.js index update > /dev/null 2>&1
*/5 * * * * cd /home/fritz/explorer && /usr/bin/node scripts/sync.js market > /dev/null 2>&1
*/5 * * * * cd /home/fritz/explorer && /usr/bin/nodejs scripts/peers.js > /dev/null 2>&1
# remove stale pid file from node.js 
*/30 * * * * /home/fritz/explorer/clean_pid

Speichern und beenden.

Jetzt kommt der entgültige start des Blockexplorers. Dazu nutzen wir den Prozessmanager PM2

pm2 start ./bin/cluster --name explorer

Der Explorer sollte jetzt laufen und nach spätestens 2 Minuten anfangen die Datenbank aufzubauen.

Herzlichen Glückwunsch, Ihr habt es geschafft. Bei Fragen oder Problemen meldet euch einfach hier in den Komentaren.

Rumhocker