Ejemplo n.º 1
0
 private bool AddTransaction(Transaction tx, bool verify)
 {
     if (Blockchain.Default.ContainsTransaction(tx.Hash) ||
         (verify && !tx.Verify(context.Transactions.Values)) ||
         !CheckPolicy(tx))
     {
         Log($"reject tx: {tx.Hash}{Environment.NewLine}{tx.ToArray().ToHexString()}");
         RequestChangeView();
         return(false);
     }
     context.Transactions[tx.Hash] = tx;
     if (context.TransactionHashes.Length == context.Transactions.Count)
     {
         if (Blockchain.GetConsensusAddress(Blockchain.Default.GetValidators(context.Transactions.Values).ToArray()).Equals(context.NextConsensus))
         {
             Log($"send perpare response");
             context.State |= ConsensusState.SignatureSent;
             context.Signatures[context.MyIndex] = context.MakeHeader().Sign(wallet.GetKey(context.Validators[context.MyIndex]));
             SignAndRelay(context.MakePerpareResponse(context.Signatures[context.MyIndex]));
             CheckSignatures();
         }
         else
         {
             RequestChangeView();
             return(false);
         }
     }
     return(true);
 }