예제 #1
0
        private async Task <bool> ResolveConflicts()
        {
            List <Block> newChain  = null;
            var          maxLength = _chain.Count;

            foreach (var node in _nodes)
            {
                var url      = new Uri(node.Address, "/node/confirmed");
                var request  = new HttpRequestMessage(HttpMethod.Get, url);
                var response = await _requestClient.MakeRequest(request);

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var model = new
                    {
                        fullChain = new List <Block>(),
                        length    = 0
                    };

                    var json = await response.Content.ReadAsStringAsync();

                    var data = JsonConvert.DeserializeAnonymousType(json, model);

                    if (data.fullChain.Count > maxLength && Utility.IsValidChain(data.fullChain))
                    {
                        maxLength = data.fullChain.Count;
                        newChain  = data.fullChain;
                    }
                }
            }

            if (newChain != null)
            {
                _chain = newChain;
                return(true);
            }

            return(false);
        }