Bitcoin ist nicht im Regtest-Modus verbunden

Ich habe Probleme mit dem Regtest-Modus unter Linux. Verwenden der vorkompilierten Version 0.9.2.1 für Linux und Starten des Regtest-Modus gemäß den Anweisungen auf bitcoin.org:

<bitcoin-ver>-linux/bin/64>> ./bitcoind -regtest -daemon

Der Server startet, aber ein getinfo gibt 'connections' zurück: 0. Versucht, mit verschiedenen rpc*-Einstellungen in der .conf-Datei zu experimentieren. Was genau muss ich einstellen, um den Regtest-Modus zu verwenden? Muss ich echte Knoten über Addnode für Regtest hinzufügen? Es scheint nicht so, als müsste ich das brauchen. Ich konnte einige Verbindungen herstellen, indem ich einmal mehrere echte Knoten hinzufügte, aber nach ein paar Minuten fielen die „Verbindungen“ auf 0 zurück. Lassen Sie mich wissen, ob zusätzliche Informationen hilfreich wären.

Antworten (4)

Sie müssen mehr als einen Knoten auf Ihrem Rechner ausführen (das können Sie tun, wenn Sie jedem Knoten einen anderen -port und -rpcport zuweisen). Und Sie müssen ihnen mitteilen, wie sie sich finden können (mit -connect=127.0.0.1:Portnummer).

Es gibt Beispiele, die in Bash und Python im Quellbaum von Bitcoin Core geschrieben sind: https://github.com/bitcoin/bitcoin/tree/master/test/functional

Danke, ich werde mir die Beispiele anschauen. Ist Regtest für die Entwicklung von Mining-Systemen geeignet oder sollte ich Testnet dafür verwenden?

Obwohl ich glaube, dass die Antwort von Fred Tingey vollständig ist, hat sie die folgenden Attribute:

  • es hängt von einer Konfigurationsdatei ab.
  • Es enthält Beispiele für Bitcoin-qt auf der Windows-Plattform, und das OP fragte nach Bitcoin auf der Linux-Plattform.

Daher wollte ich das folgende prägnante Bash-Skript teilen, das das tut, was das OP will. Wie andere teilweise angemerkt haben, ist der Schlüssel, um dies zum Laufen zu bringen, Folgendes:

  • Geben Sie für jeden Knoten einen eindeutigen Port (bei Überwachung) und rpcport (bei Verwendung von rpc) an
  • Geben Sie für jeden Knoten ein eindeutiges Datenverzeichnis an
  • Wenn Sie verwenden -connect, um auf eigene Knoten zu beschränken, denken Sie daran, verwenden -listen, um Verbindungen von eigenen Knoten zu akzeptieren.

Das heißt, hier ist mein start-regtest-network.shSkript:

#!/bin/bash
bitcoind -server -listen -port=17591 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16591 -datadir=$HOME/regtest/A/ -connect=localhost:17592 -regtest -pid=$HOME/regtest/A/.pid -daemon -debug
bitcoind -server -listen -port=17592 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16592 -datadir=$HOME/regtest/B/ -connect=localhost:17593 -regtest -pid=$HOME/regtest/B/.pid -daemon -debug
bitcoind -server -listen -port=17593 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16593 -datadir=$HOME/regtest/C/ -connect=localhost:17594 -regtest -pid=$HOME/regtest/C/.pid -daemon -debug
bitcoind -server -listen -port=17594 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16594 -datadir=$HOME/regtest/D/ -connect=localhost:17595 -regtest -pid=$HOME/regtest/D/.pid -daemon -debug
bitcoind -server -listen -port=17595 -rpcuser=bitcoinrpc -rpcpassword=P$SECONDS -rpcport=16595 -datadir=$HOME/regtest/E/ -connect=localhost:17591 -regtest -pid=$HOME/regtest/E/.pid -daemon -debug

Außerdem hier meine stop-regtest-network.sh:

#!/bin/bash
sudo killall --regex bitcoin.*

Mir ist klar, dass mein Stop-Skript schlampig ist und alle Bitcoin-Prozesse beendet. Wenn Sie so geneigt sind, können Sie dies ändern, um die einzelnen PIDs aus jedem Datenverzeichnis zu ziehen.

Schließlich müssen Sie wahrscheinlich einige Datenverzeichnisse für Bitcoin vorab erstellen, wenn Sie das Skript überhaupt nicht bearbeiten.

mkdir $HOME/regtest/A/
mkdir $HOME/regtest/B/
mkdir $HOME/regtest/C/
mkdir $HOME/regtest/D/
mkdir $HOME/regtest/E/

Sie sollten über Regtest-Bitcoind-Knoten verfügen, die Round-Robin an den Ports 17591, 17592, 17593, 17594 und 17595 verbinden. Ebenso sollten Sie in der Lage sein, eine Verbindung zu den RPC-Ports 16591, 16592, 16593, 16594 und 16595 herzustellen. Wenn Sie den RPC kennen müssen Kennwort können Sie überprüfen ps auxoder ein explizites rpc-Kennwort im Skript festlegen.

