Exemplo n.º 1
0
        public TransactionBroadcastEntry GetTransaction(uint256 transactionHash)
        {
            TransactionBroadcastEntry txEntry = this.Broadcasts.FirstOrDefault(x => x.Transaction.GetHash() == transactionHash);

            if (txEntry == default(TransactionBroadcastEntry))
            {
                return(null);
            }

            return(txEntry);
        }
Exemplo n.º 2
0
 private void ProcessInvPayload(InvPayload invPayload)
 {
     // if node has transaction we broadcast
     foreach (InventoryVector inv in invPayload.Inventory.Where(x => x.Type == InventoryType.MSG_TX))
     {
         TransactionBroadcastEntry txEntry = this.broadcasterManager.GetTransaction(inv.Hash);
         if (txEntry != null)
         {
             this.broadcasterManager.AddOrUpdate(txEntry.Transaction, State.Propagated);
         }
     }
 }
Exemplo n.º 3
0
        public void AddOrUpdate(Transaction transaction, State state)
        {
            TransactionBroadcastEntry broadcastEntry = this.Broadcasts.FirstOrDefault(x => x.Transaction.GetHash() == transaction.GetHash());

            if (broadcastEntry == null)
            {
                broadcastEntry = new TransactionBroadcastEntry(transaction, state);
                this.Broadcasts.Add(broadcastEntry);
                this.OnTransactionStateChanged(broadcastEntry);
            }
            else if (broadcastEntry.State != state)
            {
                broadcastEntry.State = state;
                this.OnTransactionStateChanged(broadcastEntry);
            }
        }
Exemplo n.º 4
0
        /// <summary>Adds or updates a transaction from the collection of transactions to broadcast.</summary>
        public void AddOrUpdate(Transaction transaction, TransactionBroadcastState transactionBroadcastState, MempoolError mempoolError = null)
        {
            TransactionBroadcastEntry broadcastEntry = this.Broadcasts.FirstOrDefault(x => x.Transaction.GetHash() == transaction.GetHash());

            if (broadcastEntry == null)
            {
                broadcastEntry = new TransactionBroadcastEntry(transaction, transactionBroadcastState, mempoolError);
                this.Broadcasts.Add(broadcastEntry);
                this.OnTransactionStateChanged(broadcastEntry);
            }
            else if (broadcastEntry.TransactionBroadcastState != transactionBroadcastState)
            {
                broadcastEntry.TransactionBroadcastState = transactionBroadcastState;
                this.OnTransactionStateChanged(broadcastEntry);
            }
        }
Exemplo n.º 5
0
        protected async Task ProcessGetDataPayloadAsync(INetworkPeer peer, GetDataPayload getDataPayload)
        {
            // If node asks for transaction we want to broadcast.
            foreach (InventoryVector inv in getDataPayload.Inventory.Where(x => x.Type == InventoryType.MSG_TX))
            {
                TransactionBroadcastEntry txEntry = this.broadcasterManager.GetTransaction(inv.Hash);
                if ((txEntry != null) && (txEntry.State != State.CantBroadcast))
                {
                    await peer.SendMessageAsync(new TxPayload(txEntry.Transaction)).ConfigureAwait(false);

                    if (txEntry.State == State.ToBroadcast)
                    {
                        this.broadcasterManager.AddOrUpdate(txEntry.Transaction, State.Broadcasted);
                    }
                }
            }
        }
Exemplo n.º 6
0
        protected bool IsPropagated(Transaction transaction)
        {
            TransactionBroadcastEntry broadcastEntry = this.GetTransaction(transaction.GetHash());

            return((broadcastEntry != null) && (broadcastEntry.State == State.Propagated));
        }
Exemplo n.º 7
0
 public void OnTransactionStateChanged(TransactionBroadcastEntry entry)
 {
     this.TransactionStateChanged?.Invoke(this, entry);
 }