コード例 #1
0
        private void StartFeeFilterBroadcast(INetworkPeer sender)
        {
            if (this.settings.FeeFilter)
            {
                INetworkPeer peer = sender;

                if (peer.PeerVersion != null &&
                    peer.PeerVersion.Relay &&
                    peer.PeerVersion.Version >= ProtocolVersion.FEEFILTER_VERSION)
                {
                    if (this.asyncLoop != null)
                    {
                        this.asyncLoop = this.asyncProvider.CreateAndRunAsyncLoop($"MemoryPool.FeeFilter:{peer.Connection.Id}", async token =>
                        {
                            if (this.initialBlockDownloadState.IsInitialBlockDownload())
                            {
                                return;
                            }

                            var feeRate       = await this.mempoolManager.GetMempoolMinFeeAsync(MempoolValidator.DefaultMaxMempoolSize * 1000000).ConfigureAwait(false);
                            var currentFilter = feeRate.FeePerK;

                            // We always have a fee filter of at least minRelayTxFee
                            Money filterToSend = Math.Max(currentFilter, new FeeRate(this.network.MinRelayTxFee).FeePerK);

                            if (filterToSend != this.lastSendFilter)
                            {
                                INetworkPeer peer = this.AttachedPeer;

                                if (peer != null && peer.IsConnected)
                                {
                                    this.logger.LogDebug("Sending for transaction data from peer '{0}'.", peer.RemoteSocketEndpoint);
                                    var filterPayload = new FeeFilterPayload()
                                    {
                                        NewFeeFilter = filterToSend
                                    };
                                    await peer.SendMessageAsync(filterPayload).ConfigureAwait(false);
                                    this.lastSendFilter = filterToSend;
                                }
                            }
                        },
                                                                                  this.nodeLifetime.ApplicationStopping,
                                                                                  repeatEvery: TimeSpan.FromMinutes(10),
                                                                                  startAfter: TimeSpans.TenSeconds);
                    }
                }
            }
        }
コード例 #2
0
        private async Task ProcessFeeFilterAsync(INetworkPeer peer, FeeFilterPayload feeFilter)
        {
            if (peer.PeerVersion.Relay)
            {
                if (feeFilter.NewFeeFilter > 0)
                {
                    if (this.mempoolBehavior == null)
                    {
                        this.mempoolBehavior = peer.Behavior <MempoolBehavior>();
                    }

                    this.mempoolBehavior.MinFeeFilter = feeFilter.NewFeeFilter;

                    this.logger.LogDebug("Received feefilter of `{0}` from peer id: {1}", feeFilter.NewFeeFilter, peer.Connection.Id);
                }
            }
        }