In diesem Tutorial kannst du erfahren, wie du das Jumpcoin-Wallet via RPC (Remote Procedure Call) in Python steuern kannst.
Vielleicht hast du ja bereits einmal die Konsole im Jumpcoin-Wallet entdeckt, mit welcher du beispielsweise via Command Transaktionen durchführen kannst, wie auch über die GUI (Benutzeroberfläche) des Wallets, aber auch Zugriff auf Funktionen erhältst, welche dir in der GUI vollkommen verwehrt bleiben, wie zum Beispiel mithilfe einer beliebigen Transaktions-ID aus der gesamten Jumpcoin Blockchain, welche nie etwas mit deinen Transaktionen zu tun hatte, die Transaktion mit all seinen Details einzusehen, aber auch andere Spielereien oder durchaus sinnvolle Anwendungen.
Hast du jetzt vor, ein Programm zu entwickeln, welches die Jumpcoin BlockchainKette von allen Transaktionen einer Kryptowährung. Die Bloc... einbindet, brauchst du wahrscheinlich Zugriff auf genau diese Commands.
Aus Gründen der Simplizität und weiten Verbreitung heutzutage, werde ich in diesem Tutorial Python verwenden. Es kann jedoch jede Programmiersprache verwendet werden, mit welcher man POST-Requests im json-Format versenden kann.
Einzelne Schritte der Implementierung
Zu aller erst muss die Bibliothek requests importiert werden:»import requests
Dies ist eine Bibliothek, welche standardmäßig mit Python mitinstalliert wird. Hiermit lassen sich allerlei Netzwerk Anfragen bearbeiten, wie unter Anderem die, die für die RPC-Steuerung des Wallets notwendig ist.
Als nächstes wird die ebenfalls standardmäßig mitgelieferte Bibliothek json benötigt:»import json
Hiermit lässt sich dann die Anfrage an das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... richtig formatieren.
Als nächstes sollten einige Konstanten festgelegt werden:»RpcUser = ‘username‘
»RpcPassword = ‘password‘
»RpcPort = ‘12345‘
Diese Konstanten sind die Zugangsdaten zur RPC-Schnittstelle des Wallets. Sie werden in der Konfigurationsdatei (jumpcoin.conf) des Wallets hinterlegt. Diese Datei findet man im Installationsverzeichnis des Wallets. Sollte diese Datei dort nicht vorhanden sein, kann sie einfach eine leere Datei mit diesem Namen erstellt werden und die relevanten Informationen können hineingeschrieben werden:»…
»server=1
»rpcuser=username
»rpcpassword=password
»rpcport=12345
»…
Die Konfigurationsvariable server bestimmt, ob das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... als Server fungieren darf, oder nicht. Eine 1 steht dabei für True bzw. ja, während eine 0 für False bzw. nein steht. Für unseren Zweck muss der Wert dieser Variable 1 sein. Nutzername, Passwort und Port des Servers werden in den folgenden 3 Zeilen angegeben. Dabei sollte berücksichtigt werden, dass diese Werte möglichst sicher sein sollten, da diese Werte vollen Zugriff auf das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... gewähren.
Jetzt geht es wieder zurück in den Code des Programms!
Hier sollte jetzt die URL als eine weitere Konstante erstellt werden:»url = “http://{}:{}@127.0.0.1:{}“.format(RpcUser, RpcPassword, RpcPort)
Die zuvor erstellten Konstanten Variablen werden hier nun dort eingetragen, wo sich die geschwungenen Klammern befinden. Zwar hätte man diese Daten auch direkt hier eintragen können, jedoch ist diese Lösung um einiges übersichtlicher. Es gilt zu beachten, dass ich davon ausgehe, dass das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In..., sowie das Python Programm, welches mit dem WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... interagieren soll, auf der selben Maschine laufen, woraus die auf sich selbst verweisende IP-Adresse 127.0.0.1 resultiert. Sollten diese 2 Dinge auf unterschiedlichen Maschinen laufen, muss an dieser Stelle die IP-Adresse mit der Adresse, der Maschine, auf welcher das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... läuft ersetzt werden. Befinden sich die Maschinen im selben Netzwerk, sollte die LAN-Adresse, welche i.d.R. folgendes Format hat, verwendet werden: 192.168.0.x.
Befinden sich die Maschinen in unterschiedlichen Netzweken, muss auf die globale IP zurückgegriffen werden. In jedem Fall kann es notwendig sein, in der Firewall und/oder dem Router Portfreigaben für den betroffenen Port einzurichten.
Jetzt fehlt noch eine letzte Konstante bevor der richtige Spaß beginnt:»jsonrpc = ‘2.0‘
Hier wird gespeichert, dass die zu verwendene Version von jsonrpc die Version 2.0 sein soll.
Wenn wir jetzt beispielsweise die aktuelle Blockhöhe, welche unserem WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... bekannt ist abfragen wollen, legen wir das zuerst in einer Variable mit dem Namen payload fest:»payload = {‘jsonrpc‘: jsonrpc, ‘method‘: ‘getblockcount‘, ‘params‘: None}
Der Payload wird in einem Dictionary gespeichert, in welchem wir zuerst nochmal die jsonrpc Version spezifizieren. Danach wird die gewünschte Methode eingetragen. Im Fall von der aktuellen Blockhöhe wird hier die Methode getblockcount benötigt. Der Name der Methode entspricht dem ersten Keyword des Commands in der Konsole. Danach folgen die vom Command gefragten Parameter. Diese entsprechen den Werten, die nach dem ersten Keyword des Commands folgen. Im Fall von getblockcount gibt es keine möglichen Parametern, weshalb dieser mit dem Python- Keyword None als leer definiert wird.
Werden einer oder mehrere Parameter verlangt, so müssen diese als ein Array übergeben werden.
Ein Beispiel dazu gibt es am Ende in einem vollständigen Programmbeispiel.
Jetzt sind alle Vorbereitungen abgeschlossen und die Anfrage kann an das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... versendet werden.
Das geschieht wie folgt:»walletReturn = requests.post(url, data=json.dumps(payload))
Die Variable walletReturn fungiert als Speichervariable für die Antwort des Wallets auf unsere Anfrage. Mit requests.post() wird eine POST-Request ausgeführt. Darin wird zum einen die URL, an welche die Request gehen soll definiert, aber auch, was wir denn genau an das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... senden wollen. Dies haben wir ja bereits zuvor in der Variable payload festgelegt. Die richtige Formatierung für das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In..., dass dieses mit der Information arbeiten kann, erhalten wir mit der Funktion json.dumps() von der json Bibliothek.
Jetzt haben wir eine Antwort des Wallets vorliegen. Wollen wir diese nun weiterverwenden – zum Beispiel ausgeben – dann kann man das so machen:»print(walletReturn.json())
der Anhang mit .json() sorgt dafür, dass wir auch den tatsächlichen Inhalt der Antwort im json-Format erhalten. Würde man diesen Schritt nicht gehen, dann wäre die ausgegebene Antwort lediglich der Erfolgsstatus der Anfrage.
Vollständiges Demo-Programm
»import requests
»import json
»
»user = "user"
»pw = "passwort"
»port = "12345"
»
»url = "http://{}:{}@127.0.0.1:{}".format(user, pw, port)
»jsonrpc = "2.0"
»
»def getBlockHash(index):
» method = 'getblockhash'
» params = [int(index)] # *
» payload = {"jsonrpc": jsonrpc, "method": method, "params": params}
» walletReply = requests.post(url, data=json.dumps(payload)).json()
» return r
»
»while True:
» blockReq = input('Für welchen Block hätten sie gerne den Hash? ')
» blockHash = getBlockHash(blockReq)
» print('Der Hash des Blocks {} lautet {}'.format(blockReq, blockHash['result']))
In diesem Programm wird der User gefragt, für welchen Block er denn gerne den Hash hätte. Danach wird mit seiner angegeben Blockhöhe die Frage an das WalletDie Wallet ist eine Art Geldbörse für Kryptowährungen. In... weitergeleitet und die Antwort wird dem User ausgeben.
*weitere Parameter könnten angehängt werden: [param1, param2, …] !! ACHTUNG: Trennung durch Komma
Fazit
Das einbinden des Jumpcoin Wallets in externe Programme via RPC-Connection ist gar nicht so schwer und hat eine ganze Reihe an Anwendungen. Jetzt wo du die Grundlagen gelernt hast, kannst du sie direkt in dein nächstes Projekt für die Community mit einbauen!