private void OnRequestBlocksMessage(object sender, MessageEventArgs e) { var message = e.Message as RequestBlocksMessage; var blocks = new List <Block>(); foreach (var hash in message.Hashes) { if (hash == "0") { return; } var block = db.GetBlock(hash); if (block != null) { blocks.Add(block); } } //если пришел пустой запрос, отсылаем последний блок if (message.Hashes.Count == 0) { blocks.Add(db.GetLastBlock()); } var messageToSend = new BlocksMessage(blocks); net.SendMessageToPeer(messageToSend, e.SenderAddress); }
private void MakeBlock() { var transactions = db.GetFreeTransactions(CommonHelpers.TransactionsInBlock); if (transactions.Count < CommonHelpers.TransactionsInBlock || !VotingsUser.CreateOwnBlocks) { return; } //помечаем их как ожидающие, поскольку сейчас создадим блок foreach (var item in transactions) { db.MarkTransaction(item, TransactionStatus.InPendingBlock); } var lastBlock = db.GetLastBlock(); var newBlock = new Block(transactions, lastBlock); //проверка блока и добавление его в базу if (CheckBlock(newBlock)) { //отправка блока всем клиентам var list = new List <Block>(); list.Add(newBlock); var message = new BlocksMessage(list); net.SendMessageToAllPeers(message); } }