private async Task SyncCacheAndDb()
        {
            foreach (var cacheNode in _nodeCache.NodeList)
            {
                var existingDbNode = CachedDbNodes
                                     .FirstOrDefault(dbn => dbn.NodeAddresses.Any(ia => ia.Ip == cacheNode.Ip));

                if (existingDbNode == null)
                {
                    var newDbNode = Mapper.Map <Node>(cacheNode);
                    newDbNode.Type = NodeAddressType.P2P_TCP;
                    newDbNode.Net  = _netsettings.Value.Net;
                    _ctx.Nodes.Add(newDbNode);
                    await _ctx.SaveChangesAsync();

                    var nodeDbAddress = new NodeAddress
                    {
                        Ip   = cacheNode.Ip,
                        Port = cacheNode.Port,
                        Type = NodeAddressType.P2P_TCP,

                        NodeId = newDbNode.Id
                    };
                    _ctx.NodeAddresses.Add(nodeDbAddress);
                    await _ctx.SaveChangesAsync();
                }
                else
                {
                    var portIsDifferent = existingDbNode.NodeAddresses.FirstOrDefault(na => na.Port == cacheNode.Port) == null;
                    if (portIsDifferent)
                    {
                        var nodeDbAddress = new NodeAddress
                        {
                            Ip   = cacheNode.Ip,
                            Port = cacheNode.Port,
                            Type = NodeAddressType.P2P_TCP,

                            NodeId = existingDbNode.Id
                        };
                        _ctx.NodeAddresses.Add(nodeDbAddress);
                        await _ctx.SaveChangesAsync();
                    }
                }
            }
        }
        public async Task UpdateNodeInfo(StateOfNeoContext db, Node node)
        {
            var stopwatch = Stopwatch.StartNew();
            var height    = await this.GetNodeHeight(node);

            stopwatch.Stop();
            var latency = stopwatch.ElapsedMilliseconds;

            if (!height.HasValue)
            {
                node.Height = height;
            }

            db.Nodes.Update(node);
            await db.SaveChangesAsync();
        }