Benutzerdefinierter Bitcoin-Befehl kann nicht ausgeführt werden

Ich schreibe eine Diplomarbeit über das Bitcoin-System und als Teil meiner Aufgabe muss ich den Bitcoin-Core-Quellcode untersuchen.

Ich habe den Code heruntergeladen, kompiliert und es geschafft, ihn auszuführen. Ich wollte jedoch eine triviale Änderung am Code vornehmen und einen einfachen benutzerdefinierten Befehl als Teil von blockchain.cpp hinzufügen . Das Problem ist, dass meine Änderungen nicht sichtbar sind, nachdem ich make ausgeführt habe und wenn ich bitcoin-cli -testnet ausgeführt habe.

Ich bekomme immer: Fehlercode: -32601 Fehlermeldung: Methode nicht gefunden

Außerdem habe ich versucht, eine bereits funktionierende Methode zu kommentieren und versucht, bitcoin-cli auszuführen und diese Funktion aufzurufen, und sie wird erfolgreich ausgeführt. HINWEIS: Der Befehl "make" läuft reibungslos und erkennt Fehler, falls vorhanden.

Kann mir jemand erklären, wie ich Bitcoin-Core ändern kann? Ich habe nicht vor, diese Änderungen in den Master-Branch zu pushen, ich bin nur daran interessiert, mit Code zu experimentieren.

Vielen Dank im Voraus :)

Antworten (1)

Um einen neuen RPC hinzuzufügen, müssen Sie die Funktion schreiben, die ihre Aktion implementiert, die Funktion zur Dispatch-Tabelle hinzufügen und die bitcoin-cliTypumwandlungstabelle von aktualisieren.

Am Ende der RPC-Datei, zu der Sie Ihre Funktion hinzugefügt haben (in diesem Fall , src/rpc/blockchain.cppsehen Sie eine Tabelle mit allen RPCs in dieser Datei sowie einigen zusätzlichen Informationen über sie wie Kategorie, Name und Argumentnamen. Hinzufügen Ihren neuen RPC in diese Tabelle.

Wenn Ihr Befehl als Nächstes Argumente hat, die keine Zeichenfolgen sind, öffnen Sie src/rpc/client.cppdiese Argumente und fügen Sie sie der vRPCConvertParamsdortigen Liste hinzu. In dieser Liste geben Sie den RPC-Namen, den Index des zu konvertierenden Arguments und den Namen dieses Arguments an.

Hallo, danke erstmal für deine Antwort. Zweitens denke ich, dass ich alles getan habe, was Sie erwähnt haben. Um genauer zu sein, habe ich die Schritte unter diesem Link befolgt: technology.finra.org/code/…
Um genauer zu sein, habe ich eine Funktion mit randomName zu blockchain.cpp hinzugefügt, ich habe sie zu vector command[] am Ende der Datei hinzugefügt und ich habe sie zu client.cpp hinzugefügt. Es scheint mir, wenn ich "make" auf repo aufrufe bitcoin-master, Änderungen sind sichtbar (weil ich einige Fehler hatte), aber wenn ich bitcoin-cli -testnet methodName aufrufe, ist die Funktion unsichtbar. Deshalb habe ich versucht, zum Beispiel die Funktion "getblockhash" aus blockchain.cpp und aus client.cpp auszukommentieren, nur um zu sehen, ob meine Änderungen sichtbar sind. Der Befehl make war erfolgreich, aber ich konnte immer noch bitcoin-cli -testnet getblockhash <randomNumber> aufrufen
Haben Sie Bitcoin nach der Neukompilierung neu gestartet? Die Befehle sind Teil von bitcoind, nicht von bitcoin-cli. bitcoin-cli ist lediglich eine Möglichkeit, über die Befehlszeile auf die RPC-Schnittstelle von bitcoind zuzugreifen. Es hat nicht wirklich den Befehl darin implementiert.
Vielen Dank, Andrew, für deine Unterstützung, aber.. Nach meiner Änderung gebe ich Folgendes ein: bitcoind -testnet --daemon, was zu folgendem Ergebnis führt: Bitcoin Core Starting. cli -testnet stop Welche Ergebnisse: Bitcoin Core wird gestoppt Und dann geben Sie den Befehl ein, um Bitcoin erneut zu starten. Mache ich etwas falsch?
Hm, das Geheimnis liegt im Aufrufen von sudo make install , nicht make Jetzt sind meine Änderungen durch bitcoin-cli sichtbar Danke Andrew Chow für deine Unterstützung, aber kennst du vielleicht den Unterschied zwischen make und make install ?
makekompiliert es. make installkompiliert und kopiert dann die kompilierten Binärdateien an einen Installationsort. Wenn Sie die Binärdateien nicht direkt verwendet haben, indem Sie einen Pfad zu ihnen angegeben haben (dh src/bitcoindund src/bitcoin-cli), versucht Ihr System, sie zu finden, indem es sie in der PATH. make installkopiert die Binärdateien an einen Ort, der sich in der PATH.