操控 bitcoin 软件 运行 bitcoind 或 bitcoin -server. 你可以通过命令行或HTTP JSON-RPC 命令来操控它.
首先你需要创建bitcoin.conf配置文件并设置rpcuser和rpcpassword;详情请查看运行Bitcoin
示例:
$ ./bitcoind bitcoin server starting $ ./bitcoind help # shows the help text
RPC调用列表将显示
$ ./bitcoind getbalance 2000.00000
JSON-RPC 运行'bitcoin -server'或'bitcoind' 将使bitcoin以HTTP JSON-RPC服务器模式运行,但与其通信时必须使用http://localhost.:8332,安全起见,默认情况下服务器只接受同一机器上其他进程的连接。如果你的HTTP或JSON库需要你指定已认证的'realm',请使用'jsonrpc'。
0.3.14版之后版本的Bitcoin支持SSL (https) JSON-RPC连接。配置详情请参考本页面。
你需要和你使用语言对应的http://127.0.0.1:8332/来访问服务器 Python python-jsonrpc 是JSON-RPC在Python上的官方实现。它自动生成RPC调用的Python方法。但为了支持旧版本的Python,它效率地下。
jgarzik创建了Python-BitcoinRPC 分支,它对新版本的Python进行了优化(最低需要 Python 2.6+, 而非3.x). 推荐这个版本。
尽管BitcoinRPC缺少jsonrpc的一些特性,在编写仅使用ServiceProxy类的软件时,两个版本可以使用相同的代码
from jsonrpc import ServiceProxy access = ServiceProxy("http://user:password@127.0.0.1:8332") access.getinfo() access.listreceivedbyaddress(6) #access.sendtoaddress("11yEmxiMso2RsFVfBcCa616npBvGgxiBX", 10) Ruby =begin Make sure to do: gem install rest-client Usage: 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 PHP 用JSON-RPC PHP库连接Bitcoin非常简单,例如:
require_once 'jsonRPCClient.php'; $bitcoin = new jsonRPCClient('http://user:password@127.0.0.1:8332/'); echo "\n"; print_r($bitcoin->getinfo()); echo "\n"; echo "Received: ".$bitcoin->getreceivedbylabel("Your Address")."\n"; echo ""; Java 让Java使用HTTP基本认证的最简单方法是创建default Authenticator
final String rpcuser ="..."; final String rpcpassword ="..."; Authenticator.setDefault(new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication (rpcuser, rpcpassword.toCharArray()); } }); 这样一来,任何JSON-RPC Java库(或 URL POSTs)都可以和Bitcoin 服务器通信了。
Perl 用CPAN 的 JSON::RPC 包可以和Bitcoin通信。首先你必须设置客户端证书,例如:
use JSON::RPC::Client; use Data::Dumper; my $client = new JSON::RPC::Client; $client->ua->credentials( 'localhost:8332', 'jsonrpc', 'user' => 'password' # REPLACE WITH YOUR bitcoin.conf rpcuser/rpcpassword ); my $uri = 'http://localhost:8332/'; my $obj = { method => 'getinfo', params => [], }; my $res = $client->call( $uri, $obj ); if ($res){ if ($res->is_error) { print "Error : ", $res->error_message; } else { print Dumper($res->result); } } else { print $client->status_line; } .NET (C#) 使用标准的httprequest/response 对象可与rpc服务通信。 用序列化/反序列化Json库可以轻松许多:
JayRock for .NET 4.0 Json.Net for .NET 2.0 and above 下面的例子使用Json.Net:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost.:8332"); webRequest.Credentials = new NetworkCredential("user", "pwd"); /// important, otherwise the service can't desirialse your request properly webRequest.ContentType = "application/json-rpc"; webRequest.Method = "POST"; JObject joe = new JObject(); joe.Add(new JProperty("jsonrpc", "1.0")); joe.Add(new JProperty("id", "1")); joe.Add(new JProperty("method", Method)); // params is a collection values which the method requires.. if (Params.Keys.Count == 0) { joe.Add(new JProperty("params", new JArray())); } else { JArray props = new JArray(); // add the props in the reverse order! for (int i = Params.Keys.Count - 1; i >= 0; i--) { .... // add the params } joe.Add(new JProperty("params", props)); } // serialize json for the request string s = JsonConvert.SerializeObject(joe); byte[] byteArray = Encoding.UTF8.GetBytes(s); webRequest.ContentLength = byteArray.Length; Stream dataStream = webRequest.GetRequestStream(); dataStream.Write(byteArray, 0, byteArray.Length); dataStream.Close(); WebResponse webResponse = webRequest.GetResponse(); ... // deserialze the response 命令行 (cURL) 用cURL或其他命令行HTTP-fetching可以发送命令并查看结果,例如: curl --user user --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332/ 你将获得你的rpcpassword,然后你会看到类似下面的信息
{"result":{"balance":0.000000000000000,"blocks":59952,"connections":48,"proxy":"","generate":false, "genproclimit":-1,"difficulty":16.61907875185736,"error":null,"id":"curltest"} |