public void CreateUser(string publicKey, string name, string id)
        {
            var user = Transaction.CreateUserTransacton(publicKey, name, id, db.GetLastUserCreation().Hash);

            if (CheckTransaction(user))
            {
                var list = new List <Transaction>();
                list.Add(user);
                var message = new TransactionsMessage(list);

                net.SendMessageToAllPeers(message);
            }
        }
        public void CreateVoting(List <string> candidatesHashes, string votingName)
        {
            var prevVoting = db.GetLastVoting();
            var voting     = Transaction.StartVotingTransation(candidatesHashes, votingName, prevVoting.VotingNumber + 1, prevVoting.Hash);

            if (CheckTransaction(voting))
            {
                var list = new List <Transaction>();
                list.Add(voting);
                var message = new TransactionsMessage(list);

                net.SendMessageToAllPeers(message);
            }
        }
        public void CreateVote(string candidateHash, string votingHash)
        {
            var voting = db.GetTransaction(votingHash);
            var vote   = Transaction.VoteTransaction(candidateHash, voting.Hash, voting.VotingNumber);

            if (CheckTransaction(vote))
            {
                var list = new List <Transaction>();
                list.Add(vote);
                var message = new TransactionsMessage(list);

                net.SendMessageToAllPeers(message);
            }
        }
        public void BanUser(string publicKey, string cause)
        {
            var prevTransaction = db.GetUserCreation(publicKey);

            var userBan = Transaction.BanUserTransaction(cause, publicKey, prevTransaction.Hash);

            if (CheckTransaction(userBan))
            {
                var list = new List <Transaction>();
                list.Add(userBan);
                var message = new TransactionsMessage(list);

                net.SendMessageToAllPeers(message);
            }
        }
        private void OnRequestTransactionsMessage(object sender, MessageEventArgs e)
        {
            var message      = e.Message as RequestTransactionsMessage;
            var transactions = new List <Transaction>();

            foreach (var hash in message.Hashes)
            {
                var tr = db.GetTransaction(hash);
                if (tr != null)
                {
                    transactions.Add(tr);
                }
                else
                {
                    //если не нашли транзакцию, ищем по хешу пользователя
                    //сначала отсылаем бан, чтобы запросившая транзакция правильно проверялась
                    var userBan = db.GetUserBan(hash);
                    if (userBan != null)
                    {
                        transactions.Add(userBan);
                    }

                    var userCreation = db.GetUserCreation(hash);
                    if (userCreation != null)
                    {
                        transactions.Add(userCreation);
                    }
                }
            }


            if (message.Date > 0)
            {
                //получаем все свободные транзакции, а не только с даты, поскольку иногда дата указывается неверно в запросе (поздняя)
                //transactions.AddRange(db.GetFreeTransactionsFromDate(message.Date0, CommonHelpers.TransactionsInBlock));
                transactions.AddRange(db.GetFreeTransactions(CommonHelpers.TransactionsInBlock));
            }



            if (transactions.Count > 0)
            {
                var messageToSend = new TransactionsMessage(transactions);
                net.SendMessageToPeer(messageToSend, e.SenderAddress);
            }
        }