HTH

Nett. Ich erhalte eine Fehlermeldung ../.pidVerzeichnis oder Datei existiert nicht. ist pid obligatorisch?

Um mehrere Knoten im Regtest-Modus auf einem einzelnen Computer auszuführen, müssen Sie jeden Knoten in einer Sandbox ausführen.

In diesem Beispiel habe ich drei Knoten, sie heißen Alice, Bob und Cory. Da Bitcoin ein Peer/Mesh-Netzwerk ist, ist es mein Ziel, jeden Knoten so zu verbinden, dass Änderungen, die an Cory vorgenommen werden, letztendlich für Bob sichtbar sind (ohne dass unbedingt eine direkte Verbindung zwischen den beiden erforderlich ist).

Schritt 1: Erstellen Sie Ordner für jeden Knoten.

Diese Ordner enthalten unsere Daten und Konfigurationen für jeden Knoten. Die Namen sind nicht wichtig, sie können später umbenannt werden, also können Sie sie vorerst "Alice", "Bob" und "Cory" nennen. Denken Sie daran, wo Sie sie erstellen, Sie benötigen ihre Pfade für Schritt 3 unten.

Schritt 2: Erstellen Sie in jedem Ordner eine bitcoin.conf -Datei

In den Konfigurationsdateien wird Alice so konfiguriert, dass sie sich mit Cory verbindet, und Bob wird so konfiguriert, dass sie sich mit Alice verbindet. Neben der Konfiguration ausgehender Verbindungen legen wir hier auch regtest=1Einstellungen server=1fest.

bitcoin.conf für Alice

regtest=1
server=1
 # Alice connects to Cory
connect=localhost:18333

bitcoin.conf für Bob

regtest=1
server=1
 # Bob connects to Alice
connect=localhost:18444

bitcoin.conf für Cory

regtest=1
server=1
 # Cory connects to nobody

Schritt 3: Starten Sie jeden Knoten.

Beachten Sie, dass jeder Knoten eine andere Portnummer haben muss, da immer nur ein Knoten an eine Portnummer gebunden werden kann.

  • Alice auf Port 18444
  • Bob auf Port 18555
  • Cory an Port 18333

Sie können natürlich Ihre eigenen Portnummern wählen, aber achten Sie darauf, keine Portnummer zu verwenden, die bereits von etwas anderem verwendet wird.

Die Befehlszeilenoptionen teilen Bitcoin mit, welche Portnummer verwendet werden soll, wo Daten gespeichert werden sollen und wo die Konfigurationsdatei zu finden ist:

Alice:

"C:\Program Files\Bitcoin\bitcoin-qt.exe" -conf="C:\Alice\bitcoin.conf" -datadir="C:\Alice" -rpcport=18444

Bob:

"C:\Program Files\Bitcoin\bitcoin-qt.exe" -conf="C:\Bob\bitcoin.conf" -datadir="C:\Bob" -rpcport=18555

Kory:

"C:\Program Files\Bitcoin\bitcoin-qt.exe" -conf="C:\Cory\bitcoin.conf" -datadir="C:\Cory" -rpcport=18333

Dadurch werden drei Instanzen des Bitcoin-Clients gestartet, und die Ordner für jeden Knoten beginnen mit der Initialisierung von Regtest-Daten.

Schritt 4: Testen

Sie können die Help->Debug Window->ConsoleOption verwenden, um Befehle auf jedem der Knoten interaktiv auszuführen. Beispielsweise können Sie 101 Blöcke mit dem folgenden Bitcoin-Konsolenbefehl abbauen:

setgenerate true 101

Sie sollten (nach einigen Sekunden) dann Münzen erhalten haben.

Diese Mining-Aktivitäten führen zu Coinbase-Transaktionen – und nur die letzte von 50 BTC steht zur Verfügung. Jetzt können Sie einige BTC an einen der anderen Knoten senden. Nach etwas mehr Mining wird eine solche Transaktion bestätigt .

Sie können auch die Konsolenbefehle getpeerinfound verwenden getinfo, um zu überprüfen, ob das Netzwerk korrekt eingerichtet ist. Einer von ihnen (Cory mit Port=18333) sollte 'sync=true' in seiner Peerinfo-Ausgabe haben, und alle Knoten sollten die gleiche "Blockhöhe" haben, unabhängig davon, welcher Knoten für das Mining verwendet wird.

Ich möchte eine Ergänzung zu den obigen Antworten machen.

Anstelle -connect=ipder richtigen Option ist -addnode=ip. -connectlässt einen Knoten nur mit einem Knoten verbinden, während '-addnode' versucht, sich unter anderen Knoten mit der angegebenen Liste von Knoten (IP) zu verbinden.

Ich erinnere mich vage an eine Lektüre, --addnodedie auch die Erkennung und Verwendung von Knoten von Peers ermöglicht? ( --connectwobei sich nur auf den angegebenen Knoten beschränken wird.) Wenn dies zutrifft, lohnt es sich möglicherweise, Ihre Antwort zu aktualisieren. Es wäre gut für die Leser, dies zu wissen