private static double GetBalanceFromAddressGroupings(MonitoredCoinElement coin, bool reExecuted = false) { double result = 0.00; RestClient client = new RestClient(coin.RpcEndpoint); RestRequest request = new RestRequest("", Method.POST); request.Credentials = new NetworkCredential(coin.RpcUser, coin.RpcPassword); request.AddHeader("Content-Type", "application/json-rpc"); JObject requestBody = new JObject(); requestBody.Add(new JProperty("jsonrpc", "1.0")); requestBody.Add(new JProperty("id", Guid.NewGuid())); requestBody.Add(new JProperty("method", "listaddressgroupings")); var jsonData = JsonConvert.SerializeObject(requestBody); request.AddJsonBody(jsonData); var response = client.Execute(request); dynamic responseContent = JsonConvert.DeserializeObject(response.Content); if (responseContent.error != null) { if (responseContent?.error?.message?.Value == "Loading block index..." || responseContent?.error?.message?.Value == "Rewinding blocks..." || responseContent?.error?.message?.Value == "Rescanning..." ) { return(0.00); } } bool foundAddress = false; if (responseContent?.result != null) { foreach (var grouping in responseContent.result) { foreach (var addressData in grouping) { string address = addressData[0].Value; if (address.Equals(coin.Address)) { return(addressData[1].Value); } } } } if (!foundAddress && !reExecuted) { ImportAddressIntoWallet(coin); result = GetBalanceFromAddressGroupings(coin, true); } return(result); }
private static double GetBalanceFromRpc(MonitoredCoinElement coin) { var apiUrl = coin.RpcEndpoint; if (String.IsNullOrEmpty(apiUrl)) { Console.WriteLine(String.Format("No API URL defined for coin: {0}", coin.CoinID)); return(0.00); } double result = 0.00; switch (coin.AlternateRpcMethod) { //Default is to use address groupings and import wallet if it doesn't exist default: result = GetBalanceFromAddressGroupings(coin); break; } return(result); }
private static void ImportAddressIntoWallet(MonitoredCoinElement coin) { RestClient client = new RestClient(coin.RpcEndpoint); RestRequest request = new RestRequest("", Method.POST); request.Credentials = new NetworkCredential(coin.RpcUser, coin.RpcPassword); request.AddHeader("Content-Type", "application/json-rpc"); JObject requestBody = new JObject(); requestBody.Add(new JProperty("jsonrpc", "1.0")); requestBody.Add(new JProperty("id", Guid.NewGuid())); requestBody.Add(new JProperty("method", "importaddress")); JArray requestParams = new JArray(); requestParams.Add(coin.Address); requestBody.Add(new JProperty("params", requestParams)); var requestBodyJson = JsonConvert.SerializeObject(requestBody); request.AddJsonBody(requestBodyJson); var response = client.Execute(request); dynamic responseContent = JsonConvert.DeserializeObject(response.Content); }