Was besser ist, sind bereits vorhandene Bitcoin-Core-API-Bindungen für Python- oder benutzerdefinierte Wrapper-Funktionen

Wie ratsam ist die Verwendung des folgenden Codes zum Abfragen des Bitcoin-Kerns im Vergleich zur Verwendung einer Python-RPC-Bibliothek.

import os
btc_prefix = 'bitcoin-cli '

def getblockcount(btc_prefix):
    print("in getblockcount")
    cmd = ' '.join([btc_prefix, 'getblockcount'])
    response = os.popen(cmd).read()
    return int(response)
getblockcount(btc_prefix)

Es ist eine Art Wrapper-Funktion für die Kern-APIs. Was sind die Nachteile/Vorteile der Verwendung des obigen Codes? Beeinträchtigt es auch die Sicherheit in irgendeiner Weise.

Antworten (1)

bitcoin-cliist nur ein Wrapper für die RPC-Funktionen, sodass Sie im Wesentlichen genau dasselbe tun wie bei einem RPC-Aufruf. Im Allgemeinen wird die Verwendung von RPC bevorzugt, da Sie sich nicht darauf verlassen müssen, dass sich die bitcoin-cliausführbare Datei auf dem System und in Ihrem aktuellen Pfad befindet. Dies wird zum Beispiel höchstwahrscheinlich nicht unter Windows funktionieren.

Im Allgemeinen wird RPC bevorzugt, da Sie von anderen Systemen aus darauf zugreifen können. Mit Ihrem Programm können Sie es nur auf dem System ausführen, auf dem Bitcoin Core installiert ist, während Sie mit RPC von anderen Systemen aus ausführen können.

Es hat auch einen viel geringeren Overhead, da Sie nicht für jede Anfrage einen neuen Prozess starten müssen
@PieterWuille Was hat einen geringeren Overhead?
@Jimmy Es gibt keine Sicherheitslücke als solche in meinem Ansatz?
Die Verwendung von bitcoin-cli ist sehr langsam. Verwenden Sie JSON-RPC direkt aus Ihrem Programm; es wird viel flexibler und schneller sein als die Verwendung der Wrapper-Binärdatei von Bitcoin Core.
Die Sicherheitslücke in getblockcount besteht darin, dass ein Angreifer alles auf Ihrem System ausführen kann (z. B. btc_prefix als übergeben rm -rf /). Ich würde Ihnen dringend raten, JSON-RPC zu verwenden, das nur das ausführt, was Sie wollen.
@JimmySong Aber dann, wie Sie erwähnt haben, erlaubt der von mir verwendete Ansatz niemandem den Fernzugriff auf Bitcoin (was in meinem Fall erforderlich ist). Und es ist ein internes Modul, das keiner API ausgesetzt ist, wo Sie btc_prefix übergeben können. Es wird in einer Konfigurationsdatei gespeichert. Stellt es unter den gegebenen Bedingungen eine ähnliche Sicherheitslücke dar?
Wenn Ihre interne App aus Sicherheitsgründen gesperrt ist, ist sie natürlich sicher, egal welchen Code Sie darauf ausführen. Wenn Sie um eine Sicherheitsüberprüfung bitten, gehen Sie im Allgemeinen davon aus, dass eine externe Partei Zugriff hat.