API-Referenz (JSON-RPC)

Aus Bitcoin Wiki
Wechseln zu: Navigation, Suche

Bitcoin steuern

Bitcoin muss zuerst im Server-Modus gestartet werden. Um den Servermodus starten zu können müssen Sie zunächst einen rpcuser und ein rpcpassword ein der bitcoin.conf festlegen. Starten Sie danach entweder bicoind oder bitcoin -server.

Sie können den Server nun entweder über die Kommandozeile oder über HTTP JSON-RPC Kommandos steuern.

Hierzu ein paar Beispiele:

$ ./bitcoind
bitcoin server starting
$ ./bitcoind help
#Zeigt den Hilfetext mit allen RPC-API Befehlen
#z.B
$ ./bitcoind getbalance
2000.00000

JSON-RPC

Um mit dem Server über JSON-RPC zu kommunizieren muss eine HTTP-Authentifizierung verwendet werden und aus Sicherheitsgründen werden standardmäßig nur Verbindungen von Prozessen auf der lokalen Maschine angenommen. Ab version 0.3.14 wird SSL (HTTPS) für Verbindungen unterstützt.

Beispiele

Hier ein paar Beispiele für die Kommunikation per JSON-RPC in verschiedenen Programmiersprachen

Python

JSON-RPC for Python ist die offizielle JSON-RPC Implementierung für Python. Sie generiert die RPC-Aufrufe Automatisch. Leider ist die Bibliothek aus Gründen der Kompatibilität relativ ineffizient. User:Jgarzik hat aus diesem die optimierte Version (nur für Python 2.6 aufwärts) Python-BitcoinRPC erstellt. Diese Version sollte wenn möglich bevorzugt werden.

So lange nur die ServiceProxy Klasse genutzt wird, ist es dem Benutzer überlassen welche der beiden Paket genutzt werden.

Hier ein Beispiel:

  from jsonrpc import ServiceProxy
 
  access = ServiceProxy("http://user:password@127.0.0.1:8332")
  access.getinfo()
  access.listreceivedbyaddress(6)
  #usw...

Ruby

Stellen Sie sicher, dass Sie den rest-client installiert haben oder führen sie gegebenenfalls den Befehl

$ gem install rest-client

aus.

=begin
Benutzung:
    h = ServiceProxy.new('http://user:password@127.0.0.1:8332')
    puts h.getinfo.call
    puts h.getbalance.call 'accname'
=end
require 'json'
require 'rest_client'
 
class JSONRPCException < RuntimeError
    def initialize()
        super()
    end
end
 
class ServiceProxy
    def initialize(service_url, service_name=nil)
        @service_url = service_url
        @service_name = service_name
    end
 
    def method_missing(name, *args, &block)
        if @service_name != nil
            name = "%s.%s" % [@service_name, name]
        end
        return ServiceProxy.new(@service_url, name)
    end
 
    def respond_to?(sym)
    end
 
    def call(*args)
        postdata = {"method" => @service_name, "params" => args, "id" => "jsonrpc"}.to_json
        respdata = RestClient.post @service_url, postdata
        resp = JSON.parse respdata
        if resp["error"] != nil
            raise JSONRPCException.new, resp['error']
        end
        return resp['result']
    end
end