비트코인: JSON-RPC 클라이언트
JSON-RPC 서버 설정
비트코인 서버(bitcoind)는 디폴트로 로컬 컴퓨터에서만 JSON-RPC 연결을 허용하는데, 다음과 같은 rpc 설정으로 외부 네트워크 컴퓨터에서 JSON-RPC를 사용할 수 있다. rpcallowip 에는 허용 가능한 외부 네트워크의 IP 주소 혹은 범위를 지정하고, rpcbind=0.0.0.0는 로컬과 외부에서 접속할 수 있도록 바인딩한다.
server=1 rpcuser=user rpcpassword=pwd699969110f5c4bc38ef687fd0705c rpcallowip=192.168.4.0/22 rpcbind=0.0.0.0
rpcbind=127.0.0.1 (디폴트)을 사용하면 localhost에서만 접속할 수 있으며, rpcbind=192.168.4.100 을 사용하면, 192.168.4.100으로 들어오는 네트워크 Connection만 받아들이며, rpcbind=0.0.0.0 이면 해당 컴퓨터가 가진 모든 네트워크 주소로 들어오는 Connection을 받아들인다.
JSON-RPC 클라이언트
JSON-RPC 클라이언트는 JSON-RPC API를 사용해서 JSON Request를 보내고 JSON Response를 얻게 된다. 사용가능한 JSON-RPC API는 https://developer.bitcoin.org/reference/rpc/ 에 설명되어 있다.
string server="http://192.168.4.10:8332"; string user="user"; string passwd="pwd699969110f5c4bc38ef687fd0705c"; JObject jo = new JObject(); jo.Add(new JProperty("jsonrpc", "1.0")); jo.Add(new JProperty("id", "1")); jo.Add(new JProperty("method", "getbalance")); jo.Add(new JProperty("params", new JArray())); string jsonString = JsonConvert.SerializeObject(jo); using var client = new HttpClient(); string basicAuth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{user}:{passwd}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", basicAuth); var content = new StringContent(jsonString, Encoding.UTF8, "application/json-rpc"); HttpResponseMessage resp = await client.PostAsync(new Uri(server), content).ConfigureAwait(false); string result = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); Console.WriteLine(result);