Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }