public void Add(Recount recount) { lock (semaphore) { if (pendings.ContainsKey(recount.GetKey())) { return; } pendings.Add(recount.GetKey(), recount); } Peers.Broadcast(recount); }
public void Add(Document document) { lock (semaphore) { if (pendings.ContainsKey(document.GetKey())) { return; } pendings.Add(document.GetKey(), document); } Peers.Broadcast(document); }
public void Add(Fiscal fiscal) { lock (semaphore) { if (pendings.ContainsKey(fiscal.GetKey())) { return; } pendings.Add(fiscal.GetKey(), fiscal); } Peers.Broadcast(fiscal); }
public void Add(Urn urn) { lock (semaphore) { if (pendings.ContainsKey(urn.GetKey())) { return; } pendings.Add(urn.GetKey(), urn); } Peers.Broadcast(urn); }
public void Add(Vote vote) { lock (semaphore) { if (pendings.ContainsKey(vote.GetKey())) { return; } pendings.Add(vote.GetKey(), vote); } Peers.Broadcast(vote); }
public void Add(Member member) { lock (semaphore) { if (pendings.ContainsKey(member.GetKey())) { return; } pendings.Add(member.GetKey(), member); } Peers.Broadcast(member); }
public void Add(Question question) { lock (semaphore) { if (pendings.ContainsKey(question.GetKey())) { return; } pendings.Add(question.GetKey(), question); } Peers.Broadcast(question); }
public void Add(Community community) { lock (semaphore) { if (pendings.ContainsKey(community.GetKey())) { return; } pendings.Add(community.GetKey(), community); } Peers.Broadcast(community); }
public void MinePendingTransactions() { logger.LogInformation($"Buscando transacciones que minar.\n" + $"\tÚltimo bloque #{Blockchain.Last.BlockNumber}.\n" + $"\tCadenas secundarias #{Blockchain.BranchesCount}\n" + $"\tTransacciones pendientes #{pendings.Count}\n" + $"\tPares registrados #{Peers.Count}: {string.Join(", ",Peers.List())}" ); BlockItem[] pendingsToMine; lock (semaphore) { pendingsToMine = Pendings.ToArray(); } if (pendingsToMine.Length > 0) { logger.LogInformation($"Minando {pendingsToMine.Length} transacciones"); try { var block = Blockchain.MineNextBlock(pendingsToMine); if (block != null) { lock (semaphore) { logger.LogInformation("Hemos minado un bloque!!!"); Peers.Broadcast(block); var transactions = block.GetTransactions(); foreach (var item in transactions) { pendings.Remove(item.GetKey()); } } } else { logger.LogInformation("No hemos logrado minado el bloque antes que otro :("); } var chain = Blockchain.Trunk.ToArray(); KeyValuePair <string, BlockItem>[] invalids; lock (semaphore) { invalids = pendings.Where(p => !p.Value.IsValid(chain)).ToArray(); } foreach (var invalid in invalids) { logger.LogWarning($"Item {invalid.Value.GetType().Name} inválido: {string.Join("\n\r\t", invalid.Value.Messages)}"); } } catch (Exception ex) { logger.LogCritical($"Error minando transacciones pendientes: {ex}"); } } else { logger.LogDebug("No se encontraron transacciones que minar"); } }